Fix fsanitize issue for `mp_rand`.

pull/1605/head
David Garske 2018-06-12 15:23:50 -07:00
parent 623f1b58ac
commit ec132cd3f4
1 changed files with 26 additions and 17 deletions

View File

@ -99,44 +99,53 @@ int get_rand_digit(WC_RNG* rng, mp_digit* d)
#ifdef WC_RSA_BLINDING #ifdef WC_RSA_BLINDING
int mp_rand(mp_int* a, int digits, WC_RNG* rng) int mp_rand(mp_int* a, int digits, WC_RNG* rng)
{ {
int ret; int ret = 0;
mp_digit d; DECLARE_VAR(d, mp_digit, 1, rng->heap);
if (rng == NULL) if (rng == NULL) {
return MISSING_RNG_E; ret = MISSING_RNG_E; goto exit;
}
if (a == NULL) if (a == NULL
return BAD_FUNC_ARG; #ifdef WOLFSSL_ASYNC_CRYPT
|| d == NULL
#endif
) {
ret = BAD_FUNC_ARG; goto exit;
}
mp_zero(a); mp_zero(a);
if (digits <= 0) { if (digits <= 0) {
return MP_OKAY; ret = MP_OKAY; goto exit;
} }
/* first place a random non-zero digit */ /* first place a random non-zero digit */
do { do {
ret = get_rand_digit(rng, &d); ret = get_rand_digit(rng, d);
if (ret != 0) { if (ret != 0) {
return ret; goto exit;
} }
} while (d == 0); } while (*d == 0);
if ((ret = mp_add_d(a, d, a)) != MP_OKAY) { if ((ret = mp_add_d(a, *d, a)) != MP_OKAY) {
return ret; goto exit;
} }
while (--digits > 0) { while (--digits > 0) {
if ((ret = mp_lshd(a, 1)) != MP_OKAY) { if ((ret = mp_lshd(a, 1)) != MP_OKAY) {
return ret; goto exit;
} }
if ((ret = get_rand_digit(rng, &d)) != 0) { if ((ret = get_rand_digit(rng, d)) != 0) {
return ret; goto exit;
} }
if ((ret = mp_add_d(a, d, a)) != MP_OKAY) { if ((ret = mp_add_d(a, *d, a)) != MP_OKAY) {
return ret; goto exit;
} }
} }
exit:
FREE_VAR(d, rng->heap);
return ret; return ret;
} }
#endif /* WC_RSA_BLINDING */ #endif /* WC_RSA_BLINDING */