Skip to content

Commit bc4494f

Browse files
committed
Add option to enable wolfCrypt test/benchmark to test-app
1 parent d0fe98b commit bc4494f

File tree

7 files changed

+422
-24
lines changed

7 files changed

+422
-24
lines changed

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: 80 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ extern int tolower(int c);
101101
defined(WOLFBOOT_SIGN_SECONDARY_ECC256) || \
102102
defined(WOLFBOOT_SIGN_SECONDARY_ECC384) || \
103103
defined(WOLFBOOT_SIGN_SECONDARY_ECC521) || \
104-
defined(WOLFCRYPT_SECURE_MODE)
105-
104+
defined(WOLFCRYPT_SECURE_MODE) || \
105+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
106106

107107
# define HAVE_ECC
108108
# define ECC_TIMING_RESISTANT
@@ -118,6 +118,7 @@ extern int tolower(int c);
118118

119119
/* Some ECC options are disabled to reduce size */
120120
# if !defined(WOLFCRYPT_SECURE_MODE) && \
121+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
121122
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
122123
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
123124
# if !defined(WOLFBOOT_TPM)
@@ -138,6 +139,7 @@ extern int tolower(int c);
138139
# endif
139140
# else
140141
# define HAVE_ECC_SIGN
142+
# define HAVE_ECC_VERIFY
141143
#ifndef PKCS11_SMALL
142144
# define HAVE_ECC_CDH
143145
#endif
@@ -147,6 +149,7 @@ extern int tolower(int c);
147149
# define WOLFSSL_HAVE_SP_ECC
148150
# define WOLFSSL_KEY_GEN
149151
# define HAVE_ECC_KEY_EXPORT
152+
# define HAVE_ECC_KEY_IMPORT
150153
# endif
151154

152155
/* SP MATH */
@@ -160,15 +163,18 @@ extern int tolower(int c);
160163

161164
/* Curve */
162165
# if defined(WOLFBOOT_SIGN_ECC256) || defined(WOLFCRYPT_SECURE_MODE) || \
163-
defined(WOLFBOOT_SIGN_SECONDARY_ECC256)
166+
defined(WOLFBOOT_SIGN_SECONDARY_ECC256) || \
167+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
164168
# define HAVE_ECC256
165169
# endif
166170
# if defined(WOLFBOOT_SIGN_ECC384) || \
167171
defined(WOLFBOOT_SIGN_SECONDARY_ECC384) || \
168-
defined(WOLFCRYPT_SECURE_MODE)
172+
defined(WOLFCRYPT_SECURE_MODE) || \
173+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
169174
# define HAVE_ECC384
170175
# define WOLFSSL_SP_384
171176
# endif
177+
/* ECC521 only enabled if specifically requested (not for tests - too large) */
172178
# if defined(WOLFBOOT_SIGN_ECC521) || \
173179
defined(WOLFBOOT_SIGN_SECONDARY_ECC521) || \
174180
defined(WOLFCRYPT_SECURE_MODE)
@@ -219,6 +225,7 @@ extern int tolower(int c);
219225
# define RSA_LOW_MEM
220226
# define WC_ASN_HASH_SHA256
221227
# if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
228+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK) && \
222229
!defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
223230
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
224231
# define WOLFSSL_RSA_VERIFY_INLINE
@@ -305,15 +312,17 @@ extern int tolower(int c);
305312
#ifdef WOLFBOOT_HASH_SHA3_384
306313
# define WOLFSSL_SHA3
307314
# if defined(NO_RSA) && !defined(WOLFBOOT_TPM) && \
308-
!defined(WOLFCRYPT_SECURE_MODE)
315+
!defined(WOLFCRYPT_SECURE_MODE) && \
316+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
309317
# define NO_SHA256
310318
# endif
311319
#endif
312320

313321
#ifdef WOLFBOOT_HASH_SHA384
314322
# define WOLFSSL_SHA384
315323
# if defined(NO_RSA) && !defined(WOLFBOOT_TPM) && \
316-
!defined(WOLFCRYPT_SECURE_MODE)
324+
!defined(WOLFCRYPT_SECURE_MODE) && \
325+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
317326
# define NO_SHA256
318327
# endif
319328
#ifndef WOLFSSL_SHA512
@@ -410,7 +419,8 @@ extern int tolower(int c);
410419

