2017-02-01 10 views
1

Я пытаюсь реализовать 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; 

} 
+0

Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- внешний символ ошибка и-как-делать-я-фикс) – Biffen

ответ

0

По какой-то причине, КЦР отключена в default configuration. Если найдены другие крипто-функции, но не функции CMAC, это должно быть потому, что функции CMAC не были включены в вашу сборку.

Редактировать config.h uncomment #define MBEDTLS_CMAC_C и перестроить библиотеку.