Merge pull request #147 from czurnieden/moarvm_workarounds
workaround for the MoarVM problem with MP_GEN_RAND et al.
(cherry picked from commit 11d6e03914
)
This commit is contained in:
parent
e4e2da5143
commit
1c8c534885
@ -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) {
|
||||
|
11
doc/bn.tex
11
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}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user