From 1771fea17d443d6492aa57cb63fe11891d9bc578 Mon Sep 17 00:00:00 2001 From: toddouska Date: Thu, 30 Apr 2015 16:50:02 -0700 Subject: [PATCH] fix ecc_make_key cleanup on rng failure --- wolfcrypt/src/ecc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index d98479060..a4c8adc5a 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -1554,6 +1554,7 @@ int wc_ecc_make_key_ex(RNG* rng, ecc_key* key, const ecc_set_type* dp) byte buf[ECC_MAXSIZE]; #endif int keysize; + int po_init = 0; /* prime order Init flag for clear */ if (key == NULL || rng == NULL || dp == NULL) return ECC_BAD_ARG_E; @@ -1592,6 +1593,8 @@ int wc_ecc_make_key_ex(RNG* rng, ecc_key* key, const ecc_set_type* dp) #endif if (err != MP_OKAY) err = MEMORY_E; + else + po_init = 1; } if (err == MP_OKAY) { @@ -1634,8 +1637,10 @@ int wc_ecc_make_key_ex(RNG* rng, ecc_key* key, const ecc_set_type* dp) mp_clear(&key->k); } ecc_del_point(base); - mp_clear(&prime); - mp_clear(&order); + if (po_init) { + mp_clear(&prime); + mp_clear(&order); + } ForceZero(buf, ECC_MAXSIZE); #ifdef WOLFSSL_SMALL_STACK