From cedec3ae28d1bb2177604b5668c6709946fa77d5 Mon Sep 17 00:00:00 2001 From: Tesfa Mael Date: Mon, 28 Dec 2020 15:53:56 -0800 Subject: [PATCH 1/2] Add parameter check --- wolfcrypt/src/random.c | 2 +- wolfcrypt/src/sp_int.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index e8070a355..05ad76c7b 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -914,7 +914,7 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz) { int ret; - if (rng == NULL || output == NULL) + if (rng == NULL || output == NULL || sz == 0 ) return BAD_FUNC_ARG; #ifdef WOLF_CRYPTO_CB diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 53fe07a11..7e436caef 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -12979,7 +12979,7 @@ int sp_rand_prime(sp_int* r, int len, WC_RNG* rng, void* heap) (void)heap; - if ((r == NULL) || (rng == NULL)) { + if ((r == NULL) || (rng == NULL) || len <= 0 ) { err = MP_VAL; } From d366ca74af7ce37690a3e4fffb7bcac1f06c9d66 Mon Sep 17 00:00:00 2001 From: Tesfa Mael Date: Tue, 29 Dec 2020 19:48:45 -0800 Subject: [PATCH 2/2] Review comments and cast --- wolfcrypt/src/random.c | 5 ++++- wolfcrypt/src/sp_int.c | 7 +++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 05ad76c7b..bd8a2142a 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -914,9 +914,12 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* output, word32 sz) { int ret; - if (rng == NULL || output == NULL || sz == 0 ) + if (rng == NULL || output == NULL) return BAD_FUNC_ARG; + if (sz == 0) + return 0; + #ifdef WOLF_CRYPTO_CB if (rng->devId != INVALID_DEVID) { ret = wc_CryptoCb_RandomBlock(rng, output, sz); diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 7e436caef..d81fd98e8 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -9240,7 +9240,7 @@ int sp_div_2d(sp_int* a, int e, sp_int* r, sp_int* rem) rem->used = (e + SP_WORD_SIZE - 1) >> SP_WORD_SHIFT; e &= SP_WORD_MASK; if (e > 0) { - rem->dp[rem->used - 1] &= (1 << e) - 1; + rem->dp[rem->used - 1] &= ((sp_int_digit)1 << e) - 1; } sp_clamp(rem); } @@ -12979,10 +12979,13 @@ int sp_rand_prime(sp_int* r, int len, WC_RNG* rng, void* heap) (void)heap; - if ((r == NULL) || (rng == NULL) || len <= 0 ) { + if ((r == NULL) || (rng == NULL) || len < 0 ) { err = MP_VAL; } + if (len == 0) + return MP_OKAY; + if (err == MP_OKAY) { /* get type */ if (len < 0) {