Hi,
I successfully tested ecdh and aes256 in seperate projects but I want to combine them.
This is my code:
#include "nrf.h" #include "app_error.h" #include "nrf_crypto.h" #include "nrf_crypto_ecc.h" #include "nrf_crypto_ecdh.h" #include "nrf_crypto_error.h" #include "mem_manager.h" #include "nrf_log.h" #include "nrf_log_ctrl.h" #include "nrf_log_default_backends.h" static uint8_t m_key[32]; static uint8_t iv[16]; static char m_decrypted_text[100]; static nrf_crypto_aes_context_t ctr_encr_256_ctx; static nrf_crypto_aes_context_t ctr_decr_256_ctx; static uint8_t input[] = { 0xb1, 0xf4, 0xb2, 0x0e, 0xcb, 0x2e }; static nrf_crypto_ecc_private_key_t private_key; static nrf_crypto_ecc_public_key_t public_key; static nrf_crypto_ecc_secp256r1_raw_public_key_t raw_public_key_buffer; #define DEMO_ERROR_CHECK(error) \ do \ { \ if (error != NRF_SUCCESS) \ { \ NRF_LOG_ERROR("Error 0x%04X: %s", error, nrf_crypto_error_string_get(error));\ APP_ERROR_CHECK(error); \ } \ } while(0) static void log_init(void) { ret_code_t err_code = NRF_LOG_INIT(NULL); APP_ERROR_CHECK(err_code); NRF_LOG_DEFAULT_BACKENDS_INIT(); } int main(void) { APP_ERROR_CHECK(nrf_mem_init()); APP_ERROR_CHECK(nrf_crypto_init()); log_init(); ret_code_t ret_val = nrf_crypto_aes_init(&ctr_encr_256_ctx, &g_nrf_crypto_aes_ctr_256_info, NRF_CRYPTO_ENCRYPT); APP_ERROR_CHECK(ret_val); ret_val = nrf_crypto_aes_key_set(&ctr_encr_256_ctx, m_key); APP_ERROR_CHECK(ret_val); ret_val = nrf_crypto_aes_iv_set(&ctr_encr_256_ctx, iv); APP_ERROR_CHECK(ret_val); size_t decryption_length = sizeof(m_decrypted_text); ret_val = nrf_crypto_aes_crypt(&ctr_decr_256_ctx, &g_nrf_crypto_aes_ctr_256_info, NRF_CRYPTO_DECRYPT, m_key, iv, (uint8_t *)input, sizeof(input), (uint8_t *)m_decrypted_text, &decryption_length); APP_ERROR_CHECK(ret_val); nrf_crypto_aes_uninit(&ctr_encr_256_ctx); ret_val = nrf_crypto_ecc_key_pair_generate(NULL, &g_nrf_crypto_ecc_secp256k1_curve_info, &private_key, &public_key); DEMO_ERROR_CHECK(ret_val); size_t size = sizeof(raw_public_key_buffer); ret_val = nrf_crypto_ecc_public_key_to_raw(&public_key, raw_public_key_buffer, &size); DEMO_ERROR_CHECK(ret_val); NRF_LOG_HEXDUMP_INFO(raw_public_key_buffer, sizeof(raw_public_key_buffer)); while(true){} }
Problem is that when i call the ecc functions this happens:
<error> app: Error 0x8516: An internal error occurred when calling this function
Any idea?