From 05634e286ddd94d90ef31a60fe18a1be5d9dcee3 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Wed, 7 Sep 2022 15:42:33 +1000 Subject: [PATCH] SP math: fix build configuration with opensslall ./configure '--disable-shared' '--enable-keygen' '--enable-certgen' '--enable-certreq' '--enable-certext' '--enable-ocsp' '--enable-crl' '--enable-pwdbased' '--enable-opensslall' '--enable-pkcs7' '--enable-pkcs12' '--enable-sp' '--enable-sp-math' '--disable-rsa' '--disable-dh' '--enable-ecc' --- wolfcrypt/src/sp_int.c | 42 +++++++++++++++++++++----------------- wolfssl/wolfcrypt/sp_int.h | 2 +- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index b4df9f2f2..cb78a7681 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -4339,7 +4339,8 @@ WOLFSSL_LOCAL int sp_ModExp_4096(sp_int* base, sp_int* exp, sp_int* mod, #endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ -#if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) +#if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) || \ + defined(OPENSSL_ALL) static int _sp_mont_red(sp_int* a, sp_int* m, sp_int_digit mp); #endif @@ -10427,7 +10428,7 @@ int sp_mul(sp_int* a, sp_int* b, sp_int* r) #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) || \ defined(WOLFCRYPT_HAVE_ECCSI) || \ - (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) + (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) || defined(OPENSSL_ALL) /* Multiply a by b mod m and store in r: r = (a * b) mod m * * @param [in] a SP integer to multiply. @@ -10748,7 +10749,8 @@ int sp_invmod_mont_ct(sp_int* a, sp_int* m, sp_int* r, sp_int_digit mp) **************************/ #if (defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \ - !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \ + defined(OPENSSL_ALL) /* Internal. Exponentiates b to the power of e modulo m into r: r = b ^ e mod m * Process the exponent one bit at a time. * Is constant time and can be cache attack resistant. @@ -10849,11 +10851,11 @@ static int _sp_exptmod_ex(sp_int* b, sp_int* e, int bits, sp_int* m, sp_int* r) FREE_SP_INT_ARRAY(t, NULL); return err; } -#endif /* (WOLFSSL_SP_MATH_ALL && !WOLFSSL_RSA_VERIFY_ONLY) || - * WOLFSSL_HAVE_SP_DH */ +#endif -#if defined(WOLFSSL_SP_MATH_ALL) && ((!defined(WOLFSSL_RSA_VERIFY_ONLY) && \ - !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH)) +#if (defined(WOLFSSL_SP_MATH_ALL) && ((!defined(WOLFSSL_RSA_VERIFY_ONLY) && \ + !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH))) || \ + defined(OPENSSL_ALL) #ifndef WC_NO_HARDEN #if !defined(WC_NO_CACHE_RESISTANT) /* Internal. Exponentiates b to the power of e modulo m into r: r = b ^ e mod m @@ -11303,10 +11305,11 @@ static int _sp_exptmod_base_2(sp_int* e, int digits, sp_int* m, sp_int* r) FREE_SP_INT_ARRAY(d, NULL); return err; } -#endif /* WOLFSSL_SP_MATH_ALL && !WOLFSSL_RSA_VERIFY_ONLY */ +#endif #if (defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) || \ - !defined(NO_DH) || (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) + !defined(NO_DH) || (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) || \ + defined(OPENSSL_ALL) /* Exponentiates b to the power of e modulo m into r: r = b ^ e mod m * * @param [in] b SP integer that is the base. @@ -11426,14 +11429,14 @@ int sp_exptmod_ex(sp_int* b, sp_int* e, int digits, sp_int* m, sp_int* r) { } } -#if defined(WOLFSSL_SP_MATH_ALL) || !defined(NO_DH) +#if defined(WOLFSSL_SP_MATH_ALL) || !defined(NO_DH) || defined(OPENSSL_ALL) #if (defined(WOLFSSL_RSA_VERIFY_ONLY) || defined(WOLFSSL_RSA_PUBLIC_ONLY)) && \ defined(NO_DH) if ((!done) && (err == MP_OKAY)) err = sp_exptmod_nct(b, e, m, r); } #else -#if defined(WOLFSSL_SP_MATH_ALL) +#if defined(WOLFSSL_SP_MATH_ALL) || defined(OPENSSL_ALL) if ((!done) && (err == MP_OKAY) && (b->used == 1) && (b->dp[0] == 2) && mp_isodd(m)) { /* Use the generic base 2 implementation. */ @@ -11447,7 +11450,7 @@ int sp_exptmod_ex(sp_int* b, sp_int* e, int digits, sp_int* m, sp_int* r) #endif } else -#endif /* WOLFSSL_SP_MATH_ALL */ +#endif /* WOLFSSL_SP_MATH_ALL || OPENSSL_ALL */ if ((!done) && (err == MP_OKAY)) { /* Otherwise use the generic implementation. */ err = _sp_exptmod_ex(b, e, digits * SP_WORD_SIZE, m, r); @@ -11471,10 +11474,11 @@ int sp_exptmod_ex(sp_int* b, sp_int* e, int digits, sp_int* m, sp_int* r) #endif return err; } -#endif /* WOLFSSL_SP_MATH_ALL || WOLFSSL_HAVE_SP_DH */ +#endif #if (defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) || \ - !defined(NO_DH) || (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) + !defined(NO_DH) || (!defined(NO_RSA) && defined(WOLFSSL_KEY_GEN)) || \ + defined(OPENSSL_ALL) /* Exponentiates b to the power of e modulo m into r: r = b ^ e mod m * * @param [in] b SP integer that is the base. @@ -11500,8 +11504,7 @@ int sp_exptmod(sp_int* b, sp_int* e, sp_int* m, sp_int* r) RESTORE_VECTOR_REGISTERS(); return err; } -#endif /* (WOLFSSL_SP_MATH_ALL && !WOLFSSL_RSA_VERIFY_ONLY) || - * WOLFSSL_HAVE_SP_DH */ +#endif #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) #if defined(WOLFSSL_SP_FAST_NCT_EXPTMOD) || !defined(WOLFSSL_SP_SMALL) @@ -12035,8 +12038,8 @@ int sp_mod_2d(sp_int* a, int e, sp_int* r) } #endif /* WOLFSSL_SP_MATH_ALL && !WOLFSSL_RSA_VERIFY_ONLY */ -#if defined(WOLFSSL_SP_MATH_ALL) && (!defined(WOLFSSL_RSA_VERIFY_ONLY) || \ - !defined(NO_DH)) +#if (defined(WOLFSSL_SP_MATH_ALL) && (!defined(WOLFSSL_RSA_VERIFY_ONLY) || \ + !defined(NO_DH))) || defined(OPENSSL_ALL) /* Multiply by 2^e: r = a << e * * @param [in] a SP integer to multiply. @@ -14548,7 +14551,8 @@ int sp_sqrmod(sp_int* a, sp_int* m, sp_int* r) **********************/ #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) || \ - defined(WOLFCRYPT_HAVE_ECCSI) || defined(WOLFCRYPT_HAVE_SAKKE) + defined(WOLFCRYPT_HAVE_ECCSI) || defined(WOLFCRYPT_HAVE_SAKKE) || \ + defined(OPENSSL_ALL) /* Reduce a number in montgomery form. * * Assumes a and m are not NULL and m is not 0. diff --git a/wolfssl/wolfcrypt/sp_int.h b/wolfssl/wolfcrypt/sp_int.h index 1c4fe91e4..6e8b9cb40 100644 --- a/wolfssl/wolfcrypt/sp_int.h +++ b/wolfssl/wolfcrypt/sp_int.h @@ -884,7 +884,7 @@ MP_API int sp_exptmod(sp_int* b, sp_int* e, sp_int* m, sp_int* r); MP_API int sp_exptmod_nct(sp_int* b, sp_int* e, sp_int* m, sp_int* r); #endif -#ifdef WOLFSSL_SP_MATH_ALL +#if defined(WOLFSSL_SP_MATH_ALL) || defined(OPENSSL_ALL) MP_API int sp_div_2d(sp_int* a, int e, sp_int* r, sp_int* rem); MP_API int sp_mod_2d(sp_int* a, int e, sp_int* r); MP_API int sp_mul_2d(sp_int* a, int e, sp_int* r);