From e0a47ca6c1e5b45a991cbfbb300d9a54f0f58c39 Mon Sep 17 00:00:00 2001 From: Sean Parkinson Date: Mon, 12 Sep 2022 10:52:34 +1000 Subject: [PATCH] Small Stack Cache: make work again Fix Small Stack Cache option so that it works with various options including ALT_ECC_SIZE. Allow ALT_ECC_SIZE when SP math all or SP math is compiled in. --- wolfcrypt/src/ecc.c | 26 +++++++++++++------------- wolfssl/wolfcrypt/ecc.h | 3 ++- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index f947794bc..27b834495 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -7319,15 +7319,15 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, } #endif -#ifdef WOLFSSL_SMALL_STACK - #ifdef WOLFSSL_SMALL_STACK_CACHE +#ifdef WOLFSSL_SMALL_STACK_CACHE key = (ecc_key *)XMALLOC(sizeof(*key), heap, DYNAMIC_TYPE_ECC_BUFFER); if (key == NULL) { XFREE(tB, heap, DYNAMIC_TYPE_ECC_BUFFER); XFREE(tA, heap, DYNAMIC_TYPE_ECC_BUFFER); return GEN_MEM_ERR; } - #endif +#endif +#ifdef WOLFSSL_SMALL_STACK precomp = (ecc_point**)XMALLOC(sizeof(ecc_point*) * SHAMIR_PRECOMP_SZ, heap, DYNAMIC_TYPE_ECC_BUFFER); if (precomp == NULL) { @@ -7343,20 +7343,20 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, key->t1 = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); key->t2 = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); #ifdef ALT_ECC_SIZE - key.x = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); - key.y = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); - key.z = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); + key->x = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); + key->y = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); + key->z = (mp_int*)XMALLOC(sizeof(mp_int), heap, DYNAMIC_TYPE_ECC); #endif if (key->t1 == NULL || key->t2 == NULL #ifdef ALT_ECC_SIZE - || key.x == NULL || key.y == NULL || key.z == NULL + || key->x == NULL || key->y == NULL || key->z == NULL #endif ) { #ifdef ALT_ECC_SIZE - XFREE(key.z, heap, DYNAMIC_TYPE_ECC); - XFREE(key.y, heap, DYNAMIC_TYPE_ECC); - XFREE(key.x, heap, DYNAMIC_TYPE_ECC); + XFREE(key->z, heap, DYNAMIC_TYPE_ECC); + XFREE(key->y, heap, DYNAMIC_TYPE_ECC); + XFREE(key->x, heap, DYNAMIC_TYPE_ECC); #endif XFREE(key->t2, heap, DYNAMIC_TYPE_ECC); XFREE(key->t1, heap, DYNAMIC_TYPE_ECC); @@ -7575,9 +7575,9 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, ForceZero(tB, ECC_BUFSIZE); #ifdef WOLFSSL_SMALL_STACK_CACHE #ifdef ALT_ECC_SIZE - XFREE(key.z, heap, DYNAMIC_TYPE_ECC); - XFREE(key.y, heap, DYNAMIC_TYPE_ECC); - XFREE(key.x, heap, DYNAMIC_TYPE_ECC); + XFREE(key->z, heap, DYNAMIC_TYPE_ECC); + XFREE(key->y, heap, DYNAMIC_TYPE_ECC); + XFREE(key->x, heap, DYNAMIC_TYPE_ECC); #endif XFREE(key->t2, heap, DYNAMIC_TYPE_ECC); XFREE(key->t1, heap, DYNAMIC_TYPE_ECC); diff --git a/wolfssl/wolfcrypt/ecc.h b/wolfssl/wolfcrypt/ecc.h index d148db81b..5f1d2ee0b 100644 --- a/wolfssl/wolfcrypt/ecc.h +++ b/wolfssl/wolfcrypt/ecc.h @@ -340,7 +340,8 @@ typedef struct ecc_set_type { * The ALT_ECC_SIZE option only applies to stack based fast math USE_FAST_MATH. */ -#ifndef USE_FAST_MATH +#if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL) && \ + !defined(WOLFSSL_SP_MATH) #error USE_FAST_MATH must be defined to use ALT_ECC_SIZE #endif #ifdef WOLFSSL_NO_MALLOC