Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 7 months ago.
problem with aes-ctr in mbedtls
Hi everyone,
I'm trying to run aes-ctr in mbedtls on the development board nrf51dk in mbed but the there is something strange with the linking that I don't understand.
My guess is that is have to something with the ifguards in "mbedtls/aes.h" because I have no problem with mbedtls_aes_context, mbedtls_aes_init and mbedtls_aes_setkey_enc.
However I tried to define the macros in the user application as well without no progress, the code can be viewed below. Furthermore, when I use the the ifguards to program compiles and build successfully but the code inside the ifguards never get executed and if I define the macros I get linking errors.
include the mbed library with this snippet
#include "mbed.h"
#if DEBUG_LEVEL > 0
#include "mbedtls/debug.h"
#endif
#if !defined(MBEDTLS_CONFIG_FILE)
#include "mbedtls/config.h"
#else
#include MBEDTLS_CONFIG_FILE
#endif
#include "mbedtls/platform.h"
#include <string.h>
#include "mbedtls/md4.h"
#include "mbedtls/md5.h"
#include "mbedtls/ripemd160.h"
#include "mbedtls/sha1.h"
#include "mbedtls/sha256.h"
#include "mbedtls/sha512.h"
#include "mbedtls/arc4.h"
#include "mbedtls/des.h"
#include "mbedtls/aes.h"
#include "mbedtls/cmac.h"
#include "mbedtls/blowfish.h"
#include "mbedtls/camellia.h"
#include "mbedtls/gcm.h"
#include "mbedtls/ccm.h"
#include "mbedtls/havege.h"
#include "mbedtls/ctr_drbg.h"
#include "mbedtls/hmac_drbg.h"
#include "mbedtls/rsa.h"
#include "mbedtls/pk.h"
#include "mbedtls/dhm.h"
#include "mbedtls/ecdsa.h"
#include "mbedtls/ecdh.h"
#include "mbedtls/error.h"
#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C)
#include "mbedtls/memory_buffer_alloc.h"
#endif
#define MEM_BLOCK_OVERHEAD ( 2 * sizeof( size_t ) )
/*
* Size to use for the malloc buffer if MEMORY_BUFFER_ALLOC_C is defined.
*/
#define HEAP_SIZE (1u << 16) // 64k
#define BUFSIZE 1024
#define HEADER_FORMAT " %-24s : "
#define TITLE_LEN 25
#define OPTIONS \
"md4, md5, ripemd160, sha1, sha256, sha512,\r\n" \
"arc4, camellia, blowfish,\r\n" \
"des3, des, aes_cmac, des3_cmac, aes_cbc, aes_gcm, aes_ccm, aes_ctr \r\n" \
"havege, ctr_drbg, hmac_drbg\r\n" \
"rsa, dhm, ecdsa, ecdh.\r\n"
#if defined(MBEDTLS_ERROR_C)
#define PRINT_ERROR \
mbedtls_strerror( ret, ( char * )tmp, sizeof( tmp ) ); \
mbedtls_printf( "FAILED: %s\r\n", tmp );
#else
#define PRINT_ERROR \
mbedtls_printf( "FAILED: -0x%04x\r\n", -ret );
#endif
DigitalOut led1(LED1);
DigitalOut led4(LED4);
int main(void) {
led1 = 0;
led4 = 0;
#if defined(MBEDTLS_AES_C)
#if defined(MBEDTLS_CIPHER_MODE_CTR)
led4 = 1;
unsigned char key[16] = {
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7,
0x15, 0x88,
0x09, 0xcf, 0x4f, 0x3c
};
unsigned char ctr[16] = {
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
0xfa, 0xfb,
0xfc, 0xfd, 0xfe, 0xff
};
const unsigned char plaintext[64] = {
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a,
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51,
0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef,
0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10
};
size_t nc_off = 0;
unsigned char stream_block[16] = {0};
uint8_t enc_out[64];
memset(enc_out, 0, sizeof(enc_out));
mbedtls_aes_context aes;
mbedtls_aes_init(&aes);
mbedtls_aes_setkey_enc( &aes, key, 128);
for(int i = 0; i < 10; i++) {
mbedtls_aes_crypt_ctr(&aes, sizeof(plaintext), &nc_off, ctr, stream_block, plaintext, enc_out);
}
mbedtls_aes_free(&aes);
#endif
#endif
}
Grateful for help.
/Niklas A