mirror of https://github.com/wolfSSL/wolfBoot.git
5.0 KiB
5.0 KiB
Firmware Image Format
Overview
This document describes the wolfBoot firmware image format, including:
- Image header structure
- Entry point requirements
- Partition management
- Signing and verification
Memory Layout
Entry Point Requirements
- Fixed memory location required
- Specified in linker script
- Must match FLASH origin
- Located in first partition
Partition Structure
Flash Memory
+------------------------+ <- Partition Start
| Image Header | 256B aligned
+------------------------+ <- Entry Point
| Firmware Image |
| |
+------------------------+
Key Characteristics
- 256B header offset
- Multiple partition support
- Automatic image relocation
- Chain-load execution model
Image Header
Structure Overview
The image header contains metadata and security information for the firmware:
+------------------------+ <- Header Start
| Magic Number | 4 bytes
| Image Size | 4 bytes
| Tags Section | Variable size
| Padding | To 256B alignment
+------------------------+ <- IMAGE_HEADER_SIZE
| Firmware Start |
Header Characteristics
- Variable total size based on:
- Digest algorithm
- Signature size
- Key length
- 256-byte alignment enforced
- Size defined by
IMAGE_HEADER_SIZE
- Supports vector table relocation
Implementation Notes
- Size determined at build time
- Reported by signing tools
- Critical for interrupt handling
- Must match across toolchain
Important: When porting to custom build systems, ensure IMAGE_HEADER_SIZE
matches the sign
tool output.
Tag System
Base Format
All values stored in little-endian format.
Fixed Fields
Field | Size | Description |
---|---|---|
Magic Number | 4 bytes | Header identifier |
Image Size | 4 bytes | Firmware size (excluding header) |
Tag Structure
struct tag {
uint16_t type; // Tag identifier
uint16_t size; // Content size
uint8_t data[]; // Variable length content
};
Mandatory Tags
Type | Name | Size | Description |
---|---|---|---|
0x0001 | Version | 4B | Firmware version number |
0x0002 | Timestamp | 8B | Creation time (Unix seconds) |
0x0003 | SHA Digest | 32B* | Integrity check (SHA256) |
0x0020 | Signature | 64B | Firmware authentication |
0x0030 | Type | 2B | Firmware type & auth method |
0x0010 | Key Hint | 32B | Public key SHA digest |
* Size varies with hash algorithm
Special Cases
- Type field = 0xFF: Padding byte
- No size field
- Next byte is new Type
- Used for alignment
Key Management
- Key hint enables multi-key support
- Bootloader uses hint for key selection
- Required for signature verification
wolfBoot will, in all cases, refuse to boot an image that cannot be verified and authenticated using the built-in digital signature authentication mechanism.
Custom Fields Support
Overview
wolfBoot supports extending the manifest header with custom fields:
- Secured by signature verification
- Flexible field types
- Runtime accessible
- Little-endian format
Adding Custom Fields
Command Line Usage
# Add custom TLV field
./tools/keytools/sign \
--ed25519 \
--custom-tlv 0x34 4 0xAABBCCDD \
test-app/image.bin \
wolfboot_signing_private_key.der \
4
Field Structure
struct custom_field {
uint16_t tag; // Custom identifier
uint16_t length; // Field size
uint8_t value[]; // Field content
};
Runtime Access
API Usage
// Access custom field
uint32_t value;
uint8_t* ptr = NULL;
uint16_t tlv = 0x34;
uint8_t* imageHdr = (uint8_t*)WOLFBOOT_PARTITION_BOOT_ADDRESS +
IMAGE_HEADER_OFFSET;
// Find and read field
uint16_t size = wolfBoot_find_header(imageHdr, tlv, &ptr);
if (size > 0 && ptr != NULL) {
// Field found - read value
memcpy(&value, ptr, size);
printf("TLV 0x%x=0x%x\n", tlv, value);
}
else {
// Field not found
handle_error();
}
Security Notes
- Fields included in signature
- Protected against tampering
- Alignment handled automatically
For detailed syntax, see Signing Documentation
Image Management
Signing Process
Tool Overview
The signing tool provides:
- Automatic header generation
- Required tag creation
- Signature calculation
- Output file creation
Usage Flow
- Compile firmware
- Generate header
- Sign image
- Store or transmit
Storage Management
Partition Layout
Flash Memory
+------------------------+
| BOOT Partition |
| [Header + Firmware A] |
+------------------------+
| UPDATE Partition |
| [Header + Firmware B] |
+------------------------+
Key Points
- Headers required in all partitions
- Boot only from BOOT partition
- Swap mechanism for updates
- Secure update process
For detailed partition information, see: