Функция rsa.VerifyPSS
Функция rsa.VerifyPSS проверяет цифровую подпись, созданную с помощью алгоритма RSA
и схемы PSS (Probabilistic Signature Scheme). Она принимает открытый ключ, хеш-функцию,
хеш подписанного сообщения, подпись и опции PSS. Функция возвращает nil,
если подпись действительна, или ошибку, если проверка не удалась.
Синтаксис
err := rsa.VerifyPSS(pub *rsa.PublicKey, hash crypto.Hash, hashed []byte, sig []byte, opts *rsa.PSSOptions)
Параметры функции:
-
pub— открытый ключ RSA (тип*rsa.PublicKey); -
hash— алгоритм хеширования (типcrypto.Hash); -
hashed— хеш сообщения (тип[]byte); -
sig— подпись для проверки (тип[]byte); -
opts— дополнительные опции PSS (тип*rsa.PSSOptions).
Пример
Проверим подпись, созданную с использованием SHA-256:
package 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)
}
}
Результат выполнения кода:
"Подпись действительна"
Пример
Проверим подпись с настройкой соли и сравнительным хешем:
package 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)
}
}
Результат выполнения кода:
"Подпись успешно проверена"
Смотрите также
-
функцию
rsa.SignPSS,
которая создает подпись RSA с использованием PSS -
функцию
rsa.VerifyPKCS1v15,
которая проверяет подпись PKCS #1 v1.5 -
тип
rsa.PrivateKey,
который представляет закрытый ключ RSA -
тип
rsa.PublicKey,
который представляет открытый ключ RSA