411420
#if (defined(WOLFBOOT_TPM_SEAL) && defined(WOLFBOOT_ATA_DISK_LOCK)) || \
412421
defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) || \
413-
defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
422+
defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER) || \
423+
defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
414424
# define WOLFSSL_BASE64_ENCODE
415425
#else
416426
# define NO_CODING
@@ -464,7 +474,8 @@ extern int tolower(int c);
464474
#endif
465475
#endif
466476

467-
#if !defined(WOLFCRYPT_SECURE_MODE) && !defined(WOLFBOOT_TPM_PARMENC)
477+
#if !defined(WOLFCRYPT_SECURE_MODE) && !defined(WOLFBOOT_TPM_PARMENC) && \
478+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
468479
#if !(defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
469480
defined(WOLFBOOT_SIGN_ML_DSA)) && \
470481
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
@@ -473,8 +484,16 @@ extern int tolower(int c);
473484
#define WC_NO_HASHDRBG
474485
#define NO_AES_CBC
475486
#else
476-
#define HAVE_HASHDRBG
477-
#define WOLFSSL_AES_CFB
487+
#if defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
488+
/* Use custom RNG for tests (saves ~7KB vs HASHDRBG) */
489+
#define WC_NO_HASHDRBG
490+
#define CUSTOM_RAND_GENERATE_SEED my_rng_seed_gen
491+
#define CUSTOM_RAND_GENERATE_BLOCK my_rng_seed_gen
492+
extern int my_rng_seed_gen(unsigned char* output, unsigned int sz);
493+
#else
494+
#define HAVE_HASHDRBG
495+
#define WOLFSSL_AES_CFB
496+
#endif
478497
#endif
479498

480499

@@ -485,11 +504,15 @@ extern int tolower(int c);
485504

486505
#if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE)
487506
# 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
492507
#endif
508+
509+
#if !defined(WOLFBOOT_TPM) && !defined(WOLFCRYPT_SECURE_MODE) && \
510+
!defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
511+
# if !(defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
512+
defined(WOLFBOOT_SIGN_ML_DSA)) && \
513+
!defined(WOLFBOOT_ENABLE_WOLFHSM_SERVER)
514+
# define WC_NO_RNG
515+
# endif
493516
# define WC_NO_HASHDRBG
494517
# define NO_DEV_RANDOM
495518
# if !defined(WOLFBOOT_ENABLE_WOLFHSM_CLIENT) && \
@@ -534,9 +557,49 @@ extern int tolower(int c);
534557
#define NO_CHECK_PRIVATE_KEY
535558
#define NO_KDF
536559

537-
#define BENCH_EMBEDDED
538-
#define NO_CRYPT_TEST
539-
#define NO_CRYPT_BENCHMARK
560+
/* wolfCrypt Test/Benchmark Configuration */
561+
#ifdef WOLFCRYPT_TEST
562+
/* Skip extended tests to save memory */
563+
#define NO_CRYPT_TEST_EXTENDED
564+
/* Use smaller certificate buffers */
565+
#define USE_CERT_BUFFERS_256
566+
/* Override default NO_CRYPT_TEST */
567+
#undef NO_CRYPT_TEST
568+
#else
569+
#define NO_CRYPT_TEST
570+
#endif
571+
572+
#ifdef WOLFCRYPT_BENCHMARK
573+
/* Embedded benchmark mode */
574+
#ifndef BENCH_EMBEDDED
575+
#define BENCH_EMBEDDED
576+
#endif
577+
/* Override default NO_CRYPT_BENCHMARK */
578+
#undef NO_CRYPT_BENCHMARK
579+
#else
580+
#define NO_CRYPT_BENCHMARK
581+
#endif
582+
583+
/* Common optimizations when test/benchmark enabled */
584+
#if defined(WOLFCRYPT_TEST) || defined(WOLFCRYPT_BENCHMARK)
585+
#define NO_WRITE_TEMP_FILES
586+
587+
/* Enable malloc for test/benchmark (they need dynamic allocation) */
588+
#undef NO_WOLFSSL_MEMORY
589+
#undef WOLFSSL_NO_MALLOC
590+
591+
/* Enable SP math digit operations */
592+
#define WOLFSSL_SP_MUL_D
593+
594+
/* User time functions provided */
595+
#define WOLFSSL_USER_CURRTIME
596+
#define XTIME my_time
597+
extern unsigned long my_time(unsigned long* timer);
598+
#endif
599+
600+
#if !defined(WOLFCRYPT_TEST) && !defined(WOLFCRYPT_BENCHMARK)
601+
#define BENCH_EMBEDDED
602+
#endif
540603

