Skip to content

Commit 997583f

Browse files
committed
Fix for tools/scripts/va416x0/build_test.sh portability (MacOS)
Added option to support wolfCrypt test/benchmark in test-app Add some checking if partition size is too large
1 parent 5f13d7d commit 997583f

File tree

15 files changed

+565
-39
lines changed

15 files changed

+565
-39
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ endif
202202

203203
# Environment variables for sign tool
204204
SIGN_ENV=IMAGE_HEADER_SIZE=$(IMAGE_HEADER_SIZE) \
205+
WOLFBOOT_PARTITION_SIZE=$(WOLFBOOT_PARTITION_SIZE) \
205206
WOLFBOOT_SECTOR_SIZE=$(WOLFBOOT_SECTOR_SIZE) \
206207
ML_DSA_LEVEL=$(ML_DSA_LEVEL) \
207208
IMAGE_SIGNATURE_SIZE=$(IMAGE_SIGNATURE_SIZE) \

config/examples/vorago_va416x0.config

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ DUALBANK_SWAP?=0
3333
PKA?=0
3434
ENCRYPT=0
3535
WOLFTPM?=0
36-
OPTIMIZATION_LEVEL=1
36+
OPTIMIZATION_LEVEL=s
3737

3838
# Optionally allow downgrade to older valid version in update partition
3939
ALLOW_DOWNGRADE?=0
@@ -45,11 +45,11 @@ NO_ARM_ASM?=0
4545
# Optional: Use smaller SHA512
4646
#CFLAGS_EXTRA+=-DUSE_SLOW_SHA512
4747

48-
# 38KB boot, 108KB partitions, 2KB swap
48+
# Optimized: 46KB wolfboot, 104KB partitions, 2KB swap
4949
WOLFBOOT_SECTOR_SIZE?=0x800
50-
WOLFBOOT_PARTITION_SIZE?=0x1B000
51-
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x9800
52-
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x24800
50+
WOLFBOOT_PARTITION_SIZE?=0x1A000
51+
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0xB800
52+
WOLFBOOT_PARTITION_UPDATE_ADDRESS?=0x25800
5353
WOLFBOOT_PARTITION_SWAP_ADDRESS?=0x3F800
5454

5555
# ML-DSA 5: 36KB boot, 96KB partitions, 12KB swap
@@ -81,3 +81,9 @@ WOLFBOOT_RESTORE_CLOCK?=1
8181
# Optional debugging
8282
#CFLAGS_EXTRA+=-DDEBUG_EXT_FLASH
8383
#CFLAGS_EXTRA+=-DTEST_EXT_FLASH
84+
85+
# Optional: Enable wolfCrypt test and benchmark in test-app
86+
# Uncomment to enable
87+
# Note: Requires ~80-160KB additional flash and ~10-20KB RAM
88+
#WOLFCRYPT_TEST?=1
89+
#WOLFCRYPT_BENCHMARK?=1

include/user_settings.h

Lines changed: 96 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ extern int tolower(int c);
9292
# define NO_ED448_EXPORT
9393
# define WOLFSSL_SHA3
9494
# define WOLFSSL_SHAKE256
95+
# define WOLFSSL_SHA512
9596
#endif
9697

9798
/* ECC */
@@ -101,8 +102,8 @@ extern int tolower(int c);
101102
defined(WOLFBOOT_SIGN_SECONDARY_ECC256) || \
102103
defined(WOLFBOOT_SIGN_SECONDARY_ECC384) || \
103104
defined(WOLFBOOT_SIGN_SECONDARY_ECC521) || \
104-
defined(WOLFCRYPT_SECURE_MODE)
105-
105+
defined(WOLFCRYPT_SECURE_MODE) || \
106+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
106107

107108
# define HAVE_ECC
108109
# define ECC_TIMING_RESISTANT
@@ -118,6 +119,7 @@ extern int tolower(int c);
118119

119120
/* Some ECC options are disabled to reduce size */
120121
# if !defined(WOLFCRYPT_SECURE_MODE) && \
122+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
121123
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
122124
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
123125
# if !defined(WOLFBOOT_TPM)
@@ -138,6 +140,7 @@ extern int tolower(int c);
138140
# endif
139141
# else
140142
# define HAVE_ECC_SIGN
143+
# define HAVE_ECC_VERIFY
141144
#ifndef PKCS11_SMALL
142145
# define HAVE_ECC_CDH
143146
#endif
@@ -147,6 +150,7 @@ extern int tolower(int c);
147150
# define WOLFSSL_HAVE_SP_ECC
148151
# define WOLFSSL_KEY_GEN
149152
# define HAVE_ECC_KEY_EXPORT
153+
# define HAVE_ECC_KEY_IMPORT
150154
# endif
151155

