Skip to content

Commit 827362d

Browse files
authored
Merge pull request #35 from wolfSSL/keccak
Added support for SHA-3-384 hash algorithm
2 parents daa706b + 9d490bf commit 827362d

9 files changed

Lines changed: 243 additions & 76 deletions

File tree

Makefile

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ endif
2727
## Architecture/CPU configuration
2828
include arch.mk
2929

30+
3031
## DSA Settings
3132
ifeq ($(SIGN),ECC256)
32-
KEYGEN_OPTIONS=--ecc256
33-
SIGN_OPTIONS=--ecc256
33+
KEYGEN_OPTIONS+=--ecc256
34+
SIGN_OPTIONS+=--ecc256
3435
PRIVATE_KEY=ecc256.der
3536
WOLFCRYPT_OBJS+= \
3637
$(MATH_OBJS) \
3738
./lib/wolfssl/wolfcrypt/src/ecc.o \
3839
./lib/wolfssl/wolfcrypt/src/memory.o \
3940
./lib/wolfssl/wolfcrypt/src/wc_port.o \
40-
./lib/wolfssl/wolfcrypt/src/sha256.o \
4141
./lib/wolfssl/wolfcrypt/src/hash.o \
4242
./src/xmalloc_ecc.o
4343
CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER \
@@ -46,13 +46,12 @@ ifeq ($(SIGN),ECC256)
4646
endif
4747

4848
ifeq ($(SIGN),ED25519)
49-
KEYGEN_OPTIONS=--ed25519
50-
SIGN_OPTIONS=--ed25519
49+
KEYGEN_OPTIONS+=--ed25519
50+
SIGN_OPTIONS+=--ed25519
5151
PRIVATE_KEY=ed25519.der
5252
WOLFCRYPT_OBJS+= ./lib/wolfssl/wolfcrypt/src/sha512.o \
5353
./lib/wolfssl/wolfcrypt/src/ed25519.o \
5454
./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \
55-
./lib/wolfssl/wolfcrypt/src/sha256.o \
5655
./lib/wolfssl/wolfcrypt/src/hash.o \
5756
./lib/wolfssl/wolfcrypt/src/wolfmath.o \
5857
./lib/wolfssl/wolfcrypt/src/fe_low_mem.o
@@ -63,15 +62,14 @@ ifeq ($(SIGN),ED25519)
6362
endif
6463

6564
ifeq ($(SIGN),RSA2048)
66-
KEYGEN_OPTIONS=--rsa2048
67-
SIGN_OPTIONS=--rsa2048
65+
KEYGEN_OPTIONS+=--rsa2048
66+
SIGN_OPTIONS+=--rsa2048
6867
PRIVATE_KEY=rsa2048.der
6968
IMAGE_HEADER_SIZE=512
7069
WOLFCRYPT_OBJS+= \
7170
$(RSA_EXTRA_OBJS) \
7271
$(MATH_OBJS) \
7372
./lib/wolfssl/wolfcrypt/src/rsa.o \
74-
./lib/wolfssl/wolfcrypt/src/sha256.o \
7573
./lib/wolfssl/wolfcrypt/src/asn.o \
7674
./lib/wolfssl/wolfcrypt/src/hash.o \
7775
./src/xmalloc_rsa.o
@@ -81,15 +79,14 @@ ifeq ($(SIGN),RSA2048)
8179
endif
8280

8381
ifeq ($(SIGN),RSA4096)
84-
KEYGEN_OPTIONS=--rsa4096
85-
SIGN_OPTIONS=--rsa4096
82+
KEYGEN_OPTIONS+=--rsa4096
83+
SIGN_OPTIONS+=--rsa4096
8684
PRIVATE_KEY=rsa4096.der
8785
IMAGE_HEADER_SIZE=1024
8886
WOLFCRYPT_OBJS+= \
8987
$(RSA_EXTRA_OBJS) \
9088
$(MATH_OBJS) \
9189
./lib/wolfssl/wolfcrypt/src/rsa.o \
92-
./lib/wolfssl/wolfcrypt/src/sha256.o \
9390
./lib/wolfssl/wolfcrypt/src/asn.o \
9491
./lib/wolfssl/wolfcrypt/src/hash.o \
9592
./lib/wolfssl/wolfcrypt/src/wolfmath.o \

arch.mk

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ ARCH_FLASH_OFFSET=0x0
1313
# Default SPI driver name
1414
SPI_TARGET=$(TARGET)
1515

16+
## Hash settings
17+
ifeq ($(HASH),SHA256)
18+
WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha256.o
19+
CFLAGS+=-DWOLFBOOT_HASH_SHA256
20+
endif
21+
22+
ifeq ($(HASH),SHA3)
23+
WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha3.o
24+
CFLAGS+=-DWOLFBOOT_HASH_SHA3_384
25+
SIGN_OPTIONS+=--sha3
26+
endif
27+
1628
## ARM
1729
ifeq ($(ARCH),ARM)
1830
CROSS_COMPILE:=arm-none-eabi-

include/user_settings.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@
108108
# define TFM_TIMING_RESISTANT
109109
#endif
110110

111+
#ifdef WOLFBOOT_HASH_SHA3_384
112+
# define WOLFSSL_SHA3
113+
#endif
114+
111115
/* Disables - For minimum wolfCrypt build */
112116
#define NO_AES
113117
#define NO_CMAC

include/wolfboot/wolfboot.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#define HDR_IMG_TYPE 0x04
4545
#define HDR_PUBKEY 0x10
4646
#define HDR_SIGNATURE 0x20
47+
#define HDR_SHA3_384 0x13
4748
#define HDR_PADDING 0xFF
4849

4950
#define HDR_IMG_TYPE_AUTH_ED25519 0x0100
@@ -86,4 +87,21 @@ uint16_t wolfBoot_get_image_type(uint8_t part);
8687
#define wolfBoot_current_firmware_version() wolfBoot_get_image_version(PART_BOOT)
8788
#define wolfBoot_update_firmware_version() wolfBoot_get_image_version(PART_UPDATE)
8889

90+
91+
/* Hashing function configuration */
92+
#define WOLFBOOT_SHA_BLOCK_SIZE (16)
93+
#if defined(WOLFBOOT_HASH_SHA256)
94+
# define WOLFBOOT_SHA_HDR HDR_SHA256
95+
# define WOLFBOOT_SHA_DIGEST_SIZE (32)
96+
# define image_hash image_sha256
97+
# define key_hash key_sha256
98+
#elif defined(WOLFBOOT_HASH_SHA3_384)
99+
# define WOLFBOOT_SHA_HDR HDR_SHA3_384
100+
# define WOLFBOOT_SHA_DIGEST_SIZE (48)
101+
# define image_hash image_sha3_384
102+
# define key_hash key_sha3_384
103+
#else
104+
# error "No valid hash algorithm defined!"
105+
#endif
106+
89107
#endif /* !WOLFBOOT_H */

0 commit comments

Comments
 (0)