From 7cf5c050e21af6d6715be45dfc147e4e8606b155 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Sun, 10 Apr 2016 01:01:29 +0200 Subject: [PATCH] make sure the entire mp_digit is filled with random data --- bn_mp_rand.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/bn_mp_rand.c b/bn_mp_rand.c index 4c9610d..6f300c0 100644 --- a/bn_mp_rand.c +++ b/bn_mp_rand.c @@ -16,6 +16,18 @@ */ /* makes a pseudo-random int of a given size */ +static mp_digit mp_gen_random(void) +{ + mp_digit d; + d = ((mp_digit) abs (MP_GEN_RANDOM())); +#if MP_DIGIT_BIT > 32 + d <<= 32; + d |= ((mp_digit) abs (MP_GEN_RANDOM())); +#endif + d &= MP_MASK; + return d; +} + int mp_rand (mp_int * a, int digits) { @@ -29,7 +41,7 @@ mp_rand (mp_int * a, int digits) /* first place a random non-zero digit */ do { - d = ((mp_digit) abs (MP_GEN_RANDOM())) & MP_MASK; + d = mp_gen_random(); } while (d == 0); if ((res = mp_add_d (a, d, a)) != MP_OKAY) { @@ -41,7 +53,7 @@ mp_rand (mp_int * a, int digits) return res; } - if ((res = mp_add_d (a, ((mp_digit) abs (MP_GEN_RANDOM())), a)) != MP_OKAY) { + if ((res = mp_add_d (a, mp_gen_random(), a)) != MP_OKAY) { return res; } }