// messages to signatures and identify the signed messages. As ever,
// signatures provide authenticity, not confidentiality.
func SignPKCS1v15(random io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) ([]byte, error) {
+ var hashName string
+ if hash != crypto.Hash(0) {
+ if len(hashed) != hash.Size() {
+ return nil, errors.New("crypto/rsa: input must be hashed message")
+ }
+ hashName = hash.String()
+ }
+
if err := checkPublicKeySize(&priv.PublicKey); err != nil {
return nil, err
}
if err != nil {
return nil, err
}
- var hashName string
- if hash != crypto.Hash(0) {
- if len(hashed) != hash.Size() {
- return nil, errors.New("crypto/rsa: input must be hashed message")
- }
- hashName = hash.String()
- }
return fipsError2(rsa.SignPKCS1v15(k, hashName, hashed))
}
}
}
+ const hashMsg = "crypto/rsa: input must be hashed message"
+ sig, err := SignPKCS1v15(nil, priv, crypto.SHA256, msg)
+ if err == nil || err.Error() != hashMsg {
+ t.Errorf("SignPKCS1v15 with bad hash: err = %q, want %q", err, hashMsg)
+ }
+
hash := sha256.Sum256(msg)
- sig, err := SignPKCS1v15(nil, priv, crypto.SHA256, hash[:])
+ sig, err = SignPKCS1v15(nil, priv, crypto.SHA256, hash[:])
if err == ErrMessageTooLong {
t.Log("key too small for SignPKCS1v15")
} else if err != nil {