@@ -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,24 +311,15 @@ 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
329318 var outLen C.size_t
330319
331320 if priv .withKey (func (key * C.GO_RSA ) C.int {
321+ out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
322+ outLen = C .size_t (len (out ))
332323 return C ._goboringcrypto_EVP_RSA_sign (md , base (msg ), C .uint (len (msg )), base (out ), & outLen , key )
333324 }) == 0 {
334325 return nil , NewOpenSSLError ("RSA_sign" )
@@ -344,7 +335,7 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
344335 if priv .withKey (func (key * C.GO_RSA ) C.int {
345336 out = make ([]byte , C ._goboringcrypto_RSA_size (key ))
346337 outLen = C .size_t (len (out ))
347- return C ._goboringcrypto_EVP_sign_raw (md , nil , base (msg ),
338+ return C ._goboringcrypto_EVP_sign_raw (md , base (msg ),
348339 C .size_t (len (msg )), base (out ), & outLen , key )
349340 }) == 0 {
350341 return nil , NewOpenSSLError ("RSA_sign" )
@@ -355,14 +346,18 @@ func signRSAPKCS1v15Raw(priv *PrivateKeyRSA, msg []byte, md *C.GO_EVP_MD) ([]byt
355346
356347func VerifyRSAPKCS1v15 (pub * PublicKeyRSA , h crypto.Hash , msg , sig []byte , msgIsHashed bool ) error {
357348 if h == 0 && ExecutingTest () {
358- return verifyRSAPKCS1v15Raw (pub , msg , sig )
349+ return verifyRSAPKCS1v15Raw (pub , msg , sig , nil )
359350 }
360351
361352 md := cryptoHashToMD (h )
362353 if md == nil {
363354 return errors .New ("crypto/rsa: unsupported hash function" )
364355 }
365356
357+ if msgIsHashed {
358+ return verifyRSAPKCS1v15Raw (pub , msg , sig , md )
359+ }
360+
366361 if pub .withKey (func (key * C.GO_RSA ) C.int {
367362 size := int (C ._goboringcrypto_RSA_size (key ))
368363 if len (sig ) < size {
@@ -373,17 +368,6 @@ func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte, msgIsH
373368 return errors .New ("crypto/rsa: verification error" )
374369 }
375370
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-
387371 if pub .withKey (func (key * C.GO_RSA ) C.int {
388372 return C ._goboringcrypto_EVP_RSA_verify (md , base (msg ), C .uint (len (msg )), base (sig ), C .uint (len (sig )), key )
389373 }) == 0 {
@@ -392,7 +376,7 @@ func VerifyRSAPKCS1v15(pub *PublicKeyRSA, h crypto.Hash, msg, sig []byte, msgIsH
392376 return nil
393377}
394378
395- func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte ) error {
379+ func verifyRSAPKCS1v15Raw (pub * PublicKeyRSA , msg , sig []byte , md * C. GO_EVP_MD ) error {
396380 if pub .withKey (func (key * C.GO_RSA ) C.int {
397381 size := int (C ._goboringcrypto_RSA_size (key ))
398382 if len (sig ) < size {
@@ -403,7 +387,7 @@ func verifyRSAPKCS1v15Raw(pub *PublicKeyRSA, msg, sig []byte) error {
403387 return errors .New ("crypto/rsa: verification error" )
404388 }
405389 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 )
390+ return C ._goboringcrypto_EVP_verify_raw (md , base (msg ), C .size_t (len (msg )), base (sig ), C .uint (len (sig )), key )
407391 }) == 0 {
408392 return NewOpenSSLError ("RSA_verify failed" )
409393 }
0 commit comments