Failed to generate ECC key -134 when build nrf5340 with TFM in NCS 3.0.2

Hello,

I have this problem when I try to generate the key: Key generation failed: -134

Here is the prj.conf file:


CONFIG_BUILD_WITH_TFM=y

# CONFIG_TFM_PROFILE_TYPE_MINIMAL=y
CONFIG_TFM_PROFILE_TYPE_NOT_SET=y



CONFIG_TFM_IPC=y


CONFIG_TFM_PARTITION_CRYPTO=y


CONFIG_TFM_PARTITION_PLATFORM=y


CONFIG_NRF_SECURITY=y
CONFIG_TFM_PARTITION_CRYPTO=y
CONFIG_TFM_PARTITION_PLATFORM=y

CONFIG_PSA_CRYPTO_DRIVER_CC3XX=y


CONFIG_LOG=y
CONFIG_LOG_MODE_MINIMAL=n
CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_UART=y
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y

CONFIG_USE_SEGGER_RTT=y
here is the file main.c : 
#include <zephyr/kernel.h>
#include <psa/crypto.h>
#include <zephyr/sys/printk.h>

static psa_key_handle_t key_handle;


static psa_status_t generate_key(void)
{
psa_status_t status;
psa_key_attributes_t key_attributes = PSA_KEY_ATTRIBUTES_INIT;

psa_set_key_usage_flags(&key_attributesPSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH | PSA_KEY_USAGE_EXPORT);
psa_set_key_algorithm(&key_attributesPSA_ALG_ECDSA(PSA_ALG_SHA_256));
psa_set_key_type(&key_attributesPSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1));
psa_set_key_bits(&key_attributes256);

status = psa_generate_key(&key_attributes&key_handle);
if (status != PSA_SUCCESS)
{
printk("Key generation failed: %d\n"status);
return status;
}
printk("Key generated successfully. Handle: %u\n", (unsigned int)key_handle);
return status;
}

static psa_status_t export_and_print_public_key(void)
{
psa_status_t status;

uint8_t public_key[PSA_KEY_EXPORT_ECC_PUBLIC_KEY_MAX_SIZE(256)];
size_t public_key_length;

status = psa_export_public_key(key_handlepublic_keysizeof(public_key), &public_key_length);
if (status != PSA_SUCCESS) {
printk("Failed to export public key: %d\n"status);
return status;
}

printk("Public key exported successfully. Length: %zu\n"public_key_length);
printk("Public Key: ");
for (size_t i = 0i < public_key_lengthi++) {
printk("%02x"public_key[i]);
}
printk("\n");

return status;
}

static psa_status_t sign_message(const uint8_t *messagesize_t message_size,
uint8_t *signaturesize_t signature_buf_size,
size_t *signature_length)
{
psa_status_t status;

status = psa_sign_message(key_handlePSA_ALG_ECDSA(PSA_ALG_SHA_256),
messagemessage_size,
signaturesignature_buf_sizesignature_length);
if (status != PSA_SUCCESS)
{
printk("Signature failed: %d\n"status);
return status;
}
printk("Signature successful. Length: %zu\n"*signature_length);

printk("Signature: ");
for (size_t i = 0i < *signature_lengthi++)
{
printk("%02x"signature[i]);
}
printk("\n");
return status;
}

static void verify_signature(const uint8_t *messagesize_t message_size,
const uint8_t *signaturesize_t signature_length)
{
psa_status_t status;

status = psa_verify_message(key_handlePSA_ALG_ECDSA(PSA_ALG_SHA_256),
messagemessage_size,
signaturesignature_length);

if (status == PSA_SUCCESS) {
printk("Signature verification successful.\n");
else {
printk("Signature verification failed: %d\n"status);
}
}

int main(void)
{
printk("hello\n");
psa_status_t status = psa_crypto_init();
if (status != PSA_SUCCESS)
{
printk("Failed to initialize PSA crypto: %d\n"status);
return 0;
}
status = generate_key();
if (status != PSA_SUCCESS)
{
return 0;
}

status = export_and_print_public_key();
if (status != PSA_SUCCESS) {
psa_destroy_key(key_handle);
return 0;
}

const uint8_t message_to_sign[] = "Ceci est un message de test.";
uint8_t signature[PSA_SIGNATURE_MAX_SIZE];
size_t signature_length;

status = sign_message(message_to_signsizeof(message_to_sign- 1,
signaturesizeof(signature), &signature_length);
if (status != PSA_SUCCESS) {
psa_destroy_key(key_handle);
return 0;
}

verify_signature(message_to_signsizeof(message_to_sign- 1,
signaturesignature_length);

status = psa_destroy_key(key_handle);
if (status != PSA_SUCCESS)
{
printk("Failed to destroy key: %d\n"status);
}
return 0;
}
Parents
  • The error is : 
    SEGGER J-Link V8.18 - Real time terminal output
    SEGGER J-Link (unknown) V1.0, SN=1050050954
    Process: JLinkExe
    [00:00:00.255,218] <err> os: ***** BUS FAULT *****
    [00:00:00.255,218] <err> os: Precise data bus error
    [00:00:00.255,218] <err> os: BFAR Address: 0x0
    [00:00:00.255,249] <err> os: r0/a1: 0x00048e80 r1/a2: 0x00048e88 r2/a3: 0x01980000
    [00:00:00.255,249] <err> os: r3/a4: 0x40009000 r12/ip: 0x00000000 r14/lr: 0x00044c21
    [00:00:00.255,249] <err> os: xpsr: 0x01000200
    [00:00:00.255,279] <err> os: Faulting instruction address (r15/pc): 0x00044bb2
    [00:00:00.255,310] <err> os: >>> ZEPHYR FATAL ERROR 25: Unknown error on CPU 0
    [00:00:00.255,340] <err> os: Current thread: 0x20030b98 (unknown)
    [00:00:01.275,756] <err> os: Halting system
Reply
  • The error is : 
    SEGGER J-Link V8.18 - Real time terminal output
    SEGGER J-Link (unknown) V1.0, SN=1050050954
    Process: JLinkExe
    [00:00:00.255,218] <err> os: ***** BUS FAULT *****
    [00:00:00.255,218] <err> os: Precise data bus error
    [00:00:00.255,218] <err> os: BFAR Address: 0x0
    [00:00:00.255,249] <err> os: r0/a1: 0x00048e80 r1/a2: 0x00048e88 r2/a3: 0x01980000
    [00:00:00.255,249] <err> os: r3/a4: 0x40009000 r12/ip: 0x00000000 r14/lr: 0x00044c21
    [00:00:00.255,249] <err> os: xpsr: 0x01000200
    [00:00:00.255,279] <err> os: Faulting instruction address (r15/pc): 0x00044bb2
    [00:00:00.255,310] <err> os: >>> ZEPHYR FATAL ERROR 25: Unknown error on CPU 0
    [00:00:00.255,340] <err> os: Current thread: 0x20030b98 (unknown)
    [00:00:01.275,756] <err> os: Halting system
Children
No Data
Related