Skip to content

Commit 590da69

Browse files
committed
sysbuild: Add KMU provisioning and allow KMU usage
Allows usage of KMU in MCUboot for the signature verification and copies the KMU provisioning script from NCS with changes for BM Signed-off-by: Jamie McCrae <[email protected]>
1 parent 00ef0be commit 590da69

File tree

3 files changed

+71
-5
lines changed

3 files changed

+71
-5
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) 2025 Nordic Semiconductor ASA
2+
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
3+
4+
# This script defines a CMake target 'generate_kmu_keyfile_json' to create keyfile.json
5+
# using 'west ncs-provision upload --dry-run'.
6+
7+
# --- Construct the list of commands and dependencies ---
8+
set(kmu_json_commands "")
9+
set(kmu_json_dependencies "")
10+
11+
# Update keyfile for BL_PUBKEY
12+
string(CONFIGURE "${SB_CONFIG_BM_BOOTLOADER_MCUBOOT_SIGNATURE_KEY_FILE}" mcuboot_signature_key_file)
13+
list(APPEND kmu_json_commands
14+
COMMAND ${Python3_EXECUTABLE} -m west ncs-provision upload
15+
--keyname BL_PUBKEY
16+
--key ${mcuboot_signature_key_file}
17+
--build-dir ${CMAKE_BINARY_DIR}
18+
--dry-run
19+
)
20+
list(APPEND kmu_json_dependencies ${mcuboot_signature_key_file})
21+
22+
# --- Add custom command to generate/update keyfile.json ---
23+
if(NOT kmu_json_commands STREQUAL "")
24+
add_custom_command(
25+
OUTPUT ${CMAKE_BINARY_DIR}/keyfile.json
26+
${kmu_json_commands} # Expands to one or more COMMAND clauses
27+
DEPENDS ${kmu_json_dependencies}
28+
COMMENT "Generating/Updating KMU keyfile JSON (${CMAKE_BINARY_DIR}/keyfile.json)"
29+
VERBATIM
30+
)
31+
32+
# --- Add custom target to trigger the generation ---
33+
add_custom_target(
34+
generate_kmu_keyfile_json ALL
35+
DEPENDS ${CMAKE_BINARY_DIR}/keyfile.json
36+
)
37+
endif()

sysbuild/CMakeLists.txt

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@ function(bm_install_setup)
4343
set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
4444
elseif(SB_CONFIG_BM_BOOT_IMG_HASH_ALG_PURE)
4545
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_TYPE_PURE y)
46-
set_config_bool(mcuboot CONFIG_BOOT_IMG_HASH_ALG_SHA512 n)
46+
set_config_bool(mcuboot CONFIG_BOOT_IMG_HASH_ALG_SHA512 y)
4747
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
48-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 n)
48+
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
49+
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
4950
set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
50-
set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 n)
51+
set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
52+
set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
5153
endif()
5254

5355
if(SB_CONFIG_SOC_SERIES_NRF54LX)
@@ -64,9 +66,19 @@ function(bm_install_setup)
6466
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_KEY_AGREEMENT_DRIVER n)
6567
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_KEY_DERIVATION_DRIVER n)
6668
set_config_bool(mcuboot CONFIG_BOOT_HMAC_SHA512 n)
67-
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU n)
6869
set_config_bool(mcuboot CONFIG_BOOT_KEY_IMPORT_BYPASS_ASN y)
69-
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER y)
70+
71+
if(SB_CONFIG_BM_BOOTLOADER_MCUBOOT_SIGNATURE_USING_KMU)
72+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU y)
73+
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER n)
74+
set_config_bool(mcuboot CONFIG_MBEDTLS_ENABLE_HEAP n)
75+
set_config_bool(mcuboot CONFIG_PSA_CORE_LITE y)
76+
set_config_bool(mcuboot CONFIG_PSA_CORE_LITE_NSIB_ED25519_OPTIMIZATIONS y)
77+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_TYPE_PURE y)
78+
else()
79+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU n)
80+
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER y)
81+
endif()
7082
endif()
7183
endif()
7284

@@ -246,6 +258,10 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_post_cmake)
246258
ALL
247259
DEPENDS ${CMAKE_BINARY_DIR}/production.hex
248260
)
261+
262+
if(SB_CONFIG_BM_BOOTLOADER_MCUBOOT_GENERATE_DEFAULT_KMU_KEYFILE)
263+
include(${ZEPHYR_NRF_BM_MODULE_DIR}/cmake/sysbuild/generate_default_keyfile.cmake)
264+
endif()
249265
endif()
250266
endfunction()
251267

sysbuild/Kconfig.bm

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,19 @@ config BM_BOOTLOADER_MCUBOOT_SIGNATURE_KEY_FILE
5151
help
5252
Absolute path to signing key file to use with MCUBoot.
5353

54+
config BM_BOOTLOADER_MCUBOOT_SIGNATURE_USING_KMU
55+
bool "Use KMU stored keys for signature verification"
56+
depends on SOC_SERIES_NRF54LX && BM_BOOTLOADER_MCUBOOT_SIGNATURE_TYPE_ED25519
57+
help
58+
The device needs to be provisioned with proper set of keys.
59+
60+
config BM_BOOTLOADER_MCUBOOT_GENERATE_DEFAULT_KMU_KEYFILE
61+
bool "Generate default keyfile for provisioning during build"
62+
depends on BM_BOOTLOADER_MCUBOOT_SIGNATURE_USING_KMU
63+
default y
64+
help
65+
If enabled, the build system will generate keyfile.json file in the build directory.
66+
5467
menu "Firmware loader entrance modes"
5568
depends on !BM_FIRMWARE_LOADER_NONE
5669

0 commit comments

Comments
 (0)