diff --git a/wolfcrypt/src/integer.c b/wolfcrypt/src/integer.c index 2551ca103..cfe9d27a8 100644 --- a/wolfcrypt/src/integer.c +++ b/wolfcrypt/src/integer.c @@ -4443,11 +4443,20 @@ static int mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) goto LBL_R; } #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) +#ifndef WOLFSSL_SP_NO_2048 if (mp_count_bits(a) == 1024) err = sp_ModExp_1024(b, &r, a, &y); else if (mp_count_bits(a) == 2048) err = sp_ModExp_2048(b, &r, a, &y); 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 err = mp_exptmod (b, &r, a, &y); if (err != MP_OKAY) diff --git a/wolfcrypt/src/tfm.c b/wolfcrypt/src/tfm.c index f30a752a5..b7cb3d69a 100644 --- a/wolfcrypt/src/tfm.c +++ b/wolfcrypt/src/tfm.c @@ -3553,11 +3553,20 @@ static int fp_prime_miller_rabin_ex(fp_int * a, fp_int * b, int *result, fp_zero(y); #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \ defined(WOLFSSL_HAVE_SP_DH) +#ifndef WOLFSSL_SP_NO_2048 if (fp_count_bits(a) == 1024) sp_ModExp_1024(b, r, a, y); else if (fp_count_bits(a) == 2048) sp_ModExp_2048(b, r, a, y); 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 fp_exptmod(b, r, a, y); diff --git a/wolfssl/openssl/bn.h b/wolfssl/openssl/bn.h index e3311b395..c5176813b 100644 --- a/wolfssl/openssl/bn.h +++ b/wolfssl/openssl/bn.h @@ -40,7 +40,9 @@ typedef struct WOLFSSL_BIGNUM { int neg; /* openssh deference */ 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; #endif } WOLFSSL_BIGNUM;