mirror of https://github.com/wolfSSL/wolfssl.git
Implement all relevant mp functions in sp_int
parent
aa9ed17afa
commit
91d23d3f5a
117
configure.ac
117
configure.ac
|
@ -4693,16 +4693,17 @@ ENABLED_SP_EC_256=no
|
|||
ENABLED_SP_EC_384=no
|
||||
ENABLED_SP_NO_MALLOC=no
|
||||
ENABLED_SP_NONBLOCK=no
|
||||
ENABLED_SP_SMALL=no
|
||||
for v in `echo $ENABLED_SP | tr "," " "`
|
||||
do
|
||||
case $v in
|
||||
small)
|
||||
ENABLED_SP_SMALL=yes
|
||||
ENABLED_SP_RSA=yes
|
||||
ENABLED_SP_DH=yes
|
||||
ENABLED_SP_FF_2048=yes
|
||||
ENABLED_SP_FF_3072=yes
|
||||
ENABLED_SP_ECC=yes
|
||||
ENABLED_SP_SMALL=yes
|
||||
ENABLED_SP_EC_256=yes
|
||||
if test "$host_cpu" = "x86_64"; then
|
||||
ENABLED_SP_FF_4096=yes
|
||||
|
@ -4727,8 +4728,8 @@ do
|
|||
;;
|
||||
|
||||
smallec256 | smallp256 | small256)
|
||||
ENABLED_SP_ECC=yes
|
||||
ENABLED_SP_SMALL=yes
|
||||
ENABLED_SP_ECC=yes
|
||||
ENABLED_SP_EC_256=yes
|
||||
;;
|
||||
ec256 | p256 | 256)
|
||||
|
@ -4736,8 +4737,8 @@ do
|
|||
ENABLED_SP_EC_256=yes
|
||||
;;
|
||||
smallec384 | smallp384 | small384)
|
||||
ENABLED_SP_ECC=yes
|
||||
ENABLED_SP_SMALL=yes
|
||||
ENABLED_SP_ECC=yes
|
||||
ENABLED_SP_EC_384=yes
|
||||
;;
|
||||
ec384 | p384 | 384)
|
||||
|
@ -4875,6 +4876,10 @@ if test "$ENABLED_SP_NONBLOCK" = "yes"; then
|
|||
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_NONBLOCK"
|
||||
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_NONBLOCK"
|
||||
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],
|
||||
|
@ -4960,11 +4965,97 @@ if test "$ENABLED_SP_MATH" = "yes"; then
|
|||
ENABLED_FASTMATH="no"
|
||||
ENABLED_SLOWMATH="no"
|
||||
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
|
||||
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_MATH"
|
||||
fi
|
||||
|
||||
|
||||
# Fast RSA using Intel IPP
|
||||
ippdir="${srcdir}/IPP"
|
||||
ipplib="lib" # if autoconf guesses 32bit system changes lib directory
|
||||
|
@ -5487,9 +5578,6 @@ then
|
|||
fi
|
||||
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_HAVE_WOLFSCEP"
|
||||
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"
|
||||
then
|
||||
|
@ -5597,7 +5685,17 @@ then
|
|||
AM_CFLAGS="$AM_CFLAGS $OPTIMIZE_HUGE_CFLAGS"
|
||||
fi
|
||||
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
|
||||
|
@ -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_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_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_MCAPI],[test "x$ENABLED_MCAPI" = "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 " * Fast RSA: $ENABLED_FAST_RSA"
|
||||
echo " * Single Precision: $ENABLED_SP"
|
||||
echo " * SP math implementation: $ENABLED_SP_MATH_ALL"
|
||||
echo " * Async Crypto: $ENABLED_ASYNCCRYPT"
|
||||
echo " * PKCS#11: $ENABLED_PKCS11"
|
||||
echo " * PKCS#12: $ENABLED_PKCS12"
|
||||
|
|
|
@ -1308,7 +1308,11 @@ static void Usage(void)
|
|||
printf("%s", msg[++msgid]);
|
||||
#endif
|
||||
#elif defined(USE_FAST_MATH)
|
||||
#if !defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_SP_MATH)
|
||||
printf("%d\n", FP_MAX_BITS/2);
|
||||
#else
|
||||
printf("%d\n", SP_INT_MAX_BITS/2);
|
||||
#endif
|
||||
#else
|
||||
/* normal math has unlimited max size */
|
||||
printf("%s", msg[++msgid]);
|
||||
|
|
|
@ -46101,7 +46101,6 @@ int wolfSSL_BN_mod_mul(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
|
|||
return SSL_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef OPENSSL_EXTRA
|
||||
const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void)
|
||||
{
|
||||
WOLFSSL_MSG("wolfSSL_BN_value_one");
|
||||
|
@ -46119,7 +46118,6 @@ const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void)
|
|||
|
||||
return bn_one;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* return compliant with OpenSSL
|
||||
* size of BIGNUM in bytes, 0 if error */
|
||||
|
|
|
@ -2853,6 +2853,9 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
|
|||
if (ssl->toInfoOn) AddLateName("ServerHello", &ssl->timeoutInfo);
|
||||
#endif
|
||||
|
||||
if (ssl == NULL || ssl->arrays == NULL)
|
||||
return BAD_FUNC_ARG;
|
||||
|
||||
/* Protocol version length check. */
|
||||
if (OPAQUE16_LEN > helloSz)
|
||||
return BUFFER_ERROR;
|
||||
|
|
19
tests/api.c
19
tests/api.c
|
@ -14237,7 +14237,7 @@ static int test_wc_MakeRsaKey (void)
|
|||
|
||||
RsaKey genKey;
|
||||
WC_RNG rng;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
#else
|
||||
int bits = 2048;
|
||||
|
@ -14898,7 +14898,7 @@ static int test_wc_RsaKeyToDer (void)
|
|||
RsaKey genKey;
|
||||
WC_RNG rng;
|
||||
byte* der;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
word32 derSz = 611;
|
||||
/* (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;
|
||||
WC_RNG rng;
|
||||
byte* der;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
word32 derLen = 162;
|
||||
#else
|
||||
|
@ -15107,7 +15107,7 @@ static int test_wc_RsaPublicEncryptDecrypt (void)
|
|||
const char* inStr = "Everyone gets Friday off.";
|
||||
word32 plainLen = 25;
|
||||
word32 inLen = (word32)XSTRLEN(inStr);
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
word32 cipherLen = 128;
|
||||
#else
|
||||
|
@ -15197,7 +15197,7 @@ static int test_wc_RsaPublicEncryptDecrypt_ex (void)
|
|||
const word32 plainSz = 25;
|
||||
byte* res = NULL;
|
||||
int idx = 0;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
const word32 cipherSz = 128;
|
||||
#else
|
||||
|
@ -15314,7 +15314,7 @@ static int test_wc_RsaSSL_SignVerify (void)
|
|||
const word32 plainSz = 25;
|
||||
word32 inLen = (word32)XSTRLEN(inStr);
|
||||
word32 idx = 0;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
const word32 outSz = 128;
|
||||
#else
|
||||
|
@ -15476,7 +15476,7 @@ static int test_wc_RsaEncryptSize (void)
|
|||
}
|
||||
|
||||
printf(testingFmt, "wc_RsaEncryptSize()");
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
if (ret == 0) {
|
||||
ret = MAKE_RSA_KEY(&key, 1024, WC_RSA_EXPONENT, &rng);
|
||||
if (ret == 0) {
|
||||
|
@ -15546,7 +15546,7 @@ static int test_wc_RsaFlattenPublicKey (void)
|
|||
byte n[256];
|
||||
word32 eSz = sizeof(e);
|
||||
word32 nSz = sizeof(n);
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
int bits = 1024;
|
||||
#else
|
||||
int bits = 2048;
|
||||
|
@ -27928,6 +27928,8 @@ static void test_wolfSSL_BN(void)
|
|||
AssertIntEQ((int)(value[0] & 0x03), 3);
|
||||
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(b, 5), 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
|
||||
AssertIntEQ(BN_get_word(c), 4);
|
||||
#endif
|
||||
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
|
|
|
@ -587,8 +587,8 @@ static const char* bench_result_words1[][4] = {
|
|||
defined(HAVE_CURVE25519) || defined(HAVE_CURVE25519_SHARED_SECRET) || \
|
||||
defined(HAVE_ED25519) || defined(HAVE_CURVE448) || \
|
||||
defined(HAVE_CURVE448_SHARED_SECRET) || defined(HAVE_ED448)
|
||||
#if defined(HAVE_ECC) || !defined(WOLFSSL_RSA_PUBLIC_ONLY) || \
|
||||
defined(WOLFSSL_PUBLIC_MP) || !defined(NO_DH)
|
||||
#if defined(HAVE_ECC) || defined(WOLFSSL_PUBLIC_MP) || !defined(NO_DH) || \
|
||||
(!defined(NO_RSA) && !defined(WOLFSSL_RSA_PUBLIC_ONLY))
|
||||
|
||||
static const char* bench_desc_words[][9] = {
|
||||
/* 0 1 2 3 4 5 6 7 8 */
|
||||
|
@ -927,6 +927,27 @@ static int rsa_sign_verify = 0;
|
|||
static int use_ffdhe = 0;
|
||||
#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 */
|
||||
static int csv_format = 0;
|
||||
#ifdef BENCH_ASYM
|
||||
|
@ -4344,7 +4365,7 @@ exit:
|
|||
void bench_rsaKeyGen(int doAsync)
|
||||
{
|
||||
int k, keySz;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
const int keySizes[2] = {1024, 2048};
|
||||
#else
|
||||
const int keySizes[1] = {2048};
|
||||
|
@ -4713,7 +4734,7 @@ void bench_rsa(int doAsync)
|
|||
for (i = 0; i < BENCH_MAX_PENDING; i++) {
|
||||
/* setup an async context for each key */
|
||||
if (wc_InitRsaKey_ex(&rsaKey[i], HEAP_HINT,
|
||||
doAsync ? devId : INVALID_DEVID) < 0) {
|
||||
doAsync ? devId : INVALID_DEVID) < 0) {
|
||||
goto exit_bench_rsa;
|
||||
}
|
||||
|
||||
|
@ -5228,23 +5249,6 @@ void bench_ntruKeyGen(void)
|
|||
#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
|
||||
static int bench_ecc_size = BENCH_ECC_SIZE;
|
||||
|
||||
void bench_eccMakeKey(int doAsync)
|
||||
{
|
||||
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];
|
||||
|
||||
#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
|
||||
#if !defined(NO_ASN) && defined(HAVE_ECC_SIGN)
|
||||
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
|
||||
|
||||
#ifdef DECLARE_VAR_IS_HEAP_ALLOC
|
||||
|
|
|
@ -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(HAVE_ECC) && defined(HAVE_ECC_KEY_EXPORT)) || \
|
||||
((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.
|
||||
*
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
|
||||
#include <wolfssl/wolfcrypt/cpuid.h>
|
||||
|
||||
#if (defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \
|
||||
defined(WOLFSSL_AESNI)) && !defined(WOLFSSL_NO_ASM)
|
||||
#if defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \
|
||||
defined(WOLFSSL_AESNI) || defined(WOLFSSL_SP_X86_64_ASM)
|
||||
/* 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
|
||||
*/
|
||||
|
|
|
@ -1262,7 +1262,7 @@ static int GeneratePublicDh(DhKey* key, byte* priv, word32 privSz,
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH);
|
||||
if (x == NULL)
|
||||
|
@ -1482,6 +1482,7 @@ int wc_DhCheckPubKey_ex(DhKey* key, const byte* pub, word32 pubSz,
|
|||
ret = MP_INIT_E;
|
||||
}
|
||||
|
||||
/* SP 800-56Ar3, section 5.6.2.3.1, process step 2 */
|
||||
if (ret == 0 && prime != NULL) {
|
||||
#ifdef WOLFSSL_HAVE_SP_DH
|
||||
#ifndef WOLFSSL_SP_NO_2048
|
||||
|
@ -1511,8 +1512,7 @@ int wc_DhCheckPubKey_ex(DhKey* key, const byte* pub, word32 pubSz,
|
|||
#endif
|
||||
|
||||
{
|
||||
/* SP 800-56Ar3, section 5.6.2.3.1, process step 2 */
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
/* calculate (y^q) mod(p), store back into y */
|
||||
if (mp_exptmod(y, q, p, y) != MP_OKAY)
|
||||
ret = MP_EXPTMOD_E;
|
||||
|
@ -1797,7 +1797,7 @@ int wc_DhCheckKeyPair(DhKey* key, const byte* pub, word32 pubSz,
|
|||
#endif
|
||||
#endif
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
if (mp_exptmod(&key->g, privateKey, &key->p, checkKey) != MP_OKAY)
|
||||
ret = MP_EXPTMOD_E;
|
||||
#else
|
||||
|
@ -1853,14 +1853,14 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
|
|||
{
|
||||
int ret = 0;
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* y;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
mp_int* x;
|
||||
mp_int* z;
|
||||
mp_int* y = NULL;
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
mp_int* x = NULL;
|
||||
mp_int* z = NULL;
|
||||
#endif
|
||||
#else
|
||||
mp_int y[1];
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
mp_int x[1];
|
||||
mp_int z[1];
|
||||
#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);
|
||||
if (y == NULL)
|
||||
return MEMORY_E;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
x = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_DH);
|
||||
if (x == NULL) {
|
||||
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);
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
XFREE(z, key->heap, DYNAMIC_TYPE_DH);
|
||||
XFREE(x, key->heap, DYNAMIC_TYPE_DH);
|
||||
#endif
|
||||
|
@ -1933,7 +1933,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
|
|||
|
||||
mp_clear(y);
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
XFREE(z, key->heap, DYNAMIC_TYPE_DH);
|
||||
XFREE(x, key->heap, DYNAMIC_TYPE_DH);
|
||||
#endif
|
||||
|
@ -1955,7 +1955,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
|
|||
|
||||
mp_clear(y);
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
XFREE(z, key->heap, DYNAMIC_TYPE_DH);
|
||||
XFREE(x, key->heap, DYNAMIC_TYPE_DH);
|
||||
#endif
|
||||
|
@ -1966,7 +1966,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
if (mp_init_multi(x, y, z, 0, 0, 0) != MP_OKAY) {
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
XFREE(z, key->heap, DYNAMIC_TYPE_DH);
|
||||
|
@ -2001,7 +2001,7 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
|
|||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
XFREE(z, key->heap, DYNAMIC_TYPE_DH);
|
||||
XFREE(x, key->heap, DYNAMIC_TYPE_DH);
|
||||
#endif
|
||||
|
|
|
@ -150,7 +150,7 @@ ECC Curve Sizes:
|
|||
#include <wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h>
|
||||
#endif
|
||||
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
#define GEN_MEM_ERR MP_MEM
|
||||
#elif defined(USE_FAST_MATH)
|
||||
#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,
|
||||
mp_int* a, mp_int* modulus, mp_digit mp)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* t1 = NULL;
|
||||
mp_int* t2 = NULL;
|
||||
|
@ -1936,7 +1936,7 @@ done:
|
|||
int ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
|
||||
mp_int* modulus, mp_digit mp)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* t1 = 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)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* t1 = 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 */
|
||||
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) {
|
||||
err = mp_invmod_mont_ct(z, modulus, t1, mp);
|
||||
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)
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
|
||||
#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
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
/* Convert the point to montogmery form.
|
||||
*
|
||||
* @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
|
||||
return err;
|
||||
}
|
||||
#endif /* !WOLFSSL_SP_MATH */
|
||||
|
||||
#ifdef WOLFSSL_SMALL_STACK_CACHE
|
||||
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,
|
||||
mp_int* modulus, int map, void* heap)
|
||||
#endif
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
{
|
||||
ecc_point *tG, *M[M_POINTS];
|
||||
int i, err;
|
||||
|
@ -3021,7 +3020,7 @@ exit:
|
|||
return ECC_BAD_ARG_E;
|
||||
}
|
||||
#endif
|
||||
#endif /* !defined(WOLFSSL_SP_MATH) && !defined(FP_ECC) */
|
||||
#endif /* !WOLFSSL_SP_MATH || !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,
|
||||
mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
|
||||
void* heap)
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
{
|
||||
ecc_point *tG, *M[M_POINTS];
|
||||
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)
|
||||
{
|
||||
int err = MP_OKAY;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
ecc_point* result = NULL;
|
||||
word32 x = 0;
|
||||
#endif
|
||||
|
@ -3825,7 +3824,7 @@ static int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point,
|
|||
else
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
{
|
||||
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;
|
||||
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
ecc_point* base = NULL;
|
||||
#endif
|
||||
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) || (key->k.sign == MP_NEG) ||
|
||||
if ((err == MP_OKAY) && (mp_iszero(&key->k) || mp_isneg(&key->k) ||
|
||||
(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;
|
||||
}
|
||||
|
@ -4264,7 +4258,7 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curveIn,
|
|||
else
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
err = WC_KEY_SIZE_E;
|
||||
#else
|
||||
{
|
||||
|
@ -4377,7 +4371,7 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
|
|||
int err;
|
||||
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
|
||||
!defined(WOLFSSL_CRYPTOCELL)
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
DECLARE_CURVE_SPECS(curve, ECC_CURVE_FIELD_COUNT);
|
||||
#endif
|
||||
#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 */
|
||||
|
||||
{ /* software key gen */
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
err = WC_KEY_SIZE_E;
|
||||
#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)
|
||||
{
|
||||
int err = 0;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
mp_int* e;
|
||||
#if (!defined(WOLFSSL_ASYNC_CRYPT) || !defined(HAVE_CAVIUM_V)) && \
|
||||
!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;
|
||||
}
|
||||
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
if (key->idx == ECC_CUSTOM_IDX ||
|
||||
(ecc_sets[key->idx].id != ECC_SECP256R1 &&
|
||||
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
|
||||
|
||||
#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 defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_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
|
||||
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_CAVIUM_V)
|
||||
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);
|
||||
#endif
|
||||
FREE_CURVE_SPECS();
|
||||
#endif /* WOLFSSL_SP_MATH */
|
||||
#endif /* !WOLFSSL_SP_MATH */
|
||||
|
||||
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 ret = 0;
|
||||
DECLARE_CURVE_SPECS(curve, 1);
|
||||
|
||||
if (k == NULL || klen == 0 || key == NULL) {
|
||||
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 (key->sign_k == NULL) {
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
#endif /* WOLFSSL_ECDSA_SET_K */
|
||||
|
@ -6034,7 +6039,8 @@ int ecc_mul2add(ecc_point* A, mp_int* kA,
|
|||
}
|
||||
|
||||
#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
|
||||
|
@ -6348,8 +6354,9 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC)) && \
|
||||
!defined(FREESCALE_LTC_ECC)
|
||||
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_HAVE_SP_ECC) || \
|
||||
(defined(WOLFSSL_SP_MATH_ALL) && defined(WOLFSSL_HAVE_SP_ECC)) && \
|
||||
!defined(FREESCALE_LTC_ECC)
|
||||
if (key->idx != ECC_CUSTOM_IDX
|
||||
#if defined(WOLFSSL_ASYNC_CRYPT) && defined(WC_ASYNC_ENABLE_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
|
||||
|
||||
#if !defined(WOLFSSL_SP_MATH) || defined(FREESCALE_LTC_ECC)
|
||||
|
||||
ALLOC_CURVE_SPECS(ECC_CURVE_FIELD_COUNT);
|
||||
|
||||
#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
|
||||
if (err == MP_OKAY && compressed == 1) { /* build y */
|
||||
#ifndef 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
|
||||
#ifndef WOLFSSL_SP_NO_256
|
||||
#if defined(WOLFSSL_HAVE_SP_ECC)
|
||||
#ifndef WOLFSSL_SP_NO_256
|
||||
if (curve_idx != ECC_CUSTOM_IDX &&
|
||||
ecc_sets[curve_idx].id == ECC_SECP256R1) {
|
||||
sp_ecc_uncompress_256(point->x, pointType, point->y);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#ifdef WOLFSSL_SP_384
|
||||
#endif
|
||||
#ifdef WOLFSSL_SP_384
|
||||
if (curve_idx != ECC_CUSTOM_IDX &&
|
||||
ecc_sets[curve_idx].id == ECC_SECP384R1) {
|
||||
sp_ecc_uncompress_384(point->x, pointType, point->y);
|
||||
}
|
||||
else
|
||||
#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;
|
||||
}
|
||||
#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 ? */
|
||||
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;
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
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 */
|
||||
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 */
|
||||
#ifdef WOLFSSL_CUSTOM_CURVES
|
||||
|
@ -7361,7 +7373,7 @@ static int ecc_check_pubkey_order(ecc_key* key, ecc_point* pubkey, mp_int* a,
|
|||
else
|
||||
#endif
|
||||
#endif
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
err = wc_ecc_mulmod_ex(order, pubkey, inf, a, prime, 1, key->heap);
|
||||
if (err == MP_OKAY && !wc_ecc_point_is_at_infinity(inf))
|
||||
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 err;
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
|
||||
!defined(WOLFSSL_CRYPTOCELL)
|
||||
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 */
|
||||
/* private keys must be in the range [1, n-1] */
|
||||
if ((err == MP_OKAY) && (key->type == ECC_PRIVATEKEY) &&
|
||||
(mp_iszero(&key->k) || (key->k.sign == MP_NEG) ||
|
||||
(mp_cmp(&key->k, curve->order) != MP_LT))) {
|
||||
(mp_iszero(&key->k) || mp_isneg(&key->k) ||
|
||||
(mp_cmp(&key->k, curve->order) != MP_LT))) {
|
||||
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
|
||||
if (err == MP_OKAY && compressed == 1) { /* build y */
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
mp_int t1, t2;
|
||||
int did_init = 0;
|
||||
|
||||
|
@ -8392,7 +8404,7 @@ int wc_ecc_sig_size(ecc_key* key)
|
|||
#endif
|
||||
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
|
||||
/** Our FP cache */
|
||||
typedef struct {
|
||||
|
@ -9037,7 +9049,7 @@ static int add_entry(int idx, ecc_point *g)
|
|||
}
|
||||
#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
|
||||
*
|
||||
* The algorithm builds patterns in increasing bit order by first making all
|
||||
|
@ -9333,7 +9345,7 @@ done:
|
|||
#endif
|
||||
|
||||
#ifdef ECC_SHAMIR
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
/* perform a fixed point ECC mulmod */
|
||||
static int accel_fp_mul2add(int idx1, int idx2,
|
||||
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,
|
||||
mp_int* modulus, int map, void* heap)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
int idx, err = MP_OKAY;
|
||||
mp_digit mp;
|
||||
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,
|
||||
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;
|
||||
mp_digit mp;
|
||||
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
|
||||
}
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
/* helper function for freeing the cache ...
|
||||
must be called with the cache mutex locked */
|
||||
static void wc_ecc_fp_free_cache(void)
|
||||
|
@ -9968,7 +9980,7 @@ void wc_ecc_fp_init(void)
|
|||
/** Free the Fixed Point cache */
|
||||
void wc_ecc_fp_free(void)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifndef HAVE_THREAD_LS
|
||||
if (initMutex == 0) { /* extra sanity check if wolfCrypt_Init not called */
|
||||
wc_InitMutex(&ecc_fp_lock);
|
||||
|
|
|
@ -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)
|
||||
#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);
|
||||
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);
|
||||
else
|
||||
#endif
|
||||
#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);
|
||||
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);
|
||||
else
|
||||
#endif
|
||||
#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);
|
||||
else
|
||||
#endif
|
||||
|
@ -5254,7 +5254,12 @@ int mp_radix_size (mp_int *a, int radix, int *size)
|
|||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -5311,6 +5316,11 @@ int mp_toradix (mp_int *a, char *str, int radix)
|
|||
|
||||
/* quick out if its zero */
|
||||
if (mp_iszero(a) == MP_YES) {
|
||||
#ifndef WC_DISABLE_RADIX_ZERO_PAD
|
||||
if (radix == 16) {
|
||||
*str++ = '0';
|
||||
}
|
||||
#endif
|
||||
*str++ = '0';
|
||||
*str = '\0';
|
||||
return MP_OKAY;
|
||||
|
|
|
@ -651,19 +651,25 @@ int wc_CheckRsaKey(RsaKey* key)
|
|||
break;
|
||||
#endif /* WOLFSSL_SP_4096 */
|
||||
default:
|
||||
/* If using only single prcsision math then issue key size error,
|
||||
otherwise fall-back to multi-precision math calculation */
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
/* If using only single precsision math then issue key size
|
||||
* error, otherwise fall-back to multi-precision math
|
||||
* calculation */
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
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
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#else
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -671,7 +677,7 @@ int wc_CheckRsaKey(RsaKey* key)
|
|||
if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY)
|
||||
ret = MP_EXPTMOD_E;
|
||||
}
|
||||
#endif /* !WOLFSSL_SP_MATH */
|
||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||
|
||||
if (ret == 0) {
|
||||
if (mp_cmp(k, tmp) != MP_EQ)
|
||||
|
@ -2076,7 +2082,7 @@ done:
|
|||
static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
||||
word32* outLen, int type, RsaKey* key, WC_RNG* rng)
|
||||
{
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
mp_int* tmp;
|
||||
#ifdef WC_RSA_BLINDING
|
||||
|
@ -2183,7 +2189,7 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
|||
#endif
|
||||
#endif /* WOLFSSL_HAVE_SP_RSA */
|
||||
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
(void)rng;
|
||||
WOLFSSL_MSG("SP Key Size Error");
|
||||
return WC_KEY_SIZE_E;
|
||||
|
@ -2237,8 +2243,15 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
|||
ret = MP_INVMOD_E;
|
||||
|
||||
/* rnd = rnd^e */
|
||||
#ifndef WOLFSSL_SP_MATH_ALL
|
||||
if (ret == 0 && mp_exptmod(rnd, &key->e, &key->n, rnd) != MP_OKAY)
|
||||
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 */
|
||||
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;
|
||||
|
||||
/* 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)
|
||||
ret = MP_SUB_E;
|
||||
#endif
|
||||
|
||||
if (ret == 0 && mp_mulmod(tmp, &key->u, &key->p,
|
||||
tmp) != MP_OKAY)
|
||||
|
@ -3751,8 +3770,11 @@ static int wc_CompareDiffPQ(mp_int* p, mp_int* q, int size)
|
|||
if (ret == 0)
|
||||
ret = mp_sub(p, q, &d);
|
||||
|
||||
#if !defined(WOLFSSL_SP_MATH) && (!defined(WOLFSSL_SP_MATH_ALL) || \
|
||||
defined(WOLFSSL_SP_INT_NEGATIVE))
|
||||
if (ret == 0)
|
||||
ret = mp_abs(&d, &d);
|
||||
#endif
|
||||
|
||||
/* compare */
|
||||
if (ret == 0)
|
||||
|
|
|
@ -213,7 +213,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
|
||||
|
||||
/* 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 */
|
||||
#define NEED_SOFT_SHA256
|
||||
|
@ -981,7 +982,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
|
||||
if (sha256->buffLen == WC_SHA256_BLOCK_SIZE) {
|
||||
#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))
|
||||
#endif
|
||||
{
|
||||
|
@ -1013,7 +1015,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
|
||||
/* process blocks */
|
||||
#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)
|
||||
#endif
|
||||
{
|
||||
|
@ -1028,11 +1031,13 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
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
|
||||
#endif
|
||||
#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) {
|
||||
word32* local32 = sha256->buffer;
|
||||
|
@ -1040,7 +1045,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
/* Intel transform function requires use of sha256->buffer */
|
||||
/* Little Endian requires byte swap, so can't use data directly */
|
||||
#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) {
|
||||
local32 = (word32*)data;
|
||||
}
|
||||
|
@ -1054,7 +1060,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
len -= WC_SHA256_BLOCK_SIZE;
|
||||
|
||||
#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))
|
||||
#endif
|
||||
{
|
||||
|
@ -1141,7 +1148,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
sha256->buffLen += WC_SHA256_BLOCK_SIZE - sha256->buffLen;
|
||||
|
||||
#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))
|
||||
#endif
|
||||
{
|
||||
|
@ -1178,7 +1186,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
|
||||
/* store lengths */
|
||||
#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))
|
||||
#endif
|
||||
{
|
||||
|
@ -1191,10 +1200,11 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
XMEMCPY(&local[WC_SHA256_PAD_SIZE + sizeof(word32)], &sha256->loLen,
|
||||
sizeof(word32));
|
||||
|
||||
#if defined(FREESCALE_MMCAU_SHA) || defined(HAVE_INTEL_AVX1) || \
|
||||
defined(HAVE_INTEL_AVX2)
|
||||
#if defined(FREESCALE_MMCAU_SHA) || (defined(USE_INTEL_SPEEDUP) && \
|
||||
(defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)))
|
||||
/* 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))
|
||||
#endif
|
||||
{
|
||||
|
@ -1374,7 +1384,8 @@ static int InitSha256(wc_Sha256* sha256)
|
|||
sha224->loLen = 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 */
|
||||
Sha256_SetTransform();
|
||||
#endif
|
||||
|
|
14122
wolfcrypt/src/sp_int.c
14122
wolfcrypt/src/sp_int.c
File diff suppressed because it is too large
Load Diff
|
@ -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_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_sub(&temp2, &s, &temp1);
|
||||
if (!r) r = mp_submod(&temp2, &s, &srp->N, &temp1);
|
||||
|
||||
/* temp2 = a + u * x */
|
||||
if (!r) r = mp_mulmod(&u, &srp->auth, &srp->N, &s);
|
||||
|
|
|
@ -86,19 +86,19 @@ WOLFSSL_LOCAL int sp_ModExp_4096(mp_int* base, mp_int* exp, mp_int* mod,
|
|||
#endif
|
||||
|
||||
|
||||
#ifndef WOLFSSL_SP_MATH
|
||||
#if !defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
|
||||
/* math settings check */
|
||||
word32 CheckRunTimeSettings(void)
|
||||
{
|
||||
return CTC_SETTINGS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* math settings size check */
|
||||
word32 CheckRunTimeFastMath(void)
|
||||
{
|
||||
return FP_SIZE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
@ -2790,7 +2790,7 @@ int fp_exptmod_ex(fp_int * G, fp_int * X, int digits, fp_int * P, fp_int * Y)
|
|||
#endif
|
||||
|
||||
if (fp_iszero(G)) {
|
||||
fp_set(G, 0);
|
||||
fp_set(Y, 0);
|
||||
return FP_OKAY;
|
||||
}
|
||||
|
||||
|
@ -3557,14 +3557,15 @@ int fp_read_unsigned_bin(fp_int *a, const unsigned char *b, int c)
|
|||
b += excess;
|
||||
}
|
||||
|
||||
/* If we know the endianness of this architecture, and we're using
|
||||
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 */
|
||||
/* Not both endian simultaneously */
|
||||
#if defined(LITTLE_ENDIAN_ORDER) && defined(BIG_ENDIAN_ORDER)
|
||||
#error Both LITTLE_ENDIAN_ORDER and BIG_ENDIAN_ORDER defined.
|
||||
#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;
|
||||
|
||||
|
@ -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. */
|
||||
int idx = (c - 1) & ~3;
|
||||
switch (c % 4) {
|
||||
case 0: do { pd[idx+0] = *b++; // fallthrough
|
||||
case 3: pd[idx+1] = *b++; // fallthrough
|
||||
case 2: pd[idx+2] = *b++; // fallthrough
|
||||
case 1: pd[idx+3] = *b++; // fallthrough
|
||||
case 0: do { pd[idx+0] = *b++; FALL_THROUGH;
|
||||
case 3: pd[idx+1] = *b++; FALL_THROUGH;
|
||||
case 2: pd[idx+2] = *b++; FALL_THROUGH;
|
||||
case 1: pd[idx+3] = *b++;
|
||||
idx -= 4;
|
||||
} while ((c -= 4) > 0);
|
||||
}
|
||||
|
@ -3589,6 +3590,38 @@ int fp_read_unsigned_bin(fp_int *a, const unsigned char *b, int c)
|
|||
}
|
||||
#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
|
||||
/* read the bytes in */
|
||||
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)) || \
|
||||
defined(WOLFSSL_HAVE_SP_DH)
|
||||
#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);
|
||||
else if (fp_count_bits(a) == 2048)
|
||||
else if (fp_count_bits(a) == 2048 && fp_isodd(a))
|
||||
sp_ModExp_2048(b, r, a, y);
|
||||
else
|
||||
#endif
|
||||
#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);
|
||||
else if (fp_count_bits(a) == 3072)
|
||||
else if (fp_count_bits(a) == 3072 && fp_isodd(a))
|
||||
sp_ModExp_3072(b, r, a, y);
|
||||
else
|
||||
#endif
|
||||
#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);
|
||||
else
|
||||
#endif
|
||||
|
@ -5401,6 +5434,9 @@ static int fp_read_radix(fp_int *a, const char *str, int radix)
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (y >= radix) {
|
||||
return FP_VAL;
|
||||
}
|
||||
|
||||
/* if the char was found in the map
|
||||
* 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) {
|
||||
*size = 2;
|
||||
#ifndef WC_DISABLE_RADIX_ZERO_PAD
|
||||
if (radix == 16)
|
||||
*size = 3;
|
||||
else
|
||||
#endif
|
||||
*size = 2;
|
||||
return FP_OKAY;
|
||||
}
|
||||
|
||||
|
@ -5591,6 +5632,10 @@ int mp_toradix (mp_int *a, char *str, int radix)
|
|||
|
||||
/* quick out if its zero */
|
||||
if (fp_iszero(a) == FP_YES) {
|
||||
#ifndef WC_DISABLE_RADIX_ZERO_PAD
|
||||
if (radix == 16)
|
||||
*str++ = '0';
|
||||
#endif
|
||||
*str++ = '0';
|
||||
*str = '\0';
|
||||
return FP_OKAY;
|
||||
|
|
|
@ -71,7 +71,7 @@
|
|||
#endif
|
||||
|
||||
|
||||
#if !defined(WOLFSSL_SP_MATH)
|
||||
#if (!defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL))
|
||||
int get_digit_count(mp_int* a)
|
||||
{
|
||||
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);
|
||||
}
|
||||
#else
|
||||
#if defined(WOLFSSL_SP_MATH)
|
||||
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
if ((ret == MP_OKAY) && (digits > SP_INT_DIGITS))
|
||||
#else
|
||||
if ((ret == MP_OKAY) && (digits > FP_SIZE))
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -40,7 +40,7 @@
|
|||
typedef struct WOLFSSL_BIGNUM {
|
||||
int neg; /* openssh deference */
|
||||
void *internal; /* our big num */
|
||||
#ifdef WOLFSSL_SP_MATH
|
||||
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
sp_int fp;
|
||||
#elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
fp_int fp;
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
WOLFSSL_API void cpuid_select_flags(word32 flags);
|
||||
WOLFSSL_API void cpuid_set_flag(word32 flag);
|
||||
WOLFSSL_API void cpuid_clear_flag(word32 flag);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
may not be faster on all
|
||||
*/
|
||||
#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>
|
||||
#elif defined(USE_FAST_MATH)
|
||||
#include <wolfssl/wolfcrypt/tfm.h>
|
||||
|
@ -161,7 +161,7 @@ extern "C" {
|
|||
#define MP_OKAY 0 /* ok result */
|
||||
#define MP_MEM -2 /* out of mem */
|
||||
#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_YES 1 /* yes response */
|
||||
|
|
|
@ -2137,8 +2137,8 @@ extern void uITRON4_free(void *p) ;
|
|||
#ifndef USE_WOLF_STRTOK
|
||||
#define USE_WOLF_STRTOK
|
||||
#endif
|
||||
#ifndef WOLFSSL_SP_MOD_WORD_RP
|
||||
#define WOLFSSL_SP_MOD_WORD_RP
|
||||
#ifndef WOLFSSL_SP_DIV_WORD_HALF
|
||||
#define WOLFSSL_SP_DIV_WORD_HALF
|
||||
#endif
|
||||
#ifndef 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) && \
|
||||
!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
|
||||
#define WOLFSSL_NO_FORCE_ZERO
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue