@@ -302,7 +302,7 @@ func VerifyRSAPSS(pub *PublicKeyRSA, h crypto.Hash, hashed, sig []byte, saltLen
302302
303303func SignRSAPKCS1v15 (priv * PrivateKeyRSA , h crypto.Hash , msg []byte , msgIsHashed bool ) ([]byte , error ) {
304304 if h == 0 && ExecutingTest () {
305- return signRSAPKCS1v15Raw (priv , msg , C . _goboringcrypto_EVP_md_null () )
305+ return signRSAPKCS1v15Raw (priv , msg , nil )
306306 }
307307
308308 md := cryptoHashToMD (h )
@@ -311,18 +311,7 @@ func SignRSAPKCS1v15(priv *PrivateKeyRSA, h crypto.Hash, msg []byte, msgIsHashed
311311 }
312312
313313 if msgIsHashed {
314- var out []byte
315- var outLen C.uint
316- PanicIfStrictFIPS ("You must provide a raw unhashed message for PKCS1v15 signing and use HashSignPKCS1v15 instead of SignPKCS1v15" )
317- nid := C ._goboringcrypto_EVP_MD_type (md )
318- if priv .withKey (func (key * C.GO_RSA ) C.int {
319- out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
320- return C ._goboringcrypto_RSA_sign (nid , base (msg ), C .uint (len (msg )), base (out ), & outLen , key )
321- }) == 0 {
322- return nil , NewOpenSSLError ("RSA_sign" )
323- }
324- runtime .KeepAlive (priv )
325- return out [:outLen ], nil
314+ return signRSAPKCS1v15Raw (priv , msg , md )
326315 }
327316
328317 var out []byte
@@ -344,7 +333,7 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
344333 if priv .withKey (func (key * C.GO_RSA ) C.int {
345334 out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
346335 outLen = C .size_t (len (out ))
347- return C ._goboringcrypto_EVP_sign_raw (md , nil , base (msg ),
336+ return C ._goboringcrypto_EVP_sign_raw (md , base (msg ),
348337 C .size_t (len (msg )), base (out ), & outLen , key )
349338 }) == 0 {
350339 return nil , NewOpenSSLError ("RSA_sign" )
@@ -355,14 +344,18 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
355344
356345func VerifyRSAPKCS1v15 (pub * PublicKeyRSA , h crypto.Hash , msg , sig []byte , msgIsHashed bool ) error {
357346 if h == 0 && ExecutingTest () {
358- return verifyRSAPKCS1v15Raw (pub , msg , sig )
347+ return verifyRSAPKCS1v15Raw (pub , msg , sig , nil )
359348 }
360349
361350 md := cryptoHashToMD (h )
362351 if md == nil {
363352 return errors .New ("crypto/rsa: unsupported hash function" )
364353 }
365354
355+ if msgIsHashed {
356+ return verifyRSAPKCS1v15Raw (pub , msg , sig , md )
357+ }
358+
366359 if pub .withKey (func (key * C.GO_RSA ) C.int {
367360 size := int (C ._goboringcrypto_RSA_size (key ))
368361 if len (sig ) < size {
@@ -373,17 +366,6 @@ func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte, msgIsH
373366 return errors .New ("crypto/rsa: verification error" )
374367 }
375368
376- if msgIsHashed {
377- PanicIfStrictFIPS ("You must provide a raw unhashed message for PKCS1v15 verification and use HashVerifyPKCS1v15 instead of VerifyPKCS1v15" )
378- nid := C ._goboringcrypto_EVP_MD_type (md )
379- if pub .withKey (func (key * C.GO_RSA ) C.int {
380- return C ._goboringcrypto_RSA_verify (nid , base (msg ), C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
381- }) == 0 {
382- return NewOpenSSLError ("RSA_verify failed" )
383- }
384- return nil
385- }
386-
387369 if pub .withKey (func (key * C.GO_RSA ) C.int {
388370 return C ._goboringcrypto_EVP_RSA_verify (md , base (msg ), C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
389371 }) == 0 {
@@ -392,7 +374,7 @@ func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte, msgIsH
392374 return nil
393375}
394376
395- func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte ) error {
377+ func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte , md * C. GO_EVP_MD ) error {
396378 if pub .withKey (func (key * C.GO_RSA ) C.int {
397379 size := int (C ._goboringcrypto_RSA_size (key ))
398380 if len (sig ) < size {
@@ -403,7 +385,7 @@ func verifyRSAPKCS1v15Raw(pub *PublicKeyRSA, msg, sig []byte) error {
403385 return errors .New ("crypto/rsa: verification error" )
404386 }
405387 if pub .withKey (func (key * C.GO_RSA ) C.int {
406- return C ._goboringcrypto_EVP_verify_raw (base (msg ), C .size_t (len (msg )), base (sig ), C .uint (len (sig )), key )
388+ return C ._goboringcrypto_EVP_verify_raw (md , base (msg ), C .size_t (len (msg )), base (sig ), C .uint (len (sig )), key )
407389 }) == 0 {
408390 return NewOpenSSLError ("RSA_verify failed" )
409391 }
0 commit comments