Merge pull request #147 from czurnieden/moarvm_workarounds

workaround for the MoarVM problem with MP_GEN_RAND et al.
This commit is contained in:
Steffen Jaeckel 2019-01-15 18:20:24 +01:00 committed by GitHub
commit 11d6e03914
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 10 deletions

0
bn_mp_exptmod_fast.c Executable file → Normal file
View File

View File

@ -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) {

View File

@ -2003,13 +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}

View File

@ -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
/* as last resort we will fall back to libtomcrypt's rng_get_bytes()

View File

@ -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
@ -785,7 +782,7 @@
#if defined(BN_MP_PRIME_STRONG_LUCAS_SELFRIDGE_C)
# define BN_MP_PRIME_IS_PRIME_C
# define BN_MP_MUL_D_C
# define BN_MP_MUL_SI_C
# define BN_S_MP_MUL_SI_C
# define BN_MP_INIT_C
# define BN_MP_SET_LONG_C
# define BN_MP_MUL_C
@ -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