152156
/* SP MATH */
@@ -160,15 +164,18 @@ extern int tolower(int c);
160164

161165
/* Curve */
162166
# if defined(WOLFBOOT_SIGN_ECC256) || defined(WOLFCRYPT_SECURE_MODE) || \
163-
defined(WOLFBOOT_SIGN_SECONDARY_ECC256)
167+
defined(WOLFBOOT_SIGN_SECONDARY_ECC256) || \
168+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
164169
# define HAVE_ECC256
165170
# endif
166171
# if defined(WOLFBOOT_SIGN_ECC384) || \
167172
defined(WOLFBOOT_SIGN_SECONDARY_ECC384) || \
168-
defined(WOLFCRYPT_SECURE_MODE)
173+
defined(WOLFCRYPT_SECURE_MODE) || \
174+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
169175
# define HAVE_ECC384
170176
# define WOLFSSL_SP_384
171177
# endif
178+
/* ECC521 only enabled if specifically requested (not for tests - too large) */
172179
# if defined(WOLFBOOT_SIGN_ECC521) || \
173180
defined(WOLFBOOT_SIGN_SECONDARY_ECC521) || \
174181
defined(WOLFCRYPT_SECURE_MODE)
@@ -219,6 +226,7 @@ extern int tolower(int c);
219226
# define RSA_LOW_MEM
220227
# define WC_ASN_HASH_SHA256
221228
# if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
229+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
222230
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
223231
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
224232
# define WOLFSSL_RSA_VERIFY_INLINE
@@ -305,15 +313,17 @@ extern int tolower(int c);
305313
#ifdef WOLFBOOT_HASH_SHA3_384
306314
# define WOLFSSL_SHA3
307315
# if defined(NO_RSA) && !defined(WOLFBOOT_TPM) && \
308-
!defined(WOLFCRYPT_SECURE_MODE)
316+
!defined(WOLFCRYPT_SECURE_MODE) && \
317+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
309318
# define NO_SHA256
310319
# endif
311320
#endif
312321

313322
#ifdef WOLFBOOT_HASH_SHA384
314323
# define WOLFSSL_SHA384
315324
# if defined(NO_RSA) && !defined(WOLFBOOT_TPM) && \
316-
!defined(WOLFCRYPT_SECURE_MODE)
325+
!defined(WOLFCRYPT_SECURE_MODE) && \
326+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
317327
# define NO_SHA256
318328
# endif
319329
#ifndef WOLFSSL_SHA512
@@ -410,7 +420,8 @@ extern int tolower(int c);
410420

411421
#if (defined(WOLFBOOT_TPM_SEAL) && defined(WOLFBOOT_ATA_DISK_LOCK)) || \
412422
defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) || \
413-
defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
423+
defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER) || \
424+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
414425
# define WOLFSSL_BASE64_ENCODE
415426
#else
416427
# define NO_CODING
@@ -464,7 +475,8 @@ extern int tolower(int c);
464475
#endif
465476
#endif
466477

467-
#if !defined(WOLFCRYPT_SECURE_MODE) && !defined(WOLFBOOT_TPM_PARMENC)
478+
#if !defined(WOLFCRYPT_SECURE_MODE) && !defined(WOLFBOOT_TPM_PARMENC) && \
479+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
468480
#if !(defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
469481
defined(WOLFBOOT_SIGN_ML_DSA)) && \
470482
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
@@ -473,23 +485,40 @@ extern int tolower(int c);
473485
#define WC_NO_HASHDRBG
474486
#define NO_AES_CBC
475487
#else
476-
#define HAVE_HASHDRBG
477-
#define WOLFSSL_AES_CFB
488+
#if defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
489+
/* Use custom RNG for tests/benchmarks (saves ~7KB vs HASHDRBG).
490+
* WARNING: my_rng_seed_gen is NOT cryptographically secure.
491+
* Only used in test-app builds, not in production wolfBoot. */
492+
#define WC_NO_HASHDRBG
493+
#define CUSTOM_RAND_GENERATE_SEED my_rng_seed_gen
494+
#define CUSTOM_RAND_GENERATE_BLOCK my_rng_seed_gen
495+
extern int my_rng_seed_gen(unsigned char* output, unsigned int sz);
496+
#else
497+
#define HAVE_HASHDRBG
498+
#define WOLFSSL_AES_CFB
499+
#endif
478500
#endif
479501

480502

