zeroize rsa->p,rsa->q on error
authorAlexandr Nedvedicky <sashan@openssl.org>
Fri, 10 May 2024 07:07:35 +0000 (09:07 +0200)
committerTomas Mraz <tomas@openssl.org>
Tue, 14 May 2024 13:55:41 +0000 (15:55 +0200)
this is rquired by fipd-186-5 section A.1.6, step 7:
Zeroize the internally generated values that are not returned

In OpenSSL code we need to zero p, q members of rsa structure. The rsa
structure is provided by ossl_rsa_fips186_4_gen_prob_primes() caller.

The remaining values (variables) mentioned by standard are zeroed
already in functions we call from ossl_rsa_fips186_4_gen_prob_primes().

Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24358)

crypto/rsa/rsa_sp800_56b_gen.c

index b0d9104b797182103353797c32dbb0bce9d1eb17..c741cf3c3b0cf08a0b03898d77afb2ec24d5c605 100644 (file)
@@ -147,11 +147,15 @@ int ossl_rsa_fips186_4_gen_prob_primes(RSA *rsa, RSA_ACVP_TEST *test,
     ret = 1;
 err:
     /* Zeroize any internally generated values that are not returned */
-    if (Xpo != NULL)
-        BN_clear(Xpo);
-    if (Xqo != NULL)
-        BN_clear(Xqo);
+    BN_clear(Xpo);
+    BN_clear(Xqo);
     BN_clear(tmp);
+    if (ret != 1) {
+        BN_clear_free(rsa->p);
+        rsa->p = NULL;
+        BN_clear_free(rsa->q);
+        rsa->q = NULL;
+    }
 
     BN_CTX_end(ctx);
     return ret;