Mercurial > dropbear
comparison libtommath/bn_mp_rand.c @ 1478:3a933956437e coverity
update coverity
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 09 Feb 2018 23:49:22 +0800 |
parents | 8bba51a55704 |
children | f52919ffd3b1 |
comparison
equal
deleted
inserted
replaced
1439:8d24733026c5 | 1478:3a933956437e |
---|---|
13 * guarantee it works. | 13 * guarantee it works. |
14 * | 14 * |
15 * Tom St Denis, [email protected], http://libtom.org | 15 * Tom St Denis, [email protected], http://libtom.org |
16 */ | 16 */ |
17 | 17 |
18 #if MP_GEN_RANDOM_MAX == 0xffffffff | |
19 #define MP_GEN_RANDOM_SHIFT 32 | |
20 #elif MP_GEN_RANDOM_MAX == 32767 | |
21 /* SHRT_MAX */ | |
22 #define MP_GEN_RANDOM_SHIFT 15 | |
23 #elif MP_GEN_RANDOM_MAX == 2147483647 | |
24 /* INT_MAX */ | |
25 #define MP_GEN_RANDOM_SHIFT 31 | |
26 #elif !defined(MP_GEN_RANDOM_SHIFT) | |
27 #error Thou shalt define their own valid MP_GEN_RANDOM_SHIFT | |
28 #endif | |
29 | |
18 /* makes a pseudo-random int of a given size */ | 30 /* makes a pseudo-random int of a given size */ |
31 static mp_digit s_gen_random(void) | |
32 { | |
33 mp_digit d = 0, msk = 0; | |
34 do { | |
35 d <<= MP_GEN_RANDOM_SHIFT; | |
36 d |= ((mp_digit) MP_GEN_RANDOM()); | |
37 msk <<= MP_GEN_RANDOM_SHIFT; | |
38 msk |= (MP_MASK & MP_GEN_RANDOM_MAX); | |
39 } while ((MP_MASK & msk) != MP_MASK); | |
40 d &= MP_MASK; | |
41 return d; | |
42 } | |
43 | |
19 int | 44 int |
20 mp_rand (mp_int * a, int digits) | 45 mp_rand (mp_int * a, int digits) |
21 { | 46 { |
22 int res; | 47 int res; |
23 mp_digit d; | 48 mp_digit d; |
27 return MP_OKAY; | 52 return MP_OKAY; |
28 } | 53 } |
29 | 54 |
30 /* first place a random non-zero digit */ | 55 /* first place a random non-zero digit */ |
31 do { | 56 do { |
32 d = ((mp_digit) abs (MP_GEN_RANDOM())) & MP_MASK; | 57 d = s_gen_random(); |
33 } while (d == 0); | 58 } while (d == 0); |
34 | 59 |
35 if ((res = mp_add_d (a, d, a)) != MP_OKAY) { | 60 if ((res = mp_add_d (a, d, a)) != MP_OKAY) { |
36 return res; | 61 return res; |
37 } | 62 } |
39 while (--digits > 0) { | 64 while (--digits > 0) { |
40 if ((res = mp_lshd (a, 1)) != MP_OKAY) { | 65 if ((res = mp_lshd (a, 1)) != MP_OKAY) { |
41 return res; | 66 return res; |
42 } | 67 } |
43 | 68 |
44 if ((res = mp_add_d (a, ((mp_digit) abs (MP_GEN_RANDOM())), a)) != MP_OKAY) { | 69 if ((res = mp_add_d (a, s_gen_random(), a)) != MP_OKAY) { |
45 return res; | 70 return res; |
46 } | 71 } |
47 } | 72 } |
48 | 73 |
49 return MP_OKAY; | 74 return MP_OKAY; |
50 } | 75 } |
51 #endif | 76 #endif |
52 | 77 |
53 /* $Source$ */ | 78 /* ref: $Format:%D$ */ |
54 /* $Revision$ */ | 79 /* git commit: $Format:%H$ */ |
55 /* $Date$ */ | 80 /* commit time: $Format:%ai$ */ |