Setup:
nRF52840 DK
nRF52 SDK v16.0.0
s140 v7.0.1
When I attempt to use the nrf_crypto library for AES 128bit ECB encryption I keep getting
NRF_ERROR_CRYPTO_CONTEXT_NOT_INITIALIZED
out of
nrf_crypto_aes_crypt
Even when I initialize the context before making the call I get the same error(although this is unnecessary given that this function initializes the context for you). I went through the function mentioned above step by step, keeping an eye on
p_ctx->ecb_context.header.init_value
which has the value of
#define NRF_CRYPTO_AES_INIT_MAGIC_VALUE (0x53454163) // ASCII "cAES"
until the library function call
result = SaSi_AesFinish(&p_ctx->any.context,
data_size,
p_data_in + offset,
data_size,
p_data_out + offset,
p_data_out_size);
After this function call the init_value gets truncated to
p_ctx->ecb_context.header.init_value = 0x53000000
but the result variable indicates that the function was a success.
Here is my code for producing the error:
uint32_t cc310_aes_encrypt(const uint8_t * p_key, const uint8_t * p_plaintext, uint8_t * p_result, uint8_t data_len)
{
nrf_crypto_aes_context_t aes_ctx;
uint32_t ret_val;
ret_val = nrf_crypto_aes_init(&aes_ctx, &g_nrf_crypto_aes_ecb_128_info, NRF_CRYPTO_ENCRYPT);
AES_ERROR_CHECK(ret_val);
uint8_t in_len = data_len;
uint8_t out_len = data_len;
/* Encrypt text */
ret_val = nrf_crypto_aes_crypt(&aes_ctx,
&g_nrf_crypto_aes_ecb_128_info,
NRF_CRYPTO_ENCRYPT,
p_key,
NULL,
p_plaintext,
in_len,
p_result,
&out_len);
AES_ERROR_CHECK(ret_val);
ret_val = nrf_crypto_aeas_uninit(&aes_ctx);
AES_ERROR_CHECK(ret_val);
return ret_val;
}
Error = 0x8502 The context was not initialized prior to this call or it was corrupted. Please call the corresponding init function for the algorithm to initialize it