使用 mbedtls 的 AES-CMAC:未定义的引用错误

AES-CMAC using mbedtls: undefined reference error

本文关键字:引用 错误 未定义 AES-CMAC mbedtls 使用      更新时间:2023-10-16

我尝试使用mbedTLS实现AES-CMAC。我收到一些错误:

mbedtls_cipher_cmac_starts的未定义引用,对mbedtls_cipher_cmac_update的未定义引用,对mbedtls_cipher_cmac_finish的未定义引用,

为什么这些功能无法解决,即使mbedtls_cipher_initmbedtls_cipher_setup可以解决?

顺便说一句。我在同一项目下使用 mbedTLS 实现了 AES,没有问题。我使用 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_ECB );
    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 %dn",(int)d_len);
    for(i=0;i<d_len;i++)
    {
        printf("%x ",out1[i]);
    }

    return 0;
}

无论出于何种原因,CMAC 在默认配置中处于禁用状态。如果找到其他加密函数,但找不到 CMAC 函数,则一定是因为生成中未包含 CMAC 函数。

编辑config.h以取消注释#define MBEDTLS_CMAC_C并重建库。