我正在尝试从头开始编写一个 LoRaWAN 库。使用mbedtls/cmac.h中的函数mbedtls_cipher_cmac生成加入请求帧。我得到错误
未定义对“mbedtls_cipher_cmac”的引用
我在这篇文章中尝试了解决方案:AES-CMAC using mbedtls: undefined reference error by defined CONFIG_MBEDTLS_CMAC_C in my main.cpp file。
当我查看 esp_config.h 时,非活动区域着色(VSC 功能)确认现在定义了 MBEDTLS_CMAC_C,但是干净的构建仍然会出现未定义的参考错误。
我知道链接器找不到与 cmac.h 一起出现的相应 .cpp 文件,但是在这里我迷路了,因为我也找不到 aes.cpp,但是它构建得很好。我不知道 VSC 将 .cpp 文件存储在哪里。它们似乎是内置的,但在 PlatformIO 库选项卡中的搜索没有返回任何内容。这是我的代码(使用假的 appkey):
#define CONFIG_MBEDTLS_CMAC_C
#include <Arduino.h>
#include <mbedtls/cmac.h>
void setup() {
static const uint8_t APPKEY[] = {0xB6, 0xB5, 0x3F, 0x4A, 0x16, 0x8A, 0x7A, 0x88, 0xBD, 0xF7, 0xEA, 0x13, 0x5C, 0xE9, 0xCF, 0xCA};
uint8_t testPHYPayload[] = {0x00, 0xDC, 0x00, 0x00, 0xD0, 0x7E, 0xD5, 0xB3, 0x70, 0x1E, 0x6F, 0xED, 0xF5, 0x7C, 0xEE, 0xAF, 0x00, 0xC8, 0x86, 0x03, 0x0A, 0xF2, 0xC9};
unsigned char cmac[100] = {0};
const mbedtls_cipher_info_t* cipher_info;
cipher_info = mbedtls_cipher_info_from_type(MBEDTLS_CIPHER_AES_128_ECB);
mbedtls_cipher_cmac(cipher_info, APPKEY, 128, testPHYPayload, 19, cmac);
}
void loop() {
}