@@ -414,15 +414,20 @@ static int wp_rsa_signverify_init(wp_RsaSigCtx* ctx, wp_Rsa* rsa,
414414{
415415 int ok = 1 ;
416416
417- if (ctx -> rsa != rsa ) {
417+ if ((ctx == NULL ) || (rsa == NULL )) {
418+ ok = 0 ;
419+ }
420+ if (ok && (ctx -> rsa != rsa )) {
418421 wp_rsa_free (ctx -> rsa );
419422 ctx -> rsa = NULL ;
420423 if (!wp_rsa_up_ref (rsa )) {
421424 ok = 0 ;
422425 }
426+ else {
427+ ctx -> rsa = rsa ;
428+ }
423429 }
424430 if (ok ) {
425- ctx -> rsa = rsa ;
426431 ctx -> op = op ;
427432
428433 if (!wp_rsa_set_ctx_params (ctx , params )) {
@@ -432,14 +437,14 @@ static int wp_rsa_signverify_init(wp_RsaSigCtx* ctx, wp_Rsa* rsa,
432437 if (ok ) {
433438 ctx -> saltLen = RSA_PSS_SALTLEN_AUTO ;
434439
435- if (wp_rsa_get_type (rsa ) == RSA_FLAG_TYPE_RSA ) {
440+ if (wp_rsa_get_type (ctx -> rsa ) == RSA_FLAG_TYPE_RSA ) {
436441 ctx -> padMode = RSA_PKCS1_PADDING ;
437442 }
438443 else {
439444 char * mdName ;
440445 char * mgfMdName ;
441446 ctx -> padMode = RSA_PKCS1_PSS_PADDING ;
442- wp_rsa_get_pss_mds (rsa , & mdName , & mgfMdName );
447+ wp_rsa_get_pss_mds (ctx -> rsa , & mdName , & mgfMdName );
443448 if ((mdName == NULL ) || (mdName [0 ] == '\0' )) {
444449 mdName = (char * )WP_RSA_DEFAULT_MD ;
445450 }
@@ -453,7 +458,7 @@ static int wp_rsa_signverify_init(wp_RsaSigCtx* ctx, wp_Rsa* rsa,
453458 ok = 0 ;
454459 }
455460 if (ok ) {
456- ctx -> minSaltLen = wp_rsa_get_pss_salt_len (rsa );
461+ ctx -> minSaltLen = wp_rsa_get_pss_salt_len (ctx -> rsa );
457462 if (ok && !wp_rsa_check_pss_salt_len (ctx )) {
458463 ok = 0 ;
459464 }
0 commit comments