Fixes for RSA verify only builds

pull/2166/head
Sean Parkinson 2019-03-18 11:44:10 +10:00
parent 7aa159ca6d
commit b24e122a0d
11 changed files with 219 additions and 193 deletions

View File

@ -4813,8 +4813,8 @@ void bench_ecc(int doAsync)
#endif #endif
#if !defined(NO_ASN) && defined(HAVE_ECC_SIGN) #if !defined(NO_ASN) && defined(HAVE_ECC_SIGN)
DECLARE_ARRAY(sig, byte, BENCH_MAX_PENDING, ECC_MAX_SIG_SIZE, HEAP_HINT); DECLARE_ARRAY(sig, byte, BENCH_MAX_PENDING, ECC_MAX_SIG_SIZE, HEAP_HINT);
#endif
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, BENCH_ECC_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, BENCH_ECC_SIZE, HEAP_HINT);
#endif
/* clear for done cleanup */ /* clear for done cleanup */
XMEMSET(&genKey, 0, sizeof(genKey)); XMEMSET(&genKey, 0, sizeof(genKey));
@ -4956,8 +4956,8 @@ exit:
#endif #endif
#if !defined(NO_ASN) && defined(HAVE_ECC_SIGN) #if !defined(NO_ASN) && defined(HAVE_ECC_SIGN)
FREE_ARRAY(sig, BENCH_MAX_PENDING, HEAP_HINT); FREE_ARRAY(sig, BENCH_MAX_PENDING, HEAP_HINT);
#endif
FREE_ARRAY(digest, BENCH_MAX_PENDING, HEAP_HINT); FREE_ARRAY(digest, BENCH_MAX_PENDING, HEAP_HINT);
#endif
} }

View File

