AES-CMAC
嵌入式业务场景可能使用AES-CMAC。
例如蓝牙场景下 CCM = CTR + CMAC。
示例代码
https://github.com/abbypan/crypto-utils/tree/master/aes-cmac
#include <stdio.h>
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/cmac.h>
int main(int argc, char *argv[])
{
long key_len;
unsigned char *key = OPENSSL_hexstr2buf(argv[1], &key_len);
long data_len;
unsigned char *data = OPENSSL_hexstr2buf(argv[2], &data_len);
unsigned char mac[16] = {0};
size_t mac_len;
CMAC_CTX *ctx = CMAC_CTX_new();
CMAC_Init(ctx, key, 16, EVP_aes_128_cbc(), NULL);
CMAC_Update(ctx, data, data_len);
CMAC_Final(ctx, mac, &mac_len);
char *mac_hexstr = OPENSSL_buf2hexstr(mac, (long) mac_len);
printf("key_hexstr: %s\ndata_hexstr: %s\naes-128-cmac_hexstr: %s\n", argv[1], argv[2], mac_hexstr);
CMAC_CTX_free(ctx);
OPENSSL_free(key);
OPENSSL_free(data);
OPENSSL_free(mac_hexstr);
return 0;
}
测试用例
RFC4493
K 2b7e1516 28aed2a6 abf71588 09cf4f3c
M 6bc1bee2 2e409f96 e93d7e11 7393172a
ae2d8a57 1e03ac9c 9eb76fac 45af8e51
30c81c46 a35ce411
AES-CMAC dfa66747 de9ae630 30ca3261 1497c827