Hi team.
Now i'm use soc nrf5340, and the ncs version 2.9.0.
I want to encrypt my external flash using QSPI.
I encountered some problems while using the nrf connect mobile app to perform the Bluetooth upgrade.
file postion : E:\Project\SDK\v2.9.0\bootloader\mcuboot\boot\zephyr\main.c #ifdef CONFIG_MCUBOOT_ENC_EXT_FLASH #define NONCE_CTX "test_string" #include <hw_unique_key.h> #include <nrfx_qspi.h> static bool encryption_done = false; int encrypt_external_flash(void) { if (encryption_done) { printk("External flash already encrypted, skipping\n"); return NRFX_SUCCESS; } nrf_qspi_encryption_t encrypt_param = {0}; uint8_t label[3] = {0}; // Label used for both key and nonce int ret = 0; if (!hw_unique_key_are_any_written()) hw_unique_key_write_random(); // Derive the key uint8_t key_context[16] = {0}; memcpy(key_context, CONFIG_BOARD, strlen(CONFIG_BOARD)); printk("Deriving keyyyyyyyyyyyyyyyyyyyyy with context: %s\n", key_context); ret = hw_unique_key_derive_key(HUK_KEYSLOT_MEXT, key_context, sizeof(key_context), label, sizeof(label), (uint8_t *)encrypt_param.key, sizeof(encrypt_param.key)); if (ret) { printk("derive board key error: %d\n", ret); return ret; } // Derive the nonce uint8_t nonce_context[32] = {0}; memcpy(nonce_context, NONCE_CTX, strlen(NONCE_CTX)); printk("Deriving nonceeeeeeeeeeeeeeeeee with context: %s\n", nonce_context); ret = hw_unique_key_derive_key(HUK_KEYSLOT_MEXT, nonce_context, sizeof(nonce_context), label, sizeof(label), (uint8_t *)encrypt_param.nonce, sizeof(encrypt_param.nonce)); if (ret) { printk("derive nonce ctx key error: %d\n", ret); return ret; } // Perform encryption with DMA ret = nrfx_qspi_dma_encrypt(&encrypt_param); if (ret != NRFX_SUCCESS) { printk("nrfx_qspi_dma_encrypt error: %d\n", ret); return ret; } // Perform encryption with XIP ret = nrfx_qspi_xip_encrypt(&encrypt_param); if (ret != NRFX_SUCCESS) { printk("nrfx_qspi_xip_encrypt error: %d\n", ret); return ret; } MCUBOOT_WATCHDOG_FEED(); encryption_done = true; printk("Set ext flash encryption done\n"); return NRFX_SUCCESS; } SYS_INIT(encrypt_external_flash, POST_KERNEL, 42); #endif /*CONFIG_MCUBOOT_ENC_EXT_FLASH*/ file : prj.conf CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS=y CONFIG_CHIP_DFU_OVER_BT_SMP=y file : sysbuild.conf SB_CONFIG_PARTITION_MANAGER=y SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y file : sysbuild/mcuboot/prj.conf CONFIG_NRF_SECURITY=y CONFIG_MBEDTLS_RSA_C=y CONFIG_MBEDTLS_LEGACY_CRYPTO_C=y CONFIG_HW_UNIQUE_KEY=y CONFIG_HW_UNIQUE_KEY_RANDOM=y CONFIG_MCUBOOT_ENC_EXT_FLASH=y
When I disabled the operation of encrypting the external flash, my Bluetooth upgrade was successful.
However, when I enabled the encryption operation, the Bluetooth upgrade failed.
After printing and checking, it was found that the magic failed to match and the upgrade was unsuccessful.
E: Faled boot_set_next with code 3, for slot 1, with active slot 0 and confirm 0
Will there be any problems with this encryption operation?