@@ -361,6 +361,84 @@ static int test_rsa_sign_verify_pad(int padMode, const EVP_MD *md,
361361 return err ;
362362}
363363
364+
365+ static int test_rsa_sign_verify_recover (int padMode )
366+ {
367+ int err ;
368+ int res ;
369+ EVP_PKEY * pkey = NULL ;
370+ #if OPENSSL_VERSION_NUMBER >= 0x30000000L
371+ const RSA * rsaKey = NULL ;
372+ #else
373+ RSA * rsaKey = NULL ;
374+ #endif
375+ unsigned char * rsaSig = NULL ;
376+ size_t rsaSigLen = 0 ;
377+ size_t bufLen = 20 ;
378+ unsigned char * buf = NULL ;
379+ const unsigned char * p = rsa_key_der_2048 ;
380+
381+ PRINT_MSG ("Load RSA key" );
382+ pkey = d2i_PrivateKey (EVP_PKEY_RSA , NULL , & p , sizeof (rsa_key_der_2048 ));
383+ err = pkey == NULL ;
384+ if (err == 0 ) {
385+ rsaKey = EVP_PKEY_get0_RSA (pkey );
386+ err = rsaKey == NULL ;
387+ }
388+ if (err == 0 ) {
389+ rsaSigLen = RSA_size (rsaKey );
390+ rsaSig = (unsigned char * )OPENSSL_malloc (rsaSigLen );
391+ err = rsaSig == NULL ;
392+ }
393+ if (err == 0 ) {
394+ buf = (unsigned char * )OPENSSL_malloc (bufLen );
395+ err = buf == NULL ;
396+ }
397+ if (err == 0 ) {
398+ err = RAND_bytes (buf , (int )bufLen ) == 0 ;
399+ }
400+
401+ if (err == 0 ) {
402+ PRINT_MSG ("Test signing/verifying arbitrary data" );
403+ PRINT_MSG ("Sign with OpenSSL" );
404+ err = test_pkey_sign (pkey , osslLibCtx , buf , bufLen , rsaSig , & rsaSigLen ,
405+ padMode , NULL , NULL );
406+ }
407+ if (err == 0 ) {
408+ PRINT_MSG ("Verify with wolfprovider" );
409+ err = test_pkey_verify_recover (pkey , wpLibCtx , buf , bufLen , rsaSig , rsaSigLen ,
410+ padMode );
411+ }
412+ if (err == 0 ) {
413+ PRINT_MSG ("Verify bad signature with wolfprovider" );
414+ rsaSig [1 ] ^= 0x80 ;
415+ res = test_pkey_verify_recover (pkey , wpLibCtx , buf , bufLen , rsaSig , rsaSigLen ,
416+ padMode );
417+ if (res != 1 )
418+ err = 1 ;
419+ }
420+ if (err == 0 ) {
421+ PRINT_MSG ("Sign with wolfprovider" );
422+ rsaSigLen = RSA_size (rsaKey );
423+ err = test_pkey_sign (pkey , wpLibCtx , buf , bufLen , rsaSig , & rsaSigLen ,
424+ padMode , NULL , NULL );
425+ }
426+ if (err == 0 ) {
427+ PRINT_MSG ("Verify with OpenSSL" );
428+ err = test_pkey_verify_recover (pkey , osslLibCtx , buf , bufLen , rsaSig , rsaSigLen ,
429+ padMode );
430+ }
431+
432+ EVP_PKEY_free (pkey );
433+
434+ if (rsaSig )
435+ OPENSSL_free (rsaSig );
436+ if (buf )
437+ OPENSSL_free (buf );
438+
439+ return err ;
440+ }
441+
364442int test_rsa_sign_sha1 (void * data )
365443{
366444 int err = 0 ;
@@ -429,6 +507,13 @@ int test_rsa_sign_verify_pkcs1(void *data)
429507 return test_rsa_sign_verify_pad (RSA_PKCS1_PADDING , NULL , NULL );
430508}
431509
510+ int test_rsa_sign_verify_recover_pkcs1 (void * data )
511+ {
512+ (void )data ;
513+
514+ return test_rsa_sign_verify_recover (RSA_PKCS1_PADDING );
515+ }
516+
432517int test_rsa_sign_verify_pss (void * data )
433518{
434519 int err = 0 ;
0 commit comments