From 9062b98319fa8a386da846fbc19a053dd6fc1aee Mon Sep 17 00:00:00 2001 From: Eric Blankenhorn Date: Thu, 5 Mar 2026 15:25:29 -0600 Subject: [PATCH] Fix f284 harden wc_FreeRsaKey --- wolfcrypt/src/rsa.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 8d1fb10385..ab40a6efa9 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -564,27 +564,17 @@ int wc_FreeRsaKey(RsaKey* key) #endif #ifndef WOLFSSL_RSA_PUBLIC_ONLY - if (key->type == RSA_PRIVATE) { + /* Always forcezero private key fields, since they may contain residual + * sensitive data even when key->type is not RSA_PRIVATE (e.g., after a + * partial key decode failure). */ #if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM) - mp_forcezero(&key->u); - mp_forcezero(&key->dQ); - mp_forcezero(&key->dP); + mp_forcezero(&key->u); + mp_forcezero(&key->dQ); + mp_forcezero(&key->dP); #endif - mp_forcezero(&key->q); - mp_forcezero(&key->p); - mp_forcezero(&key->d); - } - else { - /* private part */ -#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM) - mp_clear(&key->u); - mp_clear(&key->dQ); - mp_clear(&key->dP); -#endif - mp_clear(&key->q); - mp_clear(&key->p); - mp_clear(&key->d); - } + mp_forcezero(&key->q); + mp_forcezero(&key->p); + mp_forcezero(&key->d); #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ /* public part */