Я пытаюсь реализовать AES-CMAC с использованием mbedTLS. я получаю некоторые ошибки:AES-CMAC с использованием mbedtls: неопределенная опорная ошибка
неопределенная ссылка на
mbedtls_cipher_cmac_starts
, неопределенная ссылка наmbedtls_cipher_cmac_update
, неопределенная ссылка наmbedtls_cipher_cmac_finish
,
Почему бы не эти функции будут решены, хотя mbedtls_cipher_init
и mbedtls_cipher_setup
мог?
BTW. Я реализовал AES по тому же проекту, используя mbedTLS без проблем. Я использую Eclipse Nano.
Вот мой код:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "openssl/evp.h"
#include "openssl/cmac.h"
#include "mbedtls/cmac.h"
#include "mbedtls/cipher.h"
using namespace std;
unsigned char key[16]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
int main()
{
unsigned char m[100],m_len=32;
unsigned char out[16],out1[16],out2[16];
size_t d_len;
int i,ret;
mbedtls_cipher_context_t m_ctx;
const mbedtls_cipher_info_t *cipher_info;
cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_128_CBC);
if(cipher_info==NULL)
printf("\nmbedtls_cipher_info_from_type failed");
mbedtls_cipher_init(&m_ctx);
ret=mbedtls_cipher_setup(&m_ctx, cipher_info);
printf("\n mbedtls_cipher_setup returned %d %d",ret, m_ctx.cipher_info->type);
ret=mbedtls_cipher_cmac_starts(&m_ctx,key,128);
printf("\n mbedtls_cipher_cmac_starts returned %d",ret);
ret= mbedtls_cipher_cmac_update(&m_ctx, m,m_len);
printf("\n mbedtls_cipher_cmac_update returned %d",ret);
ret=mbedtls_cipher_cmac_finish(&m_ctx,out1);
printf("\n mbedtls_cipher_cmac_starts returned %d",ret);
d_len=16;
printf("\nLength is %d\n",(int)d_len);
for(i=0;i<d_len;i++)
{
printf("%x ",out1[i]);
}
return 0;
}
Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- внешний символ ошибка и-как-делать-я-фикс) – Biffen