Skip to content

Commit a96cd79

Browse files
nordic-mik7nordicjm
authored andcommitted
sysbuild: default SHA512 for nrf54h20 ed25519 signature
This commit refactors CMakeLists.txt for sysbuild to set SHA512 related configs more generically. Also, signing scripts are updated to handle builds with SHA512 signatures. Additionally, SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE is disabled for nrf54h20 because it is not currently supported. Signed-off-by: Michal Kozikowski <[email protected]>
1 parent 17896e3 commit a96cd79

File tree

6 files changed

+62
-48
lines changed

6 files changed

+62
-48
lines changed

cmake/sysbuild/image_signing.cmake

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,11 @@ function(zephyr_mcuboot_tasks)
124124
set(imgtool_hex_extra)
125125
endif()
126126

127-
if(CONFIG_SOC_SERIES_NRF54LX AND CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519)
128-
if(NOT CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE)
129-
set(imgtool_extra --sha 512 ${imgtool_extra})
130-
else()
131-
set(imgtool_extra --pure ${imgtool_extra})
132-
endif()
127+
# Set proper hash calculation algorithm for signing
128+
if(CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE)
129+
set(imgtool_extra --pure ${imgtool_extra})
130+
elseif(CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512)
131+
set(imgtool_extra --sha 512 ${imgtool_extra})
133132
endif()
134133

135134
if(CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)

cmake/sysbuild/image_signing_firmware_loader.cmake

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,11 @@ function(zephyr_mcuboot_tasks)
8484
set(imgtool_extra)
8585
endif()
8686

87-
if(CONFIG_SOC_SERIES_NRF54LX AND CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519)
88-
if(NOT CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE)
89-
set(imgtool_extra --sha 512 ${imgtool_extra})
90-
else()
91-
set(imgtool_extra --pure ${imgtool_extra})
92-
endif()
87+
# Set proper hash calculation algorithm for signing
88+
if(CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE)
89+
set(imgtool_extra --pure ${imgtool_extra})
90+
elseif(CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512)
91+
set(imgtool_extra --sha 512 ${imgtool_extra})
9392
endif()
9493

9594
if(NOT "${keyfile}" STREQUAL "")

cmake/sysbuild/sign_nrf54h20.cmake

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,16 @@ function(mcuboot_sign_merged_nrf54h20 merged_hex main_image)
190190
# List of additional build byproducts.
191191
set(byproducts ${output}.merged.hex)
192192

193+
sysbuild_get(CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 IMAGE ${main_image} VAR CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 KCONFIG)
194+
sysbuild_get(CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE IMAGE ${main_image} VAR CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE KCONFIG)
195+
196+
# Set proper hash calculation algorithm for signing
197+
if(CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE)
198+
set(imgtool_args --pure ${imgtool_args})
199+
elseif(CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512)
200+
set(imgtool_args --sha 512 ${imgtool_args})
201+
endif()
202+
193203
# Set up .hex outputs.
194204
if(SB_CONFIG_BUILD_OUTPUT_HEX)
195205
list(APPEND byproducts ${output}.signed.hex)

sysbuild/CMakeLists.txt

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,14 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
209209
endif()
210210
endforeach()
211211

212+
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE)
213+
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_TYPE_PURE y)
214+
endif()
215+
216+
if(SB_CONFIG_BOOT_IMG_HASH_ALG_SHA512 AND NOT (SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU AND SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE))
217+
set_config_bool(mcuboot CONFIG_BOOT_IMG_HASH_ALG_SHA512 y)
218+
endif()
219+
212220
# Apply configuration to application
213221
foreach(image ${updateable_images})
214222
foreach(mode ${application_mcuboot_modes})
@@ -218,21 +226,38 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
218226
set_config_bool(${image} ${mode} n)
219227
endif()
220228
endforeach()
229+
230+
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519)
231+
set_config_bool(${image} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
232+
endif()
233+
234+
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE)
235+
set_config_bool(${image} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
236+
endif()
237+
238+
if(SB_CONFIG_BOOT_IMG_HASH_ALG_SHA512)
239+
set_config_bool(${image} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
240+
endif()
221241
endforeach()
222242

243+
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER AND SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519)
244+
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
245+
246+
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE)
247+
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
248+
endif()
249+
250+
if(SB_CONFIG_BOOT_IMG_HASH_ALG_SHA512)
251+
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
252+
endif()
253+
endif()
254+
223255
# The NRF54LX goes with PSA crypto by default
224256
if(SB_CONFIG_SOC_SERIES_NRF54LX)
225257
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_NONE)
226258
set_config_bool(mcuboot CONFIG_NRF_SECURITY y)
227259
elseif(SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519)
228260
set_config_bool(mcuboot CONFIG_NRF_SECURITY y)
229-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
230-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
231-
232-
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
233-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
234-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
235-
endif()
236261

