@@ -326,7 +326,7 @@ func VerifyRSAPSS(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte, saltLen
326326
327327func SignRSAPKCS1v15 (priv * PrivateKeyRSA , h crypto.Hash , msg []byte , msgIsHashed bool ) ([]byte , error ) {
328328 if h == 0 && ExecutingTest () {
329- return signRSAPKCS1v15Raw (priv , msg , C . _goboringcrypto_EVP_md_null () )
329+ return signRSAPKCS1v15Raw (priv , msg , nil )
330330 }
331331
332332 md := cryptoHashToMD (h )
@@ -335,25 +335,16 @@ func SignRSAPKCS1v15(priv *PrivateKeyRSA, h crypto.Hash, msg []byte, msgIsHashed
335335 }
336336
337337 if msgIsHashed {
338- var out []byte
339- var outLen C.uint
340- PanicIfStrictFIPS ("You must provide a raw unhashed message for PKCS1v15 signing and use HashSignPKCS1v15 instead of SignPKCS1v15" )
341- nid := C ._goboringcrypto_EVP_MD_type (md )
342- if priv .withKey (func (key * C.GO_RSA ) C.int {
343- out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
344- return C ._goboringcrypto_RSA_sign (nid , base (msg ), C .uint (len (msg )), base (out ), & outLen , key )
345- }) == 0 {
346- return nil , NewOpenSSLError ("RSA_sign" )
347- }
348- runtime .KeepAlive (priv )
349- return out [:outLen ], nil
338+ return signRSAPKCS1v15Raw (priv , msg , md )
350339 }
351340
352341 var out []byte
353342 var outLen C.size_t
354343
355344 if priv .withKey (func (key * C.GO_RSA ) C.int {
356- return C ._goboringcrypto_EVP_RSA_sign (md , base (msg ), C .uint (len (msg )), base (out ), & outLen , key )
345+ out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
346+ outLen = C .size_t (len (out ))
347+ return C ._goboringcrypto_RSA_sign (md , base (msg ), C .uint (len (msg )), base (out ), & outLen , key )
357348 }) == 0 {
358349 return nil , NewOpenSSLError ("RSA_sign" )
359350 }
@@ -368,7 +359,7 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
368359 if priv .withKey (func (key * C.GO_RSA ) C.int {
369360 out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
370361 outLen = C .size_t (len (out ))
371- return C ._goboringcrypto_EVP_sign_raw (md , nil , base (msg ),
362+ return C ._goboringcrypto_RSA_sign_raw (md , base (msg ),
372363 C .size_t (len (msg )), base (out ), & outLen , key )
373364 }) == 0 {
374365 return nil , NewOpenSSLError ("RSA_sign" )
@@ -379,14 +370,18 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
379370
380371func VerifyRSAPKCS1v15 (pub * PublicKeyRSA , h crypto.Hash , msg , sig []byte , msgIsHashed bool ) error {
381372 if h == 0 && ExecutingTest () {
382- return verifyRSAPKCS1v15Raw (pub , msg , sig )
373+ return verifyRSAPKCS1v15Raw (pub , msg , sig , nil )
383374 }
384375
385376 md := cryptoHashToMD (h )
386377 if md == nil {
387378 return errors .New ("crypto/rsa: unsupported hash function" )
388379 }
389380
381+ if msgIsHashed {
382+ return verifyRSAPKCS1v15Raw (pub , msg , sig , md )
383+ }
384+
390385 if pub .withKey (func (key * C.GO_RSA ) C.int {
391386 size := int (C ._goboringcrypto_RSA_size (key ))
392387 if len (sig ) < size {
@@ -397,26 +392,16 @@ func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte, msgIsH
397392 return errors .New ("crypto/rsa: verification error" )
398393 }
399394
400- if msgIsHashed {
401- PanicIfStrictFIPS ("You must provide a raw unhashed message for PKCS1v15 verification and use HashVerifyPKCS1v15 instead of VerifyPKCS1v15" )
402- nid := C ._goboringcrypto_EVP_MD_type (md )
403- if pub .withKey (func (key * C.GO_RSA ) C.int {
404- return C ._goboringcrypto_RSA_verify (nid , base (msg ), C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
405- }) == 0 {
406- return NewOpenSSLError ("RSA_verify failed" )
407- }
408- return nil
409- }
410-
411395 if pub .withKey (func (key * C.GO_RSA ) C.int {
412- return C ._goboringcrypto_EVP_RSA_verify (md , base (msg ), C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
396+ return C ._goboringcrypto_RSA_verify (md , base (msg ),
397+ C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
413398 }) == 0 {
414399 return NewOpenSSLError ("RSA_verify failed" )
415400 }
416401 return nil
417402}
418403
419- func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte ) error {
404+ func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte , md * C. GO_EVP_MD ) error {
420405 if pub .withKey (func (key * C.GO_RSA ) C.int {
421406 size := int (C ._goboringcrypto_RSA_size (key ))
422407 if len (sig ) < size {
@@ -427,7 +412,8 @@ func verifyRSAPKCS1v15Raw(pub *PublicKeyRSA, msg, sig []byte) error {
427412 return errors .New ("crypto/rsa: verification error" )
428413 }
429414 if pub .withKey (func (key * C.GO_RSA ) C.int {
430- return C ._goboringcrypto_EVP_verify_raw (base (msg ), C .size_t (len (msg )), base (sig ), C .uint (len (sig )), key )
415+ return C ._goboringcrypto_RSA_verify_raw (md , base (msg ),
416+ C .size_t (len (msg )), base (sig ), C .uint (len (sig )), key )
431417 }) == 0 {
432418 return NewOpenSSLError ("RSA_verify failed" )
433419 }
0 commit comments