Merge pull request #2289 from SparkiDev/sp_prime_fix

When checking primes call only available SP ModExp functions
This commit is contained in:
toddouska
2019-06-24 15:39:03 -07:00
committed by GitHub
3 changed files with 21 additions and 1 deletions

View File

@ -4443,11 +4443,20 @@ static int mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result)
goto LBL_R; goto LBL_R;
} }
#if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH)
#ifndef WOLFSSL_SP_NO_2048
if (mp_count_bits(a) == 1024) if (mp_count_bits(a) == 1024)
err = sp_ModExp_1024(b, &r, a, &y); err = sp_ModExp_1024(b, &r, a, &y);
else if (mp_count_bits(a) == 2048) else if (mp_count_bits(a) == 2048)
err = sp_ModExp_2048(b, &r, a, &y); err = sp_ModExp_2048(b, &r, a, &y);
else else
#endif
#ifndef WOLFSSL_SP_NO_3072
if (mp_count_bits(a) == 1536)
err = sp_ModExp_1536(b, &r, a, &y);
else if (mp_count_bits(a) == 3072)
err = sp_ModExp_3072(b, &r, a, &y);
else
#endif
#endif #endif
err = mp_exptmod (b, &r, a, &y); err = mp_exptmod (b, &r, a, &y);
if (err != MP_OKAY) if (err != MP_OKAY)

View File

@ -3553,11 +3553,20 @@ static int fp_prime_miller_rabin_ex(fp_int * a, fp_int * b, int *result,
fp_zero(y); fp_zero(y);
#if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \ #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH) defined(WOLFSSL_HAVE_SP_DH)
#ifndef WOLFSSL_SP_NO_2048
if (fp_count_bits(a) == 1024) if (fp_count_bits(a) == 1024)
sp_ModExp_1024(b, r, a, y); sp_ModExp_1024(b, r, a, y);
else if (fp_count_bits(a) == 2048) else if (fp_count_bits(a) == 2048)
sp_ModExp_2048(b, r, a, y); sp_ModExp_2048(b, r, a, y);
else else
#endif
#ifndef WOLFSSL_SP_NO_3072
if (fp_count_bits(a) == 1536)
sp_ModExp_1536(b, r, a, y);
else if (fp_count_bits(a) == 3072)
sp_ModExp_3072(b, r, a, y);
else
#endif
#endif #endif
fp_exptmod(b, r, a, y); fp_exptmod(b, r, a, y);

View File

@ -40,7 +40,9 @@
typedef struct WOLFSSL_BIGNUM { typedef struct WOLFSSL_BIGNUM {
int neg; /* openssh deference */ int neg; /* openssh deference */
void *internal; /* our big num */ void *internal; /* our big num */
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT) #ifdef WOLFSSL_SP_MATH
sp_int fp;
#elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
fp_int fp; fp_int fp;
#endif #endif
} WOLFSSL_BIGNUM; } WOLFSSL_BIGNUM;