@ -2993,7 +2993,8 @@ int wc_RsaPSS_Sign_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
#endif #endif
#endif #endif
#if !defined(WOLFSSL_RSA_VERIFY_ONLY) || !defined(WOLFSSL_SP_MATH) #if !defined(WOLFSSL_RSA_VERIFY_ONLY) || !defined(WOLFSSL_SP_MATH) || \
defined(WC_RSA_PSS)
int wc_RsaEncryptSize(RsaKey* key) int wc_RsaEncryptSize(RsaKey* key)
{ {
int ret; int ret;

View File

@ -6735,7 +6735,8 @@ static WC_INLINE int sp_2048_mod_64_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_64_cond(a, m, NULL, r); return sp_2048_div_64_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -7008,7 +7009,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -7264,7 +7265,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
} }
#endif #endif
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -7450,7 +7452,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -16266,7 +16268,8 @@ static WC_INLINE int sp_3072_mod_96_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_96_cond(a, m, NULL, r); return sp_3072_div_96_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -16539,7 +16542,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -16795,7 +16798,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
} }
#endif #endif
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -16981,7 +16985,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -4393,7 +4393,8 @@ static WC_INLINE int sp_2048_mod_32_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_32_cond(a, m, NULL, r); return sp_2048_div_32_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -4666,7 +4667,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -4920,7 +4921,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -5106,7 +5108,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -11427,7 +11429,8 @@ static WC_INLINE int sp_3072_mod_48_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_48_cond(a, m, NULL, r); return sp_3072_div_48_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -11700,7 +11703,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -11954,7 +11957,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -12140,7 +12144,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -3909,7 +3909,8 @@ static WC_INLINE int sp_2048_mod_64_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_64_cond(a, m, NULL, r); return sp_2048_div_64_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -4182,7 +4183,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -4436,7 +4437,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -4622,7 +4624,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -9219,7 +9221,8 @@ static WC_INLINE int sp_3072_mod_96_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_96_cond(a, m, NULL, r); return sp_3072_div_96_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -9492,7 +9495,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -9746,7 +9749,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -9932,7 +9936,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -50,7 +50,7 @@
#ifndef WOLFSSL_SP_ASM #ifndef WOLFSSL_SP_ASM
#if SP_WORD_SIZE == 32 #if SP_WORD_SIZE == 32
#if (defined(WOLFSSL_SP_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) #if (defined(WOLFSSL_SP_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && (defined(WOLFSSL_HAVE_SP_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Mask for address to obfuscate which of the two address will be used. */ /* Mask for address to obfuscate which of the two address will be used. */
static const size_t addr_mask[2] = { 0, (size_t)-1 }; static const size_t addr_mask[2] = { 0, (size_t)-1 };
#endif #endif
@ -2660,7 +2660,8 @@ static int sp_2048_mod_90(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_90(a, m, NULL, r); return sp_2048_div_90(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -2960,7 +2961,7 @@ static int sp_2048_mod_exp_90(sp_digit* r, sp_digit* a, sp_digit* e, int bits,
return err; return err;
#endif #endif
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \ #if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \
!defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) !defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
@ -3436,7 +3437,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
#endif /* !WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* !WOLFSSL_RSA_PUBLIC_ONLY */
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -3850,7 +3852,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
#endif #endif
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -5898,7 +5900,8 @@ static int sp_3072_mod_134(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_134(a, m, NULL, r); return sp_3072_div_134(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -6198,7 +6201,7 @@ static int sp_3072_mod_exp_134(sp_digit* r, sp_digit* a, sp_digit* e, int bits,
return err; return err;
#endif #endif
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \ #if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \
!defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) !defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
@ -6672,7 +6675,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
#endif /* !WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* !WOLFSSL_RSA_PUBLIC_ONLY */
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -7086,7 +7090,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
#endif #endif
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -50,7 +50,7 @@
#ifndef WOLFSSL_SP_ASM #ifndef WOLFSSL_SP_ASM
#if SP_WORD_SIZE == 64 #if SP_WORD_SIZE == 64
#if (defined(WOLFSSL_SP_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) #if (defined(WOLFSSL_SP_CACHE_RESISTANT) || defined(WOLFSSL_SP_SMALL)) && (defined(WOLFSSL_HAVE_SP_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Mask for address to obfuscate which of the two address will be used. */ /* Mask for address to obfuscate which of the two address will be used. */
static const size_t addr_mask[2] = { 0, (size_t)-1 }; static const size_t addr_mask[2] = { 0, (size_t)-1 };
#endif #endif
@ -2194,7 +2194,8 @@ static int sp_2048_mod_36(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_36(a, m, NULL, r); return sp_2048_div_36(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -2494,7 +2495,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, sp_digit* a, sp_digit* e, int bits,
return err; return err;
#endif #endif
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \ #if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \
!defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) !defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
@ -2967,7 +2968,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
#endif /* !WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* !WOLFSSL_RSA_PUBLIC_ONLY */
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -3381,7 +3383,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
#endif #endif
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -5705,7 +5707,8 @@ static int sp_3072_mod_54(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_54(a, m, NULL, r); return sp_3072_div_54(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -6005,7 +6008,7 @@ static int sp_3072_mod_exp_54(sp_digit* r, sp_digit* a, sp_digit* e, int bits,
return err; return err;
#endif #endif
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \ #if defined(WOLFSSL_HAVE_SP_RSA) && !defined(SP_RSA_PRIVATE_EXP_D) && \
!defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) !defined(RSA_LOW_MEM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
@ -6479,7 +6482,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
#endif /* !WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* !WOLFSSL_RSA_PUBLIC_ONLY */
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -6893,7 +6897,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
#endif #endif
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -3306,35 +3306,32 @@ SP_NOINLINE static sp_digit div_2048_word_32(sp_digit d1, sp_digit d0,
*/ */
SP_NOINLINE static int32_t sp_2048_cmp_32(sp_digit* a, sp_digit* b) SP_NOINLINE static int32_t sp_2048_cmp_32(sp_digit* a, sp_digit* b)
{ {
sp_digit r = -1; sp_digit r = 0;
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov r3, %[r]\n\t" "mov r3, #0\n\t"
"mvn r3, r3\n\t"
"mov r6, #124\n\t" "mov r6, #124\n\t"
"1:\n\t" "1:\n\t"
"ldr r4, [%[a], r6]\n\t" "ldr r7, [%[a], r6]\n\t"
"ldr r5, [%[b], r6]\n\t" "ldr r5, [%[b], r6]\n\t"
"and r4, r3\n\t" "and r7, r3\n\t"
"and r5, r3\n\t" "and r5, r3\n\t"
"subs r4, r5\n\t" "mov r4, r7\n\t"
"sbc r5, r5\n\t" "subs r7, r5\n\t"
"mov r7, r3\n\t" "sbc r7, r7\n\t"
"and r7, r5\n\t" "add %[r], r7\n\t"
"bic %[r], r5\n\t" "mvn r7, r7\n\t"
"orr %[r], r7\n\t" "and r3, r7\n\t"
"subs r4, #1\n\t" "subs r5, r4\n\t"
"sbc r4, r4\n\t" "sbc r7, r7\n\t"
"orr r5, r4\n\t" "sub %[r], r7\n\t"
"mvn r5, r5\n\t" "mvn r7, r7\n\t"
"mov r7, #1\n\t" "and r3, r7\n\t"
"and r7, r5\n\t" "sub r6, #4\n\t"
"bic %[r], r5\n\t" "cmp r6, #0\n\t"
"orr %[r], r7\n\t" "bge 1b\n\t"
"and r3, r4\n\t"
"subs r6, #4\n\t"
"bcc 1b\n\t"
"eor %[r], r3\n\t"
: [r] "+r" (r) : [r] "+r" (r)
: [a] "r" (a), [b] "r" (b) : [a] "r" (a), [b] "r" (b)
: "r3", "r4", "r5", "r6", "r7" : "r3", "r4", "r5", "r6", "r7"
@ -3935,35 +3932,32 @@ static void sp_2048_mask_64(sp_digit* r, sp_digit* a, sp_digit m)
*/ */
SP_NOINLINE static int32_t sp_2048_cmp_64(sp_digit* a, sp_digit* b) SP_NOINLINE static int32_t sp_2048_cmp_64(sp_digit* a, sp_digit* b)
{ {
sp_digit r = -1; sp_digit r = 0;
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov r3, %[r]\n\t" "mov r3, #0\n\t"
"mvn r3, r3\n\t"
"mov r6, #252\n\t" "mov r6, #252\n\t"
"1:\n\t" "1:\n\t"
"ldr r4, [%[a], r6]\n\t" "ldr r7, [%[a], r6]\n\t"
"ldr r5, [%[b], r6]\n\t" "ldr r5, [%[b], r6]\n\t"
"and r4, r3\n\t" "and r7, r3\n\t"
"and r5, r3\n\t" "and r5, r3\n\t"
"subs r4, r5\n\t" "mov r4, r7\n\t"
"sbc r5, r5\n\t" "subs r7, r5\n\t"
"mov r7, r3\n\t" "sbc r7, r7\n\t"
"and r7, r5\n\t" "add %[r], r7\n\t"
"bic %[r], r5\n\t" "mvn r7, r7\n\t"
"orr %[r], r7\n\t" "and r3, r7\n\t"
"subs r4, #1\n\t" "subs r5, r4\n\t"
"sbc r4, r4\n\t" "sbc r7, r7\n\t"
"orr r5, r4\n\t" "sub %[r], r7\n\t"
"mvn r5, r5\n\t" "mvn r7, r7\n\t"
"mov r7, #1\n\t" "and r3, r7\n\t"
"and r7, r5\n\t" "sub r6, #4\n\t"
"bic %[r], r5\n\t" "cmp r6, #0\n\t"
"orr %[r], r7\n\t" "bge 1b\n\t"
"and r3, r4\n\t"
"subs r6, #4\n\t"
"bcc 1b\n\t"
"eor %[r], r3\n\t"
: [r] "+r" (r) : [r] "+r" (r)
: [a] "r" (a), [b] "r" (b) : [a] "r" (a), [b] "r" (b)
: "r3", "r4", "r5", "r6", "r7" : "r3", "r4", "r5", "r6", "r7"
@ -4073,7 +4067,8 @@ static WC_INLINE int sp_2048_mod_64_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_64_cond(a, m, NULL, r); return sp_2048_div_64_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -4346,7 +4341,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -4600,7 +4595,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -4786,7 +4782,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -8774,35 +8770,32 @@ SP_NOINLINE static sp_digit div_3072_word_48(sp_digit d1, sp_digit d0,
*/ */
SP_NOINLINE static int32_t sp_3072_cmp_48(sp_digit* a, sp_digit* b) SP_NOINLINE static int32_t sp_3072_cmp_48(sp_digit* a, sp_digit* b)
{ {
sp_digit r = -1; sp_digit r = 0;
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov r3, %[r]\n\t" "mov r3, #0\n\t"
"mvn r3, r3\n\t"
"mov r6, #188\n\t" "mov r6, #188\n\t"
"1:\n\t" "1:\n\t"
"ldr r4, [%[a], r6]\n\t" "ldr r7, [%[a], r6]\n\t"
"ldr r5, [%[b], r6]\n\t" "ldr r5, [%[b], r6]\n\t"
"and r4, r3\n\t" "and r7, r3\n\t"
"and r5, r3\n\t" "and r5, r3\n\t"
"subs r4, r5\n\t" "mov r4, r7\n\t"
"sbc r5, r5\n\t" "subs r7, r5\n\t"
"mov r7, r3\n\t" "sbc r7, r7\n\t"
"and r7, r5\n\t" "add %[r], r7\n\t"
"bic %[r], r5\n\t" "mvn r7, r7\n\t"
"orr %[r], r7\n\t" "and r3, r7\n\t"
"subs r4, #1\n\t" "subs r5, r4\n\t"
"sbc r4, r4\n\t" "sbc r7, r7\n\t"
"orr r5, r4\n\t" "sub %[r], r7\n\t"
"mvn r5, r5\n\t" "mvn r7, r7\n\t"
"mov r7, #1\n\t" "and r3, r7\n\t"
"and r7, r5\n\t" "sub r6, #4\n\t"
"bic %[r], r5\n\t" "cmp r6, #0\n\t"
"orr %[r], r7\n\t" "bge 1b\n\t"
"and r3, r4\n\t"
"subs r6, #4\n\t"
"bcc 1b\n\t"
"eor %[r], r3\n\t"
: [r] "+r" (r) : [r] "+r" (r)
: [a] "r" (a), [b] "r" (b) : [a] "r" (a), [b] "r" (b)
: "r3", "r4", "r5", "r6", "r7" : "r3", "r4", "r5", "r6", "r7"
@ -9407,37 +9400,34 @@ static void sp_3072_mask_96(sp_digit* r, sp_digit* a, sp_digit m)
*/ */
SP_NOINLINE static int32_t sp_3072_cmp_96(sp_digit* a, sp_digit* b) SP_NOINLINE static int32_t sp_3072_cmp_96(sp_digit* a, sp_digit* b)
{ {
sp_digit r = -1; sp_digit r = 0;
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov r3, %[r]\n\t" "mov r3, #0\n\t"
"mvn r3, r3\n\t"
"mov r6, #1\n\t" "mov r6, #1\n\t"
"lsl r6, r6, #8\n\t" "lsl r6, r6, #8\n\t"
"add r6, #124\n\t" "add r6, #124\n\t"
"1:\n\t" "1:\n\t"
"ldr r4, [%[a], r6]\n\t" "ldr r7, [%[a], r6]\n\t"
"ldr r5, [%[b], r6]\n\t" "ldr r5, [%[b], r6]\n\t"
"and r4, r3\n\t" "and r7, r3\n\t"
"and r5, r3\n\t" "and r5, r3\n\t"
"subs r4, r5\n\t" "mov r4, r7\n\t"
"sbc r5, r5\n\t" "subs r7, r5\n\t"
"mov r7, r3\n\t" "sbc r7, r7\n\t"
"and r7, r5\n\t" "add %[r], r7\n\t"
"bic %[r], r5\n\t" "mvn r7, r7\n\t"
"orr %[r], r7\n\t" "and r3, r7\n\t"
"subs r4, #1\n\t" "subs r5, r4\n\t"
"sbc r4, r4\n\t" "sbc r7, r7\n\t"
"orr r5, r4\n\t" "sub %[r], r7\n\t"
"mvn r5, r5\n\t" "mvn r7, r7\n\t"
"mov r7, #1\n\t" "and r3, r7\n\t"
"and r7, r5\n\t" "sub r6, #4\n\t"
"bic %[r], r5\n\t" "cmp r6, #0\n\t"
"orr %[r], r7\n\t" "bge 1b\n\t"
"and r3, r4\n\t"
"subs r6, #4\n\t"
"bcc 1b\n\t"
"eor %[r], r3\n\t"
: [r] "+r" (r) : [r] "+r" (r)
: [a] "r" (a), [b] "r" (b) : [a] "r" (a), [b] "r" (b)
: "r3", "r4", "r5", "r6", "r7" : "r3", "r4", "r5", "r6", "r7"
@ -9547,7 +9537,8 @@ static WC_INLINE int sp_3072_mod_96_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_96_cond(a, m, NULL, r); return sp_3072_div_96_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef WOLFSSL_SP_SMALL #ifdef WOLFSSL_SP_SMALL
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -9820,7 +9811,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* WOLFSSL_SP_SMALL */ #endif /* WOLFSSL_SP_SMALL */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -10074,7 +10065,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -10260,7 +10252,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */
@ -10613,35 +10605,32 @@ static int sp_256_point_to_ecc_point_8(sp_point* p, ecc_point* pm)
*/ */
SP_NOINLINE static int32_t sp_256_cmp_8(sp_digit* a, sp_digit* b) SP_NOINLINE static int32_t sp_256_cmp_8(sp_digit* a, sp_digit* b)
{ {
sp_digit r = -1; sp_digit r = 0;
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov r3, %[r]\n\t" "mov r3, #0\n\t"
"mvn r3, r3\n\t"
"mov r6, #28\n\t" "mov r6, #28\n\t"
"1:\n\t" "1:\n\t"
"ldr r4, [%[a], r6]\n\t" "ldr r7, [%[a], r6]\n\t"
"ldr r5, [%[b], r6]\n\t" "ldr r5, [%[b], r6]\n\t"
"and r4, r3\n\t" "and r7, r3\n\t"
"and r5, r3\n\t" "and r5, r3\n\t"
"subs r4, r5\n\t" "mov r4, r7\n\t"
"sbc r5, r5\n\t" "subs r7, r5\n\t"
"mov r7, r3\n\t" "sbc r7, r7\n\t"
"and r7, r5\n\t" "add %[r], r7\n\t"
"bic %[r], r5\n\t" "mvn r7, r7\n\t"
"orr %[r], r7\n\t" "and r3, r7\n\t"
"subs r4, #1\n\t" "subs r5, r4\n\t"
"sbc r4, r4\n\t" "sbc r7, r7\n\t"
"orr r5, r4\n\t" "sub %[r], r7\n\t"
"mvn r5, r5\n\t" "mvn r7, r7\n\t"
"mov r7, #1\n\t" "and r3, r7\n\t"
"and r7, r5\n\t" "sub r6, #4\n\t"
"bic %[r], r5\n\t" "cmp r6, #0\n\t"
"orr %[r], r7\n\t" "bge 1b\n\t"
"and r3, r4\n\t"
"subs r6, #4\n\t"
"bcc 1b\n\t"
"eor %[r], r3\n\t"
: [r] "+r" (r) : [r] "+r" (r)
: [a] "r" (a), [b] "r" (b) : [a] "r" (a), [b] "r" (b)
: "r3", "r4", "r5", "r6", "r7" : "r3", "r4", "r5", "r6", "r7"

View File

@ -1037,7 +1037,8 @@ static WC_INLINE int sp_2048_mod_32_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_2048_div_32_cond(a, m, NULL, r); return sp_2048_div_32_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -1181,7 +1182,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
extern void sp_2048_mont_reduce_avx2_32(sp_digit* a, sp_digit* m, sp_digit mp); extern void sp_2048_mont_reduce_avx2_32(sp_digit* a, sp_digit* m, sp_digit mp);
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
@ -1218,7 +1219,8 @@ static void sp_2048_mont_sqr_avx2_32(sp_digit* r, sp_digit* a, sp_digit* m,
} }
#endif /* HAVE_INTEL_AVX2 */ #endif /* HAVE_INTEL_AVX2 */
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -1364,7 +1366,7 @@ static int sp_2048_mod_exp_avx2_32(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* HAVE_INTEL_AVX2 */ #endif /* HAVE_INTEL_AVX2 */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -1673,7 +1675,8 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -1879,7 +1882,7 @@ int sp_ModExp_1024(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_2048 */ #endif /* WOLFSSL_SP_NO_2048 */
@ -2870,7 +2873,8 @@ static WC_INLINE int sp_3072_mod_48_cond(sp_digit* r, sp_digit* a, sp_digit* m)
return sp_3072_div_48_cond(a, m, NULL, r); return sp_3072_div_48_cond(a, m, NULL, r);
} }
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
* r A single precision number that is the result of the operation. * r A single precision number that is the result of the operation.
@ -3014,7 +3018,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
extern void sp_3072_mont_reduce_avx2_48(sp_digit* a, sp_digit* m, sp_digit mp); extern void sp_3072_mont_reduce_avx2_48(sp_digit* a, sp_digit* m, sp_digit mp);
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
@ -3051,7 +3055,8 @@ static void sp_3072_mont_sqr_avx2_48(sp_digit* r, sp_digit* a, sp_digit* m,
} }
#endif /* HAVE_INTEL_AVX2 */ #endif /* HAVE_INTEL_AVX2 */
#if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(SP_RSA_PRIVATE_EXP_D) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
#ifdef HAVE_INTEL_AVX2 #ifdef HAVE_INTEL_AVX2
/* Modular exponentiate a to the e mod m. (r = a^e mod m) /* Modular exponentiate a to the e mod m. (r = a^e mod m)
* *
@ -3197,7 +3202,7 @@ static int sp_3072_mod_exp_avx2_48(sp_digit* r, sp_digit* a, sp_digit* e,
return err; return err;
} }
#endif /* HAVE_INTEL_AVX2 */ #endif /* HAVE_INTEL_AVX2 */
#endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */ #endif /* (SP_RSA_PRIVATE_EXP_D && !WOLFSSL_RSA_PUBLIC_ONLY) || WOLFSSL_HAVE_SP_DH */
#ifdef WOLFSSL_HAVE_SP_RSA #ifdef WOLFSSL_HAVE_SP_RSA
/* RSA public key operation. /* RSA public key operation.
@ -3506,7 +3511,8 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#if defined(WOLFSSL_HAVE_SP_DH) || defined(WOLFSSL_HAVE_SP_RSA) #if defined(WOLFSSL_HAVE_SP_DH) || (defined(WOLFSSL_HAVE_SP_RSA) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY))
/* Convert an array of sp_digit to an mp_int. /* Convert an array of sp_digit to an mp_int.
* *
* a A single precision integer. * a A single precision integer.
@ -3712,7 +3718,7 @@ int sp_ModExp_1536(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
return err; return err;
} }
#endif /* WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_DH || (WOLFSSL_HAVE_SP_RSA && !WOLFSSL_RSA_PUBLIC_ONLY) */
#endif /* WOLFSSL_SP_NO_3072 */ #endif /* WOLFSSL_SP_NO_3072 */

View File

@ -3537,7 +3537,8 @@ static int fp_prime_miller_rabin_ex(fp_int * a, fp_int * b, int *result,
/* compute y = b**r mod a */ /* compute y = b**r mod a */
fp_zero(y); fp_zero(y);
#if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) #if (defined(WOLFSSL_HAVE_SP_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)) || \
defined(WOLFSSL_HAVE_SP_DH)
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)
@ -4067,7 +4068,7 @@ int mp_add_d(fp_int *a, fp_digit b, fp_int *c)
#if !defined(NO_DSA) || defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN) || \ #if !defined(NO_DSA) || defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN) || \
defined(HAVE_COMP_KEY) || defined(WOLFSSL_DEBUG_MATH) || \ defined(HAVE_COMP_KEY) || defined(WOLFSSL_DEBUG_MATH) || \
defined(DEBUG_WOLFSSL) || defined(OPENSSL_EXTRA) defined(DEBUG_WOLFSSL) || defined(OPENSSL_EXTRA) || defined(WC_MP_TO_RADIX)
/* chars used in radix conversions */ /* chars used in radix conversions */
static const char* const fp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" static const char* const fp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

View File

@ -1023,7 +1023,7 @@ initDefaultName();
printf( "mp test passed!\n"); printf( "mp test passed!\n");
#endif #endif
#ifdef WOLFSSL_PUBLIC_MP #if defined(WOLFSSL_PUBLIC_MP) && !defined(WOLFSSL_SP_MATH)
if ( (ret = prime_test()) != 0) if ( (ret = prime_test()) != 0)
return err_sys("prime test failed!\n", ret); return err_sys("prime test failed!\n", ret);
else else
@ -10283,6 +10283,7 @@ int rsa_no_pad_test(void)
ERROR_OUT(-6905, exit_rsa_nopadding); ERROR_OUT(-6905, exit_rsa_nopadding);
} }
#ifndef WOLFSSL_RSA_VERIFY_ONLY
inLen = wc_RsaEncryptSize(&key); inLen = wc_RsaEncryptSize(&key);
XMEMSET(tmp, 7, inLen); XMEMSET(tmp, 7, inLen);
do { do {
@ -10320,6 +10321,7 @@ int rsa_no_pad_test(void)
if (XMEMCMP(plain, tmp, inLen) != 0) { if (XMEMCMP(plain, tmp, inLen) != 0) {
ERROR_OUT(-6909, exit_rsa_nopadding); ERROR_OUT(-6909, exit_rsa_nopadding);
} }
#endif
#ifdef WC_RSA_BLINDING #ifdef WC_RSA_BLINDING
ret = wc_RsaSetRNG(NULL, &rng); ret = wc_RsaSetRNG(NULL, &rng);
@ -11012,6 +11014,9 @@ int rsa_test(void)
word32 inLen = (word32)XSTRLEN((char*)inStr); word32 inLen = (word32)XSTRLEN((char*)inStr);
const word32 outSz = RSA_TEST_BYTES; const word32 outSz = RSA_TEST_BYTES;
const word32 plainSz = RSA_TEST_BYTES; const word32 plainSz = RSA_TEST_BYTES;
#ifndef NO_SIG_WRAPPER
int modLen;
#endif
#if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048) \ #if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048) \
&& !defined(NO_FILESYSTEM) && !defined(NO_FILESYSTEM)
XFILE file; XFILE file;
@ -11095,6 +11100,9 @@ int rsa_test(void)
if (ret != 0) { if (ret != 0) {
ERROR_OUT(-7004, exit_rsa); ERROR_OUT(-7004, exit_rsa);
} }
#ifndef NO_SIG_WRAPPER
modLen = wc_RsaEncryptSize(&key);
#endif
#elif defined(WOLFSSL_RSA_PUBLIC_ONLY) #elif defined(WOLFSSL_RSA_PUBLIC_ONLY)
#ifdef USE_CERT_BUFFERS_2048 #ifdef USE_CERT_BUFFERS_2048
ret = mp_read_unsigned_bin(&key.n, &tmp[12], 256); ret = mp_read_unsigned_bin(&key.n, &tmp[12], 256);
@ -11105,6 +11113,9 @@ int rsa_test(void)
if (ret != 0) { if (ret != 0) {
ERROR_OUT(-7004, exit_rsa); ERROR_OUT(-7004, exit_rsa);
} }
#ifndef NO_SIG_WRAPPER
modLen = 2048;
#endif
#else #else
#error Not supported yet! #error Not supported yet!
#endif #endif
@ -11122,7 +11133,7 @@ int rsa_test(void)
#endif #endif
#ifndef NO_SIG_WRAPPER #ifndef NO_SIG_WRAPPER
ret = rsa_sig_test(&key, sizeof(RsaKey), wc_RsaEncryptSize(&key), &rng); ret = rsa_sig_test(&key, sizeof(RsaKey), modLen, &rng);
if (ret != 0) if (ret != 0)
goto exit_rsa; goto exit_rsa;
#endif #endif
@ -11272,6 +11283,7 @@ int rsa_test(void)
ERROR_OUT(-7015, exit_rsa); ERROR_OUT(-7015, exit_rsa);
} }
#ifndef WOLFSSL_RSA_VERIFY_ONLY
#ifndef WC_NO_RSA_OAEP #ifndef WC_NO_RSA_OAEP
/* OAEP padding testing */ /* OAEP padding testing */
#if !defined(HAVE_FAST_RSA) && !defined(HAVE_USER_RSA) && \ #if !defined(HAVE_FAST_RSA) && !defined(HAVE_USER_RSA) && \
@ -11280,7 +11292,6 @@ int rsa_test(void)
#ifndef NO_SHA #ifndef NO_SHA
XMEMSET(plain, 0, plainSz); XMEMSET(plain, 0, plainSz);
#ifndef WOLFSSL_RSA_VERIFY_ONLY
do { do {
#if defined(WOLFSSL_ASYNC_CRYPT) #if defined(WOLFSSL_ASYNC_CRYPT)
ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN); ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN);
@ -11446,6 +11457,7 @@ int rsa_test(void)
} }
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
#ifndef WOLFSSL_RSA_VERIFY_ONLY
#ifndef NO_SHA #ifndef NO_SHA
/* check fail using mismatch hash algorithms */ /* check fail using mismatch hash algorithms */
XMEMSET(plain, 0, plainSz); XMEMSET(plain, 0, plainSz);
@ -11462,7 +11474,6 @@ int rsa_test(void)
if (ret < 0) { if (ret < 0) {
ERROR_OUT(-7030, exit_rsa); ERROR_OUT(-7030, exit_rsa);
} }
#endif /* WOLFSSL_RSA_VERIFY_ONLY */
/* TODO: investigate why Cavium Nitrox doesn't detect decrypt error here */ /* TODO: investigate why Cavium Nitrox doesn't detect decrypt error here */
#if !defined(HAVE_CAVIUM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) #if !defined(HAVE_CAVIUM) && !defined(WOLFSSL_RSA_PUBLIC_ONLY)
@ -11492,7 +11503,6 @@ int rsa_test(void)
BAD_FUNC_ARG is returned when this case is not met */ BAD_FUNC_ARG is returned when this case is not met */
if (wc_RsaEncryptSize(&key) > ((int)WC_SHA512_DIGEST_SIZE * 2) + 2) { if (wc_RsaEncryptSize(&key) > ((int)WC_SHA512_DIGEST_SIZE * 2) + 2) {
XMEMSET(plain, 0, plainSz); XMEMSET(plain, 0, plainSz);
#ifndef WOLFSSL_RSA_VERIFY_ONLY
do { do {
#if defined(WOLFSSL_ASYNC_CRYPT) #if defined(WOLFSSL_ASYNC_CRYPT)
ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN); ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN);
@ -11505,7 +11515,6 @@ int rsa_test(void)
if (ret < 0) { if (ret < 0) {
ERROR_OUT(-7032, exit_rsa); ERROR_OUT(-7032, exit_rsa);
} }
#endif /* WOLFSSL_RSA_VERIFY_ONLY */
idx = ret; idx = ret;
#ifndef WOLFSSL_RSA_PUBLIC_ONLY #ifndef WOLFSSL_RSA_PUBLIC_ONLY
@ -11531,7 +11540,6 @@ int rsa_test(void)
/* check using pkcsv15 padding with _ex API */ /* check using pkcsv15 padding with _ex API */
XMEMSET(plain, 0, plainSz); XMEMSET(plain, 0, plainSz);
#ifndef WOLFSSL_RSA_VERIFY_ONLY
do { do {
#if defined(WOLFSSL_ASYNC_CRYPT) #if defined(WOLFSSL_ASYNC_CRYPT)
ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN); ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_CALL_AGAIN);
@ -11544,7 +11552,6 @@ int rsa_test(void)
if (ret < 0) { if (ret < 0) {
ERROR_OUT(-7035, exit_rsa); ERROR_OUT(-7035, exit_rsa);
} }
#endif /* WOLFSSL_RSA_VERIFY_ONLY */
idx = (word32)ret; idx = (word32)ret;
#ifndef WOLFSSL_RSA_PUBLIC_ONLY #ifndef WOLFSSL_RSA_PUBLIC_ONLY
@ -11567,6 +11574,8 @@ int rsa_test(void)
#endif /* WOLFSSL_RSA_PUBLIC_ONLY */ #endif /* WOLFSSL_RSA_PUBLIC_ONLY */
#endif /* !HAVE_FAST_RSA && !HAVE_FIPS */ #endif /* !HAVE_FAST_RSA && !HAVE_FIPS */
#endif /* WC_NO_RSA_OAEP */ #endif /* WC_NO_RSA_OAEP */
#endif
#endif /* WOLFSSL_RSA_VERIFY_ONLY */
#if !defined(HAVE_FIPS) && !defined(HAVE_USER_RSA) && !defined(NO_ASN) \ #if !defined(HAVE_FIPS) && !defined(HAVE_USER_RSA) && !defined(NO_ASN) \
&& !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(WOLFSSL_RSA_VERIFY_ONLY)
@ -22598,7 +22607,7 @@ done:
#endif #endif
#ifdef WOLFSSL_PUBLIC_MP #if defined(WOLFSSL_PUBLIC_MP) && !defined(WOLFSSL_SP_MATH)
typedef struct pairs_t { typedef struct pairs_t {
const unsigned char* coeff; const unsigned char* coeff;