mirror of https://github.com/wolfSSL/wolfBoot.git
ECC verification: added support for ASM optimization, enabled by default
(turn off with NO_ASM=1)pull/3/head
parent
a5b15bc40f
commit
e14efd641a
11
Makefile
11
Makefile
|
@ -14,6 +14,7 @@ DEBUG?=0
|
|||
VTOR?=1
|
||||
SWAP?=1
|
||||
CORTEX_M0?=0
|
||||
NO_ASM=0
|
||||
|
||||
LSCRIPT:=hal/$(TARGET).ld
|
||||
|
||||
|
@ -53,9 +54,13 @@ ifeq ($(CORTEX_M0),1)
|
|||
CFLAGS:=-mcpu=cortex-m0
|
||||
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
|
||||
else
|
||||
CFLAGS:=-mcpu=cortex-m3
|
||||
#MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
|
||||
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
|
||||
ifeq ($(NO_ASM),1)
|
||||
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_c32.o
|
||||
CFLAGS:=-mcpu=cortex-m3
|
||||
else
|
||||
CFLAGS:=-mcpu=cortex-m3 -DWOLFSSL_SP_ASM -DWOLFSSL_SP_ARM_CORTEX_M_ASM -fomit-frame-pointer
|
||||
MATH_OBJS += ./lib/wolfssl/wolfcrypt/src/sp_cortexm.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(FASTMATH),1)
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit a506c6591dad47036508d55315d09bc13b799a1f
|
||||
Subproject commit 501a3a287b70a1daa982c016f843eb78b44b4857
|
|
@ -2,41 +2,48 @@
|
|||
#include <stdint.h>
|
||||
|
||||
/* Allow one single sp_point to be allocated at one time */
|
||||
|
||||
#define SP_POINT_SIZE (244)
|
||||
#define MAX_POINTS 2
|
||||
#define SCRATCHBOARD_SIZE (640)
|
||||
#ifdef WOLFSSL_SP_ASM
|
||||
# define SP_POINT_SIZE (196)
|
||||
# define SCRATCHBOARD_SIZE (512)
|
||||
# define SP_DIGITS_SIZE (320)
|
||||
# define MAX_POINTS (4)
|
||||
# define MULTIPOINT_SIZE (16)
|
||||
#else
|
||||
# define SP_POINT_SIZE (244)
|
||||
# define SCRATCHBOARD_SIZE (640)
|
||||
# define SP_DIGITS_SIZE (400)
|
||||
# define MAX_POINTS (2)
|
||||
# define MULTIPOINT_SIZE (3)
|
||||
#endif
|
||||
#define TMP_BUFFER_SIZE (124)
|
||||
#define SP_DIGITS_SIZE (400)
|
||||
#define SP_NORMALIZER_SIZE (128)
|
||||
|
||||
static uint8_t sp_scratchboard[SCRATCHBOARD_SIZE];
|
||||
static int sp_scratchboard_in_use = 0;
|
||||
|
||||
static uint8_t sp_point_buffer0[SP_POINT_SIZE];
|
||||
static uint8_t sp_point_buffer1[SP_POINT_SIZE];
|
||||
static int sp_point_in_use[MAX_POINTS] = { };
|
||||
static uint8_t sp_point_buffer[MAX_POINTS][SP_POINT_SIZE];
|
||||
|
||||
static uint8_t tmp_buffer[TMP_BUFFER_SIZE];
|
||||
static uint8_t sp_three_points[SP_POINT_SIZE * 3];
|
||||
static uint8_t sp_multipoint[SP_POINT_SIZE * MULTIPOINT_SIZE];
|
||||
static uint8_t sp_digits[SP_DIGITS_SIZE];
|
||||
static uint8_t sp_normalizer[SP_NORMALIZER_SIZE];
|
||||
|
||||
static int point_0_in_use = 0;
|
||||
static int point_1_in_use = 0;
|
||||
static int tmp_buffer_in_use = 0;
|
||||
static int sp_three_points_in_use = 0;
|
||||
static int sp_multipoint_in_use = 0;
|
||||
static int sp_digits_in_use = 0;
|
||||
static int sp_normalizer_in_use = 0;
|
||||
|
||||
static void* xmalloc_sp_point(void)
|
||||
{
|
||||
if (point_0_in_use) {
|
||||
if (point_1_in_use)
|
||||
return NULL;
|
||||
point_1_in_use++;
|
||||
return sp_point_buffer1;
|
||||
int i;
|
||||
for (i = 0; i < MAX_POINTS; i++) {
|
||||
if (sp_point_in_use[i] == 0) {
|
||||
sp_point_in_use[i]++;
|
||||
return sp_point_buffer[i];
|
||||
}
|
||||
}
|
||||
point_0_in_use++;
|
||||
return sp_point_buffer0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void* xmalloc_sp_scratchboard(void)
|
||||
|
@ -55,12 +62,12 @@ static void* xmalloc_sp_tmpbuffer(void)
|
|||
return tmp_buffer;
|
||||
}
|
||||
|
||||
static void* xmalloc_sp_three_points(void)
|
||||
static void* xmalloc_sp_multipoint(void)
|
||||
{
|
||||
if (sp_three_points_in_use)
|
||||
if (sp_multipoint_in_use)
|
||||
return NULL;
|
||||
sp_three_points_in_use++;
|
||||
return sp_three_points;
|
||||
sp_multipoint_in_use++;
|
||||
return sp_multipoint;
|
||||
}
|
||||
|
||||
static void* xmalloc_sp_digits(void)
|
||||
|
@ -88,8 +95,8 @@ void* XMALLOC(size_t n, void* heap, int type)
|
|||
return xmalloc_sp_scratchboard();
|
||||
if (n == TMP_BUFFER_SIZE)
|
||||
return xmalloc_sp_tmpbuffer();
|
||||
if (n == 3 * SP_POINT_SIZE)
|
||||
return xmalloc_sp_three_points();
|
||||
if (n == MULTIPOINT_SIZE * SP_POINT_SIZE)
|
||||
return xmalloc_sp_multipoint();
|
||||
if (n == SP_DIGITS_SIZE)
|
||||
return xmalloc_sp_digits();
|
||||
if (n == SP_NORMALIZER_SIZE)
|
||||
|
@ -99,18 +106,21 @@ void* XMALLOC(size_t n, void* heap, int type)
|
|||
|
||||
void XFREE(void *ptr)
|
||||
{
|
||||
if (ptr == sp_point_buffer0)
|
||||
point_0_in_use = 0;
|
||||
if (ptr == sp_point_buffer1)
|
||||
point_1_in_use = 0;
|
||||
int i;
|
||||
if (ptr == sp_scratchboard)
|
||||
sp_scratchboard_in_use = 0;
|
||||
if (ptr == tmp_buffer)
|
||||
tmp_buffer_in_use = 0;
|
||||
if (ptr == sp_three_points)
|
||||
sp_three_points_in_use = 0;
|
||||
if (ptr == sp_multipoint)
|
||||
sp_multipoint_in_use = 0;
|
||||
if (ptr == sp_digits)
|
||||
sp_digits_in_use = 0;
|
||||
if (ptr == sp_normalizer)
|
||||
sp_normalizer_in_use = 0;
|
||||
for (i = 0; i < MAX_POINTS; i++) {
|
||||
if (ptr == sp_point_buffer[i]) {
|
||||
sp_point_in_use[i] = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue