diff --git a/Makefile b/Makefile index f537a6f9..20868e9b 100644 --- a/Makefile +++ b/Makefile @@ -22,198 +22,17 @@ WOLFCRYPT_OBJS:= PUBLIC_KEY_OBJS:= UPDATE_OBJS:= - -ifeq ($(SIGN),RSA4096) - SPMATH=0 -endif - ## Architecture/CPU configuration include arch.mk - -## DSA Settings -ifeq ($(SIGN),ECC256) - KEYGEN_OPTIONS+=--ecc256 - SIGN_OPTIONS+=--ecc256 - PRIVATE_KEY=ecc256.der - WOLFCRYPT_OBJS+= \ - $(MATH_OBJS) \ - ./lib/wolfssl/wolfcrypt/src/ecc.o \ - ./lib/wolfssl/wolfcrypt/src/memory.o \ - ./lib/wolfssl/wolfcrypt/src/wc_port.o \ - ./lib/wolfssl/wolfcrypt/src/hash.o \ - ./src/xmalloc_ecc.o - CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER - ifeq ($(WOLFTPM),0) - CFLAGS+=-Wstack-usage=1024 - else - CFLAGS+=-Wstack-usage=6680 - endif - PUBLIC_KEY_OBJS=./src/ecc256_pub_key.o -endif - -ifeq ($(SIGN),ED25519) - KEYGEN_OPTIONS+=--ed25519 - SIGN_OPTIONS+=--ed25519 - PRIVATE_KEY=ed25519.der - WOLFCRYPT_OBJS+= ./lib/wolfssl/wolfcrypt/src/sha512.o \ - ./lib/wolfssl/wolfcrypt/src/ed25519.o \ - ./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \ - ./lib/wolfssl/wolfcrypt/src/hash.o \ - ./lib/wolfssl/wolfcrypt/src/wolfmath.o \ - ./lib/wolfssl/wolfcrypt/src/wc_port.o \ - ./lib/wolfssl/wolfcrypt/src/fe_low_mem.o - PUBLIC_KEY_OBJS=./src/ed25519_pub_key.o - CFLAGS+=-DWOLFBOOT_SIGN_ED25519 -Wstack-usage=1024 -endif - -ifeq ($(SIGN),RSA2048) - KEYGEN_OPTIONS+=--rsa2048 - SIGN_OPTIONS+=--rsa2048 - PRIVATE_KEY=rsa2048.der - IMAGE_HEADER_SIZE=512 - WOLFCRYPT_OBJS+= \ - $(RSA_EXTRA_OBJS) \ - $(MATH_OBJS) \ - ./lib/wolfssl/wolfcrypt/src/rsa.o \ - ./lib/wolfssl/wolfcrypt/src/asn.o \ - ./lib/wolfssl/wolfcrypt/src/hash.o \ - ./lib/wolfssl/wolfcrypt/src/wc_port.o \ - ./src/xmalloc_rsa.o - PUBLIC_KEY_OBJS=./src/rsa2048_pub_key.o - CFLAGS+=-DWOLFBOOT_SIGN_RSA2048 -DXMALLOC_USER $(RSA_EXTRA_CFLAGS) \ - -DIMAGE_HEADER_SIZE=512 - ifeq ($(WOLFTPM),0) - CFLAGS+=-Wstack-usage=12288 - else - CFLAGS+=-Wstack-usage=8320 - endif -endif - -ifeq ($(SIGN),RSA4096) - KEYGEN_OPTIONS+=--rsa4096 - SIGN_OPTIONS+=--rsa4096 - PRIVATE_KEY=rsa4096.der - IMAGE_HEADER_SIZE=1024 - WOLFCRYPT_OBJS+= \ - $(RSA_EXTRA_OBJS) \ - $(MATH_OBJS) \ - ./lib/wolfssl/wolfcrypt/src/rsa.o \ - ./lib/wolfssl/wolfcrypt/src/asn.o \ - ./lib/wolfssl/wolfcrypt/src/hash.o \ - ./lib/wolfssl/wolfcrypt/src/wolfmath.o \ - ./lib/wolfssl/wolfcrypt/src/wc_port.o \ - ./src/xmalloc_rsa.o - PUBLIC_KEY_OBJS=./src/rsa4096_pub_key.o - CFLAGS+=-DWOLFBOOT_SIGN_RSA4096 -DXMALLOC_USER $(RSA_EXTRA_CFLAGS) \ - -DIMAGE_HEADER_SIZE=1024 - ifeq ($(WOLFTPM),0) - CFLAGS+=-Wstack-usage=12288 - else - CFLAGS+=-Wstack-usage=10680 - endif -endif - +# Parse config options +include options.mk CFLAGS+=-Wall -Wextra -Wno-main -ffreestanding -Wno-unused \ -I. -Iinclude/ -Ilib/wolfssl -nostartfiles \ -DWOLFSSL_USER_SETTINGS \ -DPLATFORM_$(TARGET) -ifeq ($(RAM_CODE),1) - CFLAGS+= -DRAM_CODE -endif - -ifeq ($(DUALBANK_SWAP),1) - CFLAGS+= -DDUALBANK_SWAP -endif - -ifeq ($(SPI_FLASH),1) - EXT_FLASH=1 - CFLAGS+= -DSPI_FLASH=1 - OBJS+= src/spi_flash.o - WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(SPI_TARGET).o -endif - -ifeq ($(UART_FLASH),1) - EXT_FLASH=1 -endif - -ifeq ($(ENCRYPT),1) - CFLAGS+=-DEXT_ENCRYPTED=1 - WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/chacha.o -endif - -ifeq ($(EXT_FLASH),1) - CFLAGS+= -DEXT_FLASH=1 -DPART_UPDATE_EXT=1 -DPART_SWAP_EXT=1 - ifeq ($(NO_XIP),1) - CFLAGS+=-DPART_BOOT_EXT=1 - endif - ifeq ($(UART_FLASH),1) - CFLAGS+=-DUART_FLASH=1 - OBJS+=src/uart_flash.o - WOLFCRYPT_OBJS+=hal/uart/uart_drv_$(UART_TARGET).o - endif -endif - - - -ifeq ($(ALLOW_DOWNGRADE),1) - CFLAGS+= -DALLOW_DOWNGRADE -endif - -ifeq ($(NVM_FLASH_WRITEONCE),1) - CFLAGS+= -DNVM_FLASH_WRITEONCE -endif - - - -ifeq ($(DEBUG),1) - CFLAGS+=-O0 -g -ggdb3 -DDEBUG=1 -else - CFLAGS+=-Os -endif - -ifeq ($(V),0) - Q=@ -endif - -ifeq ($(NO_MPU),1) - CFLAGS+=-DWOLFBOOT_NO_MPU -endif - -ifeq ($(VTOR),0) - CFLAGS+=-DNO_VTOR -endif - -ifeq ($(PKA),1) - OBJS += $(PKA_EXTRA_OBJS) - CFLAGS+=$(PKA_EXTRA_CFLAGS) -endif - -OBJS+=$(PUBLIC_KEY_OBJS) -OBJS+=$(UPDATE_OBJS) - -ifeq ($(WOLFTPM),1) - OBJS += lib/wolfTPM/src/tpm2.o \ - lib/wolfTPM/src/tpm2_packet.o \ - lib/wolfTPM/src/tpm2_tis.o \ - lib/wolfTPM/src/tpm2_wrap.o - CFLAGS+=-DWOLFBOOT_TPM -DSIZEOF_LONG=4 -Ilib/wolfTPM \ - -DMAX_COMMAND_SIZE=1024 -DMAX_RESPONSE_SIZE=1024 -DWOLFTPM2_MAX_BUFFER=1500 \ - -DMAX_SESSION_NUM=1 -DMAX_DIGEST_BUFFER=973 \ - -DWOLFTPM_SMALL_STACK - # Chip Type: WOLFTPM_SLB9670, WOLFTPM_ST33, WOLFTPM_MCHP - CFLAGS+=-DWOLFTPM_SLB9670 - # Use TPM for hashing (slow) - #CFLAGS+=-DWOLFBOOT_HASH_TPM - ifneq ($(SPI_FLASH),1) - WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(SPI_TARGET).o - endif -endif -OBJS+=$(WOLFCRYPT_OBJS) - - ASFLAGS:=$(CFLAGS) all: factory.bin @@ -302,6 +121,7 @@ clean: @find . -type f -name "*.o" | xargs rm -f @rm -f *.bin *.elf wolfboot.map *.bin *.hex config/target.ld .bootloader-partition-size @make -C test-app clean + @make -C tools/check_config clean distclean: clean @rm -f *.pem *.der tags ./src/ed25519_pub_key.c ./src/ecc256_pub_key.c ./src/rsa2048_pub_key.c include/target.h @@ -323,6 +143,10 @@ include/target.h: include/target.h.in FORCE config: FORCE make -C config +check_config: + make -C tools/check_config + + ../src/libwolfboot.o: ../src/libwolfboot.c FORCE @echo "\t[CC-$(ARCH)] $@" $(Q)$(CC) $(CFLAGS) -c -o $@ ../src/libwolfboot.c diff --git a/arch.mk b/arch.mk index 1a7bc34f..9bf2aa96 100644 --- a/arch.mk +++ b/arch.mk @@ -18,17 +18,6 @@ SPI_TARGET=$(TARGET) # Default UART driver name UART_TARGET=$(TARGET) -## Hash settings -ifeq ($(HASH),SHA256) - CFLAGS+=-DWOLFBOOT_HASH_SHA256 -endif - -ifeq ($(HASH),SHA3) - WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha3.o - CFLAGS+=-DWOLFBOOT_HASH_SHA3_384 - SIGN_OPTIONS+=--sha3 -endif - # Include SHA256 module because it's implicitly needed by RSA WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha256.o diff --git a/options.mk b/options.mk new file mode 100644 index 00000000..9f9b8d11 --- /dev/null +++ b/options.mk @@ -0,0 +1,197 @@ + +ifeq ($(SIGN),RSA4096) + SPMATH=0 +endif + +## DSA Settings +ifeq ($(SIGN),ECC256) + KEYGEN_OPTIONS+=--ecc256 + SIGN_OPTIONS+=--ecc256 + PRIVATE_KEY=ecc256.der + WOLFCRYPT_OBJS+= \ + $(MATH_OBJS) \ + ./lib/wolfssl/wolfcrypt/src/ecc.o \ + ./lib/wolfssl/wolfcrypt/src/memory.o \ + ./lib/wolfssl/wolfcrypt/src/wc_port.o \ + ./lib/wolfssl/wolfcrypt/src/hash.o \ + ./src/xmalloc_ecc.o + CFLAGS+=-DWOLFBOOT_SIGN_ECC256 -DXMALLOC_USER + ifeq ($(WOLFTPM),0) + CFLAGS+=-Wstack-usage=1024 + else + CFLAGS+=-Wstack-usage=6680 + endif + PUBLIC_KEY_OBJS=./src/ecc256_pub_key.o +endif + +ifeq ($(SIGN),ED25519) + KEYGEN_OPTIONS+=--ed25519 + SIGN_OPTIONS+=--ed25519 + PRIVATE_KEY=ed25519.der + WOLFCRYPT_OBJS+= ./lib/wolfssl/wolfcrypt/src/sha512.o \ + ./lib/wolfssl/wolfcrypt/src/ed25519.o \ + ./lib/wolfssl/wolfcrypt/src/ge_low_mem.o \ + ./lib/wolfssl/wolfcrypt/src/hash.o \ + ./lib/wolfssl/wolfcrypt/src/wolfmath.o \ + ./lib/wolfssl/wolfcrypt/src/wc_port.o \ + ./lib/wolfssl/wolfcrypt/src/fe_low_mem.o + PUBLIC_KEY_OBJS=./src/ed25519_pub_key.o + CFLAGS+=-DWOLFBOOT_SIGN_ED25519 -Wstack-usage=1024 +endif + +ifeq ($(SIGN),RSA2048) + KEYGEN_OPTIONS+=--rsa2048 + SIGN_OPTIONS+=--rsa2048 + PRIVATE_KEY=rsa2048.der + IMAGE_HEADER_SIZE=512 + WOLFCRYPT_OBJS+= \ + $(RSA_EXTRA_OBJS) \ + $(MATH_OBJS) \ + ./lib/wolfssl/wolfcrypt/src/rsa.o \ + ./lib/wolfssl/wolfcrypt/src/asn.o \ + ./lib/wolfssl/wolfcrypt/src/hash.o \ + ./lib/wolfssl/wolfcrypt/src/wc_port.o \ + ./src/xmalloc_rsa.o + PUBLIC_KEY_OBJS=./src/rsa2048_pub_key.o + CFLAGS+=-DWOLFBOOT_SIGN_RSA2048 -DXMALLOC_USER $(RSA_EXTRA_CFLAGS) \ + -DIMAGE_HEADER_SIZE=512 + ifeq ($(WOLFTPM),0) + CFLAGS+=-Wstack-usage=12288 + else + CFLAGS+=-Wstack-usage=8320 + endif +endif + +ifeq ($(SIGN),RSA4096) + KEYGEN_OPTIONS+=--rsa4096 + SIGN_OPTIONS+=--rsa4096 + PRIVATE_KEY=rsa4096.der + IMAGE_HEADER_SIZE=1024 + WOLFCRYPT_OBJS+= \ + $(RSA_EXTRA_OBJS) \ + $(MATH_OBJS) \ + ./lib/wolfssl/wolfcrypt/src/rsa.o \ + ./lib/wolfssl/wolfcrypt/src/asn.o \ + ./lib/wolfssl/wolfcrypt/src/hash.o \ + ./lib/wolfssl/wolfcrypt/src/wolfmath.o \ + ./lib/wolfssl/wolfcrypt/src/wc_port.o \ + ./src/xmalloc_rsa.o + PUBLIC_KEY_OBJS=./src/rsa4096_pub_key.o + CFLAGS+=-DWOLFBOOT_SIGN_RSA4096 -DXMALLOC_USER $(RSA_EXTRA_CFLAGS) \ + -DIMAGE_HEADER_SIZE=1024 + ifeq ($(WOLFTPM),0) + CFLAGS+=-Wstack-usage=12288 + else + CFLAGS+=-Wstack-usage=10680 + endif +endif + + + +ifeq ($(RAM_CODE),1) + CFLAGS+= -DRAM_CODE +endif + +ifeq ($(FLAGS_HOME),1) + CFLAGS+=-DFLAGS_HOME=1 +endif + +ifeq ($(DUALBANK_SWAP),1) + CFLAGS+=-DDUALBANK_SWAP=1 +endif + +ifeq ($(SPI_FLASH),1) + EXT_FLASH=1 + CFLAGS+=-DSPI_FLASH=1 + OBJS+= src/spi_flash.o + WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(SPI_TARGET).o +endif + +ifeq ($(UART_FLASH),1) + EXT_FLASH=1 +endif + +ifeq ($(ENCRYPT),1) + CFLAGS+=-DEXT_ENCRYPTED=1 + WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/chacha.o +endif + +ifeq ($(EXT_FLASH),1) + CFLAGS+= -DEXT_FLASH=1 -DPART_UPDATE_EXT=1 -DPART_SWAP_EXT=1 + ifeq ($(NO_XIP),1) + CFLAGS+=-DPART_BOOT_EXT=1 + endif + ifeq ($(UART_FLASH),1) + CFLAGS+=-DUART_FLASH=1 + OBJS+=src/uart_flash.o + WOLFCRYPT_OBJS+=hal/uart/uart_drv_$(UART_TARGET).o + endif +endif + + + +ifeq ($(ALLOW_DOWNGRADE),1) + CFLAGS+= -DALLOW_DOWNGRADE +endif + +ifeq ($(NVM_FLASH_WRITEONCE),1) + CFLAGS+= -DNVM_FLASH_WRITEONCE +endif + + + +ifeq ($(DEBUG),1) + CFLAGS+=-O0 -g -ggdb3 -DDEBUG=1 +else + CFLAGS+=-Os +endif + +ifeq ($(V),0) + Q=@ +endif + +ifeq ($(NO_MPU),1) + CFLAGS+=-DWOLFBOOT_NO_MPU +endif + +ifeq ($(VTOR),0) + CFLAGS+=-DNO_VTOR +endif + +ifeq ($(PKA),1) + OBJS += $(PKA_EXTRA_OBJS) + CFLAGS+=$(PKA_EXTRA_CFLAGS) +endif + +OBJS+=$(PUBLIC_KEY_OBJS) +OBJS+=$(UPDATE_OBJS) + +ifeq ($(WOLFTPM),1) + OBJS += lib/wolfTPM/src/tpm2.o \ + lib/wolfTPM/src/tpm2_packet.o \ + lib/wolfTPM/src/tpm2_tis.o \ + lib/wolfTPM/src/tpm2_wrap.o + CFLAGS+=-DWOLFBOOT_TPM -DSIZEOF_LONG=4 -Ilib/wolfTPM \ + -DMAX_COMMAND_SIZE=1024 -DMAX_RESPONSE_SIZE=1024 -DWOLFTPM2_MAX_BUFFER=1500 \ + -DMAX_SESSION_NUM=1 -DMAX_DIGEST_BUFFER=973 \ + -DWOLFTPM_SMALL_STACK + # Chip Type: WOLFTPM_SLB9670, WOLFTPM_ST33, WOLFTPM_MCHP + CFLAGS+=-DWOLFTPM_SLB9670 + # Use TPM for hashing (slow) + #CFLAGS+=-DWOLFBOOT_HASH_TPM + ifneq ($(SPI_FLASH),1) + WOLFCRYPT_OBJS+=hal/spi/spi_drv_$(SPI_TARGET).o + endif +endif +OBJS+=$(WOLFCRYPT_OBJS) + +## Hash settings +ifeq ($(HASH),SHA256) + CFLAGS+=-DWOLFBOOT_HASH_SHA256 +endif + +ifeq ($(HASH),SHA3) + WOLFCRYPT_OBJS+=./lib/wolfssl/wolfcrypt/src/sha3.o + CFLAGS+=-DWOLFBOOT_HASH_SHA3_384 + SIGN_OPTIONS+=--sha3 +endif diff --git a/src/libwolfboot.c b/src/libwolfboot.c index 7c0cb4d9..470a24b0 100644 --- a/src/libwolfboot.c +++ b/src/libwolfboot.c @@ -59,14 +59,29 @@ static uint32_t ext_cache; #endif static const uint32_t wolfboot_magic_trail = WOLFBOOT_MAGIC_TRAIL; - +/* Top addresses for FLAGS field + * - PART_BOOT_ENDFLAGS = top of flags for BOOT partition + * - PART_UPDATE_ENDFLAGS = top of flags for UPDATE_PARTITION + */ #ifndef TRAILER_SKIP # define TRAILER_SKIP 0 #endif #define PART_BOOT_ENDFLAGS (WOLFBOOT_PARTITION_BOOT_ADDRESS + ENCRYPT_TMP_SECRET_OFFSET) +#define TRAILER_OVERHEAD (4 + 1 + (WOLFBOOT_PARTITION_SIZE / (8 * WOLFBOOT_SECTOR_SIZE))) /* MAGIC + PART_FLAG (1B) + (N_SECTORS / 8) */ +#define START_FLAGS_OFFSET (ENCRYPT_TMP_SECRET_OFFSET - TRAILER_OVERHEAD) + +#define FLAGS_BOOT_EXT() PARTN_IS_EXT(PART_BOOT) + +#ifdef FLAGS_HOME +/* All FLAGS live at the end of the boot partition: */ +#define PART_UPDATE_ENDFLAGS (((PART_BOOT_ENDFLAGS - TRAILER_OVERHEAD) / WOLFBOOT_SECTOR_SIZE) * WOLFBOOT_SECTOR_SIZE) +#define FLAGS_UPDATE_EXT() PARTN_IS_EXT(PART_BOOT) +#else +/* FLAGS are at the end of each partition */ #define PART_UPDATE_ENDFLAGS (WOLFBOOT_PARTITION_UPDATE_ADDRESS + ENCRYPT_TMP_SECRET_OFFSET) -#define START_FLAGS_OFFSET (ENCRYPT_TMP_SECRET_OFFSET - (1 + (WOLFBOOT_PARTITION_SIZE / (8 * WOLFBOOT_SECTOR_SIZE)))) +#define FLAGS_UPDATE_EXT() PARTN_IS_EXT(PART_UPDATE) +#endif #ifdef NVM_FLASH_WRITEONCE #include @@ -111,7 +126,7 @@ int RAMFUNCTION hal_set_partition_magic(uint32_t addr) static uint8_t* RAMFUNCTION get_trailer_at(uint8_t part, uint32_t at) { if (part == PART_BOOT) { - if (PARTN_IS_EXT(PART_BOOT)) { + if (FLAGS_BOOT_EXT()){ ext_flash_check_read(PART_BOOT_ENDFLAGS - (sizeof(uint32_t) + at), (void *)&ext_cache, sizeof(uint32_t)); return (uint8_t *)&ext_cache; } else { @@ -119,7 +134,7 @@ static uint8_t* RAMFUNCTION get_trailer_at(uint8_t part, uint32_t at) } } else if (part == PART_UPDATE) { - if (PARTN_IS_EXT(PART_UPDATE)) { + if (FLAGS_UPDATE_EXT()) { ext_flash_check_read(PART_UPDATE_ENDFLAGS - (sizeof(uint32_t) + at), (void *)&ext_cache, sizeof(uint32_t)); return (uint8_t *)&ext_cache; } else { @@ -132,14 +147,14 @@ static uint8_t* RAMFUNCTION get_trailer_at(uint8_t part, uint32_t at) static void RAMFUNCTION set_trailer_at(uint8_t part, uint32_t at, uint8_t val) { if (part == PART_BOOT) { - if (PARTN_IS_EXT(PART_BOOT)) { + if (FLAGS_BOOT_EXT()) { ext_flash_check_write(PART_BOOT_ENDFLAGS - (sizeof(uint32_t) + at), (void *)&val, 1); } else { hal_trailer_write(PART_BOOT_ENDFLAGS - (sizeof(uint32_t) + at), val); } } else if (part == PART_UPDATE) { - if (PARTN_IS_EXT(PART_UPDATE)) { + if (FLAGS_UPDATE_EXT()) { ext_flash_check_write(PART_UPDATE_ENDFLAGS - (sizeof(uint32_t) + at), (void *)&val, 1); } else { hal_trailer_write(PART_UPDATE_ENDFLAGS - (sizeof(uint32_t) + at), val); @@ -150,14 +165,14 @@ static void RAMFUNCTION set_trailer_at(uint8_t part, uint32_t at, uint8_t val) static void RAMFUNCTION set_partition_magic(uint8_t part) { if (part == PART_BOOT) { - if (PARTN_IS_EXT(PART_BOOT)) { + if (FLAGS_BOOT_EXT()) { ext_flash_check_write(PART_BOOT_ENDFLAGS - sizeof(uint32_t), (void *)&wolfboot_magic_trail, sizeof(uint32_t)); } else { hal_set_partition_magic(PART_BOOT_ENDFLAGS - sizeof(uint32_t)); } } else if (part == PART_UPDATE) { - if (PARTN_IS_EXT(PART_UPDATE)) { + if (FLAGS_UPDATE_EXT()) { ext_flash_check_write(PART_UPDATE_ENDFLAGS - sizeof(uint32_t), (void *)&wolfboot_magic_trail, sizeof(uint32_t)); } else { hal_set_partition_magic(PART_UPDATE_ENDFLAGS - sizeof(uint32_t)); @@ -318,7 +333,7 @@ void RAMFUNCTION wolfBoot_erase_partition(uint8_t part) void RAMFUNCTION wolfBoot_update_trigger(void) { uint8_t st = IMG_STATE_UPDATING; - if (PARTN_IS_EXT(PART_UPDATE)) + if (FLAGS_UPDATE_EXT()) { ext_flash_unlock(); wolfBoot_set_partition_state(PART_UPDATE, st); @@ -333,7 +348,7 @@ void RAMFUNCTION wolfBoot_update_trigger(void) void RAMFUNCTION wolfBoot_success(void) { uint8_t st = IMG_STATE_SUCCESS; - if (PARTN_IS_EXT(PART_BOOT)) + if (FLAGS_BOOT_EXT()) { ext_flash_unlock(); wolfBoot_set_partition_state(PART_BOOT, st); diff --git a/tools/check_config/Makefile b/tools/check_config/Makefile new file mode 100644 index 00000000..55c61bc0 --- /dev/null +++ b/tools/check_config/Makefile @@ -0,0 +1,15 @@ +# Configuration values: see tools/config.mk +-include ../../.config +include ../config.mk +include ../../options.mk +CFLAGS+=-I. -I../../ -I../../include -m32 + +check_config: check_config.o + @gcc -o $@ $^ $(CFLAGS) + @./check_config + +%.o:%.c + @gcc -c -o $@ $^ $(CFLAGS) + +clean: + @rm -f check_config *.o diff --git a/tools/check_config/check_config.c b/tools/check_config/check_config.c new file mode 100644 index 00000000..894fd50e --- /dev/null +++ b/tools/check_config/check_config.c @@ -0,0 +1,95 @@ +/* unit-parser.c + * + * Unit test for parser functions in libwolfboot.c + * + * + * Copyright (C) 2020 wolfSSL Inc. + * + * This file is part of wolfBoot. + * + * wolfBoot is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfBoot is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Option to enable sign tool debugging */ +/* Must also define DEBUG_WOLFSSL in user_settings.h */ +#include +#include "src/libwolfboot.c" +static int locked = 0; + +/* Mocks */ +void hal_init(void) +{ +} +int hal_flash_write(uint32_t address, const uint8_t *data, int len) +{ + return 0; +} +int hal_flash_erase(uint32_t address, int len) +{ + return 0; +} +void hal_flash_unlock(void) +{ + if (!locked) + printf("Double unlock detected\n"); + locked--; +} +void hal_flash_lock(void) +{ + if (locked) + printf("Double lock detected\n"); + locked++; +} + +void hal_prepare_boot(void) +{ +} + +void spi_flash_sector_erase(uint32_t address) +{ + +} +int spi_flash_read(uint32_t address, void *data, int len) +{ + return 0; +} +int spi_flash_write(uint32_t address, const void *data, int len) +{ + return 0; +} +/* End Mocks */ + +#define Min(A,B) ((A