|
|
@@ -36,30 +36,60 @@ idf_component_register(SRCS "${srcs}"
|
|
|
REQUIRES "${requires}"
|
|
|
PRIV_REQUIRES "${priv_requires}")
|
|
|
|
|
|
-if(BOOTLOADER_BUILD AND CONFIG_SECURE_SIGNED_APPS)
|
|
|
- # Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
|
|
|
- # in the library.
|
|
|
- if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
|
|
|
- # We generate the key from the signing key. The signing key is passed from the main project.
|
|
|
- get_filename_component(secure_boot_signing_key
|
|
|
- "${SECURE_BOOT_SIGNING_KEY}"
|
|
|
- ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
- get_filename_component(secure_boot_verification_key
|
|
|
- "signature_verification_key.bin"
|
|
|
- ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
- add_custom_command(OUTPUT "${secure_boot_verification_key}"
|
|
|
- COMMAND ${ESPSECUREPY}
|
|
|
+if(CONFIG_SECURE_SIGNED_APPS)
|
|
|
+ if(BOOTLOADER_BUILD)
|
|
|
+ # Whether CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES or not, we need verification key to embed
|
|
|
+ # in the library.
|
|
|
+ if(CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES)
|
|
|
+ # We generate the key from the signing key. The signing key is passed from the main project.
|
|
|
+ get_filename_component(secure_boot_signing_key
|
|
|
+ "${SECURE_BOOT_SIGNING_KEY}"
|
|
|
+ ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
+ get_filename_component(secure_boot_verification_key
|
|
|
+ "signature_verification_key.bin"
|
|
|
+ ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
|
+ add_custom_command(OUTPUT "${secure_boot_verification_key}"
|
|
|
+ COMMAND ${ESPSECUREPY}
|
|
|
extract_public_key --keyfile "${secure_boot_signing_key}"
|
|
|
"${secure_boot_verification_key}"
|
|
|
- VERBATIM)
|
|
|
- else()
|
|
|
- # We expect to 'inherit' the verification key passed from main project.
|
|
|
- get_filename_component(secure_boot_verification_key
|
|
|
- ${SECURE_BOOT_VERIFICATION_KEY}
|
|
|
- ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
+ DEPENDS ${secure_boot_signing_key}
|
|
|
+ VERBATIM)
|
|
|
+ else()
|
|
|
+ # We expect to 'inherit' the verification key passed from main project.
|
|
|
+ get_filename_component(secure_boot_verification_key
|
|
|
+ ${SECURE_BOOT_VERIFICATION_KEY}
|
|
|
+ ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
+ endif()
|
|
|
+ else() # normal app build
|
|
|
+ idf_build_get_property(project_dir PROJECT_DIR)
|
|
|
+
|
|
|
+ if(CONFIG_SECURE_BOOT_VERIFICATION_KEY)
|
|
|
+ # verification-only build supplies verification key
|
|
|
+ set(secure_boot_verification_key ${CONFIG_SECURE_BOOT_VERIFICATION_KEY})
|
|
|
+ get_filename_component(secure_boot_verification_key
|
|
|
+ ${secure_boot_verification_key}
|
|
|
+ ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
+ else()
|
|
|
+ # sign at build time, extracts key from signing key
|
|
|
+ set(secure_boot_verification_key "${CMAKE_BINARY_DIR}/signature_verification_key.bin")
|
|
|
+ get_filename_component(secure_boot_signing_key
|
|
|
+ ${CONFIG_SECURE_BOOT_SIGNING_KEY}
|
|
|
+ ABSOLUTE BASE_DIR "${project_dir}")
|
|
|
+
|
|
|
+ add_custom_command(OUTPUT "${secure_boot_verification_key}"
|
|
|
+ COMMAND ${ESPSECUREPY}
|
|
|
+ extract_public_key --keyfile "${secure_boot_signing_key}"
|
|
|
+ "${secure_boot_verification_key}"
|
|
|
+ WORKING_DIRECTORY ${project_dir}
|
|
|
+ DEPENDS ${secure_boot_signing_key}
|
|
|
+ VERBATIM)
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
- target_add_binary_data(${COMPONENT_LIB} "${secure_boot_verification_key}" "BINARY")
|
|
|
+ # Embed the verification key in the binary (app & bootloader)
|
|
|
+ #
|
|
|
+ target_add_binary_data(${COMPONENT_LIB} "${secure_boot_verification_key}" "BINARY"
|
|
|
+ RENAME_TO signature_verification_key_bin)
|
|
|
set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
|
APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
|
|
|
"${secure_boot_verification_key}")
|