481503
#if !defined(ENCRYPT_WITH_AES128) && !defined(ENCRYPT_WITH_AES256) && \
482-
!defined(WOLFBOOT_TPM_PARMENC) && !defined(WOLFCRYPT_SECURE_MODE)
504+
!defined(WOLFBOOT_TPM_PARMENC) && !defined(WOLFCRYPT_SECURE_MODE) && \
505+
!defined(SECURE_PKCS11) && !defined(WOLFCRYPT_TZ_PSA) && \
506+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
483507
#define NO_AES
484508
#endif
485509

486-
#if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE)
510+
#if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
511+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
487512
# define NO_HMAC
488-
#if !(defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
489-
defined(WOLFBOOT_SIGN_ML_DSA)) && \
490-
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
491-
#define WC_NO_RNG
492513
#endif
514+
515+
#if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
516+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
517+
# if !(defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
518+
defined(WOLFBOOT_SIGN_ML_DSA)) && \
519+
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
520+
# define WC_NO_RNG
521+
# endif
493522
# define WC_NO_HASHDRBG
494523
# define NO_DEV_RANDOM
495524
# if !defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
@@ -534,9 +563,55 @@ extern int tolower(int c);
534563
#define NO_CHECK_PRIVATE_KEY
535564
#define NO_KDF
536565

537-
#define BENCH_EMBEDDED
538-
#define NO_CRYPT_TEST
539-
#define NO_CRYPT_BENCHMARK
566+
/* wolfCrypt Test/Benchmark Configuration */
567+
#ifdef WOLFCRYPT_TEST
568+
/* Skip extended tests to save memory */
569+
#define NO_CRYPT_TEST_EXTENDED
570+
/* Use smaller certificate buffers */
571+
#define USE_CERT_BUFFERS_256
572+
/* Override default NO_CRYPT_TEST */
573+
#undef NO_CRYPT_TEST
574+
#else
575+
#define NO_CRYPT_TEST
576+
#endif
577+
578+
#ifdef WOLFCRYPT_BENCHMARK
579+
/* Embedded benchmark mode */
580+
#ifndef BENCH_EMBEDDED
581+
#define BENCH_EMBEDDED
582+
#endif
583+
/* Override default NO_CRYPT_BENCHMARK */
584+
#undef NO_CRYPT_BENCHMARK
585+
#else
586+
#define NO_CRYPT_BENCHMARK
587+
#endif
588+
589+
/* Common optimizations when test/benchmark enabled */
590+
#if defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
591+
#define NO_WRITE_TEMP_FILES
592+
593+
/* Use static memory pool to avoid system malloc dependency.
594+
* benchmark.c provides gBenchMemory static buffer.
595+
* Default is 50KB with BENCH_EMBEDDED, override for smaller targets */
596+
#ifndef WOLFSSL_STATIC_MEMORY
597+
#define WOLFSSL_STATIC_MEMORY
598+
#endif
599+
#ifndef WOLFSSL_STATIC_MEMORY_TEST_SZ
600+
#define WOLFSSL_STATIC_MEMORY_TEST_SZ (10 * 1024)
601+
#endif
602+
603+
/* Enable SP math digit operations */
604+
#define WOLFSSL_SP_MUL_D
605+
606+
/* User time functions provided */
607+
#define WOLFSSL_USER_CURRTIME
608+
#define XTIME my_time
609+
extern unsigned long my_time(unsigned long* timer);
610+
#endif
611+
612+
#if !defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
613+
#define BENCH_EMBEDDED
614+
#endif
540615

541616
#if defined(WOLFCRYPT_TZ_PSA)
542617
#undef NO_CMAC
@@ -566,7 +641,8 @@ extern int tolower(int c);
566641
# define WOLFSSL_SP_NO_DYN_STACK
567642
# endif
568643
# if !defined(SECURE_PKCS11) && !defined(WOLFCRYPT_TZ_PSA) && \
569-
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
644+
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER) && \
645+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
570646
# define NO_WOLFSSL_MEMORY
571647
# define WOLFSSL_NO_MALLOC
572648
# endif

lib/wolfssl

Submodule wolfssl updated 1534 files

