AES-CMAC с использованием mbedtls: неопределенная ошибка ссылки

Я пытаюсь реализовать AES-CMAC с помощью mbedTLS. Я получаю некоторые ошибки:

неопределенная ссылка на mbedtls_cipher_cmac_starts, неопределенная ссылка на mbedtls_cipher_cmac_update, неопределенная ссылка на mbedtls_cipher_cmac_finish,

Почему эти функции не могут быть разрешены, хотя mbedtls_cipher_init и mbedtls_cipher_setup могут?

КСТАТИ. Я внедрил AES в том же проекте, используя mbedTLS, без проблем. Я использую Эклипс Нано.

Вот мой код:

#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 %d\n",(int)d_len);
    for(i=0;i<d_len;i++)
    {
        printf("%x ",out1[i]);
    }


    return 0;

}

person malievci    schedule 01.02.2017    source источник
comment
ВНИМАНИЕ: здесь я исправил ошибку cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_128_ECB); должен быть режим ECB, а не режим CBC, c.f. tls.mbed.org/api/cmac_8h.html#ae5835d528bbfec2ae2452ba4617469b8   -  person evildead    schedule 27.06.2019


Ответы (1)


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

Отредактируйте config.h, чтобы раскомментировать #define MBEDTLS_CMAC_C и перестроить библиотеку.

person Gilles 'SO- stop being evil'    schedule 16.10.2017