File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -29,7 +29,7 @@ mp_rand (mp_int * a, int digits)
29
29
30
30
/* first place a random non-zero digit */
31
31
do {
32
- d = ((mp_digit ) abs (rand ())) & MP_MASK ;
32
+ d = ((mp_digit ) abs (MP_GEN_RANDOM ())) & MP_MASK ;
33
33
} while (d == 0 );
34
34
35
35
if ((res = mp_add_d (a , d , a )) != MP_OKAY ) {
@@ -41,7 +41,7 @@ mp_rand (mp_int * a, int digits)
41
41
return res ;
42
42
}
43
43
44
- if ((res = mp_add_d (a , ((mp_digit ) abs (rand ())), a )) != MP_OKAY ) {
44
+ if ((res = mp_add_d (a , ((mp_digit ) abs (MP_GEN_RANDOM ())), a )) != MP_OKAY ) {
45
45
return res ;
46
46
}
47
47
}
Original file line number Diff line number Diff line change @@ -127,6 +127,18 @@ extern "C" {
127
127
#define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */
128
128
#endif
129
129
130
+ /* platforms that can use a better rand function */
131
+ #if defined(__FreeBSD__ ) || defined(__OpenBSD__ ) || defined(__NetBSD__ ) || defined(__DragonFly__ )
132
+ #define MP_USE_ALT_RAND 1
133
+ #endif
134
+
135
+ /* use arc4random on platforms that support it */
136
+ #ifdef MP_USE_ALT_RAND
137
+ #define MP_GEN_RANDOM () arc4random()
138
+ #else
139
+ #define MP_GEN_RANDOM () rand()
140
+ #endif
141
+
130
142
#define MP_DIGIT_BIT DIGIT_BIT
131
143
#define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1))
132
144
#define MP_DIGIT_MAX MP_MASK
You can’t perform that action at this time.
0 commit comments