Merge pull request #1797 from SparkiDev/stack_size

Small stack usage fixes
pull/1801/head
toddouska 2018-08-29 16:19:46 -07:00 committed by GitHub
commit 31e37ea5df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 128 additions and 97 deletions

View File

@ -1645,6 +1645,19 @@ then
fi 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 # RSA
AC_ARG_ENABLE([rsa], AC_ARG_ENABLE([rsa],

View File

@ -8679,6 +8679,8 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
(void)sizeof(args_test); (void)sizeof(args_test);
#elif defined(WOLFSSL_NONBLOCK_OCSP) #elif defined(WOLFSSL_NONBLOCK_OCSP)
ProcPeerCertArgs* args = ssl->nonblockarg; ProcPeerCertArgs* args = ssl->nonblockarg;
#elif defined(WOLFSSL_SMALL_STACK)
ProcPeerCertArgs* args = NULL;
#else #else
ProcPeerCertArgs args[1]; ProcPeerCertArgs args[1];
#endif #endif
@ -8707,6 +8709,12 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx,
} }
} }
if (ssl->nonblockarg == NULL) /* new args */ 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 #endif
{ {
/* Reset state */ /* Reset state */
@ -9837,9 +9845,12 @@ exit_ppc:
FreeProcPeerCertArgs(ssl, args); 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); XFREE(args, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
ssl->nonblockarg = NULL; ssl->nonblockarg = NULL;
#elif defined(WOLFSSL_SMALL_STACK)
XFREE(args, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER);
#endif #endif
FreeKeyExchange(ssl); FreeKeyExchange(ssl);

View File

@ -1074,3 +1074,22 @@ void xfree(void *p, void* heap, int type, const char* func, const char* file,
} }
#endif /* WOLFSSL_MEMORY_LOG */ #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

View File

@ -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) static void sp_256_proj_point_dbl_8(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*8; sp_digit* t2 = t + 2*8;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_8(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*8; sp_digit* t2 = t + 2*8;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_dbl_n_8(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*8; sp_digit* a = t + 2*8;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_qz1_8(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*8; sp_digit* t2 = t + 2*8;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; z = rp[p->infinity | q->infinity]->z;

View File

@ -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) static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*4; sp_digit* a = t + 2*4;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; z = rp[p->infinity | q->infinity]->z;

View File

@ -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) static void sp_256_proj_point_dbl_10(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*10; sp_digit* t2 = t + 2*10;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_10(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*10; sp_digit* t2 = t + 2*10;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_dbl_n_10(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*10; sp_digit* a = t + 2*10;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_qz1_10(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*10; sp_digit* t2 = t + 2*10;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; z = rp[p->infinity | q->infinity]->z;

View File

@ -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) static void sp_256_proj_point_dbl_5(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*5; sp_digit* t2 = t + 2*5;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_5(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*5; sp_digit* t2 = t + 2*5;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_dbl_n_5(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*5; sp_digit* a = t + 2*5;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_qz1_5(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*5; sp_digit* t2 = t + 2*5;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; z = rp[p->infinity | q->infinity]->z;

View File

@ -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) static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*4; sp_digit* a = t + 2*4;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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) static void sp_256_proj_point_dbl_avx2_4(sp_point* r, sp_point* p, sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* x; 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. */ /* When infinity don't double point passed in - constant time. */
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_dbl_n_avx2_4(sp_point* r, sp_point* p, int n,
sp_digit* t) sp_digit* t)
{ {
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* w = t; sp_digit* w = t;
sp_digit* a = t + 2*4; sp_digit* a = t + 2*4;
sp_digit* b = t + 4*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; int i;
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity]->x; x = rp[p->infinity]->x;
y = rp[p->infinity]->y; y = rp[p->infinity]->y;
z = rp[p->infinity]->z; 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, static void sp_256_proj_point_add_avx2_4(sp_point* r, sp_point* p, sp_point* q,
sp_digit* t) sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; 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, static void sp_256_proj_point_add_qz1_avx2_4(sp_point* r, sp_point* p,
sp_point* q, sp_digit* t) sp_point* q, sp_digit* t)
{ {
sp_point *ap[2]; sp_point* ap[2];
sp_point *rp[2]; sp_point* rp[2];
sp_point tp;
sp_digit* t1 = t; sp_digit* t1 = t;
sp_digit* t2 = t + 2*4; sp_digit* t2 = t + 2*4;
sp_digit* t3 = t + 4*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 { else {
rp[0] = r; rp[0] = r;
rp[1] = &tp; rp[1] = (sp_point*)t;
XMEMSET(&tp, 0, sizeof(tp)); XMEMSET(rp[1], 0, sizeof(sp_point));
x = rp[p->infinity | q->infinity]->x; x = rp[p->infinity | q->infinity]->x;
y = rp[p->infinity | q->infinity]->y; y = rp[p->infinity | q->infinity]->y;
z = rp[p->infinity | q->infinity]->z; z = rp[p->infinity | q->infinity]->z;