Skip to content

Commit 360488d

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 360488d

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
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 UROT_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 UROT_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: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,15 @@ function(bm_install_setup)
6464
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_KEY_AGREEMENT_DRIVER n)
6565
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_KEY_DERIVATION_DRIVER n)
6666
set_config_bool(mcuboot CONFIG_BOOT_HMAC_SHA512 n)
67-
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU n)
6867
set_config_bool(mcuboot CONFIG_BOOT_KEY_IMPORT_BYPASS_ASN y)
69-
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER y)
68+
69+
if(SB_CONFIG_BM_BOOTLOADER_MCUBOOT_SIGNATURE_USING_KMU)
70+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU y)
71+
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER n)
72+
else()
73+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU n)
74+
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER y)
75+
endif()
7076
endif()
7177
endif()
7278

@@ -246,6 +252,10 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_post_cmake)
246252
ALL
247253
DEPENDS ${CMAKE_BINARY_DIR}/production.hex
248254
)
255+
256+
if(SB_CONFIG_BM_BOOTLOADER_MCUBOOT_GENERATE_DEFAULT_KMU_KEYFILE)
257+
include(${ZEPHYR_NRF_BM_MODULE_DIR}/cmake/sysbuild/generate_default_keyfile.cmake)
258+
endif()
249259
endif()
250260
endfunction()
251261

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)