diff --git a/bn_mp_rand.c b/bn_mp_rand.c index b66d1b0..17aa5a2 100644 --- a/bn_mp_rand.c +++ b/bn_mp_rand.c @@ -172,7 +172,7 @@ static int s_rand_digit(mp_digit *p) } /* makes a pseudo-random int of a given size */ -static int s_gen_random(mp_digit *r) +int mp_rand_digit(mp_digit *r) { int ret = s_rand_digit(r); *r &= MP_MASK; @@ -191,7 +191,7 @@ int mp_rand(mp_int *a, int digits) /* first place a random non-zero digit */ do { - if (s_gen_random(&d) != MP_OKAY) { + if (mp_rand_digit(&d) != MP_OKAY) { return MP_VAL; } } while (d == 0u); @@ -205,7 +205,7 @@ int mp_rand(mp_int *a, int digits) return res; } - if (s_gen_random(&d) != MP_OKAY) { + if (mp_rand_digit(&d) != MP_OKAY) { return MP_VAL; } if ((res = mp_add_d(a, d, a)) != MP_OKAY) { diff --git a/doc/bn.tex b/doc/bn.tex index 79ae8a4..69e110d 100644 --- a/doc/bn.tex +++ b/doc/bn.tex @@ -2003,14 +2003,19 @@ mp\_prime\_random(). \chapter{Random Number Generation} \section{PRNG} +\index{mp\_rand\_digit} +\begin{alltt} +int mp_rand_digit(mp_digit *r) +\end{alltt} +This function generates a random number in \texttt{r} of the size given in \texttt{r} (that is, the variable is used for in- and output) but not more than \texttt{MP_MASK} bits. + \index{mp\_rand} \begin{alltt} int mp_rand(mp_int *a, int digits) \end{alltt} -The function generates a random number of \texttt{digits} bits. +This function generates a random number of \texttt{digits} bits. -This random number is cryptographically secure if the source of random numbers the operating systems offers is cryptographically secure. -It will use \texttt{arc4random()} if the OS is a BSD flavor, Wincrypt on Windows, and \texttt{\\dev\\urandom} on all operating systems that have it. +The random number generated with these two functions is cryptographically secure if the source of random numbers the operating systems offers is cryptographically secure. It will use \texttt{arc4random()} if the OS is a BSD flavor, Wincrypt on Windows, or \texttt{\dev\urandom} on all operating systems that have it. \chapter{Input and Output} diff --git a/tommath.h b/tommath.h index 78c4cbe..ee5da86 100644 --- a/tommath.h +++ b/tommath.h @@ -277,8 +277,10 @@ int mp_cnt_lsb(const mp_int *a); /* I Love Earth! */ -/* makes a pseudo-random int of a given size */ +/* makes a pseudo-random mp_int of a given size */ int mp_rand(mp_int *a, int digits); +/* makes a pseudo-random small int of a given size */ +int mp_rand_digit(mp_digit *r); #ifdef MP_PRNG_ENABLE_LTM_RNG /* A last resort to provide random data on systems without any of the other diff --git a/tommath_class.h b/tommath_class.h index ff398e5..6363042 100644 --- a/tommath_class.h +++ b/tommath_class.h @@ -9,7 +9,6 @@ * * SPDX-License-Identifier: Unlicense */ - #if !(defined(LTM1) && defined(LTM2) && defined(LTM3)) #if defined(LTM2) # define LTM3 @@ -18,7 +17,6 @@ # define LTM2 #endif #define LTM1 - #if defined(LTM_ALL) # define BN_ERROR_C # define BN_FAST_MP_INVMOD_C @@ -160,7 +158,6 @@ # define BN_S_MP_SUB_C # define BNCORE_C #endif - #if defined(BN_ERROR_C) # define BN_MP_ERROR_TO_STRING_C #endif @@ -828,6 +825,7 @@ #endif #if defined(BN_MP_RAND_C) +# define BN_MP_RAND_DIGIT_C # define BN_MP_ZERO_C # define BN_MP_ADD_D_C # define BN_MP_LSHD_C