7635dce502
flash_enctryption: enabled flash encryption example on esp32s2 bootloader: raise WDT overflow value providing sufficient interval to encrypt app partition flash_ encrypt: Fixed the TODOs on flash encryption key generation for esp32s2 flash_encryption: added secure boot features to flash enctryption for esp32s2 bootloader: leave only esp32s2 compatible potentially insecure options on menuconfig. flash_encryption: removed secure boot version 1 from esp32s2 encryption code flash_encryption: added CONFIG_SECURE_FLASH_REQUIRE_ALREADY_ENABLED option for esp32s2 flash_encryption: fixed the count of left plaintext flash flash_encryption: disable dcache and icache download when using encryption in release mode flash_encryption: add cache potentally insecure options for s2 chips flash_encryption: fixed bug which bricked some chips in relase mode
113 lines
4.4 KiB
CMake
113 lines
4.4 KiB
CMake
set(srcs
|
|
"src/bootloader_clock.c"
|
|
"src/bootloader_common.c"
|
|
"src/bootloader_flash.c"
|
|
"src/bootloader_mem.c"
|
|
"src/bootloader_random.c"
|
|
"src/bootloader_utility.c"
|
|
"src/esp_image_format.c"
|
|
"src/flash_encrypt.c"
|
|
"src/flash_partitions.c"
|
|
"src/flash_qio_mode.c"
|
|
"src/bootloader_flash_config_${IDF_TARGET}.c"
|
|
"src/bootloader_efuse_${IDF_TARGET}.c"
|
|
)
|
|
|
|
if(BOOTLOADER_BUILD)
|
|
set(include_dirs "include" "include_bootloader")
|
|
set(priv_requires micro-ecc spi_flash efuse)
|
|
list(APPEND srcs
|
|
"src/bootloader_init.c"
|
|
"src/${IDF_TARGET}/bootloader_sha.c"
|
|
"src/${IDF_TARGET}/flash_encrypt.c"
|
|
"src/${IDF_TARGET}/bootloader_${IDF_TARGET}.c"
|
|
)
|
|
else()
|
|
list(APPEND srcs
|
|
"src/idf/bootloader_sha.c")
|
|
set(include_dirs "include")
|
|
set(priv_include_dirs "include_bootloader")
|
|
set(priv_requires spi_flash mbedtls efuse)
|
|
endif()
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME OR CONFIG_SECURE_SIGNED_APPS_RSA_SCHEME)
|
|
if(BOOTLOADER_BUILD)
|
|
list(APPEND srcs
|
|
"src/${IDF_TARGET}/secure_boot_signatures.c")
|
|
else()
|
|
list(APPEND srcs
|
|
"src/idf/secure_boot_signatures.c")
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_SECURE_BOOT AND BOOTLOADER_BUILD)
|
|
list(APPEND srcs
|
|
"src/${IDF_TARGET}/secure_boot.c")
|
|
endif()
|
|
|
|
set(requires soc) #unfortunately the header directly uses SOC registers
|
|
|
|
idf_component_register(SRCS "${srcs}"
|
|
INCLUDE_DIRS "${include_dirs}"
|
|
PRIV_INCLUDE_DIRS "${priv_include_dirs}"
|
|
REQUIRES "${requires}"
|
|
PRIV_REQUIRES "${priv_requires}")
|
|
|
|
if(CONFIG_SECURE_SIGNED_APPS AND (CONFIG_SECURE_BOOT_V1_ENABLED OR CONFIG_SECURE_SIGNED_APPS_ECDSA_SCHEME))
|
|
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}"
|
|
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()
|
|
|
|
# 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}")
|
|
endif()
|