Skip to content

Commit d4ac953

Browse files
authored
Merge pull request #9893 from embhorn/f284-285
Hardening in wc_FreeRsaKey and wc_RsaPrivateKeyDecodeRaw
2 parents 2635315 + c0a4b94 commit d4ac953

1 file changed

Lines changed: 15 additions & 25 deletions

File tree

wolfcrypt/src/rsa.c

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -564,27 +564,17 @@ int wc_FreeRsaKey(RsaKey* key)
564564
#endif
565565

566566
#ifndef WOLFSSL_RSA_PUBLIC_ONLY
567-
if (key->type == RSA_PRIVATE) {
567+
/* Forcezero all private key fields that are present in this build
568+
* configuration, since they may contain residual sensitive data even when
569+
* key->type is not RSA_PRIVATE (e.g., after a partial key decode failure). */
568570
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
569-
mp_forcezero(&key->u);
570-
mp_forcezero(&key->dQ);
571-
mp_forcezero(&key->dP);
571+
mp_forcezero(&key->u);
572+
mp_forcezero(&key->dQ);
573+
mp_forcezero(&key->dP);
572574
#endif
573-
mp_forcezero(&key->q);
574-
mp_forcezero(&key->p);
575-
mp_forcezero(&key->d);
576-
}
577-
else {
578-
/* private part */
579-
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
580-
mp_clear(&key->u);
581-
mp_clear(&key->dQ);
582-
mp_clear(&key->dP);
583-
#endif
584-
mp_clear(&key->q);
585-
mp_clear(&key->p);
586-
mp_clear(&key->d);
587-
}
575+
mp_forcezero(&key->q);
576+
mp_forcezero(&key->p);
577+
mp_forcezero(&key->d);
588578
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */
589579

590580
/* public part */
@@ -5410,13 +5400,13 @@ int wc_RsaPrivateKeyDecodeRaw(const byte* n, word32 nSz,
54105400
else if (key != NULL) {
54115401
mp_clear(&key->n);
54125402
mp_clear(&key->e);
5413-
mp_clear(&key->d);
5414-
mp_clear(&key->p);
5415-
mp_clear(&key->q);
5403+
mp_forcezero(&key->d);
5404+
mp_forcezero(&key->p);
5405+
mp_forcezero(&key->q);
54165406
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
5417-
mp_clear(&key->u);
5418-
mp_clear(&key->dP);
5419-
mp_clear(&key->dQ);
5407+
mp_forcezero(&key->u);
5408+
mp_forcezero(&key->dP);
5409+
mp_forcezero(&key->dQ);
54205410
#endif
54215411
}
54225412

0 commit comments

Comments
 (0)