mirror of https://github.com/wolfSSL/wolfBoot.git
791 lines
36 KiB
Markdown
791 lines
36 KiB
Markdown
# wolfBoot
|
|
|
|
wolfSSL Secure Bootloader ([Home page](https://www.wolfssl.com/products/wolfboot/), [Manual](https://www.wolfssl.com/documentation/manuals/wolfboot/), [wolfBoot-examples](https://github.com/wolfSSL/wolfBoot-examples))
|
|
|
|
wolfBoot is a portable, OS-agnostic, secure bootloader solution for 32-bit microcontrollers,
|
|
relying on wolfCrypt for firmware authentication, providing firmware update mechanisms.
|
|
|
|
Due to the minimalist design of the bootloader and the tiny HAL API, wolfBoot is completely independent
|
|
from any OS or bare-metal application, and can be easily ported and integrated in existing embedded software
|
|
projects to provide a secure firmware update mechanism.
|
|
|
|
Design based on [RFC 9019](https://datatracker.ietf.org/doc/rfc9019/) - A Firmware Update Architecture for Internet of Things.
|
|
|
|
## Features
|
|
- Multi-slot partitioning of the flash device
|
|
- Integrity verification of the firmware image(s)
|
|
- Authenticity verification of the firmware image(s) using wolfCrypt's Digital Signature Algorithms (DSA)
|
|
- Minimalist hardware abstraction layer (HAL) interface to facilitate portability across different vendors/MCUs
|
|
- Copy/swap images from secondary slots into the primary slots to consent firmware update operations
|
|
- In-place chain-loading of the firmware image in the primary slot
|
|
- Support of Trusted Platform Module(TPM)
|
|
- Measured boot support, storing of the firmware image hash into a TPM Platform Configuration Register(PCR)
|
|
|
|
## Components
|
|
|
|
This repository contains the following components:
|
|
- the wolfBoot bootloader
|
|
- key generator and image signing tools (requires python 3.x and wolfcrypt-py https://github.com/wolfSSL/wolfcrypt-py)
|
|
- Baremetal test applications
|
|
|
|
### wolfBoot bootloader
|
|
|
|
wolfBoot is a memory-safe standalone bare-metal application, designed to run on a generic microcontroller,
|
|
with no dynamic memory allocation mechanism or linkage to any standard C library besides wolfCrypt.
|
|
|
|
The bootloader consists of the following components:
|
|
- wolfCrypt, which is used to verify the signature of the images
|
|
- A minimalist Hardware Abstraction Layer, with an implementation provided for the supported target, which is in charge for IAP flash access and clock setting on the specific MCU
|
|
- The core bootloader
|
|
- A small application library used by the application to interact with the bootloader [src/libwolfboot.c](src/libwolfboot.c)
|
|
|
|
## Requirements
|
|
|
|
Ensure the proper toolchain is installed. See the [docs](./docs/README.md) for platform-specific details.
|
|
|
|
## Integrating wolfBoot in an existing project
|
|
|
|
### Required steps
|
|
|
|
- See `docs/Targets.md` for reference implementation examples.
|
|
- Provide a HAL implementation for the target platform (see [Hardware Abstraction Layer](docs/HAL.md))
|
|
- Decide a flash partition strategy and modify `include/target.h` accordingly (see [Flash partitions](docs/flash_partitions.md))
|
|
- Change the entry point of the firmware image to account for bootloader presence
|
|
- Equip the application with the [wolfBoot library](docs/API.md) to interact with the bootloader
|
|
- [Configure and compile](docs/compile.md) a bootable image with a single "make" command
|
|
- For help signing firmware see [wolfBoot Signing](docs/Signing.md)
|
|
- For enabling measured boot see [wolfBoot measured boot](docs/measured_boot.md)
|
|
|
|
### Examples provided
|
|
|
|
Additional examples available on our GitHub wolfBoot-examples repository [here](https://github.com/wolfSSL/wolfBoot-examples).
|
|
|
|
The following steps are automated in the default `Makefile` target, using the baremetal test
|
|
application as an example to create the factory image. By running `make`, the build system will:
|
|
|
|
- Create a Ed25519 Key-pair using the `ed25519_keygen` tool
|
|
- Compile the bootloader. The public key generated in the step above is included in the build
|
|
- Compile the firmware image from the test application in [test\_app](test-app/)
|
|
- Re-link the firmware to change the entry-point to the start address of the primary partition
|
|
- Sign the firmware image using the `ed25519_sign` tool
|
|
- Create a factory image by concatenating the bootloader and the firmware image
|
|
|
|
The factory image can be flashed to the target device. It contains the bootloader and the signed initial
|
|
firmware at the specified address on the flash.
|
|
|
|
The `sign.py` tool transforms a bootable firmware image to comply with the firmware image format required by the bootloader.
|
|
|
|
For detailed information about the firmware image format, see [Firmware image](docs/firmware_image.md)
|
|
|
|
For detailed information about the configuration options for the target system, see [Compiling wolfBoot](docs/compile.md)
|
|
|
|
### Upgrading the firmware
|
|
|
|
- Compile the new firmware image, and link it so that its entry point is at the start address of the primary partition
|
|
- Sign the firmware using the `sign.py` tool and the private key generated for the factory image
|
|
- Transfer the image using a secure connection, and store it to the secondary firmware slot
|
|
- Trigger the image swap using libwolfboot `wolfBoot_update_trigger()` function. See [wolfBoot library API](docs/API.md) for a description of the operation
|
|
- Reboot to let the bootloader begin the image swap
|
|
- Confirm the success of the update using libwolfboot `wolfBoot_success()` function. See [wolfBoot library API](docs/API.md) for a description of the operation
|
|
|
|
For more detailed information about firmware update implementation, see [Firmware Update](docs/firmware_update.md)
|
|
|
|
|
|
### Additional features
|
|
- [Remote external flash interface](docs/remote_flash.md)
|
|
- [External encrypted partitions](docs/encrypted_partitions.md)
|
|
- [Delta updates](docs/firmware_update.md#incremental-updates-aka-delta-updates)
|
|
|
|
## Building
|
|
|
|
### Git Submodules (GitHub clone only)
|
|
|
|
If you cloned wolfBoot from GitHub (rather than using a release package), you'll need to initialize and update the git submodules first:
|
|
|
|
```
|
|
git submodule update --init
|
|
```
|
|
|
|
This step is required to pull in the necessary dependencies before building.
|
|
|
|
### Makefile
|
|
|
|
To build using the Makefile, create a `.config` file with your build specifications in the wolfBoot root directory. You can find a
|
|
number of examples that you can use inside [config/examples](config/examples). Then run `make keytools` to generate the signing
|
|
and key generation tools. If you have wolfCrypt-py installed and would like to use it, you can skip this step.
|
|
|
|
Documentation for the flash configuration options used in `.config` can be found in [docs/compile.md](docs/compile.md).
|
|
|
|
For example, to build using our provided `stm32h7.config`:
|
|
|
|
```
|
|
cp config/examples/stm32h7.config .config
|
|
make keytools
|
|
make
|
|
```
|
|
## CMake
|
|
|
|
See [docs/CMake](./docs/CMake.md) and [cmake includes](./cmake/README.md).
|
|
|
|
## SBOM / EU CRA support
|
|
|
|
wolfBoot generates a Software Bill of Materials (SBOM) in CycloneDX 1.6 and
|
|
SPDX 2.3 formats. An SBOM is one of the software-transparency artifacts useful
|
|
towards EU Cyber Resilience Act (CRA) obligations; it does not by itself make a
|
|
product CRA compliant (that is a system- and process-level determination for
|
|
the manufacturer).
|
|
|
|
```sh
|
|
git submodule update --init lib/wolfssl
|
|
make sbom TARGET=<target> SIGN=<alg> HASH=<alg>
|
|
```
|
|
|
|
`TARGET`, `SIGN`, and `HASH` must match your wolfBoot build configuration (same
|
|
as a normal `make` invocation), because the SBOM's source set and artifact hash
|
|
are configuration-specific. `gen-sbom` is part of wolfSSL. The build uses the
|
|
copy in the `lib/wolfssl` submodule. If the pinned revision does not include it,
|
|
give the path with `GEN_SBOM=/path/to/wolfssl/scripts/gen-sbom`.
|
|
|
|
The same SBOM engine is available from every wolfBoot build system, so you get
|
|
an identical CycloneDX 1.6 / SPDX 2.3 document however you build:
|
|
|
|
| Build system / artifact | How to generate the SBOM |
|
|
| --- | --- |
|
|
| Make / arch.mk / vendor SDKs | `make sbom TARGET=<target> SIGN=<alg>` |
|
|
| CMake (and Pico SDK) | `cmake --build <dir> --target sbom` |
|
|
| IAR Embedded Workbench | `tools/scripts/ide-sbom/iar_sbom.py IDE/IAR/wolfboot.ewp` |
|
|
| TI CCS / MPLAB X / Renesas / Xilinx | `tools/scripts/ide-sbom/route_through_sbom.sh --config <cfg> ...` |
|
|
| Any IDE with a compilation database | `tools/scripts/ide-sbom/compdb_sbom.py compile_commands.json` |
|
|
| Per-HAL component | `make sbom-hal TARGET=<target>` |
|
|
| Zephyr TEE/PSA module | `tools/scripts/ide-sbom/zephyr_sbom.py` |
|
|
|
|
Output files are written to the build directory as
|
|
`wolfboot-<version>.cdx.json` (CycloneDX 1.6) and `wolfboot-<version>.spdx.json`
|
|
(SPDX 2.3 JSON), where `<version>` is read from `include/wolfboot/version.h`.
|
|
|
|
See [docs/SBOM.md](./docs/SBOM.md) for the full per-build-system guide. For CRA
|
|
guidance and worked SBOM examples, see the
|
|
[wolfSSL CRA Kit](https://github.com/wolfSSL/wolfssl-examples/tree/master/cra-kit).
|
|
|
|
## Troubleshooting
|
|
|
|
1. Python errors when signing a key:
|
|
|
|
```
|
|
Traceback (most recent call last):
|
|
File "tools/keytools/keygen.py", line 135, in <module>
|
|
rsa = ciphers.RsaPrivate.make_key(2048)
|
|
AttributeError: type object 'RsaPrivate' has no attribute 'make_key'
|
|
```
|
|
|
|
```
|
|
Traceback (most recent call last):
|
|
File "tools/keytools/sign.py", line 189, in <module>
|
|
r, s = ecc.sign_raw(digest)
|
|
AttributeError: 'EccPrivate' object has no attribute 'sign_raw'
|
|
```
|
|
|
|
You need to install the latest wolfcrypt-py here: https://github.com/wolfSSL/wolfcrypt-py
|
|
|
|
Use `pip3 install wolfcrypt`.
|
|
|
|
Or to install based on a local wolfSSL installation use:
|
|
|
|
```sh
|
|
cd wolfssl
|
|
./configure --enable-keygen --enable-rsa --enable-ecc --enable-ed25519 --enable-des3 CFLAGS="-DFP_MAX_BITS=8192 -DWOLFSSL_PUBLIC_MP"
|
|
make
|
|
sudo make install
|
|
|
|
cd wolfcrypt-py
|
|
USE_LOCAL_WOLFSSL=/usr/local pip3 install .
|
|
```
|
|
|
|
2. Key algorithm mismatch:
|
|
|
|
The error `Key algorithm mismatch. Remove old keys via 'make keysclean'` indicates the current `.config` `SIGN` algorithm does not match what is in the generated `src/keystore.c` file.
|
|
Use `make keysclean` to delete keys and regenerate.
|
|
|
|
|
|
3. Cannot open compiler generated file ... Permission denied
|
|
|
|
This may occur due to multiple environments being opened concurrently, or anti-virus software.
|
|
Try manually deleting the respective build directories and/or restarting your IDE.
|
|
|
|
```text
|
|
sp_c32.c : fatal error C1083: Cannot open compiler generated file: '... sp_c32.obj': Permission denied
|
|
```
|
|
|
|
4. unresolved external symbol __imp____acrt_iob_fun
|
|
|
|
```
|
|
unresolved external symbol __imp____acrt_iob_func referenced in function _main
|
|
```
|
|
|
|
5. expected expression before ';' around WOLFBOOT_PARTITION_BOOT_ADDRESS
|
|
|
|
Search for `#define WOLFBOOT_PARTITION_BOOT_ADDRESS` with no value.
|
|
Sometimes a failed config will generate a bad file. (typically `target.h`)
|
|
|
|
Rename the file with a `.bak` extension and let the build process generate a fresh one.
|
|
Consider also deleting the entire build directory.
|
|
|
|
```
|
|
/src/libwolfboot.c:724:64: error: expected expression before ';' token
|
|
724 | address = (uint32_t)WOLFBOOT_PARTITION_BOOT_ADDRESS;
|
|
```
|
|
|
|
6. 'stdint.h': No such file or directory
|
|
|
|
Check the compiler order in `PREFERRED_HOST_CC_NAME_LIST`, See `HOST_CC` in the logs.
|
|
|
|
For Visual Studio, the developer command prompt will need to be activated.
|
|
|
|
```
|
|
\wolfBoot\tools\keytools\sign.c(33): fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
|
|
```
|
|
|
|
## Release Notes
|
|
|
|
### v1.0 (2018-12-04)
|
|
* Initial release with fail-safe update, HAL support for STM32 and nRF52
|
|
|
|
### V1.1 (2019-03-27)
|
|
* Added support for ECC-256 DSA
|
|
* Added support for external (e.g. SPI) flash for Update/swap
|
|
* Anti-rollback protection via version number
|
|
* Hardware support
|
|
* Added compile options for Cortex-M0
|
|
* new HAL: Atmel SamR21
|
|
* new HAL: TI cc26x2
|
|
* new HAL: NXP/Freescale Kinetis SDK
|
|
* Improved sign/update tools compatibility (windows)
|
|
|
|
### V1.2 (2019-07-30)
|
|
* Added support for multiple architectures
|
|
* key generation and signing tools rewritten in python for portability
|
|
* Added compile-time option to move flash-writing functions to RAM
|
|
* Introduced the possibility for the bootloader to update itself
|
|
* Fixed compile issues on macOS and WSL
|
|
* Hardware support
|
|
* Added RV32 RISC-V architecture
|
|
* Added hardware-assisted dual-bank support on STM32F76x/77x
|
|
* new HAL: RV32 FE310 (SiFive HiFive-1)
|
|
* new HAL: STM32L0
|
|
* new HAL: STM32G0
|
|
* new HAL: STM32F7
|
|
|
|
### V1.3 (2019-11-13)
|
|
* New configuration mechanism based on `make config`, helps creating and storing target-specific configurations
|
|
* Configuration examples provided for a number of existing platforms
|
|
* fix bug in self-update mechanism when SPI flash is in use
|
|
* Introduced support for hardware-assisted signature verification, using public-key hardware accelerators
|
|
* Added support for STM32 PKA (e.g. STM32WB55)
|
|
* Added support for Kinetis/Freescale PKHA (e.g. Kinetis K82F)
|
|
|
|
### V1.4 (2020-01-06)
|
|
* TPM2.0 support
|
|
* Integration with wolfTPM
|
|
* Extended STM32 SPI driver to support dual TPM/FLASH communication
|
|
* Tested on STM32 with Infineon 9670
|
|
* RSA 2048 bit digital signature verification
|
|
* Hardware support
|
|
* New HAL: STM32H7
|
|
|
|
### V1.5 (2020-04-28)
|
|
* RSA 4096 bit digital signature verification
|
|
* SHA3
|
|
* Portable C key management tools
|
|
* Improved integration with Microsoft Windows
|
|
* Visual Studio solution for key management tools
|
|
* Support to compile with IAR
|
|
* Fixed incompatible code
|
|
* added IAR example project
|
|
* New architecture: ARMv8 (64-bit)
|
|
* ARM Cortex-A boot code compatible with TrustZone
|
|
* Linux staging and device tree support
|
|
* External flash abstraction
|
|
* remote update partition accessed via UART
|
|
* Hardware support
|
|
* New HAL: raspberry-pi
|
|
* New HAL: Xilinx Zynq+
|
|
* New HAL: NXP LPC54xx
|
|
|
|
### V1.6 (2020-08-25)
|
|
* Support for encryption of external partitions
|
|
* Support for MPU on ARM Cortex-M platforms
|
|
* Support for using an RSA signature that includes ASN.1 encoded header
|
|
* Support for bootloader updates from external flash: SPI functions can run from RAM
|
|
* Added TPM RSA verify support
|
|
* Added option to use software SHA in combination with TPM
|
|
* Fix logic in emergency updates
|
|
* Fix loop logic in bootloader update
|
|
* Fix manifest header boundary checks (prevents parser overflows)
|
|
* Improve sanity checks for aligned fields in manifest header
|
|
* Add unit tests against manifest header parser
|
|
* Fix Ed25519 signing tool
|
|
* Fix RSA keygen tool
|
|
* wolfTPM integration: improvements and bugfixes
|
|
* Fix configuration and documentation for STM32WB
|
|
* Fix alignment of trailers in NVM_FLASH_WRITEONCE mode
|
|
* Fix uint16_t index overflow on platforms with very small flash pages
|
|
* Fix for building C key tools on windows (Cygwin/MinGW/Visual Studio)
|
|
* Fix in LPC driver: correct page alignment in flash write
|
|
* Hardware support
|
|
* New HAL: Cypress psoc6
|
|
* Support for psoc6 Hardware crypto accelerator
|
|
* SPI driver: Nordic nRF52
|
|
|
|
### V1.7.1 (2021-02-03)
|
|
* Added support for measured boot via TPM
|
|
* Support for TZEN on Cortex-m33
|
|
* Added option to disable backup/fallback
|
|
* Added option FLAGS_HOME to store UPDATE flags in the BOOT partition
|
|
* Zynq: added support for eFuse
|
|
* Zynq: improved debugging
|
|
* Xilinx: support for BSP QSPI driver
|
|
* Updated user documentation
|
|
* Extend coverage of automatic non-regression tests running on Jenkins
|
|
* Fix wolfTPM integration: use custom settings
|
|
* Fix Fallback operations when encryption is enabled
|
|
* Fix DUALBANK mode on STM32L5xx
|
|
* Fix maximum image size check
|
|
* Fix in STM32H7 driver: workaround for error correction in flash writing
|
|
* Hardware support
|
|
* New ARCH: ARMv8-m (Cortex-m33)
|
|
* New HAL: STM32L5xx
|
|
* New HAL: NXP iMX-RT1060
|
|
* SPI driver: STM32L0x3
|
|
* Uart driver: STM32L0x3
|
|
|
|
### V1.8 (2021-07-19)
|
|
* Use SP math for RSA4096
|
|
* Updated RSA to use inline operation and disable OAEP padding
|
|
* Memory model: removed dependency on XMALLOC/XFREE for ECC and RSA operations
|
|
* Added option WOLFBOOT_SMALL_STACK with hardcoded compile-time buffers
|
|
* Added option SIGN=NONE to disable secure boot at compile time
|
|
* Fix self-update documentation
|
|
* Added test cases for configuration option combinations
|
|
* Hardware support
|
|
* New ARCH: PowerPC
|
|
* New ARCH: ARM Cortex-R
|
|
* New HAL: NXP T2080
|
|
* New HAL: TI TMS570LC435
|
|
* STM32H7: Correct BANK2 offset
|
|
|
|
### V1.9 (2021-11-09)
|
|
* Delta/incremental updates
|
|
* Fixes for key tools
|
|
* Updates IAR IDE project
|
|
* Documentation updates and fixes
|
|
* API function names to match code
|
|
* STM32L5 updates
|
|
* Hardware support
|
|
* New HAL: STM32L4
|
|
* TMS570LC43xx: Use `NVM_FLASH_WRITEONCE` for update progress and
|
|
fix stack pointer initialization
|
|
|
|
### V1.10 (2022-01-10)
|
|
* Delta updates: expanded documentation + bug fixes
|
|
* Support Ed448 for signature verification
|
|
* Hardware support:
|
|
* Secure memory mode for STM32G0
|
|
* Fix for STM32L5 in dual-bank mode
|
|
* UEFI support: wolfBoot as EFI application on x86_64
|
|
* Fixed self-update in Cortex-R5
|
|
* Fixed HW support regressions in PSOC-6 build
|
|
|
|
### V1.11 (2022-04-05)
|
|
* Mitigation against fault-injections and glitching attacks
|
|
(https://www.wolfssl.com/secure-boot-glitching-attacks/)
|
|
* Support AES128 and AES256 for update encryption
|
|
* Support ECC384 signature verification
|
|
* Support SHA2-384 for image hash
|
|
* Fixed alignment of delta update fields in manifest
|
|
* Image size propagated to sign tools
|
|
* Added test automation based on renode.io and github actions
|
|
* Hardware support
|
|
* New HAL: STM32U5
|
|
* New HAL: NXP i.MX-RT1050
|
|
* Fix risc-V 32bit port (missing include)
|
|
* Fix STM32L4 (VTOR alignments; clock setting clash in libwolfboot)
|
|
* STM32H7: improve HAL and documentation
|
|
|
|
### V1.12 (2022-07-26)
|
|
* Encrypted delta updates
|
|
* Support RSA3072 signature verification
|
|
* Partition ID support to include custom additional images
|
|
* New format to store multiple public keys, using keystore
|
|
* Several fixes to keytools and IDE support
|
|
* Added new test cases
|
|
* Hardware support
|
|
* New HAL: Simulated target for rapid tests
|
|
|
|
### V1.13 (2022-11-08)
|
|
* Fixed IAR sign script
|
|
* Added support for encrypted self-update
|
|
* Support for NAII 68PPC2 with NXP T2080 on DEOS
|
|
* Fixed Xilinx QSPI support
|
|
* Fixed API usage in external flash support for SPI/UART
|
|
* Fixed bug in encrypted delta updates
|
|
* Updated wolfCrypt to wolfSSL submodule v5.5.3
|
|
|
|
### V1.14 (2022-12-30)
|
|
* Added support for CMake build
|
|
* STM32U5: Support for external flash
|
|
* STM32H7: Support for QSPI flash
|
|
* Support for NXP QoriQ P1021
|
|
* Cleanups and improvements for DEOS support on t2080
|
|
* Docker tests: refactoring
|
|
* Github Actions: added build checks for most available configurations
|
|
* Updated wolfTPM to v.2.7.0
|
|
* Updated wolfCrypt to wolfSSL v.5.5.4
|
|
|
|
### V1.15 (2023-04-13)
|
|
* Refactor powerfail-safe update for NVMs without consecutive write operations
|
|
* Support for SP math on AARCH64 targets
|
|
* Fixed keygen.c exported public key size
|
|
* Added more test cases and github actions
|
|
* Updated wolfSSL to v.5.6.0
|
|
* Hardware support:
|
|
* OCTOSPI support (STM32)
|
|
* Fixed STM32H7 UART, added UART debug
|
|
* New HAL: Renesas RA6M4 (with IDE example projects)
|
|
* New HAL: NXP i.MX-RT1064
|
|
* Unified common code for NXP i.MX-RT10XX targets
|
|
|
|
### V1.16 (2023-07-06)
|
|
* New formats supported
|
|
* Added ELF/ELF64 loader
|
|
* Extended support for NXP P1021
|
|
* eSPI support to access TPM
|
|
* TPM root of trust
|
|
* fixes to eLBC NAND driver
|
|
* Improvements on PowerPC architecture
|
|
* fixed PIC execution
|
|
* support booting from RAM
|
|
* refactor of `update_ram.c` logic
|
|
* moved wolfBoot stack to DDR after DDR initialization
|
|
* Rework of Renesas examples, adding HSM support
|
|
* RA6M4 example project using SCE
|
|
* RX72N example project using TSIP
|
|
* Extended documentation
|
|
* Bug fix: fix wrong partition selection with `NVM_FLASH_WRITEONCE` introduced in v.1.15
|
|
* Testing: added test cases (delta + encrypt)
|
|
* Documentation: fixed several spelling errors
|
|
|
|
### V 2.0.0 - (2023-11-07)
|
|
* New feature: post-quantum stateful hash-based signature schemes.
|
|
* Support for LMS/HSS
|
|
* Support for XMSS/XMSS^MT
|
|
* New feature: PKCS11 engine in TrustZone-M secure mode
|
|
* wolfBoot as secure-mode supervisor on ARMv8-M
|
|
* New TPM features
|
|
* TPM NV as root of trust
|
|
* Password-based access to NV slots
|
|
* Measured boot via PCR extensions
|
|
* Sealing/unsealing NV based on externally signed PCR policy and/or password
|
|
* New architecture: x86-64bit using FSP
|
|
* Intel FSP support
|
|
* Integration with TPM
|
|
* Two-stages model with support for PCI enumeration, AHCI drivers, SATA lock mechanism
|
|
* Multiboot2/ELF payload support
|
|
* New hardware targets
|
|
* Intel TigerLake in FSP mode
|
|
* STM32C0
|
|
* Bug fixing: core
|
|
* Fixed several bugs in `NVM_FLASH_WRITEONCE` mode
|
|
* Fixed bugs in delta updates
|
|
* Improved support to existing targets
|
|
* Fixed issues in TSIP project
|
|
* Improved support for NXP QoriQ/p1021
|
|
* Improved support for NXP T1084
|
|
* Reworked SPI support for NXP RT1050
|
|
* STM32L4: Fixed clock speed
|
|
* ARMv7-m: improved assembly support for Cortex-M4
|
|
* ARMv8-m: enabled assembly optimizations by default
|
|
* Reworked keytools and build environment
|
|
* Improved build experience for MacOS users
|
|
* Fix for building in windows/minGW
|
|
* Deprecated python keytools
|
|
* Keytools: support multiple key formats, don't assume raw keys
|
|
* Fixed bug in delta image generation
|
|
* Keystore improvements: support multiple key format in the same keystore
|
|
* Testing
|
|
* Added new sets of power-failure automated tests on simulator target
|
|
* Simulator: tests can now run on MacOS
|
|
* Unit tests: improved coverage. Added gcov reports
|
|
* Static analysis: added cppcheck tests, fixed all relevant warnings
|
|
|
|
### V 2.0.2 - (2023-12-29)
|
|
* Fixed bug in sign tool when using ECC keys
|
|
* Improved documentation
|
|
* Added customizable DCD for NXP targets
|
|
|
|
### V 2.1.0 - (2024-04-16)
|
|
* New features
|
|
* Custom TLVs in manifest header for custom authenticated options
|
|
* Bug fixes and improvements:
|
|
* DUALBANK: fork bootloader only once
|
|
* Improved `NO_BACKUP` mode, DISABLE BACKUP mode is now powerfail-safe
|
|
* Fault-injection mitigation: added clobbers to assembly code
|
|
* Post-quantum algorithms: fixed build issue with conflicting wolfCrypt version
|
|
* New signature verification algorithm:
|
|
* Added support for ECC521
|
|
* New hardware targets:
|
|
* Microchip ATSAM-E51, including DUALBANK support
|
|
* Renesas RZN2L
|
|
* NXP i.MX-RT1040
|
|
* NXP MCXA-153
|
|
* Improved support to existing targets:
|
|
* Build fixes for TI-Hercules
|
|
* Improved support for Integrity OS on NXP T1024
|
|
* wolfTPM integration
|
|
* Fixes in sealing/unsealing mechanism
|
|
* Updated modules
|
|
* wolfSSL v5.7.0
|
|
* wolfPKCS11 v1.3.0
|
|
* wolfTPM v3.2.0
|
|
|
|
### V 2.2.0 - (2024-07-22)
|
|
* New hardware targets
|
|
* Add STM32H5 port with support for Dual-bank, OTP, TrustZone-M
|
|
* Add native support for Renesas RX family, using gcc toolchain
|
|
* Improvements to supported targets
|
|
* NXP i.MX-RT:
|
|
* New flash geometry configurations
|
|
* Support for LPUART4
|
|
* Add port for RT1061
|
|
* Disable DCACHE upon flash access
|
|
* Support for building with HAB
|
|
* STM32:
|
|
* Refactoring of TrustZone-M support
|
|
* OTP driver for STM32H5/H7
|
|
* Full firmware update demo on STM32H5
|
|
* Add support for QSPI in STM32U5
|
|
* Renesas RZ:
|
|
* Add support for RSIP
|
|
* x86-64 (FSP):
|
|
* Improve x86-64 specific code, add features
|
|
* Clean-up and re-arrange scripts for qemu demo
|
|
* Post-quantum crypto
|
|
* LMS and XMSS support now using native wolfCrypt implementation
|
|
* Tools improvements
|
|
* Keystore: now supports .der ECC key via `--der`
|
|
* Add `otp_primer` firmware, to provision keystores in OTP
|
|
* Add `otp_gen` tool to provide a pre-assembled keystore to flash into OTP
|
|
* Bug fixes
|
|
* Fix regression in x86-EFI builds
|
|
* Fix setting `VTOR_NS` when staging a non-secure app/os from TrustZone
|
|
* Fix delta updates: patches with invalid base versions were not discarded
|
|
* Fix potential array bound overflow in `NVM_FLASH_WRITEONCE` mode
|
|
* Fix dereferencing type-punned pointer in flash update
|
|
|
|
### V 2.3.0 - (2024-10-31)
|
|
* New hardware targets
|
|
* New architecture: ARM Cortex-A 32 bit
|
|
* Add support for Microchip ATSAMA5D3
|
|
* Add support for Nordic nRF5340
|
|
* Add support for Infineon AURIX TriCore TCxxx
|
|
* Add support for 32-bit simulator target
|
|
* Improvements to supported targets
|
|
* Support for building HAB for i.MX-RT targets, fixed flash interaction, dcache invalidation
|
|
* Fixes for Renesas RX: full flash erase, IRQ on boot, flash write
|
|
* Raspberry Pi: add UART support
|
|
* STM32: refactoring of the PKCS11 storage driver
|
|
* Fixes for Xilinx Zynq+ build options
|
|
* New features
|
|
* Support for multiple key types in the same keystore
|
|
* New algorithm: ML-DSA
|
|
* Hybrid authentication (using one PQC in combination with ECC/RSA)
|
|
* Full assembly optimizations for ARM targets, including SHA, AES, Chacha (ARMASM)
|
|
* Benchmark scripts for performance testing
|
|
* Unit test coverage drastically increased
|
|
* Bug fixes
|
|
* Fix multiple type-punned pointer dereferences
|
|
* Fix for TPM to properly support more than one PCR
|
|
* Fixed order of digests in the header: public key digest is now signed
|
|
* Updated modules
|
|
* wolfSSL v5.7.4
|
|
* wolfTPM latest
|
|
* wolfPKCS11 latest
|
|
|
|
### V 2.4.0 - (2025-01-07)
|
|
* New hardware targets
|
|
* Add support for NXP Layerscape LS1028A
|
|
* Improvements to supported targets
|
|
* ARMv7-M, ARMv8-M: Using Thumb2 version of ARMASM
|
|
* x86-FSP: improvements to stage1 code, added support for GDT tables
|
|
* Xilinx UltraScale+
|
|
* Support running from all Exception Levels
|
|
* Added QSPI DMA support and improved clock configuration
|
|
* Added FIT image support
|
|
* New features and improvements
|
|
* Added integration with wolfHSM
|
|
* Improve delta update detection of base image via SHA
|
|
* Remove compile-time dependencies for key tools
|
|
* Key tools: improve detection of delta base image version
|
|
* Bug fixes
|
|
* Fix potential failure in `NVM_FLASH_WRITEONCE` mode
|
|
* Updated modules
|
|
* wolfSSL v5.7.6
|
|
* wolfTPM 3.8.0
|
|
* wolfPKCS11 latest
|
|
* wolfHSM latest
|
|
|
|
### V 2.5.0 - (2025-05-05)
|
|
* New hardware targets
|
|
* RP2350 (Raspberry Pi Pico 2, ARM Cortex-M33 with TrustZone)
|
|
* NXP MCXA153
|
|
* NXP MCXW716
|
|
* STM32F1 series (STM32F103 "Blue Pill" board)
|
|
* Improvements to supported targets
|
|
* Xilinx UltraScale+ (ZynqMP)
|
|
* Added hardware-accelerated SHA3 hashing via the CSU engine
|
|
* Added support for enabling JTAG at runtime when `CSU_DEBUG` is set
|
|
* Introduced support for the device's PUF (Physically Unclonable Function) for unique key generation and secure key storage (requires eFuses)
|
|
* Renesas RX
|
|
* Added option for TSIP hardware crypto engine
|
|
* Infineon TriCore (AURIX TC3xx)
|
|
* Updated IDE project files for ARM Developer Studio 1.10.6, fixing build issues and ensuring support for latest toolchain
|
|
* Fix to support write operations spanning over multiple sectors
|
|
* New features and improvements
|
|
* Added support for non-contiguous elf sections, scattered elf firmware loading and verification.
|
|
* PQC: Simplified LMS/XMSS integration, deprecated support for third-party libraries
|
|
* Support to build wolfBoot as a static library (`libwolfboot.a`) for easier integration and testing of the bootloader logic in custom workflows
|
|
* Extended support for ARMORED glitch mitigations to the IAR toolchain
|
|
* CMake build refactoring, extended support to more targets
|
|
* Various documentation and configuration improvements
|
|
* Bug fixes
|
|
* Fix alignment enforcement on IAR compiler
|
|
* Fix build error on Windows in key generation tool (`_chsize_s` declaration issue in `sign.c`)
|
|
* Updated modules
|
|
* wolfSSL v5.8.0
|
|
* wolfTPM v3.9.0
|
|
* wolfPKCS11 latest
|
|
* wolfHSM latest
|
|
|
|
### V 2.6.0 - (2025-08-01)
|
|
* New hardware targets: PIC32CX and PIC32CZ
|
|
* New features:
|
|
* Added support for external flash in ELF scattering mode
|
|
* Added support for certificate chain verification (ECC/RSA) with wolfHSM client
|
|
* Added support for x509 auth with wolfHSM in server mode
|
|
* Added support for encrypted updates on Renesas RX (also via TSIP)
|
|
* Added support for assembly optimizations for PowerPC 32bit (SHA, AES)
|
|
* STM32F4: new clock configuration to support all models, added support for STM32F411
|
|
* Bugfixes:
|
|
* Fixed unaligned access in Cortex-A5
|
|
* Fixed compile flags to properly run code from RAM on ARM
|
|
* Use the correct `VTOR_NS` register when staging a non-secure image with TrustZone-M
|
|
* Removed double-write-after-erase in `wolfBoot_update_trigger`
|
|
* Multiple fixes for STM32H5 running in TrustZone mode
|
|
* Updated modules
|
|
* wolfSSL v5.8.2+ (a06268f70)
|
|
* wolfTPM v3.9.1+ (6cfe800)
|
|
* wolfPKCS11: latest (ddeb887)
|
|
* wolfHSM: latest (e0b2019)
|
|
|
|
### V 2.7.0 - (2025-11-26)
|
|
* New hardware targets
|
|
* Vorago VA416x0 (new HAL, linker scripts, test application, and programming helpers)
|
|
* Nordic nRF5340 TrustZone build and configuration
|
|
* Improvements to supported targets
|
|
* TrustZone-M support unified across ARMv8-M targets
|
|
* TrustZone-M aware dual-bank configuration, increased update/erase reliability and isolation
|
|
* nRF5340: Added support for TrustZone-M
|
|
* STM32H5: SPI driver and TPM support with new TrustZone NSC APIs,
|
|
* Simulator: dual-bank flow and bank-swap test script to validate redundant-slot updates
|
|
* RP2350: RAM cache for flash writes to improve robustness
|
|
* Infineon AURIX TC3xx: replaced IDE project with HAL module integration and UART/boot flag handling fixes
|
|
* New features and improvements
|
|
* Filesystem-backed partition state access with `library_fs` target and CLI tool for querying or managing boot partitions
|
|
* libwolfboot: added MTD (Memory Technology Device) backed tracking of update status
|
|
* CMake: Added presets. Improve support for more reliable out-of-tree builds and list handling. Improve documentation.
|
|
* Key tools: `keygen --no-overwrite` option, stricter image header/sector size checks, and expanded ML-DSA test configurations
|
|
* Added `WOLFBOOT_RESTORE_CLOCK` configuration and additional logging/debugging for library filesystem status and keystore handling
|
|
* Bug fixes
|
|
* Hardened encrypted and delta update flows (IV reuse prevention, fallback/regression fixes, improved unit coverage)
|
|
* Fixed SPI flash protocol errors and write verification issues
|
|
* Corrected STM32 internal flash page erase masks and multiple STM32H5 update path fixes (including dual-bank and TPM builds)
|
|
* Resolved P1021 stage1 and MMU build issues
|
|
* cleanup of compiler warnings across targets (STM32WB55 PKA, nRF5340 non-TZ, others)
|
|
* Updated modules
|
|
* wolfSSL v5.8.4-stable (59f4fa568)
|
|
* wolfTPM v2.4.0-594-g6d5df60
|
|
* wolfPKCS11 v2.0.0-stable-33-g81af264
|
|
* wolfHSM v1.3.0 (8ac56d7)
|
|
|
|
### V 2.8.0 - (2026-04-16)
|
|
* New hardware targets
|
|
* AMD/Xilinx Versal Gen 1 VMK180 support, including SD/QSPI boot flows and PetaLinux boot support
|
|
* Microchip PolarFire SoC MPFS250 support extended to M-mode/QSPI/LIM boot flows, plus eMMC/SD support
|
|
* New target support for NXP MCXN and MCXW71, NXP S32K14x, NXP LPC55S69, and Nordic nRF54L15
|
|
* Added NXP T1040 RDB support and refreshed NXP T2080 vendor-board configurations
|
|
* Improvements to supported targets
|
|
* STM32H5 TrustZone/PKCS11 integration reworked with NSC veneers, plus additional OTP and flash handling fixes
|
|
* PSoC6 now supports external flash dual-bank updates and read-modify-erase-write flash programming
|
|
* AURIX TC3xx self-update and wolfHSM configurations expanded, including RSA4096 and cert-chain examples
|
|
* Renesas RA6M4 and RX projects refreshed, with improved RAM-function handling for CCRX builds
|
|
* Improved clang/LLVM support for embedded builds and test-app image generation, with dedicated CI coverage
|
|
* New features and improvements
|
|
* Added wolfPSA integration for secure storage and TrustZone-backed PSA services
|
|
* Added TrustZone PSA-crypto support and PSA attestation compliance, including DICE-based attestation flows
|
|
* Added Zephyr integration to replace the TEE layer, with PSA-facing interfaces and sample patches
|
|
* Added a generic hook framework for pre-init, post-init, and boot hooks
|
|
* Added custom encryption-key hooks, PKCS11-backed encrypted partitions, and improved image inspection/status tooling
|
|
* Added monolithic self-update builds, reproducible-build support, self-header support, and expanded simulator self-update / TrustZone test coverage
|
|
* Bug fixes and hardening
|
|
* Strengthened image parsing, signing, and update flows with stricter bounds/overflow checks for signatures, TLVs, delta images, GPT/FDT parsing, disk I/O, and partition overlap
|
|
* Added fail-closed flash protection, stricter rollback handling in non-flash paths, and final sanity checks in boot and library boot paths
|
|
* Expanded constant-time comparisons and zeroization for TPM, DICE, SATA, update, and key-generation code paths
|
|
* Fixed self-update regressions, encrypted-partition handling, SDHCI/MMC corner cases, and assorted build/test regressions across ARM, PPC, RISC-V, and simulator targets
|
|
* Updated modules
|
|
* wolfSSL v5.9.1-stable
|
|
* wolfTPM v3.10.0-88-gefaab4a
|
|
* wolfPKCS11 v2.0.0-stable-126-g8fec695
|
|
* wolfHSM v1.4.0-57-g977bf18
|
|
|
|
### V 2.9.0 - (2026-07-02)
|
|
* New hardware targets
|
|
* New STM32 ports: STM32N6 (NUCLEO-N657X0-Q), STM32U3 (NUCLEO-U385RG-Q), STM32C5 (NUCLEO-C5A3ZG), STM32G4, and STM32WBA
|
|
* NXP LPC54S018M-EVK and Kinetis KL26
|
|
* Xilinx Zynq-7000 (ZC702) boot support
|
|
* NXP T2080 / CW VPX3-152: VxWorks 7 64-bit boot support
|
|
* Improvements to supported targets
|
|
* Integrated the wolfHAL hardware abstraction layer into wolfBoot, with an STM32WB example
|
|
* STM32H5: added fwTPM support in TrustZone (with test app) and a WOLFCRYPT_TZ_WOLFHSM TrustZone engine
|
|
* STM32 TrustZone improvements (validated with wolfIP), plus external-flash access in non-secure-callable (NSC) flash veneers
|
|
* LPC55S69: hardware crypto acceleration and multiple fixes
|
|
* PolarFire SoC M-Mode: L2 scratchpad init, QSPI programmer, and watchdog support
|
|
* ZynqMP ZCU102 SD-card Linux boot: EL2 handoff, SDHCI init, and QSPI hardening
|
|
* NXP MCXN: hardware-based DICE attestation and TZ/PSA build fixes
|
|
* Vorago VA416x0: IRAM shadow-update fixes and a simplified flash write path
|
|
* New features and improvements
|
|
* Added RSA-PSS image signature support
|
|
* Added generic cryptocb support for hardware-accelerated crypto callbacks
|
|
* Added FIT image support for gzip-compressed kernel + ramdisk (initramfs) and for loading FPGA bitstreams
|
|
* Added a oneshot-hash build option and monolithic self-update optimizations
|
|
* Added boot-benchmarking support
|
|
* Added an `sbom` Makefile target for EU CRA compliance
|
|
* wolfHSM: multi-root-CA verification, keystore-less operation, and related fixes
|
|
* IDevID: allow using pre-computed authentication values (Reported-by: Asif Nadaf <postasif@protonmail.com>)
|
|
* Added an option to persist boot/update failure diagnostics to a dedicated flash partition, with an API to retrieve logged events
|
|
* Renamed ML-DSA (Dilithium) references throughout for consistency
|
|
* Bug fixes and hardening
|
|
* Continued Fenrir fuzzing-driven hardening across image parsing and update flows
|
|
* Bounded unauthenticated image size before RAM load, and enforced bounds over memcpy in the disk update path (Reported-by: Asif Nadaf <postasif@protonmail.com>)
|
|
* Added an integrity check in `wolfBoot_verify_authenticity()` (Reported-by: Asif Nadaf <postasif@protonmail.com>)
|
|
* Hardened the armored image integrity check against fault injection
|
|
* Fixed FDT compatible-string loop termination (Reported-by: Asif Nadaf <postasif@protonmail.com>)
|
|
* Fixed LMS/XMSS header includes and otp_keystore string initialization
|
|
* Fixed multiple unit-test and self-update regressions; migrated Renode tests to a new container
|
|
* Zeroized the DICE claim-collection buffer
|
|
* Updated modules
|
|
* wolfSSL v5.9.2-stable
|
|
* wolfTPM v4.0.0-363-g8e796c0
|
|
* wolfPKCS11 v2.1.0-stable
|
|
* wolfHSM v1.4.0-245-g7c6359e
|
|
* wolfHAL (4744f20)
|
|
* wolfPSA v5.9.1-58-ga4d1187
|