diff --git a/configure.ac b/configure.ac index ce331a967b..580bdc9f21 100644 --- a/configure.ac +++ b/configure.ac @@ -1645,6 +1645,19 @@ then fi +# STACK usage logging +AC_ARG_ENABLE([stacklog], + [AS_HELP_STRING([--enable-stacklog],[Enable stack logging (default: disabled)])], + [ ENABLED_STACKLOG=$enableval ], + [ ENABLED_STACKLOG=no ] + ) + +if test "$ENABLED_STACKLOG" = "yes" +then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_STACK_LOG -finstrument-functions" +fi + + # RSA AC_ARG_ENABLE([rsa], diff --git a/src/internal.c b/src/internal.c index eb7ed702ef..e62a43221c 100644 --- a/src/internal.c +++ b/src/internal.c @@ -8679,6 +8679,8 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, (void)sizeof(args_test); #elif defined(WOLFSSL_NONBLOCK_OCSP) ProcPeerCertArgs* args = ssl->nonblockarg; +#elif defined(WOLFSSL_SMALL_STACK) + ProcPeerCertArgs* args = NULL; #else ProcPeerCertArgs args[1]; #endif @@ -8707,6 +8709,12 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, } } if (ssl->nonblockarg == NULL) /* new args */ +#elif defined(WOLFSSL_SMALL_STACK) + args = (ProcPeerCertArgs*)XMALLOC( + sizeof(ProcPeerCertArgs), ssl->heap, DYNAMIC_TYPE_TMP_BUFFER); + if (args == NULL) { + ERROR_OUT(MEMORY_E, exit_ppc); + } #endif { /* Reset state */ @@ -9837,9 +9845,12 @@ exit_ppc: FreeProcPeerCertArgs(ssl, args); -#if !defined(WOLFSSL_ASYNC_CRYPT) && defined(WOLFSSL_NONBLOCK_OCSP) +#if defined(WOLFSSL_ASYNC_CRYPT) +#elif defined(WOLFSSL_NONBLOCK_OCSP) XFREE(args, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER); ssl->nonblockarg = NULL; +#elif defined(WOLFSSL_SMALL_STACK) + XFREE(args, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif FreeKeyExchange(ssl); diff --git a/wolfcrypt/src/memory.c b/wolfcrypt/src/memory.c index 87ed921f3d..55111662f3 100644 --- a/wolfcrypt/src/memory.c +++ b/wolfcrypt/src/memory.c @@ -1074,3 +1074,22 @@ void xfree(void *p, void* heap, int type, const char* func, const char* file, } #endif /* WOLFSSL_MEMORY_LOG */ +#ifdef WOLFSSL_STACK_LOG +/* Note: this code only works with GCC using -finstrument-functions. */ +void __attribute__((no_instrument_function)) + __cyg_profile_func_enter(void *func, void *caller) +{ + register void* sp asm("sp"); + fprintf(stderr, "ENTER: %016lx %p\n", (size_t)func, sp); + (void)caller; +} + +void __attribute__((no_instrument_function)) + __cyg_profile_func_exit(void *func, void *caller) +{ + register void* sp asm("sp"); + fprintf(stderr, "EXIT: %016lx %p\n", (size_t)func, sp); + (void)caller; +} +#endif + diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index 6510a22e46..ad12487160 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -19184,8 +19184,7 @@ static void sp_256_div2_8(sp_digit* r, sp_digit* a, sp_digit* m) */ static void sp_256_proj_point_dbl_8(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*8; sp_digit* x; @@ -19195,7 +19194,8 @@ static void sp_256_proj_point_dbl_8(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -19370,9 +19370,8 @@ static int sp_256_cmp_equal_8(const sp_digit* a, const sp_digit* b) static void sp_256_proj_point_add_8(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*8; sp_digit* t3 = t + 4*8; @@ -19399,8 +19398,8 @@ static void sp_256_proj_point_add_8(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -19595,8 +19594,7 @@ typedef struct sp_table_entry { static void sp_256_proj_point_dbl_n_8(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*8; sp_digit* b = t + 4*8; @@ -19608,7 +19606,8 @@ static void sp_256_proj_point_dbl_n_8(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -19670,9 +19669,8 @@ static void sp_256_proj_point_dbl_n_8(sp_point* r, sp_point* p, int n, static void sp_256_proj_point_add_qz1_8(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*8; sp_digit* t3 = t + 4*8; @@ -19692,8 +19690,8 @@ static void sp_256_proj_point_add_qz1_8(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index 03e5823c57..1efb881083 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -13407,8 +13407,7 @@ static void sp_256_div2_4(sp_digit* r, sp_digit* a, sp_digit* m) */ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* x; @@ -13418,7 +13417,8 @@ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -13482,8 +13482,7 @@ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*4; sp_digit* b = t + 4*4; @@ -13495,7 +13494,8 @@ static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -13566,9 +13566,8 @@ static int sp_256_cmp_equal_4(const sp_digit* a, const sp_digit* b) static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -13595,8 +13594,8 @@ static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -13996,9 +13995,8 @@ typedef struct sp_table_entry { static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -14018,8 +14016,8 @@ static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; diff --git a/wolfcrypt/src/sp_c32.c b/wolfcrypt/src/sp_c32.c index 82f638d370..4c7a076b7b 100644 --- a/wolfcrypt/src/sp_c32.c +++ b/wolfcrypt/src/sp_c32.c @@ -8503,8 +8503,7 @@ static void sp_256_div2_10(sp_digit* r, sp_digit* a, sp_digit* m) */ static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*10; sp_digit* x; @@ -8514,7 +8513,8 @@ static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -8592,9 +8592,8 @@ static int sp_256_cmp_equal_10(const sp_digit* a, const sp_digit* b) static void sp_256_proj_point_add_10(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*10; sp_digit* t3 = t + 4*10; @@ -8621,8 +8620,8 @@ static void sp_256_proj_point_add_10(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -9017,8 +9016,7 @@ static int sp_256_ecc_mulmod_fast_10(sp_point* r, sp_point* g, sp_digit* k, static void sp_256_proj_point_dbl_n_10(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*10; sp_digit* b = t + 4*10; @@ -9030,7 +9028,8 @@ static void sp_256_proj_point_dbl_n_10(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -9092,9 +9091,8 @@ static void sp_256_proj_point_dbl_n_10(sp_point* r, sp_point* p, int n, static void sp_256_proj_point_add_qz1_10(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*10; sp_digit* t3 = t + 4*10; @@ -9114,8 +9112,8 @@ static void sp_256_proj_point_add_qz1_10(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; diff --git a/wolfcrypt/src/sp_c64.c b/wolfcrypt/src/sp_c64.c index b906b039d8..c0823eba66 100644 --- a/wolfcrypt/src/sp_c64.c +++ b/wolfcrypt/src/sp_c64.c @@ -7726,8 +7726,7 @@ static void sp_256_div2_5(sp_digit* r, sp_digit* a, sp_digit* m) */ static void sp_256_proj_point_dbl_5(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*5; sp_digit* x; @@ -7737,7 +7736,8 @@ static void sp_256_proj_point_dbl_5(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -7814,9 +7814,8 @@ static int sp_256_cmp_equal_5(const sp_digit* a, const sp_digit* b) static void sp_256_proj_point_add_5(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*5; sp_digit* t3 = t + 4*5; @@ -7843,8 +7842,8 @@ static void sp_256_proj_point_add_5(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -8239,8 +8238,7 @@ static int sp_256_ecc_mulmod_fast_5(sp_point* r, sp_point* g, sp_digit* k, static void sp_256_proj_point_dbl_n_5(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*5; sp_digit* b = t + 4*5; @@ -8252,7 +8250,8 @@ static void sp_256_proj_point_dbl_n_5(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -8314,9 +8313,8 @@ static void sp_256_proj_point_dbl_n_5(sp_point* r, sp_point* p, int n, static void sp_256_proj_point_add_qz1_5(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*5; sp_digit* t3 = t + 4*5; @@ -8336,8 +8334,8 @@ static void sp_256_proj_point_add_qz1_5(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; diff --git a/wolfcrypt/src/sp_x86_64.c b/wolfcrypt/src/sp_x86_64.c index 9a42a1343e..7d869c5416 100644 --- a/wolfcrypt/src/sp_x86_64.c +++ b/wolfcrypt/src/sp_x86_64.c @@ -28685,8 +28685,7 @@ SP_NOINLINE static void sp_256_div2_4(sp_digit* r, sp_digit* a, sp_digit* m) */ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* x; @@ -28696,7 +28695,8 @@ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -28760,8 +28760,7 @@ static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t) static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*4; sp_digit* b = t + 4*4; @@ -28773,7 +28772,8 @@ static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -28844,9 +28844,8 @@ static int sp_256_cmp_equal_4(const sp_digit* a, const sp_digit* b) static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -28873,8 +28872,8 @@ static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -29707,8 +29706,7 @@ static void sp_256_map_avx2_4(sp_point* r, sp_point* p, sp_digit* t) */ static void sp_256_proj_point_dbl_avx2_4(sp_point* r, sp_point* p, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* x; @@ -29718,7 +29716,8 @@ static void sp_256_proj_point_dbl_avx2_4(sp_point* r, sp_point* p, sp_digit* t) /* When infinity don't double point passed in - constant time. */ rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -29782,8 +29781,7 @@ static void sp_256_proj_point_dbl_avx2_4(sp_point* r, sp_point* p, sp_digit* t) static void sp_256_proj_point_dbl_n_avx2_4(sp_point* r, sp_point* p, int n, sp_digit* t) { - sp_point *rp[2]; - sp_point tp; + sp_point* rp[2]; sp_digit* w = t; sp_digit* a = t + 2*4; sp_digit* b = t + 4*4; @@ -29795,7 +29793,8 @@ static void sp_256_proj_point_dbl_n_avx2_4(sp_point* r, sp_point* p, int n, int i; rp[0] = r; - rp[1] = &tp; + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity]->x; y = rp[p->infinity]->y; z = rp[p->infinity]->z; @@ -29854,9 +29853,8 @@ static void sp_256_proj_point_dbl_n_avx2_4(sp_point* r, sp_point* p, int n, static void sp_256_proj_point_add_avx2_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -29883,8 +29881,8 @@ static void sp_256_proj_point_add_avx2_4(sp_point* r, sp_point* p, sp_point* q, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -30215,9 +30213,8 @@ typedef struct sp_table_entry { static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -30237,8 +30234,8 @@ static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z; @@ -30608,9 +30605,8 @@ static int sp_256_ecc_mulmod_4(sp_point* r, sp_point* g, sp_digit* k, static void sp_256_proj_point_add_qz1_avx2_4(sp_point* r, sp_point* p, sp_point* q, sp_digit* t) { - sp_point *ap[2]; - sp_point *rp[2]; - sp_point tp; + sp_point* ap[2]; + sp_point* rp[2]; sp_digit* t1 = t; sp_digit* t2 = t + 2*4; sp_digit* t3 = t + 4*4; @@ -30630,8 +30626,8 @@ static void sp_256_proj_point_add_qz1_avx2_4(sp_point* r, sp_point* p, } else { rp[0] = r; - rp[1] = &tp; - XMEMSET(&tp, 0, sizeof(tp)); + rp[1] = (sp_point*)t; + XMEMSET(rp[1], 0, sizeof(sp_point)); x = rp[p->infinity | q->infinity]->x; y = rp[p->infinity | q->infinity]->y; z = rp[p->infinity | q->infinity]->z;