Implement all relevant mp functions in sp_int

This commit is contained in:
Sean Parkinson
2020-01-06 15:23:45 +10:00
parent aa9ed17afa
commit 91d23d3f5a
23 changed files with 18363 additions and 3888 deletions
+108 -9
View File
@@ -4693,16 +4693,17 @@ ENABLED_SP_EC_256=no
ENABLED_SP_EC_384=no ENABLED_SP_EC_384=no
ENABLED_SP_NO_MALLOC=no ENABLED_SP_NO_MALLOC=no
ENABLED_SP_NONBLOCK=no ENABLED_SP_NONBLOCK=no
ENABLED_SP_SMALL=no
for v in `echo $ENABLED_SP | tr "," " "` for v in `echo $ENABLED_SP | tr "," " "`
do do
case $v in case $v in
small) small)
ENABLED_SP_SMALL=yes
ENABLED_SP_RSA=yes ENABLED_SP_RSA=yes
ENABLED_SP_DH=yes ENABLED_SP_DH=yes
ENABLED_SP_FF_2048=yes ENABLED_SP_FF_2048=yes
ENABLED_SP_FF_3072=yes ENABLED_SP_FF_3072=yes
ENABLED_SP_ECC=yes ENABLED_SP_ECC=yes
ENABLED_SP_SMALL=yes
ENABLED_SP_EC_256=yes ENABLED_SP_EC_256=yes
if test "$host_cpu" = "x86_64"; then if test "$host_cpu" = "x86_64"; then
ENABLED_SP_FF_4096=yes ENABLED_SP_FF_4096=yes
@@ -4727,8 +4728,8 @@ do
;; ;;
smallec256 | smallp256 | small256) smallec256 | smallp256 | small256)
ENABLED_SP_ECC=yes
ENABLED_SP_SMALL=yes ENABLED_SP_SMALL=yes
ENABLED_SP_ECC=yes
ENABLED_SP_EC_256=yes ENABLED_SP_EC_256=yes
;; ;;
ec256 | p256 | 256) ec256 | p256 | 256)
@@ -4736,8 +4737,8 @@ do
ENABLED_SP_EC_256=yes ENABLED_SP_EC_256=yes
;; ;;
smallec384 | smallp384 | small384) smallec384 | smallp384 | small384)
ENABLED_SP_ECC=yes
ENABLED_SP_SMALL=yes ENABLED_SP_SMALL=yes
ENABLED_SP_ECC=yes
ENABLED_SP_EC_384=yes ENABLED_SP_EC_384=yes
;; ;;
ec384 | p384 | 384) ec384 | p384 | 384)
@@ -4875,6 +4876,10 @@ if test "$ENABLED_SP_NONBLOCK" = "yes"; then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_NONBLOCK" AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_NONBLOCK"
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_NONBLOCK" AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_NONBLOCK"
fi fi
if test "$ENABLED_SMALL" = "yes"; then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_SMALL"
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_SMALL"
fi
AC_ARG_ENABLE([sp-asm], AC_ARG_ENABLE([sp-asm],
@@ -4960,11 +4965,97 @@ if test "$ENABLED_SP_MATH" = "yes"; then
ENABLED_FASTMATH="no" ENABLED_FASTMATH="no"
ENABLED_SLOWMATH="no" ENABLED_SLOWMATH="no"
fi fi
AC_ARG_ENABLE([sp-math-all],
[AS_HELP_STRING([--enable-sp-math],[Enable Single Precision math implementation only (default: disabled)])],
[ ENABLED_SP_MATH_ALL=$enableval ],
[ ENABLED_SP_MATH_ALL=no ],
)
for v in `echo $ENABLED_SP_MATH_ALL | tr "," " "`
do
case $v in
yes | no)
;;
small)
ENABLED_SP_MATH_ALL="yes"
ENABLED_SP_SMALL="yes"
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_SMALL"
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_SMALL"
;;
huge)
ENABLED_SP_MATH_ALL="yes"
ENABLED_FASTHUGEMATH="yes"
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_HUGE_CFLAGS"
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_INT_LARGE_COMBA"
;;
256 | 384 | 521 | 1024 | 2048 | 3072 | 4096)
AM_CFLAGS="$AM_CFLAGS -DSP_INT_BITS=$v"
ENABLED_SP_MATH_ALL="yes"
;;
*)
AC_MSG_ERROR([Support SP int bit sizes: 256, 384, 521, 1024, 2048, 3072, 4096. $ENABLED_SP_MATH_ALL not supported])
;;
esac
done
if test "$ENABLED_SP_MATH_ALL" = "yes"; then
ENABLED_FASTMATH="no"
ENABLED_SLOWMATH="no"
ENABLED_SP="yes"
#ENABLED_SP_MATH="yes"
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MATH_ALL"
case $host_cpu in
*x86_64*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_X86_64"
;;
*x86*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_X86"
;;
*aarch64*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM64"
;;
*arm*)
if test $host_alias = "thumb"; then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_THUMB -mthumb -march=armv6"
else
if test $host_alias = "cortex"; then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M -mcpu=cortex-m4"
else
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM32"
fi
fi
;;
*ppc64* | *powerpc64*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_PPC64"
;;
*ppc* | *powerpc*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_PPC"
;;
*mips64*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MIPS64"
;;
*mips*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MIPS"
;;
*riscv32*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_RISCV32"
;;
*riscv64*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_RISCV64"
;;
*s390x*)
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_S390X"
;;
esac
fi
if test "$ENABLED_SP_MATH" = "yes"; then if test "$ENABLED_SP_MATH" = "yes"; then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MATH" AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MATH"
fi fi
# Fast RSA using Intel IPP # Fast RSA using Intel IPP
ippdir="${srcdir}/IPP" ippdir="${srcdir}/IPP"
ipplib="lib" # if autoconf guesses 32bit system changes lib directory ipplib="lib" # if autoconf guesses 32bit system changes lib directory
@@ -5487,9 +5578,6 @@ then
fi fi
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_HAVE_WOLFSCEP" AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_HAVE_WOLFSCEP"
fi fi
#if test "$ENABLED_SP_MATH" = "yes" && test "$ENABLED_KEYGEN" = "yes"; then
# AC_MSG_ERROR([Cannot use single precision math and key generation])
#fi
if test "x$ENABLED_PKCS7" = "xyes" if test "x$ENABLED_PKCS7" = "xyes"
then then
@@ -5597,7 +5685,17 @@ then
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_HUGE_CFLAGS" AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_HUGE_CFLAGS"
fi fi
else else
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_CFLAGS" if test "$ENABLED_SP" = "yes" && test "$ENABLED_SP_SMALL" = "no"
then
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_FAST_CFLAGS"
if test "$ENABLED_FASTHUGEMATH" = "yes"
then
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_HUGE_CFLAGS"
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_INT_LARGE_COMBA"
fi
else
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_CFLAGS"
fi
fi fi
]) ])
fi fi
@@ -5813,7 +5911,7 @@ AM_CONDITIONAL([BUILD_SP_ARM32],[test "x$ENABLED_SP_ARM32_ASM" = "xyes" || test
AM_CONDITIONAL([BUILD_SP_ARM_THUMB],[test "x$ENABLED_SP_ARM_THUMB_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_SP_ARM_THUMB],[test "x$ENABLED_SP_ARM_THUMB_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
AM_CONDITIONAL([BUILD_SP_ARM_CORTEX],[test "x$ENABLED_SP_ARM_CORTEX_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_SP_ARM_CORTEX],[test "x$ENABLED_SP_ARM_CORTEX_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
AM_CONDITIONAL([BUILD_SP_X86_64],[test "x$ENABLED_SP_X86_64_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_SP_X86_64],[test "x$ENABLED_SP_X86_64_ASM" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
AM_CONDITIONAL([BUILD_SP_INT],[test "x$ENABLED_SP_MATH" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"]) AM_CONDITIONAL([BUILD_SP_INT],[test "x$ENABLED_SP_MATH" = "xyes" || test "x$ENABLED_SP_MATH_ALL" = "xyes" || test "x$ENABLED_USERSETTINGS" = "xyes"])
AM_CONDITIONAL([BUILD_FAST_RSA],[test "x$ENABLED_FAST_RSA" = "xyes"]) AM_CONDITIONAL([BUILD_FAST_RSA],[test "x$ENABLED_FAST_RSA" = "xyes"])
AM_CONDITIONAL([BUILD_MCAPI],[test "x$ENABLED_MCAPI" = "xyes"]) AM_CONDITIONAL([BUILD_MCAPI],[test "x$ENABLED_MCAPI" = "xyes"])
AM_CONDITIONAL([BUILD_ASYNCCRYPT],[test "x$ENABLED_ASYNCCRYPT" = "xyes"]) AM_CONDITIONAL([BUILD_ASYNCCRYPT],[test "x$ENABLED_ASYNCCRYPT" = "xyes"])
@@ -6126,6 +6224,7 @@ echo " * Stack sizes in tests: $ENABLED_STACKSIZE"
echo " * User Crypto: $ENABLED_USER_CRYPTO" echo " * User Crypto: $ENABLED_USER_CRYPTO"
echo " * Fast RSA: $ENABLED_FAST_RSA" echo " * Fast RSA: $ENABLED_FAST_RSA"
echo " * Single Precision: $ENABLED_SP" echo " * Single Precision: $ENABLED_SP"
echo " * SP math implementation: $ENABLED_SP_MATH_ALL"
echo " * Async Crypto: $ENABLED_ASYNCCRYPT" echo " * Async Crypto: $ENABLED_ASYNCCRYPT"
echo " * PKCS#11: $ENABLED_PKCS11" echo " * PKCS#11: $ENABLED_PKCS11"
echo " * PKCS#12: $ENABLED_PKCS12" echo " * PKCS#12: $ENABLED_PKCS12"
+4
View File
@@ -1308,7 +1308,11 @@ static void Usage(void)
printf("%s", msg[++msgid]); printf("%s", msg[++msgid]);
#endif #endif
#elif defined(USE_FAST_MATH) #elif defined(USE_FAST_MATH)
#if !defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_SP_MATH)
printf("%d\n", FP_MAX_BITS/2); printf("%d\n", FP_MAX_BITS/2);
#else
printf("%d\n", SP_INT_MAX_BITS/2);
#endif
#else #else
/* normal math has unlimited max size */ /* normal math has unlimited max size */
printf("%s", msg[++msgid]); printf("%s", msg[++msgid]);
-2
View File
@@ -46101,7 +46101,6 @@ int wolfSSL_BN_mod_mul(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
return SSL_FAILURE; return SSL_FAILURE;
} }
#ifdef OPENSSL_EXTRA
const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void) const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void)
{ {
WOLFSSL_MSG("wolfSSL_BN_value_one"); WOLFSSL_MSG("wolfSSL_BN_value_one");
@@ -46119,7 +46118,6 @@ const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void)
return bn_one; return bn_one;
} }
#endif
/* return compliant with OpenSSL /* return compliant with OpenSSL
* size of BIGNUM in bytes, 0 if error */ * size of BIGNUM in bytes, 0 if error */
+3
View File
@@ -2853,6 +2853,9 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
if (ssl->toInfoOn) AddLateName("ServerHello", &ssl->timeoutInfo); if (ssl->toInfoOn) AddLateName("ServerHello", &ssl->timeoutInfo);
#endif #endif
if (ssl == NULL || ssl->arrays == NULL)
return BAD_FUNC_ARG;
/* Protocol version length check. */ /* Protocol version length check. */
if (OPAQUE16_LEN > helloSz) if (OPAQUE16_LEN > helloSz)
return BUFFER_ERROR; return BUFFER_ERROR;
+11 -8
View File
@@ -14237,7 +14237,7 @@ static int test_wc_MakeRsaKey (void)
RsaKey genKey; RsaKey genKey;
WC_RNG rng; WC_RNG rng;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
#else #else
int bits = 2048; int bits = 2048;
@@ -14898,7 +14898,7 @@ static int test_wc_RsaKeyToDer (void)
RsaKey genKey; RsaKey genKey;
WC_RNG rng; WC_RNG rng;
byte* der; byte* der;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
word32 derSz = 611; word32 derSz = 611;
/* (2 x 128) + 2 (possible leading 00) + (5 x 64) + 5 (possible leading 00) /* (2 x 128) + 2 (possible leading 00) + (5 x 64) + 5 (possible leading 00)
@@ -15008,7 +15008,7 @@ static int test_wc_RsaKeyToPublicDer (void)
RsaKey key; RsaKey key;
WC_RNG rng; WC_RNG rng;
byte* der; byte* der;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
word32 derLen = 162; word32 derLen = 162;
#else #else
@@ -15107,7 +15107,7 @@ static int test_wc_RsaPublicEncryptDecrypt (void)
const char* inStr = "Everyone gets Friday off."; const char* inStr = "Everyone gets Friday off.";
word32 plainLen = 25; word32 plainLen = 25;
word32 inLen = (word32)XSTRLEN(inStr); word32 inLen = (word32)XSTRLEN(inStr);
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
word32 cipherLen = 128; word32 cipherLen = 128;
#else #else
@@ -15197,7 +15197,7 @@ static int test_wc_RsaPublicEncryptDecrypt_ex (void)
const word32 plainSz = 25; const word32 plainSz = 25;
byte* res = NULL; byte* res = NULL;
int idx = 0; int idx = 0;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
const word32 cipherSz = 128; const word32 cipherSz = 128;
#else #else
@@ -15314,7 +15314,7 @@ static int test_wc_RsaSSL_SignVerify (void)
const word32 plainSz = 25; const word32 plainSz = 25;
word32 inLen = (word32)XSTRLEN(inStr); word32 inLen = (word32)XSTRLEN(inStr);
word32 idx = 0; word32 idx = 0;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
const word32 outSz = 128; const word32 outSz = 128;
#else #else
@@ -15476,7 +15476,7 @@ static int test_wc_RsaEncryptSize (void)
} }
printf(testingFmt, "wc_RsaEncryptSize()"); printf(testingFmt, "wc_RsaEncryptSize()");
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
if (ret == 0) { if (ret == 0) {
ret = MAKE_RSA_KEY(&key, 1024, WC_RSA_EXPONENT, &rng); ret = MAKE_RSA_KEY(&key, 1024, WC_RSA_EXPONENT, &rng);
if (ret == 0) { if (ret == 0) {
@@ -15546,7 +15546,7 @@ static int test_wc_RsaFlattenPublicKey (void)
byte n[256]; byte n[256];
word32 eSz = sizeof(e); word32 eSz = sizeof(e);
word32 nSz = sizeof(n); word32 nSz = sizeof(n);
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
int bits = 1024; int bits = 1024;
#else #else
int bits = 2048; int bits = 2048;
@@ -27928,6 +27928,8 @@ static void test_wolfSSL_BN(void)
AssertIntEQ((int)(value[0] & 0x03), 3); AssertIntEQ((int)(value[0] & 0x03), 3);
BN_free(val); BN_free(val);
#if !defined(WOLFSSL_SP_MATH) && (!defined(WOLFSSL_SP_MATH_ALL) || \
defined(WOLFSSL_SP_INT_NEGATIVE))
AssertIntEQ(BN_set_word(a, 1), SSL_SUCCESS); AssertIntEQ(BN_set_word(a, 1), SSL_SUCCESS);
AssertIntEQ(BN_set_word(b, 5), SSL_SUCCESS); AssertIntEQ(BN_set_word(b, 5), SSL_SUCCESS);
AssertIntEQ(BN_is_word(a, (WOLFSSL_BN_ULONG)BN_get_word(a)), SSL_SUCCESS); AssertIntEQ(BN_is_word(a, (WOLFSSL_BN_ULONG)BN_get_word(a)), SSL_SUCCESS);
@@ -27942,6 +27944,7 @@ static void test_wolfSSL_BN(void)
} }
#endif #endif
AssertIntEQ(BN_get_word(c), 4); AssertIntEQ(BN_get_word(c), 4);
#endif
BN_free(a); BN_free(a);
BN_free(b); BN_free(b);
+27 -23
View File
@@ -587,8 +587,8 @@ static const char* bench_result_words1[][4] = {
defined(HAVE_CURVE25519) || defined(HAVE_CURVE25519_SHARED_SECRET) || \ defined(HAVE_CURVE25519) || defined(HAVE_CURVE25519_SHARED_SECRET) || \
defined(HAVE_ED25519) || defined(HAVE_CURVE448) || \ defined(HAVE_ED25519) || defined(HAVE_CURVE448) || \
defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448) defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448)
#if defined(HAVE_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY) || \ #if defined(HAVE_ECC) || defined(WOLFSSL_PUBLIC_MP) || !defined(NO_DH) || \
defined(WOLFSSL_PUBLIC_MP) || !defined(NO_DH) (!defined(NO_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY))
static const char* bench_desc_words[][9] = { static const char* bench_desc_words[][9] = {
/* 0 1 2 3 4 5 6 7 8 */ /* 0 1 2 3 4 5 6 7 8 */
@@ -927,6 +927,27 @@ static int rsa_sign_verify = 0;
static int use_ffdhe = 0; static int use_ffdhe = 0;
#endif #endif
#ifdef HAVE_ECC
/* Detect ECC key size to use */
#ifndef BENCH_ECC_SIZE
#ifndef NO_ECC256
#define BENCH_ECC_SIZE 32
#elif defined(HAVE_ECC384)
#define BENCH_ECC_SIZE 48
#elif defined(HAVE_ECC224)
#define BENCH_ECC_SIZE 28
#elif defined(HAVE_ECC521)
#define BENCH_ECC_SIZE 66
#else
#error No ECC keygen size defined for benchmark
#endif
#endif
#define BENCH_MAX_ECC_SIZE BENCH_ECC_SIZE
static int bench_ecc_size = BENCH_ECC_SIZE;
#endif
/* Don't print out in CSV format by default */ /* Don't print out in CSV format by default */
static int csv_format = 0; static int csv_format = 0;
#ifdef BENCH_ASYM #ifdef BENCH_ASYM
@@ -4344,7 +4365,7 @@ exit:
void bench_rsaKeyGen(int doAsync) void bench_rsaKeyGen(int doAsync)
{ {
int k, keySz; int k, keySz;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
const int keySizes[2] = {1024, 2048}; const int keySizes[2] = {1024, 2048};
#else #else
const int keySizes[1] = {2048}; const int keySizes[1] = {2048};
@@ -4713,7 +4734,7 @@ void bench_rsa(int doAsync)
for (i = 0; i < BENCH_MAX_PENDING; i++) { for (i = 0; i < BENCH_MAX_PENDING; i++) {
/* setup an async context for each key */ /* setup an async context for each key */
if (wc_InitRsaKey_ex(&rsaKey[i], HEAP_HINT, if (wc_InitRsaKey_ex(&rsaKey[i], HEAP_HINT,
doAsync ? devId : INVALID_DEVID) < 0) { doAsync ? devId : INVALID_DEVID) < 0) {
goto exit_bench_rsa; goto exit_bench_rsa;
} }
@@ -5228,23 +5249,6 @@ void bench_ntruKeyGen(void)
#endif #endif
#ifdef HAVE_ECC #ifdef HAVE_ECC
/* Detect ECC key size to use */
#ifndef BENCH_ECC_SIZE
#ifndef NO_ECC256
#define BENCH_ECC_SIZE 32
#elif defined(HAVE_ECC384)
#define BENCH_ECC_SIZE 48
#elif defined(HAVE_ECC224)
#define BENCH_ECC_SIZE 28
#elif defined(HAVE_ECC521)
#define BENCH_ECC_SIZE 66
#else
#error No ECC keygen size defined for benchmark
#endif
#endif
static int bench_ecc_size = BENCH_ECC_SIZE;
void bench_eccMakeKey(int doAsync) void bench_eccMakeKey(int doAsync)
{ {
int ret = 0, i, times, count, pending = 0; int ret = 0, i, times, count, pending = 0;
@@ -5308,11 +5312,11 @@ void bench_ecc(int doAsync)
const char**desc = bench_desc_words[lng_index]; const char**desc = bench_desc_words[lng_index];
#ifdef HAVE_ECC_DHE #ifdef HAVE_ECC_DHE
DECLARE_ARRAY(shared, byte, BENCH_MAX_PENDING, BENCH_ECC_SIZE, HEAP_HINT); DECLARE_ARRAY(shared, byte, BENCH_MAX_PENDING, BENCH_MAX_ECC_SIZE, HEAP_HINT);
#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);
DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, BENCH_ECC_SIZE, HEAP_HINT); DECLARE_ARRAY(digest, byte, BENCH_MAX_PENDING, BENCH_MAX_ECC_SIZE, HEAP_HINT);
#endif #endif
#ifdef DECLARE_VAR_IS_HEAP_ALLOC #ifdef DECLARE_VAR_IS_HEAP_ALLOC
+2 -1
View File
@@ -990,7 +990,8 @@ static int CheckBitString(const byte* input, word32* inOutIdx, int* len,
(defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA))) || \ (defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA))) || \
(defined(HAVE_ECC) && defined(HAVE_ECC_KEY_EXPORT)) || \ (defined(HAVE_ECC) && defined(HAVE_ECC_KEY_EXPORT)) || \
((defined(HAVE_ED25519) || defined(HAVE_ED448)) && \ ((defined(HAVE_ED25519) || defined(HAVE_ED448)) && \
(defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA))) (defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA))) || \
(!defined(NO_DSA) && !defined(HAVE_SELFTEST) && defined(WOLFSSL_KEY_GEN))
/* Set the DER/BER encoding of the ASN.1 BIT_STRING header. /* Set the DER/BER encoding of the ASN.1 BIT_STRING header.
* *
+2 -2
View File
@@ -28,8 +28,8 @@
#include <wolfssl/wolfcrypt/cpuid.h> #include <wolfssl/wolfcrypt/cpuid.h>
#if (defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \ #if defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \
defined(WOLFSSL_AESNI)) && !defined(WOLFSSL_NO_ASM) defined(WOLFSSL_AESNI) || defined(WOLFSSL_SP_X86_64_ASM)
/* Each platform needs to query info type 1 from cpuid to see if aesni is /* Each platform needs to query info type 1 from cpuid to see if aesni is
* supported. Also, let's setup a macro for proper linkage w/o ABI conflicts * supported. Also, let's setup a macro for proper linkage w/o ABI conflicts
*/ */
+15 -15
View File
@@ -1262,7 +1262,7 @@ static int GeneratePublicDh(DhKey* key, byte* priv, word32 privSz,
#endif #endif
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH); x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH);
if (x == NULL) if (x == NULL)
@@ -1482,6 +1482,7 @@ int wc_DhCheckPubKey_ex(DhKey* key, const byte* pub, word32 pubSz,
ret = MP_INIT_E; ret = MP_INIT_E;
} }
/* SP 800-56Ar3, section 5.6.2.3.1, process step 2 */
if (ret == 0 && prime != NULL) { if (ret == 0 && prime != NULL) {
#ifdef WOLFSSL_HAVE_SP_DH #ifdef WOLFSSL_HAVE_SP_DH
#ifndef WOLFSSL_SP_NO_2048 #ifndef WOLFSSL_SP_NO_2048
@@ -1511,8 +1512,7 @@ int wc_DhCheckPubKey_ex(DhKey* key, const byte* pub, word32 pubSz,
#endif #endif
{ {
/* SP 800-56Ar3, section 5.6.2.3.1, process step 2 */ #if !defined(WOLFSSL_SP_MATH)
#ifndef WOLFSSL_SP_MATH
/* calculate (y^q) mod(p), store back into y */ /* calculate (y^q) mod(p), store back into y */
if (mp_exptmod(y, q, p, y) != MP_OKAY) if (mp_exptmod(y, q, p, y) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
@@ -1797,7 +1797,7 @@ int wc_DhCheckKeyPair(DhKey* key, const byte* pub, word32 pubSz,
#endif #endif
#endif #endif
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
if (mp_exptmod(&key->g, privateKey, &key->p, checkKey) != MP_OKAY) if (mp_exptmod(&key->g, privateKey, &key->p, checkKey) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
#else #else
@@ -1853,14 +1853,14 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
{ {
int ret = 0; int ret = 0;
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* y; mp_int* y = NULL;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
mp_int* x; mp_int* x = NULL;
mp_int* z; mp_int* z = NULL;
#endif #endif
#else #else
mp_int y[1]; mp_int y[1];
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
mp_int x[1]; mp_int x[1];
mp_int z[1]; mp_int z[1];
#endif #endif
@@ -1882,7 +1882,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
y = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH); y = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH);
if (y == NULL) if (y == NULL)
return MEMORY_E; return MEMORY_E;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH); x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH);
if (x == NULL) { if (x == NULL) {
XFREE(y, key->heap, DYNAMIC_TYPE_DH); XFREE(y, key->heap, DYNAMIC_TYPE_DH);
@@ -1911,7 +1911,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
mp_clear(y); mp_clear(y);
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
XFREE(z, key->heap, DYNAMIC_TYPE_DH); XFREE(z, key->heap, DYNAMIC_TYPE_DH);
XFREE(x, key->heap, DYNAMIC_TYPE_DH); XFREE(x, key->heap, DYNAMIC_TYPE_DH);
#endif #endif
@@ -1933,7 +1933,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
mp_clear(y); mp_clear(y);
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
XFREE(z, key->heap, DYNAMIC_TYPE_DH); XFREE(z, key->heap, DYNAMIC_TYPE_DH);
XFREE(x, key->heap, DYNAMIC_TYPE_DH); XFREE(x, key->heap, DYNAMIC_TYPE_DH);
#endif #endif
@@ -1955,7 +1955,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
mp_clear(y); mp_clear(y);
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
XFREE(z, key->heap, DYNAMIC_TYPE_DH); XFREE(z, key->heap, DYNAMIC_TYPE_DH);
XFREE(x, key->heap, DYNAMIC_TYPE_DH); XFREE(x, key->heap, DYNAMIC_TYPE_DH);
#endif #endif
@@ -1966,7 +1966,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
#endif #endif
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
if (mp_init_multi(x, y, z, 0, 0, 0) != MP_OKAY) { if (mp_init_multi(x, y, z, 0, 0, 0) != MP_OKAY) {
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
XFREE(z, key->heap, DYNAMIC_TYPE_DH); XFREE(z, key->heap, DYNAMIC_TYPE_DH);
@@ -2001,7 +2001,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
#endif #endif
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
XFREE(z, key->heap, DYNAMIC_TYPE_DH); XFREE(z, key->heap, DYNAMIC_TYPE_DH);
XFREE(x, key->heap, DYNAMIC_TYPE_DH); XFREE(x, key->heap, DYNAMIC_TYPE_DH);
#endif #endif
+119 -107
View File
@@ -150,7 +150,7 @@ ECC Curve Sizes:
#include <wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h> #include <wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h>
#endif #endif
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
#define GEN_MEM_ERR MP_MEM #define GEN_MEM_ERR MP_MEM
#elif defined(USE_FAST_MATH) #elif defined(USE_FAST_MATH)
#define GEN_MEM_ERR FP_MEM #define GEN_MEM_ERR FP_MEM
@@ -1569,7 +1569,7 @@ static void alt_fp_init(mp_int* a)
int ecc_projective_add_point(ecc_point* P, ecc_point* Q, ecc_point* R, int ecc_projective_add_point(ecc_point* P, ecc_point* Q, ecc_point* R,
mp_int* a, mp_int* modulus, mp_digit mp) mp_int* a, mp_int* modulus, mp_digit mp)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* t1 = NULL; mp_int* t1 = NULL;
mp_int* t2 = NULL; mp_int* t2 = NULL;
@@ -1936,7 +1936,7 @@ done:
int ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a, int ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
mp_int* modulus, mp_digit mp) mp_int* modulus, mp_digit mp)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* t1 = NULL; mp_int* t1 = NULL;
mp_int* t2 = NULL; mp_int* t2 = NULL;
@@ -2252,7 +2252,7 @@ int ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
*/ */
int ecc_map_ex(ecc_point* P, mp_int* modulus, mp_digit mp, int ct) int ecc_map_ex(ecc_point* P, mp_int* modulus, mp_digit mp, int ct)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* t1 = NULL; mp_int* t1 = NULL;
mp_int* t2 = NULL; mp_int* t2 = NULL;
@@ -2369,7 +2369,8 @@ int ecc_map_ex(ecc_point* P, mp_int* modulus, mp_digit mp, int ct)
/* get 1/z */ /* get 1/z */
if (err == MP_OKAY) { if (err == MP_OKAY) {
#if defined(ECC_TIMING_RESISTANT) && defined(USE_FAST_MATH) #if defined(ECC_TIMING_RESISTANT) && (defined(USE_FAST_MATH) || \
defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL))
if (ct) { if (ct) {
err = mp_invmod_mont_ct(z, modulus, t1, mp); err = mp_invmod_mont_ct(z, modulus, t1, mp);
if (err == MP_OKAY) if (err == MP_OKAY)
@@ -2468,7 +2469,7 @@ int ecc_map(ecc_point* P, mp_int* modulus, mp_digit mp)
#if !defined(FREESCALE_LTC_ECC) && !defined(WOLFSSL_STM32_PKA) #if !defined(FREESCALE_LTC_ECC) && !defined(WOLFSSL_STM32_PKA)
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifndef ECC_TIMING_RESISTANT #ifndef ECC_TIMING_RESISTANT
@@ -2805,7 +2806,6 @@ static int ecc_mulmod(mp_int* k, ecc_point* P, ecc_point* Q, ecc_point** R,
#endif #endif
#ifndef WOLFSSL_SP_MATH
/* Convert the point to montogmery form. /* Convert the point to montogmery form.
* *
* @param [in] p Point to convert. * @param [in] p Point to convert.
@@ -2861,7 +2861,6 @@ static int ecc_point_to_mont(ecc_point* p, ecc_point* r, mp_int* modulus,
#endif #endif
return err; return err;
} }
#endif /* !WOLFSSL_SP_MATH */
#ifdef WOLFSSL_SMALL_STACK_CACHE #ifdef WOLFSSL_SMALL_STACK_CACHE
static int ecc_key_tmp_init(ecc_key* key, void* heap) static int ecc_key_tmp_init(ecc_key* key, void* heap)
@@ -2926,7 +2925,7 @@ static int normal_ecc_mulmod(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
mp_int* modulus, int map, void* heap) mp_int* modulus, int map, void* heap)
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
{ {
ecc_point *tG, *M[M_POINTS]; ecc_point *tG, *M[M_POINTS];
int i, err; int i, err;
@@ -3021,7 +3020,7 @@ exit:
return ECC_BAD_ARG_E; return ECC_BAD_ARG_E;
} }
#endif #endif
#endif /* !defined(WOLFSSL_SP_MATH) && !defined(FP_ECC) */ #endif /* !WOLFSSL_SP_MATH || !FP_ECC */
#ifndef FP_ECC #ifndef FP_ECC
/** /**
@@ -3038,7 +3037,7 @@ exit:
int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
mp_int* modulus, mp_int* order, WC_RNG* rng, int map, mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
void* heap) void* heap)
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
{ {
ecc_point *tG, *M[M_POINTS]; ecc_point *tG, *M[M_POINTS];
int i, err; int i, err;
@@ -3783,7 +3782,7 @@ static int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point,
byte* out, word32* outlen, ecc_curve_spec* curve) byte* out, word32* outlen, ecc_curve_spec* curve)
{ {
int err = MP_OKAY; int err = MP_OKAY;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
ecc_point* result = NULL; ecc_point* result = NULL;
word32 x = 0; word32 x = 0;
#endif #endif
@@ -3825,7 +3824,7 @@ static int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point,
else else
#endif #endif
#endif #endif
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH)
{ {
err = WC_KEY_SIZE_E; err = WC_KEY_SIZE_E;
@@ -4185,7 +4184,7 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curveIn,
{ {
int err = MP_OKAY; int err = MP_OKAY;
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) #if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
ecc_point* base = NULL; ecc_point* base = NULL;
#endif #endif
ecc_point* pub; ecc_point* pub;
@@ -4223,13 +4222,8 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curveIn,
} }
} }
#ifndef WOLFSSL_SP_MATH if ((err == MP_OKAY) && (mp_iszero(&key->k) || mp_isneg(&key->k) ||
if ((err == MP_OKAY) && (mp_iszero(&key->k) || (key->k.sign == MP_NEG) ||
(mp_cmp(&key->k, curve->order) != MP_LT))) (mp_cmp(&key->k, curve->order) != MP_LT)))
#else
if ((err == MP_OKAY) && (mp_iszero(&key->k) ||
(mp_cmp(&key->k, curve->order) != MP_LT)))
#endif
{ {
err = ECC_PRIV_KEY_E; err = ECC_PRIV_KEY_E;
} }
@@ -4264,7 +4258,7 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curveIn,
else else
#endif #endif
#endif #endif
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH)
err = WC_KEY_SIZE_E; err = WC_KEY_SIZE_E;
#else #else
{ {
@@ -4377,7 +4371,7 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
int err; int err;
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \ #if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
!defined(WOLFSSL_CRYPTOCELL) !defined(WOLFSSL_CRYPTOCELL)
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
DECLARE_CURVE_SPECS(curve, ECC_CURVE_FIELD_COUNT); DECLARE_CURVE_SPECS(curve, ECC_CURVE_FIELD_COUNT);
#endif #endif
#endif /* !WOLFSSL_ATECC508A */ #endif /* !WOLFSSL_ATECC508A */
@@ -4527,7 +4521,7 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
#endif /* WOLFSSL_HAVE_SP_ECC */ #endif /* WOLFSSL_HAVE_SP_ECC */
{ /* software key gen */ { /* software key gen */
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH)
err = WC_KEY_SIZE_E; err = WC_KEY_SIZE_E;
#else #else
@@ -5108,7 +5102,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
ecc_key* key, mp_int *r, mp_int *s) ecc_key* key, mp_int *r, mp_int *s)
{ {
int err = 0; int err = 0;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
mp_int* e; mp_int* e;
#if (!defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)) && \ #if (!defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)) && \
!defined(WOLFSSL_SMALL_STACK) !defined(WOLFSSL_SMALL_STACK)
@@ -5138,7 +5132,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
return ECC_BAD_ARG_E; return ECC_BAD_ARG_E;
} }
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH)
if (key->idx == ECC_CUSTOM_IDX || if (key->idx == ECC_CUSTOM_IDX ||
(ecc_sets[key->idx].id != ECC_SECP256R1 && (ecc_sets[key->idx].id != ECC_SECP256R1 &&
ecc_sets[key->idx].id != ECC_SECP384R1)) { ecc_sets[key->idx].id != ECC_SECP384R1)) {
@@ -5146,7 +5140,8 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
} }
#endif #endif
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC) #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC) || \
(defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_HAVE_SP_ECC))
if (key->idx != ECC_CUSTOM_IDX if (key->idx != ECC_CUSTOM_IDX
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC) #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC)
&& key->asyncDev.marker != WOLFSSL_ASYNC_MARKER_ECC && key->asyncDev.marker != WOLFSSL_ASYNC_MARKER_ECC
@@ -5224,7 +5219,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_CAVIUM_V) #if defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_CAVIUM_V)
err = wc_ecc_alloc_mpint(key, &key->e); err = wc_ecc_alloc_mpint(key, &key->e);
@@ -5516,7 +5511,7 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
XFREE(e, key->heap, DYNAMIC_TYPE_ECC); XFREE(e, key->heap, DYNAMIC_TYPE_ECC);
#endif #endif
FREE_CURVE_SPECS(); FREE_CURVE_SPECS();
#endif /* WOLFSSL_SP_MATH */ #endif /* !WOLFSSL_SP_MATH */
return err; return err;
} }
@@ -5525,11 +5520,17 @@ int wc_ecc_sign_hash_ex(const byte* in, word32 inlen, WC_RNG* rng,
int wc_ecc_sign_set_k(const byte* k, word32 klen, ecc_key* key) int wc_ecc_sign_set_k(const byte* k, word32 klen, ecc_key* key)
{ {
int ret = 0; int ret = 0;
DECLARE_CURVE_SPECS(curve, 1);
if (k == NULL || klen == 0 || key == NULL) { if (k == NULL || klen == 0 || key == NULL) {
ret = BAD_FUNC_ARG; ret = BAD_FUNC_ARG;
} }
if (ret == 0) {
ALLOC_CURVE_SPECS(1);
ret = wc_ecc_curve_load(key->dp, &curve, ECC_CURVE_FIELD_ORDER);
}
if (ret == 0) { if (ret == 0) {
if (key->sign_k == NULL) { if (key->sign_k == NULL) {
key->sign_k = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, key->sign_k = (mp_int*)XMALLOC(sizeof(mp_int), key->heap,
@@ -5546,7 +5547,11 @@ int wc_ecc_sign_set_k(const byte* k, word32 klen, ecc_key* key)
if (ret == 0) { if (ret == 0) {
ret = mp_read_unsigned_bin(key->sign_k, k, klen); ret = mp_read_unsigned_bin(key->sign_k, k, klen);
} }
if (ret == 0 && mp_cmp(key->sign_k, curve->order) != MP_LT) {
ret = MP_VAL;
}
FREE_CURVE_SPECS();
return ret; return ret;
} }
#endif /* WOLFSSL_ECDSA_SET_K */ #endif /* WOLFSSL_ECDSA_SET_K */
@@ -6034,7 +6039,8 @@ int ecc_mul2add(ecc_point* A, mp_int* kA,
} }
#endif /* ECC_SHAMIR */ #endif /* ECC_SHAMIR */
#endif /* !WOLFSSL_SP_MATH && !WOLFSSL_ATECC508A && !WOLFSSL_CRYPTOCEL*/ #endif /* (!WOLFSSL_SP_MATH && !WOLFSSL_ATECC508A && !WOLFSSL_ATECC608A &&
* !WOLFSSL_CRYPTOCEL */
#ifdef HAVE_ECC_VERIFY #ifdef HAVE_ECC_VERIFY
@@ -6348,8 +6354,9 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
} }
#endif #endif
#if (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC)) && \ #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC) || \
!defined(FREESCALE_LTC_ECC) (defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_HAVE_SP_ECC)) && \
!defined(FREESCALE_LTC_ECC)
if (key->idx != ECC_CUSTOM_IDX if (key->idx != ECC_CUSTOM_IDX
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC) #if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_ECC)
&& key->asyncDev.marker != WOLFSSL_ASYNC_MARKER_ECC && key->asyncDev.marker != WOLFSSL_ASYNC_MARKER_ECC
@@ -6411,7 +6418,6 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
#endif #endif
#if !defined(WOLFSSL_SP_MATH) || defined(FREESCALE_LTC_ECC) #if !defined(WOLFSSL_SP_MATH) || defined(FREESCALE_LTC_ECC)
ALLOC_CURVE_SPECS(ECC_CURVE_FIELD_COUNT); ALLOC_CURVE_SPECS(ECC_CURVE_FIELD_COUNT);
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_CAVIUM_V) #if defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_CAVIUM_V)
@@ -6737,81 +6743,87 @@ int wc_ecc_import_point_der_ex(byte* in, word32 inLen, const int curve_idx,
#ifdef HAVE_COMP_KEY #ifdef HAVE_COMP_KEY
if (err == MP_OKAY && compressed == 1) { /* build y */ if (err == MP_OKAY && compressed == 1) { /* build y */
#ifndef WOLFSSL_SP_MATH #if defined(WOLFSSL_HAVE_SP_ECC)
int did_init = 0; #ifndef WOLFSSL_SP_NO_256
mp_int t1, t2;
DECLARE_CURVE_SPECS(curve, 3);
ALLOC_CURVE_SPECS(3);
if (mp_init_multi(&t1, &t2, NULL, NULL, NULL, NULL) != MP_OKAY)
err = MEMORY_E;
else
did_init = 1;
/* load curve info */
if (err == MP_OKAY)
err = wc_ecc_curve_load(&ecc_sets[curve_idx], &curve,
(ECC_CURVE_FIELD_PRIME | ECC_CURVE_FIELD_AF |
ECC_CURVE_FIELD_BF));
/* compute x^3 */
if (err == MP_OKAY)
err = mp_sqr(point->x, &t1);
if (err == MP_OKAY)
err = mp_mulmod(&t1, point->x, curve->prime, &t1);
/* compute x^3 + a*x */
if (err == MP_OKAY)
err = mp_mulmod(curve->Af, point->x, curve->prime, &t2);
if (err == MP_OKAY)
err = mp_add(&t1, &t2, &t1);
/* compute x^3 + a*x + b */
if (err == MP_OKAY)
err = mp_add(&t1, curve->Bf, &t1);
/* compute sqrt(x^3 + a*x + b) */
if (err == MP_OKAY)
err = mp_sqrtmod_prime(&t1, curve->prime, &t2);
/* adjust y */
if (err == MP_OKAY) {
if ((mp_isodd(&t2) == MP_YES && pointType == ECC_POINT_COMP_ODD) ||
(mp_isodd(&t2) == MP_NO && pointType == ECC_POINT_COMP_EVEN)) {
err = mp_mod(&t2, curve->prime, point->y);
}
else {
err = mp_submod(curve->prime, &t2, curve->prime, point->y);
}
}
if (did_init) {
mp_clear(&t2);
mp_clear(&t1);
}
wc_ecc_curve_free(curve);
FREE_CURVE_SPECS();
#else
#ifndef WOLFSSL_SP_NO_256
if (curve_idx != ECC_CUSTOM_IDX && if (curve_idx != ECC_CUSTOM_IDX &&
ecc_sets[curve_idx].id == ECC_SECP256R1) { ecc_sets[curve_idx].id == ECC_SECP256R1) {
sp_ecc_uncompress_256(point->x, pointType, point->y); sp_ecc_uncompress_256(point->x, pointType, point->y);
} }
else else
#endif #endif
#ifdef WOLFSSL_SP_384 #ifdef WOLFSSL_SP_384
if (curve_idx != ECC_CUSTOM_IDX && if (curve_idx != ECC_CUSTOM_IDX &&
ecc_sets[curve_idx].id == ECC_SECP384R1) { ecc_sets[curve_idx].id == ECC_SECP384R1) {
sp_ecc_uncompress_384(point->x, pointType, point->y); sp_ecc_uncompress_384(point->x, pointType, point->y);
} }
else else
#endif
#endif #endif
#if !defined(WOLFSSL_SP_MATH)
{
int did_init = 0;
mp_int t1, t2;
DECLARE_CURVE_SPECS(curve, 3);
ALLOC_CURVE_SPECS(3);
if (mp_init_multi(&t1, &t2, NULL, NULL, NULL, NULL) != MP_OKAY)
err = MEMORY_E;
else
did_init = 1;
/* load curve info */
if (err == MP_OKAY)
err = wc_ecc_curve_load(&ecc_sets[curve_idx], &curve,
(ECC_CURVE_FIELD_PRIME | ECC_CURVE_FIELD_AF |
ECC_CURVE_FIELD_BF));
/* compute x^3 */
if (err == MP_OKAY)
err = mp_sqr(point->x, &t1);
if (err == MP_OKAY)
err = mp_mulmod(&t1, point->x, curve->prime, &t1);
/* compute x^3 + a*x */
if (err == MP_OKAY)
err = mp_mulmod(curve->Af, point->x, curve->prime, &t2);
if (err == MP_OKAY)
err = mp_add(&t1, &t2, &t1);
/* compute x^3 + a*x + b */
if (err == MP_OKAY)
err = mp_add(&t1, curve->Bf, &t1);
/* compute sqrt(x^3 + a*x + b) */
if (err == MP_OKAY)
err = mp_sqrtmod_prime(&t1, curve->prime, &t2);
/* adjust y */
if (err == MP_OKAY) {
if ((mp_isodd(&t2) == MP_YES &&
pointType == ECC_POINT_COMP_ODD) ||
(mp_isodd(&t2) == MP_NO &&
pointType == ECC_POINT_COMP_EVEN)) {
err = mp_mod(&t2, curve->prime, point->y);
}
else {
err = mp_submod(curve->prime, &t2, curve->prime, point->y);
}
}
if (did_init) {
mp_clear(&t2);
mp_clear(&t1);
}
wc_ecc_curve_free(curve);
FREE_CURVE_SPECS();
}
#else
{ {
err = WC_KEY_SIZE_E; err = WC_KEY_SIZE_E;
} }
#endif #endif
} }
#endif #endif
@@ -7089,7 +7101,7 @@ int wc_ecc_export_x963_ex(ecc_key* key, byte* out, word32* outLen,
/* is ecc point on curve described by dp ? */ /* is ecc point on curve described by dp ? */
int wc_ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime) int wc_ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
int err; int err;
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* t1; mp_int* t1;
@@ -7131,7 +7143,7 @@ int wc_ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
/* compute y^2 - x^3 */ /* compute y^2 - x^3 */
if (err == MP_OKAY) if (err == MP_OKAY)
err = mp_sub(t1, t2, t1); err = mp_submod(t1, t2, prime, t1);
/* Determine if curve "a" should be used in calc */ /* Determine if curve "a" should be used in calc */
#ifdef WOLFSSL_CUSTOM_CURVES #ifdef WOLFSSL_CUSTOM_CURVES
@@ -7361,7 +7373,7 @@ static int ecc_check_pubkey_order(ecc_key* key, ecc_point* pubkey, mp_int* a,
else else
#endif #endif
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
err = wc_ecc_mulmod_ex(order, pubkey, inf, a, prime, 1, key->heap); err = wc_ecc_mulmod_ex(order, pubkey, inf, a, prime, 1, key->heap);
if (err == MP_OKAY && !wc_ecc_point_is_at_infinity(inf)) if (err == MP_OKAY && !wc_ecc_point_is_at_infinity(inf))
err = ECC_INF_E; err = ECC_INF_E;
@@ -7413,7 +7425,7 @@ int wc_ecc_get_generator(ecc_point* ecp, int curve_idx)
int wc_ecc_check_key(ecc_key* key) int wc_ecc_check_key(ecc_key* key)
{ {
int err; int err;
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \ #if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
!defined(WOLFSSL_CRYPTOCELL) !defined(WOLFSSL_CRYPTOCELL)
mp_int* b = NULL; mp_int* b = NULL;
@@ -7508,8 +7520,8 @@ int wc_ecc_check_key(ecc_key* key)
/* SP 800-56Ar3, section 5.6.2.1.2 */ /* SP 800-56Ar3, section 5.6.2.1.2 */
/* private keys must be in the range [1, n-1] */ /* private keys must be in the range [1, n-1] */
if ((err == MP_OKAY) && (key->type == ECC_PRIVATEKEY) && if ((err == MP_OKAY) && (key->type == ECC_PRIVATEKEY) &&
(mp_iszero(&key->k) || (key->k.sign == MP_NEG) || (mp_iszero(&key->k) || mp_isneg(&key->k) ||
(mp_cmp(&key->k, curve->order) != MP_LT))) { (mp_cmp(&key->k, curve->order) != MP_LT))) {
err = ECC_PRIV_KEY_E; err = ECC_PRIV_KEY_E;
} }
@@ -7644,7 +7656,7 @@ int wc_ecc_import_x963_ex(const byte* in, word32 inLen, ecc_key* key,
#ifdef HAVE_COMP_KEY #ifdef HAVE_COMP_KEY
if (err == MP_OKAY && compressed == 1) { /* build y */ if (err == MP_OKAY && compressed == 1) { /* build y */
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
mp_int t1, t2; mp_int t1, t2;
int did_init = 0; int did_init = 0;
@@ -8392,7 +8404,7 @@ int wc_ecc_sig_size(ecc_key* key)
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
/** Our FP cache */ /** Our FP cache */
typedef struct { typedef struct {
@@ -9037,7 +9049,7 @@ static int add_entry(int idx, ecc_point *g)
} }
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
/* build the LUT by spacing the bits of the input by #modulus/FP_LUT bits apart /* build the LUT by spacing the bits of the input by #modulus/FP_LUT bits apart
* *
* The algorithm builds patterns in increasing bit order by first making all * The algorithm builds patterns in increasing bit order by first making all
@@ -9333,7 +9345,7 @@ done:
#endif #endif
#ifdef ECC_SHAMIR #ifdef ECC_SHAMIR
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
/* perform a fixed point ECC mulmod */ /* perform a fixed point ECC mulmod */
static int accel_fp_mul2add(int idx1, int idx2, static int accel_fp_mul2add(int idx1, int idx2,
mp_int* kA, mp_int* kB, mp_int* kA, mp_int* kB,
@@ -9713,7 +9725,7 @@ int ecc_mul2add(ecc_point* A, mp_int* kA,
int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
mp_int* modulus, int map, void* heap) mp_int* modulus, int map, void* heap)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
int idx, err = MP_OKAY; int idx, err = MP_OKAY;
mp_digit mp; mp_digit mp;
mp_int mu; mp_int mu;
@@ -9822,7 +9834,7 @@ int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a, int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
mp_int* modulus, mp_int* order, WC_RNG* rng, int map, void* heap) mp_int* modulus, mp_int* order, WC_RNG* rng, int map, void* heap)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
int idx, err = MP_OKAY; int idx, err = MP_OKAY;
mp_digit mp; mp_digit mp;
mp_int mu; mp_int mu;
@@ -9927,7 +9939,7 @@ int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
#endif #endif
} }
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
/* helper function for freeing the cache ... /* helper function for freeing the cache ...
must be called with the cache mutex locked */ must be called with the cache mutex locked */
static void wc_ecc_fp_free_cache(void) static void wc_ecc_fp_free_cache(void)
@@ -9968,7 +9980,7 @@ void wc_ecc_fp_init(void)
/** Free the Fixed Point cache */ /** Free the Fixed Point cache */
void wc_ecc_fp_free(void) void wc_ecc_fp_free(void)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifndef HAVE_THREAD_LS #ifndef HAVE_THREAD_LS
if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */ if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */
wc_InitMutex(&ecc_fp_lock); wc_InitMutex(&ecc_fp_lock);
+16 -6
View File
@@ -4700,21 +4700,21 @@ static int mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result)
} }
#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 #ifndef WOLFSSL_SP_NO_2048
if (mp_count_bits(a) == 1024) if (mp_count_bits(a) == 1024 && mp_isodd(a))
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 && mp_isodd(a))
err = sp_ModExp_2048(b, &r, a, &y); err = sp_ModExp_2048(b, &r, a, &y);
else else
#endif #endif
#ifndef WOLFSSL_SP_NO_3072 #ifndef WOLFSSL_SP_NO_3072
if (mp_count_bits(a) == 1536) if (mp_count_bits(a) == 1536 && mp_isodd(a))
err = sp_ModExp_1536(b, &r, a, &y); err = sp_ModExp_1536(b, &r, a, &y);
else if (mp_count_bits(a) == 3072) else if (mp_count_bits(a) == 3072 && mp_isodd(a))
err = sp_ModExp_3072(b, &r, a, &y); err = sp_ModExp_3072(b, &r, a, &y);
else else
#endif #endif
#ifdef WOLFSSL_SP_4096 #ifdef WOLFSSL_SP_4096
if (mp_count_bits(a) == 4096) if (mp_count_bits(a) == 4096 && mp_isodd(a))
err = sp_ModExp_4096(b, &r, a, &y); err = sp_ModExp_4096(b, &r, a, &y);
else else
#endif #endif
@@ -5254,7 +5254,12 @@ int mp_radix_size (mp_int *a, int radix, int *size)
} }
if (mp_iszero(a) == MP_YES) { if (mp_iszero(a) == MP_YES) {
*size = 2; #ifndef WC_DISABLE_RADIX_ZERO_PAD
if (radix == 16)
*size = 3;
else
#endif
*size = 2;
return MP_OKAY; return MP_OKAY;
} }
@@ -5311,6 +5316,11 @@ int mp_toradix (mp_int *a, char *str, int radix)
/* quick out if its zero */ /* quick out if its zero */
if (mp_iszero(a) == MP_YES) { if (mp_iszero(a) == MP_YES) {
#ifndef WC_DISABLE_RADIX_ZERO_PAD
if (radix == 16) {
*str++ = '0';
}
#endif
*str++ = '0'; *str++ = '0';
*str = '\0'; *str = '\0';
return MP_OKAY; return MP_OKAY;
+32 -10
View File
@@ -651,19 +651,25 @@ int wc_CheckRsaKey(RsaKey* key)
break; break;
#endif /* WOLFSSL_SP_4096 */ #endif /* WOLFSSL_SP_4096 */
default: default:
/* If using only single prcsision math then issue key size error, /* If using only single precsision math then issue key size
otherwise fall-back to multi-precision math calculation */ * error, otherwise fall-back to multi-precision math
#ifdef WOLFSSL_SP_MATH * calculation */
#if defined(WOLFSSL_SP_MATH)
ret = WC_KEY_SIZE_E; ret = WC_KEY_SIZE_E;
#else
if (mp_exptmod_nct(k, &key->e, &key->n, tmp) != MP_OKAY)
ret = MP_EXPTMOD_E;
if (ret == 0) {
if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY)
ret = MP_EXPTMOD_E;
}
#endif #endif
break; break;
} }
} }
#endif /* WOLFSSL_HAVE_SP_RSA */ #else
#ifndef WOLFSSL_SP_MATH
if (ret == 0) { if (ret == 0) {
if (mp_exptmod(k, &key->e, &key->n, tmp) != MP_OKAY) if (mp_exptmod_nct(k, &key->e, &key->n, tmp) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
} }
@@ -671,7 +677,7 @@ int wc_CheckRsaKey(RsaKey* key)
if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY) if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
} }
#endif /* !WOLFSSL_SP_MATH */ #endif /* WOLFSSL_HAVE_SP_RSA */
if (ret == 0) { if (ret == 0) {
if (mp_cmp(k, tmp) != MP_EQ) if (mp_cmp(k, tmp) != MP_EQ)
@@ -2076,7 +2082,7 @@ done:
static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out, static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
word32* outLen, int type, RsaKey* key, WC_RNG* rng) word32* outLen, int type, RsaKey* key, WC_RNG* rng)
{ {
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH)
#ifdef WOLFSSL_SMALL_STACK #ifdef WOLFSSL_SMALL_STACK
mp_int* tmp; mp_int* tmp;
#ifdef WC_RSA_BLINDING #ifdef WC_RSA_BLINDING
@@ -2183,7 +2189,7 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
#endif #endif
#endif /* WOLFSSL_HAVE_SP_RSA */ #endif /* WOLFSSL_HAVE_SP_RSA */
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH)
(void)rng; (void)rng;
WOLFSSL_MSG("SP Key Size Error"); WOLFSSL_MSG("SP Key Size Error");
return WC_KEY_SIZE_E; return WC_KEY_SIZE_E;
@@ -2237,8 +2243,15 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
ret = MP_INVMOD_E; ret = MP_INVMOD_E;
/* rnd = rnd^e */ /* rnd = rnd^e */
#ifndef WOLFSSL_SP_MATH_ALL
if (ret == 0 && mp_exptmod(rnd, &key->e, &key->n, rnd) != MP_OKAY) if (ret == 0 && mp_exptmod(rnd, &key->e, &key->n, rnd) != MP_OKAY)
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
#else
if (ret == 0 && mp_exptmod_nct(rnd, &key->e, &key->n,
rnd) != MP_OKAY) {
ret = MP_EXPTMOD_E;
}
#endif
/* tmp = tmp*rnd mod n */ /* tmp = tmp*rnd mod n */
if (ret == 0 && mp_mulmod(tmp, rnd, &key->n, tmp) != MP_OKAY) if (ret == 0 && mp_mulmod(tmp, rnd, &key->n, tmp) != MP_OKAY)
@@ -2292,8 +2305,14 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
ret = MP_EXPTMOD_E; ret = MP_EXPTMOD_E;
/* tmp = (tmpa - tmpb) * qInv (mod p) */ /* tmp = (tmpa - tmpb) * qInv (mod p) */
#if defined(WOLFSSL_SP_MATH) || (defined(WOLFSSL_SP_MATH_ALL) && \
!defined(WOLFSSL_SP_INT_NEGATIVE))
if (ret == 0 && mp_submod(tmpa, tmpb, &key->p, tmp) != MP_OKAY)
ret = MP_SUB_E;
#else
if (ret == 0 && mp_sub(tmpa, tmpb, tmp) != MP_OKAY) if (ret == 0 && mp_sub(tmpa, tmpb, tmp) != MP_OKAY)
ret = MP_SUB_E; ret = MP_SUB_E;
#endif
if (ret == 0 && mp_mulmod(tmp, &key->u, &key->p, if (ret == 0 && mp_mulmod(tmp, &key->u, &key->p,
tmp) != MP_OKAY) tmp) != MP_OKAY)
@@ -3751,8 +3770,11 @@ static int wc_CompareDiffPQ(mp_int* p, mp_int* q, int size)
if (ret == 0) if (ret == 0)
ret = mp_sub(p, q, &d); ret = mp_sub(p, q, &d);
#if !defined(WOLFSSL_SP_MATH) && (!defined(WOLFSSL_SP_MATH_ALL) || \
defined(WOLFSSL_SP_INT_NEGATIVE))
if (ret == 0) if (ret == 0)
ret = mp_abs(&d, &d); ret = mp_abs(&d, &d);
#endif
/* compare */ /* compare */
if (ret == 0) if (ret == 0)
+24 -13
View File
@@ -213,7 +213,8 @@ static int InitSha256(wc_Sha256* sha256)
/* Hardware Acceleration */ /* Hardware Acceleration */
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && (defined(HAVE_INTEL_AVX1) || \
defined(HAVE_INTEL_AVX2))
/* in case intel instructions aren't available, plus we need the K[] global */ /* in case intel instructions aren't available, plus we need the K[] global */
#define NEED_SOFT_SHA256 #define NEED_SOFT_SHA256
@@ -981,7 +982,8 @@ static int InitSha256(wc_Sha256* sha256)
if (sha256->buffLen == WC_SHA256_BLOCK_SIZE) { if (sha256->buffLen == WC_SHA256_BLOCK_SIZE) {
#if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA) #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags)) if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
#endif #endif
{ {
@@ -1013,7 +1015,8 @@ static int InitSha256(wc_Sha256* sha256)
/* process blocks */ /* process blocks */
#ifdef XTRANSFORM_LEN #ifdef XTRANSFORM_LEN
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (Transform_Sha256_Len_p != NULL) if (Transform_Sha256_Len_p != NULL)
#endif #endif
{ {
@@ -1028,11 +1031,13 @@ static int InitSha256(wc_Sha256* sha256)
len -= blocksLen; len -= blocksLen;
} }
} }
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
else else
#endif #endif
#endif /* XTRANSFORM_LEN */ #endif /* XTRANSFORM_LEN */
#if !defined(XTRANSFORM_LEN) || defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if !defined(XTRANSFORM_LEN) || (defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
{ {
while (len >= WC_SHA256_BLOCK_SIZE) { while (len >= WC_SHA256_BLOCK_SIZE) {
word32* local32 = sha256->buffer; word32* local32 = sha256->buffer;
@@ -1040,7 +1045,8 @@ static int InitSha256(wc_Sha256* sha256)
/* Intel transform function requires use of sha256->buffer */ /* Intel transform function requires use of sha256->buffer */
/* Little Endian requires byte swap, so can't use data directly */ /* Little Endian requires byte swap, so can't use data directly */
#if defined(WC_HASH_DATA_ALIGNMENT) && !defined(LITTLE_ENDIAN_ORDER) && \ #if defined(WC_HASH_DATA_ALIGNMENT) && !defined(LITTLE_ENDIAN_ORDER) && \
!defined(HAVE_INTEL_AVX1) && !defined(HAVE_INTEL_AVX2) !(defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
if (((size_t)data % WC_HASH_DATA_ALIGNMENT) == 0) { if (((size_t)data % WC_HASH_DATA_ALIGNMENT) == 0) {
local32 = (word32*)data; local32 = (word32*)data;
} }
@@ -1054,7 +1060,8 @@ static int InitSha256(wc_Sha256* sha256)
len -= WC_SHA256_BLOCK_SIZE; len -= WC_SHA256_BLOCK_SIZE;
#if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA) #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags)) if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
#endif #endif
{ {
@@ -1141,7 +1148,8 @@ static int InitSha256(wc_Sha256* sha256)
sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen; sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen;
#if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA) #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags)) if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
#endif #endif
{ {
@@ -1178,7 +1186,8 @@ static int InitSha256(wc_Sha256* sha256)
/* store lengths */ /* store lengths */
#if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA) #if defined(LITTLE_ENDIAN_ORDER) && !defined(FREESCALE_MMCAU_SHA)
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags)) if (!IS_INTEL_AVX1(intel_flags) && !IS_INTEL_AVX2(intel_flags))
#endif #endif
{ {
@@ -1191,10 +1200,11 @@ static int InitSha256(wc_Sha256* sha256)
XMEMCPY(&local[WC_SHA256_PAD_SIZE + sizeof(word32)], &sha256->loLen, XMEMCPY(&local[WC_SHA256_PAD_SIZE + sizeof(word32)], &sha256->loLen,
sizeof(word32)); sizeof(word32));
#if defined(FREESCALE_MMCAU_SHA) || defined(HAVE_INTEL_AVX1) || \ #if defined(FREESCALE_MMCAU_SHA) || (defined(USE_INTEL_SPEEDUP) && \
defined(HAVE_INTEL_AVX2) (defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
/* Kinetis requires only these bytes reversed */ /* Kinetis requires only these bytes reversed */
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
if (IS_INTEL_AVX1(intel_flags) || IS_INTEL_AVX2(intel_flags)) if (IS_INTEL_AVX1(intel_flags) || IS_INTEL_AVX2(intel_flags))
#endif #endif
{ {
@@ -1374,7 +1384,8 @@ static int InitSha256(wc_Sha256* sha256)
sha224->loLen = 0; sha224->loLen = 0;
sha224->hiLen = 0; sha224->hiLen = 0;
#if defined(HAVE_INTEL_AVX1)|| defined(HAVE_INTEL_AVX2) #if defined(USE_INTEL_SPEEDUP) && \
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2))
/* choose best Transform function under this runtime environment */ /* choose best Transform function under this runtime environment */
Sha256_SetTransform(); Sha256_SetTransform();
#endif #endif
+12681 -1441
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -696,7 +696,7 @@ int wc_SrpComputeKey(Srp* srp, byte* clientPubKey, word32 clientPubKeySz,
if (!r) r = mp_read_unsigned_bin(&temp2, serverPubKey, serverPubKeySz); if (!r) r = mp_read_unsigned_bin(&temp2, serverPubKey, serverPubKeySz);
if (!r) r = mp_iszero(&temp2) == MP_YES ? SRP_BAD_KEY_E : 0; if (!r) r = mp_iszero(&temp2) == MP_YES ? SRP_BAD_KEY_E : 0;
if (!r) r = mp_cmp(&temp2, &srp->N) != MP_LT ? SRP_BAD_KEY_E : 0; if (!r) r = mp_cmp(&temp2, &srp->N) != MP_LT ? SRP_BAD_KEY_E : 0;
if (!r) r = mp_sub(&temp2, &s, &temp1); if (!r) r = mp_submod(&temp2, &s, &srp->N, &temp1);
/* temp2 = a + u * x */ /* temp2 = a + u * x */
if (!r) r = mp_mulmod(&u, &srp->auth, &srp->N, &s); if (!r) r = mp_mulmod(&u, &srp->auth, &srp->N, &s);
+63 -18
View File
@@ -86,19 +86,19 @@ WOLFSSL_LOCAL int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod,
#endif #endif
#ifndef WOLFSSL_SP_MATH #if !defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
/* math settings check */ /* math settings check */
word32 CheckRunTimeSettings(void) word32 CheckRunTimeSettings(void)
{ {
return CTC_SETTINGS; return CTC_SETTINGS;
} }
#endif
/* math settings size check */ /* math settings size check */
word32 CheckRunTimeFastMath(void) word32 CheckRunTimeFastMath(void)
{ {
return FP_SIZE; return FP_SIZE;
} }
#endif
/* Functions */ /* Functions */
@@ -2790,7 +2790,7 @@ int fp_exptmod_ex(fp_int * G, fp_int * X, int digits, fp_int * P, fp_int * Y)
#endif #endif
if (fp_iszero(G)) { if (fp_iszero(G)) {
fp_set(G, 0); fp_set(Y, 0);
return FP_OKAY; return FP_OKAY;
} }
@@ -3557,14 +3557,15 @@ int fp_read_unsigned_bin(fp_int *a, const unsigned char *b, int c)
b += excess; b += excess;
} }
/* If we know the endianness of this architecture, and we're using /* Not both endian simultaneously */
32-bit fp_digits, we can optimize this */
#if (defined(LITTLE_ENDIAN_ORDER) || defined(BIG_ENDIAN_ORDER)) && \
defined(FP_32BIT)
/* But not for both simultaneously */
#if defined(LITTLE_ENDIAN_ORDER) && defined(BIG_ENDIAN_ORDER) #if defined(LITTLE_ENDIAN_ORDER) && defined(BIG_ENDIAN_ORDER)
#error Both LITTLE_ENDIAN_ORDER and BIG_ENDIAN_ORDER defined. #error Both LITTLE_ENDIAN_ORDER and BIG_ENDIAN_ORDER defined.
#endif #endif
#if (defined(LITTLE_ENDIAN_ORDER) || defined(BIG_ENDIAN_ORDER))
#ifdef FP_32BIT
/* If we know the endianness of this architecture, and we're using
32-bit fp_digits, we can optimize this */
{ {
unsigned char *pd = (unsigned char *)a->dp; unsigned char *pd = (unsigned char *)a->dp;
@@ -3575,10 +3576,10 @@ int fp_read_unsigned_bin(fp_int *a, const unsigned char *b, int c)
/* Use Duff's device to unroll the loop. */ /* Use Duff's device to unroll the loop. */
int idx = (c - 1) & ~3; int idx = (c - 1) & ~3;
switch (c % 4) { switch (c % 4) {
case 0: do { pd[idx+0] = *b++; // fallthrough case 0: do { pd[idx+0] = *b++; FALL_THROUGH;
case 3: pd[idx+1] = *b++; // fallthrough case 3: pd[idx+1] = *b++; FALL_THROUGH;
case 2: pd[idx+2] = *b++; // fallthrough case 2: pd[idx+2] = *b++; FALL_THROUGH;
case 1: pd[idx+3] = *b++; // fallthrough case 1: pd[idx+3] = *b++;
idx -= 4; idx -= 4;
} while ((c -= 4) > 0); } while ((c -= 4) > 0);
} }
@@ -3589,6 +3590,38 @@ int fp_read_unsigned_bin(fp_int *a, const unsigned char *b, int c)
} }
#endif #endif
} }
#elif defined(FP_64BIT)
/* If we know the endianness of this architecture, and we're using
64-bit fp_digits, we can optimize this */
{
unsigned char *pd = (unsigned char *)a->dp;
a->used = (c + sizeof(fp_digit) - 1)/sizeof(fp_digit);
/* read the bytes in */
#ifdef BIG_ENDIAN_ORDER
{
/* Use Duff's device to unroll the loop. */
int idx = (c - 1) & ~7;
switch (c % 8) {
case 0: do { pd[idx+0] = *b++; FALL_THROUGH;
case 7: pd[idx+1] = *b++; FALL_THROUGH;
case 6: pd[idx+2] = *b++; FALL_THROUGH;
case 5: pd[idx+3] = *b++; FALL_THROUGH;
case 4: pd[idx+4] = *b++; FALL_THROUGH;
case 3: pd[idx+5] = *b++; FALL_THROUGH;
case 2: pd[idx+6] = *b++; FALL_THROUGH;
case 1: pd[idx+7] = *b++;
idx -= 8;
} while ((c -= 8) > 0);
}
}
#else
for (c -= 1; c >= 0; c -= 1) {
pd[c] = *b++;
}
#endif
}
#endif
#else #else
/* read the bytes in */ /* read the bytes in */
for (; c > 0; c--) { for (; c > 0; c--) {
@@ -4721,21 +4754,21 @@ static int fp_prime_miller_rabin_ex(fp_int * a, fp_int * b, int *result,
#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 #ifndef WOLFSSL_SP_NO_2048
if (fp_count_bits(a) == 1024) if (fp_count_bits(a) == 1024 && fp_isodd(a))
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 && fp_isodd(a))
sp_ModExp_2048(b, r, a, y); sp_ModExp_2048(b, r, a, y);
else else
#endif #endif
#ifndef WOLFSSL_SP_NO_3072 #ifndef WOLFSSL_SP_NO_3072
if (fp_count_bits(a) == 1536) if (fp_count_bits(a) == 1536 && fp_isodd(a))
sp_ModExp_1536(b, r, a, y); sp_ModExp_1536(b, r, a, y);
else if (fp_count_bits(a) == 3072) else if (fp_count_bits(a) == 3072 && fp_isodd(a))
sp_ModExp_3072(b, r, a, y); sp_ModExp_3072(b, r, a, y);
else else
#endif #endif
#ifdef WOLFSSL_SP_4096 #ifdef WOLFSSL_SP_4096
if (fp_count_bits(a) == 4096) if (fp_count_bits(a) == 4096 && fp_isodd(a))
sp_ModExp_4096(b, r, a, y); sp_ModExp_4096(b, r, a, y);
else else
#endif #endif
@@ -5401,6 +5434,9 @@ static int fp_read_radix(fp_int *a, const char *str, int radix)
break; break;
} }
} }
if (y >= radix) {
return FP_VAL;
}
/* if the char was found in the map /* if the char was found in the map
* and is less than the given radix add it * and is less than the given radix add it
@@ -5520,7 +5556,12 @@ int mp_radix_size (mp_int *a, int radix, int *size)
} }
if (fp_iszero(a) == MP_YES) { if (fp_iszero(a) == MP_YES) {
*size = 2; #ifndef WC_DISABLE_RADIX_ZERO_PAD
if (radix == 16)
*size = 3;
else
#endif
*size = 2;
return FP_OKAY; return FP_OKAY;
} }
@@ -5591,6 +5632,10 @@ int mp_toradix (mp_int *a, char *str, int radix)
/* quick out if its zero */ /* quick out if its zero */
if (fp_iszero(a) == FP_YES) { if (fp_iszero(a) == FP_YES) {
#ifndef WC_DISABLE_RADIX_ZERO_PAD
if (radix == 16)
*str++ = '0';
#endif
*str++ = '0'; *str++ = '0';
*str = '\0'; *str = '\0';
return FP_OKAY; return FP_OKAY;
+2 -2
View File
@@ -71,7 +71,7 @@
#endif #endif
#if !defined(WOLFSSL_SP_MATH) #if (!defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL))
int get_digit_count(mp_int* a) int get_digit_count(mp_int* a)
{ {
if (a == NULL) if (a == NULL)
@@ -156,7 +156,7 @@ int mp_rand(mp_int* a, int digits, WC_RNG* rng)
ret = mp_set_bit(a, digits * DIGIT_BIT - 1); ret = mp_set_bit(a, digits * DIGIT_BIT - 1);
} }
#else #else
#if defined(WOLFSSL_SP_MATH) #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
if ((ret == MP_OKAY) && (digits > SP_INT_DIGITS)) if ((ret == MP_OKAY) && (digits > SP_INT_DIGITS))
#else #else
if ((ret == MP_OKAY) && (digits > FP_SIZE)) if ((ret == MP_OKAY) && (digits > FP_SIZE))
+4479 -2037
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -40,7 +40,7 @@
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 */
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
sp_int fp; sp_int fp;
#elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT) #elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
fp_int fp; fp_int fp;
+1
View File
@@ -60,6 +60,7 @@
WOLFSSL_API void cpuid_select_flags(word32 flags); WOLFSSL_API void cpuid_select_flags(word32 flags);
WOLFSSL_API void cpuid_set_flag(word32 flag); WOLFSSL_API void cpuid_set_flag(word32 flag);
WOLFSSL_API void cpuid_clear_flag(word32 flag); WOLFSSL_API void cpuid_clear_flag(word32 flag);
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
+2 -2
View File
@@ -33,7 +33,7 @@
may not be faster on all may not be faster on all
*/ */
#include <wolfssl/wolfcrypt/types.h> /* will set MP_xxBIT if not default */ #include <wolfssl/wolfcrypt/types.h> /* will set MP_xxBIT if not default */
#ifdef WOLFSSL_SP_MATH #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
#include <wolfssl/wolfcrypt/sp_int.h> #include <wolfssl/wolfcrypt/sp_int.h>
#elif defined(USE_FAST_MATH) #elif defined(USE_FAST_MATH)
#include <wolfssl/wolfcrypt/tfm.h> #include <wolfssl/wolfcrypt/tfm.h>
@@ -161,7 +161,7 @@ extern "C" {
#define MP_OKAY 0 /* ok result */ #define MP_OKAY 0 /* ok result */
#define MP_MEM -2 /* out of mem */ #define MP_MEM -2 /* out of mem */
#define MP_VAL -3 /* invalid input */ #define MP_VAL -3 /* invalid input */
#define MP_NOT_INF -4 /* point not at infinity */ #define MP_NOT_INF -4 /* point not at infinity */
#define MP_RANGE MP_NOT_INF #define MP_RANGE MP_NOT_INF
#define MP_YES 1 /* yes response */ #define MP_YES 1 /* yes response */
+4 -3
View File
@@ -2137,8 +2137,8 @@ extern void uITRON4_free(void *p) ;
#ifndef USE_WOLF_STRTOK #ifndef USE_WOLF_STRTOK
#define USE_WOLF_STRTOK #define USE_WOLF_STRTOK
#endif #endif
#ifndef WOLFSSL_SP_MOD_WORD_RP #ifndef WOLFSSL_SP_DIV_WORD_HALF
#define WOLFSSL_SP_MOD_WORD_RP #define WOLFSSL_SP_DIV_WORD_HALF
#endif #endif
#ifndef WOLFSSL_OLD_PRIME_CHECK #ifndef WOLFSSL_OLD_PRIME_CHECK
#define WOLFSSL_OLD_PRIME_CHECK #define WOLFSSL_OLD_PRIME_CHECK
@@ -2316,7 +2316,8 @@ extern void uITRON4_free(void *p) ;
#if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(WOLFSSL_SHA384) && \ #if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(WOLFSSL_SHA384) && \
!defined(WOLFSSL_SHA512) && defined(WC_NO_RNG) && \ !defined(WOLFSSL_SHA512) && defined(WC_NO_RNG) && \
defined(WOLFSSL_SP_MATH) && defined(WOLFSSL_RSA_PUBLIC_ONLY) (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)) && \
defined(WOLFSSL_RSA_PUBLIC_ONLY)
#undef WOLFSSL_NO_FORCE_ZERO #undef WOLFSSL_NO_FORCE_ZERO
#define WOLFSSL_NO_FORCE_ZERO #define WOLFSSL_NO_FORCE_ZERO
#endif #endif
+766 -187
View File
File diff suppressed because it is too large Load Diff