Функция rsa.VerifyPSS

Функция rsa.VerifyPSS проверяет цифровую подпись, созданную с помощью алгоритма RSA и схемы PSS (Probabilistic Signature Scheme). Она принимает открытый ключ, хеш-функцию, хеш подписанного сообщения, подпись и опции PSS. Функция возвращает nil, если подпись действительна, или ошибку, если проверка не удалась.

Синтаксис

goerr := rsa.VerifyPSS(pub *rsa.PublicKey, hash crypto.Hash, hashed []byte, sig []byte, opts *rsa.PSSOptions)

Параметры функции:

Пример

Проверим подпись, созданную с использованием SHA-256:

gopackage main

import (
  "crypto"
  "crypto/rand"
  "crypto/rsa"
  "crypto/sha256"
  "fmt"
)

func main() {
  // Генерируем ключевую пару RSA
  privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
  if err != nil {
    fmt.Println("Ошибка генерации ключа:", err)
    return
  }
  pubKey := &privateKey.PublicKey

  // Сообщение для подписи
  message := "Hello, PSS verification!"
  hash := sha256.Sum256([]byte(message))

  // Создаем подпись
  signature, err := rsa.SignPSS(rand.Reader, privateKey, crypto.SHA256, hash[:], nil)
  if err != nil {
    fmt.Println("Ошибка создания подписи:", err)
    return
  }

  // Проверяем подпись
  err = rsa.VerifyPSS(pubKey, crypto.SHA256, hash[:], signature, nil)
  if err == nil {
    fmt.Println("Подпись действительна")
  } else {
    fmt.Println("Подпись недействительна:", err)
  }
}

Результат выполнения кода:

go"Подпись действительна"

Пример

Проверим подпись с настройкой соли и сравнительным хешем:

gopackage main

import (
  "crypto"
  "crypto/rand"
  "crypto/rsa"
  "crypto/sha256"
  "fmt"
)

func main() {
  privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
  if err != nil {
    fmt.Println("Ошибка генерации ключа:", err)
    return
  }
  pubKey := &privateKey.PublicKey

  message := "Another message for verification"
  hash := sha256.Sum256([]byte(message))

  // Создаем подпись с опциями PSS
  opts := &rsa.PSSOptions{
    SaltLength: rsa.PSSSaltLengthAuto,
    Hash:     crypto.SHA256,
  }
  signature, err := rsa.SignPSS(rand.Reader, privateKey, crypto.SHA256, hash[:], opts)
  if err != nil {
    fmt.Println("Ошибка создания подписи:", err)
    return
  }

  // Проверяем подпись с теми же опциями
  err = rsa.VerifyPSS(pubKey, crypto.SHA256, hash[:], signature, opts)
  if err == nil {
    fmt.Println("Подпись успешно проверена")
  } else {
    fmt.Println("Ошибка проверки подписи:", err)
  }
}

Результат выполнения кода:

go"Подпись успешно проверена"

Смотрите также

  • функцию rsa.SignPSS,
    которая создает подпись RSA с использованием PSS
  • функцию rsa.VerifyPKCS1v15,
    которая проверяет подпись PKCS #1 v1.5
  • тип rsa.PrivateKey,
    который представляет закрытый ключ RSA
  • тип rsa.PublicKey,
    который представляет открытый ключ RSA