541604
#if defined(WOLFCRYPT_TZ_PSA)
542605
#undef NO_CMAC

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 = 0x00003000; /* required amount of heap */
2+
_Min_Stack_Size = 0x00003000; /* required amount of stack */
33

44
/* Memory areas */
55
MEMORY

test-app/Makefile

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,68 @@ 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 ECC support (needed by test suite)
137+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/ecc.o
138+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_int.o
139+
140+
# Add SP math implementations for ARM Cortex-M
141+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_cortexm.o
142+
APP_OBJS+=$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/sp_c32.o
143+
144+
ifneq ($(NO_ARM_ASM),1)
145+
APP_OBJS+= \
146+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-aes-asm_c.o \
147+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha256-asm_c.o \
148+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha512-asm_c.o \
149+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-sha3-asm_c.o \
150+
$(WOLFBOOT_LIB_WOLFSSL)/wolfcrypt/src/port/arm/thumb2-chacha-asm_c.o
151+
152+
CFLAGS+=-DWOLFSSL_ARMASM -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARMASM_INLINE \
153+
-DWOLFSSL_ARMASM_NO_NEON -DWOLFSSL_ARMASM_THUMB2
154+
endif
155+
156+
CFLAGS+=-DWOLFSSL_USER_SETTINGS
157+
CFLAGS+=-I"$(WOLFBOOT_LIB_WOLFSSL)"
158+
endif
159+
98160
ifeq ($(TZEN),1)
99161
CFLAGS+=-DNONSECURE_APP
100162
CFLAGS+=-I./
@@ -331,6 +393,9 @@ ifeq ($(TARGET),va416x0)
331393
APP_OBJS+=$(SDK_OBJS)
332394
LSCRIPT_TEMPLATE=ARM-va416x0.ld
333395
APP_OBJS+=../src/keystore.o
396+
# Reduce size: newlib-nano (small printf/snprintf, no float) and section GC
397+
LDFLAGS+=--specs=nano.specs --specs=nosys.specs
398+
CFLAGS+=-ffunction-sections -fdata-sections
334399
endif
335400

336401
ifeq ($(TARGET),sim)

test-app/app_va416x0.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@
3535

3636
#include "../hal/va416x0.h"
3737

38+
/* wolfCrypt test/benchmark support */
39+
#ifdef WOLFCRYPT_TEST
40+
#include <wolfssl/wolfcrypt/settings.h>
41+
#include <wolfcrypt/test/test.h>
42+
int wolfcrypt_test(void *args);
43+
#endif
44+
45+
#ifdef WOLFCRYPT_BENCHMARK
46+
#include <wolfssl/wolfcrypt/settings.h>
47+
#include <wolfcrypt/benchmark/benchmark.h>
48+
int benchmark_test(void *args);
49+
#endif
50+
3851
/* Vorago HAL includes */
3952
#include "va416xx_hal.h"
4053
#include "va416xx_hal_clkgen.h"
@@ -151,6 +164,21 @@ void main(void)
151164

152165
print_info();
153166

167+
#ifdef WOLFCRYPT_TEST
168+
wolfBoot_printf("\r\nRunning wolfCrypt tests...\r\n");
169+
wolfCrypt_Init();
170+
wolfcrypt_test(NULL);
171+
wolfCrypt_Cleanup();
172+
wolfBoot_printf("Tests complete.\r\n\r\n");
173+
#endif
174+
175+
#ifdef WOLFCRYPT_BENCHMARK
176+
wolfBoot_printf("Running wolfCrypt benchmarks...\r\n");
177+
wolfCrypt_Init();
178+
benchmark_test(NULL);
179+
wolfCrypt_Cleanup();
180+
wolfBoot_printf("Benchmarks complete.\r\n\r\n");
181+
#endif
154182

155183
if (app_version > 1) {
156184
/* Turn on update LED */

0 commit comments

Comments
 (0)