src/update_flash.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -720,11 +720,13 @@ static int wolfBoot_delta_update(struct wolfBoot_image *boot,
720720
# endif
721721
#endif
722722

723-
/* Reserve space for two sectors in case of NVM_FLASH_WRITEONCE, for redundancy */
723+
/* Max firmware size: partition must hold header + fw + trailer sector(s) */
724724
#ifndef NVM_FLASH_WRITEONCE
725-
#define MAX_UPDATE_SIZE (size_t)((WOLFBOOT_PARTITION_SIZE - WOLFBOOT_SECTOR_SIZE))
725+
#define MAX_UPDATE_SIZE (size_t)((WOLFBOOT_PARTITION_SIZE - \
726+
IMAGE_HEADER_SIZE - WOLFBOOT_SECTOR_SIZE))
726727
#else
727-
#define MAX_UPDATE_SIZE (size_t)((WOLFBOOT_PARTITION_SIZE - (2 *WOLFBOOT_SECTOR_SIZE)))
728+
#define MAX_UPDATE_SIZE (size_t)((WOLFBOOT_PARTITION_SIZE - \
729+
IMAGE_HEADER_SIZE - (2 * WOLFBOOT_SECTOR_SIZE)))
728730
#endif
729731

730732
static int wolfBoot_get_total_size(struct wolfBoot_image* boot,

test-app/ARM-va416x0.ld

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
_Min_Heap_Size = 0x00002000; /* required amount of heap */
2-
_Min_Stack_Size = 0x00002000; /* required amount of stack */
1+
_Min_Heap_Size = 0x00000100; /* minimal heap (not using malloc) */
2+
_Min_Stack_Size = 0x00003000; /* required amount of stack */
33

44
/* Memory areas */
55
MEMORY

test-app/Makefile

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,71 @@ ifeq ($(DEBUG_UART),1)
9595
APP_OBJS+=../src/string.o
9696
endif
9797

98+
# wolfCrypt Test and Benchmark Support
99+
WOLFCRYPT_SUPPORT=0
100+
101+
ifeq ($(WOLFCRYPT_TEST),1)
102+
CFLAGS+=-DWOLFCRYPT_TEST
103+
WOLFCRYPT_SUPPORT=1
104+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/test/test.o
105+
endif
106+
107+
ifeq ($(WOLFCRYPT_BENCHMARK),1)
108+
CFLAGS+=-DWOLFCRYPT_BENCHMARK
109+
WOLFCRYPT_SUPPORT=1
110+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/benchmark/benchmark.o
111+
endif
112+
113+
ifeq ($(WOLFCRYPT_SUPPORT),1)
114+
# Add support infrastructure
115+
APP_OBJS+=wolfcrypt_support.o
116+
APP_OBJS+=syscalls.o
117+
118+
# Add wolfCrypt core implementation files
119+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hash.o
120+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wc_port.o
121+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/logging.o
122+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/misc.o
123+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/wolfmath.o
124+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/memory.o
125+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/asn.o
126+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/coding.o
127+
128+
# Add SHA implementations (needed for test/benchmark)
129+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha256.o
130+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sha512.o
131+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/hmac.o
132+
133+
# Add RNG support (needed for ECC signing and tests)
134+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/random.o
135+
136+
# Add AES support (needed by benchmark for AES-CBC etc.)
137+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/aes.o
138+
139+
# Add ECC support (needed by test suite)
140+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/ecc.o
141+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_int.o
142+
143+
# Add SP math implementations for ARM Cortex-M
144+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_cortexm.o
145+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_c32.o
146+
147+
ifneq ($(NO_ARM_ASM),1)
148+
APP_OBJS+= \
149+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-aes-asm_c.o \
150+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.o \
151+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha512-asm_c.o \
152+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha3-asm_c.o \
153+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-chacha-asm_c.o
154+
155+
CFLAGS+=-DWOLFSSL_ARMASM -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARMASM_INLINE \
156+
-DWOLFSSL_ARMASM_NO_NEON -DWOLFSSL_ARMASM_THUMB2
157+
endif
158+
159+
CFLAGS+=-DWOLFSSL_USER_SETTINGS
160+
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
161+
endif
162+
98163
ifeq ($(TZEN),1)
99164
CFLAGS+=-DNONSECURE_APP
100165
CFLAGS+=-I./
@@ -335,6 +400,17 @@ ifeq ($(TARGET),va416x0)
335400
ifneq ($(SIGN),NONE)
336401
APP_OBJS+=../src/keystore.o
337402
endif
403+
# Reduce size: newlib-nano and section GC
404+
LDFLAGS+=--specs=nano.specs
405+
ifneq ($(WOLFCRYPT_SUPPORT),1)
406+
# Only use nosys stubs when not providing our own syscalls
407+
LDFLAGS+=--specs=nosys.specs
408+
endif
409+
ifeq ($(WOLFCRYPT_BENCHMARK),1)
410+
# Benchmark needs float printf for results
411+
LDFLAGS+=-u _printf_float
412+
endif
413+
CFLAGS+=-ffunction-sections -fdata-sections
338414
endif
339415

340416
ifeq ($(TARGET),sim)

0 commit comments

Comments
 (0)