Merge pull request #10563 from douzzer/20260528-pk-vector-regs

20260528-pk-vector-regs
This commit is contained in:
Sean Parkinson
2026-06-02 12:59:46 +10:00
committed by GitHub
30 changed files with 692 additions and 24431 deletions
+1 -1
View File
@@ -741,10 +741,10 @@ WOLFSSL_CONTIKI
WOLFSSL_CRL_ALLOW_MISSING_CDP
WOLFSSL_DISABLE_EARLY_SANITY_CHECKS
WOLFSSL_DRBG_SHA256
WOLFSSL_DTLS13_ECHO_LEGACY_SESSION_ID
WOLFSSL_DTLS_DISALLOW_FUTURE
WOLFSSL_DTLS_RECORDS_CAN_SPAN_DATAGRAMS
WOLFSSL_DTLS_RESEND_ONLY_TIMEOUT
WOLFSSL_DTLS13_ECHO_LEGACY_SESSION_ID
WOLFSSL_DUMP_MEMIO_STREAM
WOLFSSL_DUP_CERTPOL
WOLFSSL_EARLY_DATA_NO_ANTI_REPLAY
+2 -2
View File
@@ -1513,6 +1513,7 @@ then
test "$enable_hkdf" = "" && enable_hkdf=yes
test "$enable_eccencrypt" = "" && test "$enable_ecc" != "no" && enable_eccencrypt=yes
test "$enable_fpecc" = "" && test "$enable_ecc" != "no" && enable_fpecc=yes
test "$enable_eccsi" = "" && test "$enable_ecc" != "no" && enable_eccsi=yes
test "$enable_psk" = "" && enable_psk=yes
test "$enable_cmac" = "" && enable_cmac=yes
test "$enable_cmac_kdf" = "" && enable_cmac_kdf=yes
@@ -1580,13 +1581,12 @@ then
test "$enable_aessiv" = "" && enable_aessiv=yes
# AFALG lacks AES-EAX
test "$enable_aeseax" = "" && test "$enable_afalg" != "yes" && enable_aeseax=yes
test "$enable_sakke" = "" && test "$enable_ecc" != "no" && enable_sakke=yes
if test "$KERNEL_MODE_DEFAULTS" != "yes"
then
test "$enable_cryptocb" = "" && enable_cryptocb=yes
test "$enable_pkcallbacks" = "" && enable_pkcallbacks=yes
test "$enable_eccsi" = "" && test "$enable_ecc" != "no" && enable_eccsi=yes
test "$enable_sakke" = "" && test "$enable_ecc" != "no" && enable_sakke=yes
fi
fi
+15 -12
View File
@@ -89,37 +89,40 @@
#include <crypto/dh.h>
#define WOLFKM_DH_NAME ("dh")
#define WOLFKM_DH_DRIVER ("dh" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT)
#define WOLFKM_DH_DRIVER_ISA_EXT "-avx2"
#else
#define WOLFKM_DH_DRIVER_ISA_EXT ""
#endif
#define WOLFKM_DH_DRIVER_SUFFIX WOLFKM_DH_DRIVER_ISA_EXT \
WOLFKM_DRIVER_SUFFIX_BASE
#define WOLFKM_DH_DRIVER ("dh" WOLFKM_DH_DRIVER_SUFFIX)
#ifdef HAVE_FFDHE_2048
#define WOLFKM_FFDHE2048_NAME ("ffdhe2048(dh)")
#define WOLFKM_FFDHE2048_DRIVER ("ffdhe2048" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_FFDHE2048_DRIVER ("ffdhe2048" WOLFKM_DH_DRIVER_SUFFIX)
#endif /* HAVE_FFDHE_2048 */
#ifdef HAVE_FFDHE_3072
#define WOLFKM_FFDHE3072_NAME ("ffdhe3072(dh)")
#define WOLFKM_FFDHE3072_DRIVER ("ffdhe3072" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_FFDHE3072_DRIVER ("ffdhe3072" WOLFKM_DH_DRIVER_SUFFIX)
#endif /* HAVE_FFDHE_3072 */
#ifdef HAVE_FFDHE_4096
#define WOLFKM_FFDHE4096_NAME ("ffdhe4096(dh)")
#define WOLFKM_FFDHE4096_DRIVER ("ffdhe4096" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_FFDHE4096_DRIVER ("ffdhe4096" WOLFKM_DH_DRIVER_SUFFIX)
#endif /* HAVE_FFDHE_4096 */
#ifdef HAVE_FFDHE_6144
#define WOLFKM_FFDHE6144_NAME ("ffdhe6144(dh)")
#define WOLFKM_FFDHE6144_DRIVER ("ffdhe6144" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_FFDHE6144_DRIVER ("ffdhe6144" WOLFKM_DH_DRIVER_SUFFIX)
#endif /* HAVE_FFDHE_6144 */
#ifdef HAVE_FFDHE_8192
#define WOLFKM_FFDHE8192_NAME ("ffdhe8192(dh)")
#define WOLFKM_FFDHE8192_DRIVER ("ffdhe8192" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_FFDHE8192_DRIVER ("ffdhe8192" WOLFKM_DH_DRIVER_SUFFIX)
#endif /* HAVE_FFDHE_8192 */
static int linuxkm_test_kpp_driver(const char * driver,
+12 -7
View File
@@ -63,19 +63,24 @@
#include <wolfssl/wolfcrypt/ecc.h>
#include <crypto/ecdh.h>
#define WOLFKM_ECDH_DRIVER ("ecdh-wolfcrypt")
#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT)
#define WOLFKM_ECDH_DRIVER_ISA_EXT "-avx2"
#else
#define WOLFKM_ECDH_DRIVER_ISA_EXT ""
#endif
#define WOLFKM_ECDH_DRIVER_SUFFIX WOLFKM_ECDH_DRIVER_ISA_EXT \
WOLFKM_DRIVER_SUFFIX_BASE
#define WOLFKM_ECDH_DRIVER ("ecdh" WOLFKM_ECDH_DRIVER_SUFFIX)
#define WOLFKM_ECDH_P192_NAME ("ecdh-nist-p192")
#define WOLFKM_ECDH_P192_DRIVER ("ecdh-nist-p192" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDH_P192_DRIVER ("ecdh-nist-p192" WOLFKM_ECDH_DRIVER_SUFFIX)
#define WOLFKM_ECDH_P256_NAME ("ecdh-nist-p256")
#define WOLFKM_ECDH_P256_DRIVER ("ecdh-nist-p256" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDH_P256_DRIVER ("ecdh-nist-p256" WOLFKM_ECDH_DRIVER_SUFFIX)
#define WOLFKM_ECDH_P384_NAME ("ecdh-nist-p384")
#define WOLFKM_ECDH_P384_DRIVER ("ecdh-nist-p384" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDH_P384_DRIVER ("ecdh-nist-p384" WOLFKM_ECDH_DRIVER_SUFFIX)
static int linuxkm_test_ecdh_nist_driver(const char * driver,
const byte * b_pub,
+13 -9
View File
@@ -82,23 +82,27 @@
#include <wolfssl/wolfcrypt/asn.h>
#include <wolfssl/wolfcrypt/ecc.h>
#define WOLFKM_ECDSA_DRIVER ("ecdsa-wolfcrypt")
#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT)
#define WOLFKM_ECDSA_DRIVER_ISA_EXT "-avx2"
#else
#define WOLFKM_ECDSA_DRIVER_ISA_EXT ""
#endif
#define WOLFKM_ECDSA_DRIVER_SUFFIX WOLFKM_ECDSA_DRIVER_ISA_EXT \
WOLFKM_DRIVER_SUFFIX_BASE
#define WOLFKM_ECDSA_DRIVER ("ecdsa" WOLFKM_ECDSA_DRIVER_SUFFIX)
#define WOLFKM_ECDSA_P192_NAME ("ecdsa-nist-p192")
#define WOLFKM_ECDSA_P192_DRIVER ("ecdsa-nist-p192" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDSA_P192_DRIVER ("ecdsa-nist-p192" WOLFKM_ECDSA_DRIVER_SUFFIX)
#define WOLFKM_ECDSA_P256_NAME ("ecdsa-nist-p256")
#define WOLFKM_ECDSA_P256_DRIVER ("ecdsa-nist-p256" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDSA_P256_DRIVER ("ecdsa-nist-p256" WOLFKM_ECDSA_DRIVER_SUFFIX)
#define WOLFKM_ECDSA_P384_NAME ("ecdsa-nist-p384")
#define WOLFKM_ECDSA_P384_DRIVER ("ecdsa-nist-p384" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDSA_P384_DRIVER ("ecdsa-nist-p384" WOLFKM_ECDSA_DRIVER_SUFFIX)
#define WOLFKM_ECDSA_P521_NAME ("ecdsa-nist-p521")
#define WOLFKM_ECDSA_P521_DRIVER ("ecdsa-nist-p521" WOLFKM_DRIVER_FIPS \
"-wolfcrypt")
#define WOLFKM_ECDSA_P521_DRIVER ("ecdsa-nist-p521" WOLFKM_ECDSA_DRIVER_SUFFIX)
static int linuxkm_test_ecdsa_nist_driver(const char * driver,
+19 -18
View File
@@ -99,45 +99,46 @@
#include <wolfssl/wolfcrypt/rsa.h>
#define WOLFKM_RSA_NAME ("rsa")
#define WOLFKM_RSA_DRIVER ("rsa" WOLFKM_DRIVER_FIPS "-wolfcrypt")
#if defined(WOLFSSL_SP_X86_64_ASM) && !defined(NO_AVX2_SUPPORT)
#define WOLFKM_RSA_DRIVER_ISA_EXT "-avx2"
#else
#define WOLFKM_RSA_DRIVER_ISA_EXT ""
#endif
#define WOLFKM_RSA_DRIVER_SUFFIX WOLFKM_RSA_DRIVER_ISA_EXT \
WOLFKM_DRIVER_SUFFIX_BASE
#define WOLFKM_RSA_DRIVER ("rsa" WOLFKM_RSA_DRIVER_SUFFIX)
#if defined(LINUXKM_AKCIPHER_NO_SIGNVERIFY)
/* the akcipher alg */
#define WOLFKM_PKCS1PAD_NAME ("pkcs1pad(rsa)")
#define WOLFKM_PKCS1PAD_DRIVER ("pkcs1pad(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt)")
#define WOLFKM_PKCS1PAD_NAME "pkcs1pad(rsa)"
#define WOLFKM_PKCS1PAD_DRIVER "pkcs1pad-rsa" WOLFKM_RSA_DRIVER_SUFFIX
#endif /* LINUXKM_AKCIPHER_NO_SIGNVERIFY */
/*
* pkcs1 sign verify alg names
* */
#define WOLFKM_PKCS1_SHA224_NAME (PKCS1_NAME "(rsa,sha224)")
#define WOLFKM_PKCS1_SHA224_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha224)")
#define WOLFKM_PKCS1_SHA224_DRIVER ("pkcs1pad-rsa-sha224" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA256_NAME (PKCS1_NAME "(rsa,sha256)")
#define WOLFKM_PKCS1_SHA256_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha256)")
#define WOLFKM_PKCS1_SHA256_DRIVER ("pkcs1pad-rsa-sha256" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA384_NAME (PKCS1_NAME "(rsa,sha384)")
#define WOLFKM_PKCS1_SHA384_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha384)")
#define WOLFKM_PKCS1_SHA384_DRIVER ("pkcs1pad-rsa-sha384" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA512_NAME (PKCS1_NAME "(rsa,sha512)")
#define WOLFKM_PKCS1_SHA512_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha512)")
#define WOLFKM_PKCS1_SHA512_DRIVER ("pkcs1pad-rsa-sha512" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA3_256_NAME (PKCS1_NAME "(rsa,sha3-256)")
#define WOLFKM_PKCS1_SHA3_256_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha3-256)")
#define WOLFKM_PKCS1_SHA3_256_DRIVER ("pkcs1pad-rsa-sha3-256" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA3_384_NAME (PKCS1_NAME "(rsa,sha3-384)")
#define WOLFKM_PKCS1_SHA3_384_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha3-384)")
#define WOLFKM_PKCS1_SHA3_384_DRIVER ("pkcs1pad-rsa-sha3-384" WOLFKM_RSA_DRIVER_SUFFIX)
#define WOLFKM_PKCS1_SHA3_512_NAME (PKCS1_NAME "(rsa,sha3-512)")
#define WOLFKM_PKCS1_SHA3_512_DRIVER (PKCS1_NAME "(rsa" WOLFKM_DRIVER_FIPS \
"-wolfcrypt,sha3-512)")
#define WOLFKM_PKCS1_SHA3_512_DRIVER ("pkcs1pad-rsa-sha3-512" WOLFKM_RSA_DRIVER_SUFFIX)
#if defined(WOLFSSL_KEY_GEN)
#if defined(LINUXKM_DIRECT_RSA)
+6
View File
@@ -91,6 +91,12 @@
#ifdef HAVE_ECC
#include <wolfssl/wolfcrypt/ecc.h>
#endif
#ifdef WOLFCRYPT_HAVE_ECCSI
#include <wolfssl/wolfcrypt/eccsi.h>
#endif
#ifdef WOLFCRYPT_HAVE_SAKKE
#include <wolfssl/wolfcrypt/sakke.h>
#endif
#ifdef HAVE_HPKE
#include <wolfssl/wolfcrypt/hpke.h>
#endif
+4 -44
View File
@@ -57,14 +57,6 @@
}
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
/*
Possible DH enable options:
* NO_RSA: Overall control of DH default: on (not defined)
@@ -1425,8 +1417,6 @@ int wc_DhGeneratePublic(DhKey* key, byte* priv, word32 privSz,
return BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = GeneratePublicDh(key, priv, privSz, pub, pubSz);
#if FIPS_VERSION_GE(5,0) || defined(WOLFSSL_VALIDATE_DH_KEYGEN)
@@ -1436,8 +1426,6 @@ int wc_DhGeneratePublic(DhKey* key, byte* priv, word32 privSz,
ret = _ffc_pairwise_consistency_test(key, pub, *pubSz, priv, privSz);
#endif /* FIPS V5 or later || WOLFSSL_VALIDATE_DH_KEYGEN */
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -1451,8 +1439,6 @@ static int wc_DhGenerateKeyPair_Sync(DhKey* key, WC_RNG* rng,
return BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = GeneratePrivateDh(key, rng, priv, privSz);
if (ret == 0)
@@ -1464,9 +1450,6 @@ static int wc_DhGenerateKeyPair_Sync(DhKey* key, WC_RNG* rng,
ret = _ffc_pairwise_consistency_test(key, pub, *pubSz, priv, *privSz);
#endif /* FIPS V5 or later || WOLFSSL_VALIDATE_DH_KEYGEN */
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif /* !WOLFSSL_KCAPI_DH */
@@ -1589,8 +1572,6 @@ static int _ffc_validate_public_key(DhKey* key, const byte* pub, word32 pubSz,
return MP_INIT_E;
}
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (mp_read_unsigned_bin(y, pub, pubSz) != MP_OKAY) {
ret = MP_READ_E;
}
@@ -1679,8 +1660,6 @@ static int _ffc_validate_public_key(DhKey* key, const byte* pub, word32 pubSz,
mp_clear(p);
mp_clear(q);
RESTORE_VECTOR_REGISTERS();
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
XFREE(q, key->heap, DYNAMIC_TYPE_DH);
XFREE(p, key->heap, DYNAMIC_TYPE_DH);
@@ -1919,8 +1898,6 @@ static int _ffc_pairwise_consistency_test(DhKey* key,
return MP_INIT_E;
}
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
/* Load the private and public keys into big integers. */
if (mp_read_unsigned_bin(publicKey, pub, pubSz) != MP_OKAY ||
mp_read_unsigned_bin(privateKey, priv, privSz) != MP_OKAY) {
@@ -1979,8 +1956,6 @@ static int _ffc_pairwise_consistency_test(DhKey* key,
mp_clear(publicKey);
mp_clear(checkKey);
RESTORE_VECTOR_REGISTERS();
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
XFREE(checkKey, key->heap, DYNAMIC_TYPE_DH);
XFREE(privateKey, key->heap, DYNAMIC_TYPE_DH);
@@ -2174,8 +2149,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
ret = MP_INIT_E;
if (ret == 0) {
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (ret == 0 && mp_read_unsigned_bin(y, otherPub, pubSz) != MP_OKAY)
ret = MP_READ_E;
@@ -2201,8 +2174,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
}
mp_clear(y);
RESTORE_VECTOR_REGISTERS();
}
/* make sure agree is > 1 (SP800-56A, 5.7.1.1) */
@@ -2253,8 +2224,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
}
#endif
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (mp_read_unsigned_bin(x, priv, privSz) != MP_OKAY)
ret = MP_READ_E;
#ifdef WOLFSSL_CHECK_MEM_ZERO
@@ -2313,8 +2282,6 @@ static int wc_DhAgree_Sync(DhKey* key, byte* agree, word32* agreeSz,
mp_clear(y);
mp_forcezero(x);
RESTORE_VECTOR_REGISTERS();
#else
(void)ct;
ret = WC_KEY_SIZE_E;
@@ -2601,8 +2568,6 @@ static int _DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g,
ret = BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
if (ret == 0) {
/* may have leading 0 */
if (p[0] == 0) {
@@ -2714,8 +2679,6 @@ static int _DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g,
mp_clear(keyP);
}
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -3204,8 +3167,6 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh)
}
#endif
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (ret == 0) {
/* force magnitude */
buf[0] |= 0xC0;
@@ -3264,9 +3225,10 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh)
if (ret != 0 || primeCheck == MP_YES)
break;
/* linuxkm: release the kernel for a moment before iterating. */
RESTORE_VECTOR_REGISTERS();
SAVE_VECTOR_REGISTERS(ret = _svr_ret; break;);
ret = WC_CHECK_FOR_INTR_SIGNALS();
if (ret != 0)
break;
WC_RELAX_LONG_LOOP();
};
}
@@ -3308,8 +3270,6 @@ int wc_DhGenerateParams(WC_RNG *rng, int modSz, DhKey *dh)
mp_clear(&dh->g);
}
RESTORE_VECTOR_REGISTERS();
#ifndef WOLFSSL_NO_MALLOC
if (buf != NULL)
#endif
+5 -16
View File
@@ -36,14 +36,6 @@
#include <wolfcrypt/src/misc.c>
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef _MSC_VER
/* disable for while(0) cases (MSVC bug) */
#pragma warning(disable:4127)
@@ -269,8 +261,6 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
}
#endif
SAVE_VECTOR_REGISTERS(;);
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
if ((tmpQ = (mp_int *)XMALLOC(sizeof(*tmpQ), dsa->heap,
DYNAMIC_TYPE_TMP_BUFFER)) == NULL)
@@ -338,8 +328,6 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
mp_clear(tmpQ);
#endif
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -454,6 +442,11 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
break;
loop_check_prime++;
}
err = WC_CHECK_FOR_INTR_SIGNALS();
if (err != 0)
break;
WC_RELAX_LONG_LOOP();
}
}
@@ -794,8 +787,6 @@ int wc_DsaSign_ex(const byte* digest, word32 digestSz, byte* out, DsaKey* key,
return BAD_LENGTH_E;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
do {
#ifdef WOLFSSL_SMALL_STACK
k = (mp_int *)XMALLOC(sizeof *k, key->heap, DYNAMIC_TYPE_TMP_BUFFER);
@@ -1040,8 +1031,6 @@ int wc_DsaSign_ex(const byte* digest, word32 digestSz, byte* out, DsaKey* key,
}
} while (0);
RESTORE_VECTOR_REGISTERS();
#ifdef WOLFSSL_SMALL_STACK
if (k) {
if ((ret != WC_NO_ERR_TRACE(MP_INIT_E)) &&
+5 -118
View File
@@ -275,14 +275,6 @@ ECC Curve Sizes:
#include <wolfssl/wolfcrypt/hmac.h>
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \
!defined(WOLFSSL_MICROCHIP_TA100) && \
!defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SILABS_SE_ACCEL) && \
@@ -5150,8 +5142,6 @@ int wc_ecc_shared_secret_ex(ecc_key* private_key, ecc_point* point,
return ECC_BAD_ARG_E;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
switch (private_key->state) {
case ECC_STATE_NONE:
case ECC_STATE_SHARED_SEC_GEN:
@@ -5194,8 +5184,6 @@ int wc_ecc_shared_secret_ex(ecc_key* private_key, ecc_point* point,
err = BAD_STATE_E;
} /* switch */
RESTORE_VECTOR_REGISTERS();
/* if async pending then return and skip done cleanup below */
if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) {
return err;
@@ -5280,8 +5268,6 @@ int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx)
return ECC_BAD_ARG_E;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ALLOC_CURVE_SPECS(3, err);
if (err == MP_OKAY) {
err = wc_ecc_curve_load(wc_ecc_get_curve_params(curve_idx), &curve,
@@ -5296,8 +5282,6 @@ int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx)
wc_ecc_curve_free(curve);
FREE_CURVE_SPECS();
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -5456,8 +5440,6 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve,
return BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#ifdef HAVE_ECC_MAKE_PUB
/* if ecc_point passed in then use it as output for public key point */
if (pubOut != NULL) {
@@ -5603,8 +5585,6 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve,
key->type = ECC_PRIVATEKEY;
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -6107,8 +6087,6 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
{
int err;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
err = _ecc_make_key_ex(rng, keysize, key, curve_id, flags);
#if (FIPS_VERSION_GE(5,0) || defined(WOLFSSL_VALIDATE_ECC_KEYGEN)) && \
@@ -6132,8 +6110,6 @@ int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
}
#endif
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -7195,6 +7171,11 @@ static int ecc_sign_hash_sw(ecc_key* key, ecc_key* pubkey, WC_RNG* rng,
mp_clear(pubkey->pubkey.z);
#endif
mp_forcezero(pubkey->k);
err = WC_CHECK_FOR_INTR_SIGNALS();
if (err != 0)
break;
WC_RELAX_LONG_LOOP();
}
mp_forcezero(b);
FREE_MP_INT_SIZE(b, key->heap, DYNAMIC_TYPE_ECC);
@@ -7244,10 +7225,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_sign_256(in, inlen, rng, ecc_get_k(key), r, s,
sign_k, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -7256,10 +7235,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng,
#if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2)
if (ecc_sets[key->idx].id == ECC_SM2P256V1) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_sign_sm2_256(in, inlen, rng, ecc_get_k(key), r, s,
sign_k, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -7284,10 +7261,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_sign_384(in, inlen, rng, ecc_get_k(key), r, s,
sign_k, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -7314,10 +7289,8 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_sign_521(in, inlen, rng, ecc_get_k(key), r, s,
sign_k, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -8938,10 +8911,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_verify_256(hash, hashlen, key->pubkey.x,
key->pubkey.y, key->pubkey.z, r, s, res, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -8982,10 +8953,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_verify_384(hash, hashlen, key->pubkey.x,
key->pubkey.y, key->pubkey.z, r, s, res, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -9011,10 +8980,8 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash,
#if !defined(WC_ECC_NONBLOCK) || (defined(WC_ECC_NONBLOCK) && !defined(WC_ECC_NONBLOCK_ONLY))
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_verify_521(hash, hashlen, key->pubkey.x,
key->pubkey.y, key->pubkey.z, r, s, res, key->heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -9652,8 +9619,6 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen,
if (err != MP_OKAY)
return MEMORY_E;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* check for point type (4, 2, or 3) */
pointType = in[0];
if (pointType != ECC_POINT_UNCOMP && pointType != ECC_POINT_COMP_EVEN &&
@@ -9845,8 +9810,6 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen,
mp_clear(point->z);
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -10197,8 +10160,6 @@ static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
return err;
}
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
/* compute y^2 */
if (err == MP_OKAY)
err = mp_sqr(ecp->y, t1);
@@ -10267,8 +10228,6 @@ static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
mp_clear(t1);
mp_clear(t2);
RESTORE_VECTOR_REGISTERS();
WC_FREE_VAR_EX(t2, NULL, DYNAMIC_TYPE_ECC);
WC_FREE_VAR_EX(t1, NULL, DYNAMIC_TYPE_ECC);
@@ -10718,8 +10677,6 @@ static int _ecc_validate_public_key(ecc_key* key, int partial, int priv)
DECLARE_CURVE_SPECS(4);
#endif
ASSERT_SAVED_VECTOR_REGISTERS();
if (key == NULL)
return BAD_FUNC_ARG;
@@ -10871,9 +10828,7 @@ WOLFSSL_ABI
int wc_ecc_check_key(ecc_key* key)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = _ecc_validate_public_key(key, 0, 1);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -10938,8 +10893,6 @@ static int _ecc_import_x963_ex2(const byte* in, word32 inLen, ecc_key* key,
mp_forcezero(key->kb);
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* check for point type (4, 2, or 3) */
pointType = in[0];
if (pointType != ECC_POINT_UNCOMP && pointType != ECC_POINT_COMP_EVEN &&
@@ -11271,8 +11224,6 @@ static int _ecc_import_x963_ex2(const byte* in, word32 inLen, ecc_key* key,
mp_forcezero(key->k);
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -11691,10 +11642,6 @@ static int _ecc_import_private_key_ex(const byte* priv, word32 privSz,
}
#else
#ifdef WOLFSSL_VALIDATE_ECC_IMPORT
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#endif
ret = mp_read_unsigned_bin(key->k, priv, privSz);
#ifdef HAVE_WOLF_BIGINT
if (ret == 0 && wc_bigint_from_unsigned_bin(&key->k->raw, priv,
@@ -11745,10 +11692,6 @@ static int _ecc_import_private_key_ex(const byte* priv, word32 privSz,
#endif
#ifdef WOLFSSL_VALIDATE_ECC_IMPORT
RESTORE_VECTOR_REGISTERS();
#endif
#ifdef WOLFSSL_MAXQ10XX_CRYPTO
if ((ret == 0) && (key->devId != INVALID_DEVID)) {
ret = wc_MAXQ10XX_EccSetKey(key, key->dp->size);
@@ -12137,10 +12080,6 @@ static int _ecc_import_raw_private(ecc_key* key, const char* qx,
}
#endif
#ifdef WOLFSSL_VALIDATE_ECC_IMPORT
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#endif
/* import private key */
if (err == MP_OKAY) {
if (d != NULL) {
@@ -12234,10 +12173,6 @@ static int _ecc_import_raw_private(ecc_key* key, const char* qx,
}
#endif
#ifdef WOLFSSL_VALIDATE_ECC_IMPORT
RESTORE_VECTOR_REGISTERS();
#endif
#ifdef WOLFSSL_MAXQ10XX_CRYPTO
if (err == MP_OKAY) {
err = wc_MAXQ10XX_EccSetKey(key, key->dp->size);
@@ -13858,8 +13793,6 @@ int ecc_mul2add(ecc_point* A, mp_int* kA,
}
#endif /* HAVE_THREAD_LS */
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
/* find point */
idx1 = find_base(A);
@@ -13942,8 +13875,6 @@ int ecc_mul2add(ecc_point* A, mp_int* kA,
}
}
RESTORE_VECTOR_REGISTERS();
#ifndef HAVE_THREAD_LS
wc_UnLockMutex(&ecc_fp_lock);
#endif /* HAVE_THREAD_LS */
@@ -14011,8 +13942,6 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
got_ecc_fp_lock = 1;
#endif /* HAVE_THREAD_LS */
SAVE_VECTOR_REGISTERS(err = _svr_ret; goto out;);
/* find point */
idx = find_base(G);
@@ -14061,8 +13990,6 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
}
}
RESTORE_VECTOR_REGISTERS();
out:
#ifndef HAVE_THREAD_LS
@@ -14088,36 +14015,28 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
#if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2)
if ((mp_count_bits(modulus) == 256) && (!mp_is_bit_set(modulus, 224))) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret);
ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifndef WOLFSSL_SP_NO_256
if (mp_count_bits(modulus) == 256) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_256(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifdef WOLFSSL_SP_384
if (mp_count_bits(modulus) == 384) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_384(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifdef WOLFSSL_SP_521
if (mp_count_bits(modulus) == 521) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_521(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -14182,8 +14101,6 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
got_ecc_fp_lock = 1;
#endif /* HAVE_THREAD_LS */
SAVE_VECTOR_REGISTERS(err = _svr_ret; goto out;);
/* find point */
idx = find_base(G);
@@ -14232,8 +14149,6 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
}
}
RESTORE_VECTOR_REGISTERS();
out:
#ifndef HAVE_THREAD_LS
@@ -14262,36 +14177,28 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
#if defined(WOLFSSL_SM2) && defined(WOLFSSL_SP_SM2)
if ((mp_count_bits(modulus) == 256) && (!mp_is_bit_set(modulus, 224))) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifndef WOLFSSL_SP_NO_256
if (mp_count_bits(modulus) == 256) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_256(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifdef WOLFSSL_SP_384
if (mp_count_bits(modulus) == 384) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_384(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
#ifdef WOLFSSL_SP_521
if (mp_count_bits(modulus) == 521) {
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = sp_ecc_mulmod_521(k, G, R, map, heap);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -14887,8 +14794,6 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
}
#endif
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
#ifdef WOLFSSL_ECIES_ISO18033
XMEMCPY(sharedSecret, out - pubKeySz, pubKeySz);
sharedSz -= pubKeySz;
@@ -15105,8 +15010,6 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
#endif
}
RESTORE_VECTOR_REGISTERS();
ForceZero(sharedSecret, sharedSz);
ForceZero(keys, (word32)keysLen);
WC_FREE_VAR_EX(sharedSecret, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER);
@@ -15266,8 +15169,6 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
}
#endif
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
#ifndef WOLFSSL_ECIES_OLD
if (pubKey == NULL) {
WC_ALLOC_VAR_EX(peerKey, ecc_key, 1, ctx->heap,
@@ -15501,8 +15402,6 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
if (ret == 0)
*outSz = msgSz - digestSz;
RESTORE_VECTOR_REGISTERS();
#ifndef WOLFSSL_ECIES_OLD
if (pubKey == peerKey)
wc_ecc_free(peerKey);
@@ -15576,8 +15475,6 @@ static int mp_jacobi(mp_int* a, mp_int* n, int* c)
return res;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
if ((res = mp_mod(a, n, a1)) != MP_OKAY) {
goto done;
}
@@ -15635,8 +15532,6 @@ static int mp_jacobi(mp_int* a, mp_int* n, int* c)
done:
RESTORE_VECTOR_REGISTERS();
/* cleanup */
mp_clear(n1);
mp_clear(a1);
@@ -15674,8 +15569,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret)
return MP_VAL;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
res = mp_init(&e);
if (res == MP_OKAY)
res = mp_mod_d(prime, 8, &i);
@@ -15699,8 +15592,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret)
mp_clear(&e);
RESTORE_VECTOR_REGISTERS();
return res;
#else
int res, legendre, done = 0;
@@ -15720,8 +15611,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret)
mp_int t1[1], C[1], Q[1], S[1], Z[1], M[1], T[1], R[1], N[1], two[1];
#endif
SAVE_VECTOR_REGISTERS(res = _svr_ret; goto out;);
if ((mp_init_multi(t1, C, Q, S, Z, M) != MP_OKAY) ||
(mp_init_multi(T, R, N, two, NULL, NULL) != MP_OKAY)) {
res = MP_INIT_E;
@@ -15933,8 +15822,6 @@ static int mp_sqrtmod_prime(mp_int* n, mp_int* prime, mp_int* ret)
out:
RESTORE_VECTOR_REGISTERS();
#ifdef WOLFSSL_SMALL_STACK
if (t1) {
if (res != WC_NO_ERR_TRACE(MP_INIT_E))
-16
View File
@@ -36,14 +36,6 @@
#include <wolfssl/wolfcrypt/sp.h>
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifndef WOLFSSL_HAVE_ECC_KEY_GET_PRIV
/* FIPS build has replaced ecc.h. */
#define wc_ecc_key_get_priv(key) (&((key)->k))
@@ -1507,8 +1499,6 @@ int wc_ValidateEccsiPair(EccsiKey* key, enum wc_HashType hashType,
if (err != 0)
return err;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
params = &key->params;
hs = &key->tmp;
res = &key->pubkey.pubkey;
@@ -1563,8 +1553,6 @@ int wc_ValidateEccsiPair(EccsiKey* key, enum wc_HashType hashType,
}
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -2231,8 +2219,6 @@ int wc_VerifyEccsiHash(EccsiKey* key, enum wc_HashType hashType,
if (err != 0)
return err;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Decode the signature into components. */
r = wc_ecc_key_get_priv(&key->pubkey);
pvt = &key->pubkey.pubkey;
@@ -2318,8 +2304,6 @@ int wc_VerifyEccsiHash(EccsiKey* key, enum wc_HashType hashType,
*verified = ((err == 0) && (mp_cmp(jx, r) == MP_EQ));
}
RESTORE_VECTOR_REGISTERS();
return err;
}
#endif /* WOLFCRYPT_ECCSI_CLIENT */
+10 -55
View File
@@ -60,14 +60,6 @@ RSA keys can be used to encrypt, decrypt, sign and verify data.
#include <wolfssl/wolfcrypt/port/nxp/casper_port.h>
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
/*
* RSA Build Options:
*
@@ -868,8 +860,6 @@ int wc_CheckRsaKey(RsaKey* key)
}
}
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (ret == 0) {
if (INIT_MP_INT_SIZE(tmp, mp_bitsused(&key->n)) != MP_OKAY)
ret = MP_INIT_E;
@@ -982,8 +972,6 @@ int wc_CheckRsaKey(RsaKey* key)
mp_forcezero(tmp);
RESTORE_VECTOR_REGISTERS();
if ((rng != NULL) && (rng != key->rng)) {
wc_FreeRng(rng);
#ifdef WOLFSSL_SMALL_STACK
@@ -3571,7 +3559,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out,
#ifdef WOLF_CRYPTO_CB_ONLY_RSA
return NO_VALID_DEVID;
#else /* !WOLF_CRYPTO_CB_ONLY_RSA */
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#if !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(TEST_UNPAD_CONSTANT_TIME) && \
!defined(NO_RSA_BOUNDS_CHECK)
@@ -3580,7 +3567,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out,
ret = RsaFunctionCheckIn(in, inLen, key, checkSmallCt);
if (ret != 0) {
RESTORE_VECTOR_REGISTERS();
return ret;
}
}
@@ -3592,7 +3578,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out,
ret = RsaFunctionCheckIn(in, inLen, key, checkSmallCt);
if (ret != 0) {
RESTORE_VECTOR_REGISTERS();
return ret;
}
}
@@ -3623,8 +3608,6 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out,
ret = wc_RsaFunctionSync(in, inLen, out, outLen, type, key, rng);
}
RESTORE_VECTOR_REGISTERS();
/* handle error */
if (ret < 0 && ret != WC_NO_ERR_TRACE(WC_PENDING_E)
#ifdef WC_RSA_NONBLOCK
@@ -4172,11 +4155,9 @@ int wc_RsaPublicEncrypt(const byte* in, word32 inLen, byte* out, word32 outLen,
RsaKey* key, WC_RNG* rng)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPublicEncryptEx(in, inLen, out, outLen, key,
RSA_PUBLIC_ENCRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD,
WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4188,10 +4169,8 @@ int wc_RsaPublicEncrypt_ex(const byte* in, word32 inLen, byte* out,
word32 labelSz)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPublicEncryptEx(in, inLen, out, outLen, key, RSA_PUBLIC_ENCRYPT,
RSA_BLOCK_TYPE_2, type, hash, mgf, label, labelSz, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif /* WC_NO_RSA_OAEP */
@@ -4211,11 +4190,9 @@ int wc_RsaPrivateDecryptInline(byte* in, word32 inLen, byte** out, RsaKey* key)
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key,
RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD,
WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4235,11 +4212,9 @@ int wc_RsaPrivateDecryptInline_ex(byte* in, word32 inLen, byte** out,
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key,
RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, type, hash,
mgf, label, labelSz, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif /* WC_NO_RSA_OAEP */
@@ -4258,11 +4233,9 @@ int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out,
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key,
RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, WC_RSA_PKCSV15_PAD,
WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4282,11 +4255,9 @@ int wc_RsaPrivateDecrypt_ex(const byte* in, word32 inLen, byte* out,
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key,
RSA_PRIVATE_DECRYPT, RSA_BLOCK_TYPE_2, type, hash, mgf, label,
labelSz, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif /* WC_NO_RSA_OAEP || WC_RSA_NO_PADDING */
@@ -4305,11 +4276,9 @@ int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out, RsaKey* key)
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key,
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PKCSV15_PAD,
WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -4325,10 +4294,8 @@ int wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
RsaKey* key, int pad_type)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = wc_RsaSSL_Verify_ex2(in, inLen, out, outLen, key, pad_type,
WC_HASH_TYPE_NONE);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4348,7 +4315,6 @@ int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out, word32 outLen
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER
ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key,
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
@@ -4358,7 +4324,6 @@ int wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out, word32 outLen
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, pad_type,
hash, wc_hash2mgf(hash), NULL, 0, RSA_PSS_SALT_LEN_DISCOVER, rng);
#endif
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -4416,11 +4381,9 @@ int wc_RsaPSS_VerifyInline_ex(byte* in, word32 inLen, byte** out,
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, in, inLen, out, key,
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD,
hash, mgf, NULL, 0, saltLen, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4474,11 +4437,9 @@ int wc_RsaPSS_Verify_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
#else
rng = NULL;
#endif
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPrivateDecryptEx(in, inLen, out, outLen, NULL, key,
RSA_PUBLIC_DECRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD,
hash, mgf, NULL, 0, saltLen, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4754,11 +4715,9 @@ int wc_RsaSSL_Sign(const byte* in, word32 inLen, byte* out, word32 outLen,
RsaKey* key, WC_RNG* rng)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPublicEncryptEx(in, inLen, out, outLen, key,
RSA_PRIVATE_ENCRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PKCSV15_PAD,
WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0, 0, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
@@ -4805,11 +4764,9 @@ int wc_RsaPSS_Sign_ex(const byte* in, word32 inLen, byte* out, word32 outLen,
WC_RNG* rng)
{
int ret;
SAVE_VECTOR_REGISTERS(return _svr_ret;);
ret = RsaPublicEncryptEx(in, inLen, out, outLen, key,
RSA_PRIVATE_ENCRYPT, RSA_BLOCK_TYPE_1, WC_RSA_PSS_PAD,
hash, mgf, NULL, 0, saltLen, rng);
RESTORE_VECTOR_REGISTERS();
return ret;
}
#endif
@@ -5350,12 +5307,8 @@ int wc_CheckProbablePrime_ex(const byte* pRaw, word32 pRawSz,
if (ret == MP_OKAY)
ret = mp_read_unsigned_bin(e, eRaw, eRawSz);
if (ret == MP_OKAY)
SAVE_VECTOR_REGISTERS(ret = _svr_ret;);
if (ret == 0) {
ret = _CheckProbablePrime(p, Q, e, nlen, isPrime, rng);
RESTORE_VECTOR_REGISTERS();
}
ret = (ret == MP_OKAY) ? 0 : PRIME_GEN_E;
@@ -5549,8 +5502,6 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
}
#endif
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
/* make p */
if (err == MP_OKAY) {
#ifdef WOLFSSL_CHECK_MEM_ZERO
@@ -5591,9 +5542,10 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
if (err != MP_OKAY || isPrime || i >= failCount)
break;
/* linuxkm: release the kernel for a moment before iterating. */
RESTORE_VECTOR_REGISTERS();
SAVE_VECTOR_REGISTERS(err = _svr_ret; break;);
err = WC_CHECK_FOR_INTR_SIGNALS();
if (err != 0)
break;
WC_RELAX_LONG_LOOP();
};
}
@@ -5644,6 +5596,12 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
/* Keep the old retry behavior in non-FIPS build. */
(void)i;
#endif
err = WC_CHECK_FOR_INTR_SIGNALS();
if (err != 0)
break;
WC_RELAX_LONG_LOOP();
} while (err == MP_OKAY && !isPrime && i < failCount);
}
@@ -5769,9 +5727,6 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng)
}
#endif
if (err != WC_NO_ERR_TRACE(WC_ACCEL_INHIBIT_E))
RESTORE_VECTOR_REGISTERS();
/* Last value p - 1. */
mp_forcezero(tmp1);
/* Last value q - 1. */
+19 -29
View File
@@ -37,14 +37,6 @@
#include <wolfssl/wolfcrypt/sakke.h>
#include <wolfssl/wolfcrypt/asn_public.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifndef WOLFSSL_HAVE_ECC_KEY_GET_PRIV
/* FIPS build has replaced ecc.h. */
#define wc_ecc_key_get_priv(key) (&((key)->k))
@@ -1328,13 +1320,11 @@ int wc_GenerateSakkeRskTable(const SakkeKey* key, const ecc_point* rsk,
err = BAD_FUNC_ARG;
}
if (err == 0) {
SAVE_VECTOR_REGISTERS(return _svr_ret;);
#ifdef WOLFSSL_SP_1024
err = sp_Pairing_gen_precomp_1024(rsk, table, len);
#else
err = NOT_COMPILED_IN;
#endif
RESTORE_VECTOR_REGISTERS();
}
return err;
@@ -2441,8 +2431,6 @@ int wc_ValidateSakkeRsk(SakkeKey* key, const byte* id, word16 idSz,
err = BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Load elliptic curve parameters */
if (err == 0) {
err = sakke_load_params(key);
@@ -2478,8 +2466,6 @@ int wc_ValidateSakkeRsk(SakkeKey* key, const byte* id, word16 idSz,
*valid = ((err == 0) && (mp_cmp(a, &key->params.g) == MP_EQ));
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -2622,6 +2608,22 @@ static int sakke_modexp_loop(SakkeKey* key, mp_int* b, mp_int* e, mp_proj* r,
mp_int* by = key->tmp.p1->z;
mp_int* prime = &key->params.prime;
int i;
#ifdef WC_NO_GLOBAL_OBJECT_POINTERS
static const wc_ptr_t wc_off_on_addr[2] =
{
#if defined(WC_64BIT_CPU)
W64LIT(0x0000000000000000),
W64LIT(0xffffffffffffffff)
#elif defined(WC_16BIT_CPU)
0x0000U,
0xffffU
#else
/* 32 bit */
0x00000000U,
0xffffffffU
#endif
};
#endif
#ifdef WC_NO_CACHE_RESISTANT
c[0] = r;
@@ -6387,8 +6389,6 @@ int wc_MakeSakkePointI(SakkeKey* key, const byte* id, word16 idSz)
err = BAD_FUNC_ARG;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
if (err == 0) {
err = sakke_load_params(key);
}
@@ -6401,8 +6401,6 @@ int wc_MakeSakkePointI(SakkeKey* key, const byte* id, word16 idSz)
key->i.idSz = idSz;
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -6532,9 +6530,7 @@ int wc_GenerateSakkePointITable(SakkeKey* key, byte* table, word32* len)
#ifdef WOLFSSL_HAVE_SP_ECC
if (err == 0) {
SAVE_VECTOR_REGISTERS(return _svr_ret;);
err = sp_ecc_gen_table_1024(key->i.i, table, len, key->heap);
RESTORE_VECTOR_REGISTERS();
}
if (err == 0) {
key->i.table = table;
@@ -6722,8 +6718,6 @@ int wc_MakeSakkeEncapsulatedSSV(SakkeKey* key, enum wc_HashType hashType,
err = BAD_STATE_E;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Load parameters */
if (err == 0) {
err = sakke_load_params(key);
@@ -6799,8 +6793,6 @@ int wc_MakeSakkeEncapsulatedSSV(SakkeKey* key, enum wc_HashType hashType,
/* Step 6: Output SSV - already encoded in buffer */
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -6898,7 +6890,9 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv,
mp_int* ri = NULL;
byte* wb = NULL;
byte* test = NULL;
byte a[WC_MAX_DIGEST_SIZE] = {0};
byte a[WC_MAX_DIGEST_SIZE];
XMEMSET(a, 0, sizeof(a));
if ((key == NULL) || (ssv == NULL) || (auth == NULL) || (ssvSz == 0)) {
err = BAD_FUNC_ARG;
@@ -6907,8 +6901,6 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv,
err = BAD_STATE_E;
}
SAVE_VECTOR_REGISTERS(return _svr_ret;);
/* Load parameters */
if (err == 0) {
err = sakke_load_params(key);
@@ -6979,8 +6971,6 @@ int wc_DeriveSakkeSSV(SakkeKey* key, enum wc_HashType hashType, byte* ssv,
err = SAKKE_VERIFY_FAIL_E;
}
RESTORE_VECTOR_REGISTERS();
return err;
}
#endif /* WOLFCRYPT_SAKKE_CLIENT */
+11 -2
View File
@@ -47,6 +47,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
@@ -125606,8 +125617,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d,
sp_digit r1;
int i;
ASSERT_SAVED_VECTOR_REGISTERS();
(void)m;
div = (d[16] << 23) | (d[15] >> 9);
XMEMCPY(t1, a, sizeof(*t1) * 2 * 17);
+11 -2
View File
@@ -47,6 +47,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
@@ -69631,8 +69642,6 @@ static WC_INLINE int sp_521_div_9(const sp_digit* a, const sp_digit* d,
sp_digit r1;
int i;
ASSERT_SAVED_VECTOR_REGISTERS();
(void)m;
div = (d[8] << 55) | (d[7] >> 9);
XMEMCPY(t1, a, sizeof(*t1) * 2 * 9);
+11 -2
View File
@@ -47,6 +47,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
@@ -131069,8 +131080,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d,
sp_digit r1;
int i;
ASSERT_SAVED_VECTOR_REGISTERS();
(void)m;
div = (d[16] << 23) | (d[15] >> 9);
XMEMCPY(t1, a, sizeof(*t1) * 2 * 17);
+11
View File
@@ -51,6 +51,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
+11
View File
@@ -51,6 +51,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
+11 -2
View File
@@ -47,6 +47,17 @@
#include <wolfssl/wolfcrypt/sp.h>
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM) && \
!defined(DEBUG_VECTOR_REGISTER_ACCESS)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef SAVE_VECTOR_REGISTERS2
#define SAVE_VECTOR_REGISTERS2() SAVE_NO_VECTOR_REGISTERS2()
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
#ifdef __IAR_SYSTEMS_ICC__
#define __asm__ asm
#define __volatile__ volatile
@@ -64063,8 +64074,6 @@ static WC_INLINE int sp_521_div_17(const sp_digit* a, const sp_digit* d,
sp_digit r1;
int i;
ASSERT_SAVED_VECTOR_REGISTERS();
(void)m;
div = (d[16] << 23) | (d[15] >> 9);
XMEMCPY(t1, a, sizeof(*t1) * 2 * 17);
+16 -29
View File
@@ -125,8 +125,6 @@ This library provides single precision (SP) integer math functions.
* WOLFSSL_NO_ASM: Disable all assembly implementations
* WOLFSSL_KEIL: Keil compiler in use, affects inline assembly
* syntax
* WOLFSSL_USE_SAVE_VECTOR_REGISTERS: Save/restore vector registers around
* SP ASM calls
* WOLFSSL_SP_INT_LARGE_COMBA: Enable large Comba multiplication and
* squaring
* WOLFSSL_SP_INT_SQR_VOLATILE: Declare squaring intermediate variables as
@@ -198,15 +196,6 @@ This library provides single precision (SP) integer math functions.
PRAGMA_GCC("GCC diagnostic ignored \"-Warray-bounds\"")
#endif
#if defined(WOLFSSL_USE_SAVE_VECTOR_REGISTERS) && !defined(WOLFSSL_SP_ASM)
/* force off unneeded vector register save/restore. */
#undef SAVE_VECTOR_REGISTERS
#define SAVE_VECTOR_REGISTERS(fail_clause) \
SAVE_NO_VECTOR_REGISTERS(fail_clause)
#undef RESTORE_VECTOR_REGISTERS
#define RESTORE_VECTOR_REGISTERS() RESTORE_NO_VECTOR_REGISTERS()
#endif
/* DECL_SP_INT: Declare one variable of type 'sp_int'. */
#if (defined(WOLFSSL_SMALL_STACK) || defined(SP_ALLOC)) && \
!defined(WOLFSSL_SP_NO_MALLOC)
@@ -5487,6 +5476,22 @@ static void _sp_copy_2_ct(const sp_int* a1, const sp_int* a2, sp_int* r1,
sp_int* r2, int y, unsigned int used)
{
unsigned int i;
#ifdef WC_NO_GLOBAL_OBJECT_POINTERS
static const wc_ptr_t wc_off_on_addr[2] =
{
#if defined(WC_64BIT_CPU)
W64LIT(0x0000000000000000),
W64LIT(0xffffffffffffffff)
#elif defined(WC_16BIT_CPU)
0x0000U,
0xffffU
#else
/* 32 bit */
0x00000000U,
0xffffffffU
#endif
};
#endif
/* Copy data - constant time. */
for (i = 0; i < used; i++) {
@@ -14329,11 +14334,9 @@ int sp_exptmod(const sp_int* b, const sp_int* e, const sp_int* m, sp_int* r)
if ((b == NULL) || (e == NULL) || (m == NULL) || (r == NULL)) {
err = MP_VAL;
}
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
if (err == MP_OKAY) {
err = sp_exptmod_ex(b, e, (int)e->used, m, r);
}
RESTORE_VECTOR_REGISTERS();
return err;
}
#endif
@@ -19554,8 +19557,6 @@ int sp_prime_is_prime(const sp_int* a, int trials, int* result)
haveRes = 1;
}
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
/* Check against known small primes when a has 1 digit. */
if ((err == MP_OKAY) && (!haveRes) && (a->used == 1) &&
(a->dp[0] <= sp_primes[SP_PRIME_SIZE - 1])) {
@@ -19572,8 +19573,6 @@ int sp_prime_is_prime(const sp_int* a, int trials, int* result)
err = _sp_prime_trials(a, trials, result);
}
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -19714,8 +19713,6 @@ int sp_prime_is_prime_ex(const sp_int* a, int trials, int* result, WC_RNG* rng)
haveRes = 1;
}
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
/* Check against known small primes when a has 1 digit. */
if ((err == MP_OKAY) && (!haveRes) && (a->used == 1) &&
(a->dp[0] <= (sp_int_digit)sp_primes[SP_PRIME_SIZE - 1])) {
@@ -19740,8 +19737,6 @@ int sp_prime_is_prime_ex(const sp_int* a, int trials, int* result, WC_RNG* rng)
*result = ret;
}
RESTORE_VECTOR_REGISTERS();
return err;
}
#endif /* WOLFSSL_SP_PRIME_GEN */
@@ -19783,8 +19778,6 @@ static WC_INLINE int _sp_gcd(const sp_int* a, const sp_int* b, sp_int* r)
unsigned int used = (a->used >= b->used) ? a->used + 1U : b->used + 1U;
DECL_SP_INT_ARRAY(d, used, 3);
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
ALLOC_SP_INT_ARRAY(d, used, 3, err, NULL);
if (err == MP_OKAY) {
u = d[0];
@@ -19849,8 +19842,6 @@ static WC_INLINE int _sp_gcd(const sp_int* a, const sp_int* b, sp_int* r)
FREE_SP_INT_ARRAY(d, NULL);
RESTORE_VECTOR_REGISTERS();
return err;
}
@@ -19955,8 +19946,6 @@ static int _sp_lcm(const sp_int* a, const sp_int* b, sp_int* r)
_sp_init_size(t[0], used);
_sp_init_size(t[1], used);
SAVE_VECTOR_REGISTERS(err = _svr_ret;);
if (err == MP_OKAY) {
/* 1. t0 = gcd(a, b) */
err = sp_gcd(a, b, t[0]);
@@ -19985,8 +19974,6 @@ static int _sp_lcm(const sp_int* a, const sp_int* b, sp_int* r)
}
}
}
RESTORE_VECTOR_REGISTERS();
}
FREE_SP_INT_ARRAY(t, NULL);
+416 -431
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -6
View File
@@ -43,12 +43,13 @@
#if !defined(NO_BIG_INT) || defined(WOLFSSL_SP_MATH)
#if (!defined(WC_NO_CACHE_RESISTANT) && \
((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \
(defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \
((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \
defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM))
#if !defined(WC_NO_GLOBAL_OBJECT_POINTERS) && \
((!defined(WC_NO_CACHE_RESISTANT) && \
((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \
(defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \
((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \
defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM)))
/* all off / all on pointer addresses for constant calculations */
/* ecc.c uses same table */
+32 -67
View File
@@ -60460,38 +60460,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t eccsi_test(void)
wc_test_ret_t ret = 0;
WC_RNG rng;
int rng_inited = 0;
EccsiKey* priv = NULL;
EccsiKey* pub = NULL;
mp_int* ssk = NULL;
WC_DECLARE_VAR(priv, EccsiKey, 1, HEAP_HINT);
WC_DECLARE_VAR(pub, EccsiKey, 1, HEAP_HINT);
WC_DECLARE_VAR(ssk, mp_int, 1, HEAP_HINT);
ecc_point* pvt = NULL;
WOLFSSL_ENTER("eccsi_test");
priv = (EccsiKey*)XMALLOC(sizeof(EccsiKey), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (priv == NULL)
ret = WC_TEST_RET_ENC_NC;
else
WC_ALLOC_VAR_EX(priv, EccsiKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
if (ret == 0) {
XMEMSET(priv, 0, sizeof(*priv));
WC_ALLOC_VAR_EX(pub, EccsiKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
}
if (ret == 0) {
pub = (EccsiKey*)XMALLOC(sizeof(EccsiKey), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (pub == NULL)
ret = WC_TEST_RET_ENC_NC;
else
XMEMSET(pub, 0, sizeof(*pub));
XMEMSET(pub, 0, sizeof(*pub));
WC_ALLOC_VAR_EX(ssk, mp_int, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
}
if (ret == 0) {
ssk = (mp_int*)XMALLOC(sizeof(mp_int), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (ssk == NULL)
ret = WC_TEST_RET_ENC_NC;
else
XMEMSET(ssk, 0, sizeof(*ssk));
}
XMEMSET(ssk, 0, sizeof(*ssk));
if (ret == 0) {
#ifndef HAVE_FIPS
ret = wc_InitRng_ex(&rng, HEAP_HINT, devId);
#else
@@ -60547,18 +60534,12 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t eccsi_test(void)
wc_ecc_del_point(pvt);
if (rng_inited)
wc_FreeRng(&rng);
if (ssk != NULL) {
mp_free(ssk);
XFREE(ssk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
}
if (pub != NULL) {
wc_FreeEccsiKey(pub);
XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
}
if (priv != NULL) {
wc_FreeEccsiKey(priv);
XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
}
mp_free(ssk);
WC_FREE_VAR_EX(ssk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
wc_FreeEccsiKey(pub);
WC_FREE_VAR_EX(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
wc_FreeEccsiKey(priv);
WC_FREE_VAR_EX(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
return ret;
}
@@ -61704,38 +61685,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sakke_test(void)
wc_test_ret_t ret = 0;
WC_RNG rng;
int rng_inited = 0;
SakkeKey* priv = NULL;
SakkeKey* pub = NULL;
SakkeKey* key = NULL;
WC_DECLARE_VAR(priv, SakkeKey, 1, HEAP_HINT);
WC_DECLARE_VAR(pub, SakkeKey, 1, HEAP_HINT);
WC_DECLARE_VAR(key, SakkeKey, 1, HEAP_HINT);
ecc_point* rsk = NULL;
WOLFSSL_ENTER("sakke_test");
priv = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (priv == NULL)
ret = WC_TEST_RET_ENC_NC;
else
WC_ALLOC_VAR_EX(priv, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
if (ret == 0) {
XMEMSET(priv, 0, sizeof(*priv));
WC_ALLOC_VAR_EX(pub, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
}
if (ret == 0) {
pub = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (pub == NULL)
ret = WC_TEST_RET_ENC_NC;
else
XMEMSET(pub, 0, sizeof(*pub));
XMEMSET(pub, 0, sizeof(*pub));
WC_ALLOC_VAR_EX(key, SakkeKey, 1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER, ret = WC_TEST_RET_ENC_EC(MEMORY_E));
}
if (ret == 0) {
key = (SakkeKey*)XMALLOC(sizeof(SakkeKey), HEAP_HINT,
DYNAMIC_TYPE_TMP_BUFFER);
if (key == NULL)
ret = WC_TEST_RET_ENC_NC;
else
XMEMSET(key, 0, sizeof(*key));
}
XMEMSET(key, 0, sizeof(*key));
if (ret == 0) {
#ifndef HAVE_FIPS
ret = wc_InitRng_ex(&rng, HEAP_HINT, devId);
#else
@@ -61791,15 +61759,12 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sakke_test(void)
}
if (rng_inited)
wc_FreeRng(&rng);
XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
if (pub != NULL) {
wc_FreeSakkeKey(pub);
XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
}
if (priv != NULL) {
wc_FreeSakkeKey(priv);
XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
}
WC_FREE_VAR_EX(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
wc_FreeSakkeKey(pub);
WC_FREE_VAR_EX(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
wc_FreeSakkeKey(priv);
WC_FREE_VAR_EX(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
return ret;
}
+4 -1
View File
@@ -356,10 +356,13 @@ WOLFSSL_API void wc_ErrorString(int err, char* buff);
WOLFSSL_ABI WOLFSSL_API const char* wc_GetErrorString(int error);
#endif
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES
WOLFSSL_API extern int wc_backtrace_render(void);
#endif
#if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && \
(defined(BUILDING_WOLFSSL) || \
defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS))
WOLFSSL_API extern int wc_backtrace_render(void);
#define WC_NO_ERR_TRACE(label) (CONST_NUM_ERR_ ## label)
#ifndef WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE
#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES
+4 -3
View File
@@ -579,12 +579,13 @@ WOLFSSL_API void wolfSSL_SetLoggingPrefix(const char* prefix);
#error "Failed: Cannot WOLFSSL_DEBUG_CERTS with WOLFSSL_DEBUG_ERRORS_ONLY"
#endif
#if defined(WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES) && defined(XFILE)
WOLFSSL_API XFILE wc_backtrace_set_fp(XFILE new_fp);
#endif
#ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES
WOLFSSL_API int wc_debug_trace_error_codes_enabled(void);
WOLFSSL_API int wc_debug_trace_error_codes_set(int state);
#ifdef XFILE
WOLFSSL_API XFILE wc_backtrace_set_fp(XFILE new_fp);
#endif
#endif
#ifdef __cplusplus
+26 -16
View File
@@ -370,6 +370,8 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
#define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE abort();
#elif defined(DEBUG_VECTOR_REGISTERS_EXIT_ON_FAIL)
#define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE exit(1);
#elif defined(DEBUG_VECTOR_REGISTERS_BACKTRACE_ON_FAIL)
#define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE wc_backtrace_render();
#elif !defined(DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE)
#define DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE
#endif
@@ -381,8 +383,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
++wc_svr_count; \
if (wc_svr_count > 5) { \
fprintf(stderr, \
("%s @ L%d : incr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : incr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -403,8 +406,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
#define WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(x) do { \
if (((x) != 0) && (wc_svr_count > 0)) { \
fprintf(stderr, \
("%s @ L%d : incr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : incr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -422,8 +426,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
++wc_svr_count; \
if (wc_svr_count > 5) { \
fprintf(stderr, \
("%s @ L%d : incr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : incr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -445,8 +450,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
if (wc_debug_vector_registers_retval != 0) { \
if (wc_svr_count > 0) { \
fprintf(stderr, \
("%s @ L%d : incr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : incr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -459,8 +465,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
++wc_svr_count; \
if (wc_svr_count > 5) { \
fprintf(stderr, \
("%s @ L%d : incr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : incr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -480,8 +487,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
#define ASSERT_SAVED_VECTOR_REGISTERS() do { \
if (wc_svr_count <= 0) { \
fprintf(stderr, \
("ASSERT_SAVED_VECTOR_REGISTERS : %s @ L%d : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("ASSERT_SAVED_VECTOR_REGISTERS : %s() %s @ L %d : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -493,8 +501,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
#define ASSERT_RESTORED_VECTOR_REGISTERS(fail_clause) do { \
if (wc_svr_count != 0) { \
fprintf(stderr, \
("ASSERT_RESTORED_VECTOR_REGISTERS : %s @ L%d" \
" : wc_svr_count %d (last op %s L%d)\n"), \
("ASSERT_RESTORED_VECTOR_REGISTERS : %s() %s @ L %d" \
" : wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
@@ -508,8 +517,9 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag,
--wc_svr_count; \
if ((wc_svr_count > 4) || (wc_svr_count < 0)) { \
fprintf(stderr, \
("%s @ L%d : decr : " \
"wc_svr_count %d (last op %s L%d)\n"), \
("%s() %s @ L %d : decr : " \
"wc_svr_count %d (last op %s L %d)\n"), \
__FUNCTION__, \
__FILE__, \
__LINE__, \
wc_svr_count, \
+3
View File
@@ -3963,6 +3963,9 @@ extern void uITRON4_free(void *p) ;
#ifndef WC_NO_INTERNAL_FUNCTION_POINTERS
#define WC_NO_INTERNAL_FUNCTION_POINTERS
#endif
#ifndef WC_NO_GLOBAL_OBJECT_POINTERS
#define WC_NO_GLOBAL_OBJECT_POINTERS
#endif
#ifndef WOLFSSL_ECC_CURVE_STATIC
#define WOLFSSL_ECC_CURVE_STATIC
#endif
+7 -6
View File
@@ -74,12 +74,13 @@ This library provides big integer math functions.
#endif
/* timing resistance array */
#if (!defined(WC_NO_CACHE_RESISTANT) && \
((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \
(defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \
((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \
defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM))
#if !defined(WC_NO_GLOBAL_OBJECT_POINTERS) && \
((!defined(WC_NO_CACHE_RESISTANT) && \
((defined(HAVE_ECC) && defined(ECC_TIMING_RESISTANT)) || \
(defined(USE_FAST_MATH) && defined(TFM_TIMING_RESISTANT)))) || \
((defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) && \
!defined(WOLFSSL_RSA_PUBLIC_ONLY)) || !defined(NO_DH) || \
defined(OPENSSL_ALL) && defined(WC_PROTECT_ENCRYPTED_MEM)))
extern const wc_ptr_t wc_off_on_addr[2];
#endif