237262
# We are sure that ED25519 signature on MCUboot does not need these
238263
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_AEAD_DRIVER n)
@@ -245,7 +270,7 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
245270

246271
if(SB_CONFIG_NRF_MCUBOOT_HMAC_SHA512)
247272
set_config_bool(mcuboot CONFIG_BOOT_HMAC_SHA512 y)
248-
else()
273+
else()
249274
set_config_bool(mcuboot CONFIG_BOOT_HMAC_SHA512 n)
250275
endif()
251276
else()
@@ -262,37 +287,11 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
262287
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_USING_KMU n)
263288
endif()
264289

265-
if(SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE)
266-
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_TYPE_PURE y)
267-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
268-
269-
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
270-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE y)
271-
endif()
272-
else()
273-
set_config_bool(mcuboot CONFIG_BOOT_SIGNATURE_TYPE_PURE n)
274-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE n)
275-
276-
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
277-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE n)
278-
endif()
279-
endif()
280-
281290
# MCUboot uses hash function to identify key internally when KMU is disabled.
282291
if(SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU AND SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE)
283292
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER n)
284-
set_config_bool(mcuboot CONFIG_BOOT_IMG_HASH_ALG_SHA512 n)
285293
else()
286294
set_config_bool(mcuboot CONFIG_PSA_USE_CRACEN_HASH_DRIVER y)
287-
set_config_bool(mcuboot CONFIG_BOOT_IMG_HASH_ALG_SHA512 y)
288-
endif()
289-
else()
290-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 n)
291-
set_config_bool(${DEFAULT_IMAGE} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 n)
292-
293-
if(SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER)
294-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 n)
295-
set_config_bool(${SB_CONFIG_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 n)
296295
endif()
297296
endif()
298297
endif()

sysbuild/Kconfig.mcuboot

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,21 @@ endchoice
156156

157157
config BOOT_SIGNATURE_TYPE_PURE
158158
bool "Verify signature directly over image"
159-
depends on SOC_SERIES_NRF54LX || SOC_SERIES_NRF54HX
159+
depends on SOC_SERIES_NRF54LX
160160
depends on BOOT_SIGNATURE_TYPE_ED25519
161161
help
162162
The image signature will be verified over image rather than
163163
hash of an image.
164164
This option is currently only supported with ED25519 and configurations
165165
where both image slots are within internal SoC device storage.
166166

167+
config BOOT_IMG_HASH_ALG_SHA512
168+
bool "Use SHA512 for image hash calculation"
169+
depends on BOOT_SIGNATURE_TYPE_ED25519
170+
default y if SOC_SERIES_NRF54LX || SOC_SERIES_NRF54HX
171+
help
172+
The image hash will be calculated using SHA512 algorithm.
173+
167174
config MCUBOOT_SIGNATURE_USING_KMU
168175
bool "Use KMU stored keys for signature verification"
169176
depends on SOC_SERIES_NRF54LX

tests/subsys/nrf_compress/decompression/mcuboot_update/sysbuild.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ set_config_bool(compressed_app CONFIG_MCUBOOT_BOOTLOADER_MODE_OVERWRITE_ONLY y)
1717
set(compressed_app_SIGNING_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/modified_signing.cmake" CACHE INTERNAL "MCUboot signing script" FORCE)
1818
set_config_bool(compressed_app CONFIG_MCUBOOT_COMPRESSED_IMAGE_SUPPORT_ENABLED y)
1919

20-
if(SB_CONFIG_SOC_SERIES_NRF54LX AND SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519)
20+
if((SB_CONFIG_SOC_SERIES_NRF54LX OR SB_CONFIG_SOC_SERIES_NRF54HX) AND SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519)
2121
set_config_bool(compressed_app CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519 y)
2222
set_config_bool(compressed_app CONFIG_MCUBOOT_BOOTLOADER_USES_SHA512 y)
2323
set_config_bool(compressed_app CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE n)

0 commit comments

Comments
 (0)