|
本人最近在使用ATECC608A与STM32F4做耗材加密验证的东西,我打算使用AES对称加密解密来进行耗材使用数据的读写,数据存储在ATECC608A内部的EEPROM中,我将ATECC608A的库移植好后将配置区域配置并锁存后,可以正常使用库函数读设备ID、配置寄存器的数据、生成随机数等操作,但是在使用AES相关函数做AES加解密时却总是报错f4,所以想请教下有没有用过ATECC608的大佬指点一下;
ATECC608A的配置如下:
const uint8_t ecc608_configdata[ATCA_ECC_CONFIG_SIZE] = {
0x01, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00,
ECC608A_ADDRESS, 0x00, 0x00, 0x01, 0x85, 0x00, 0x82, 0x00, 0x85, 0x20, 0x85, 0x20, 0x85, 0x20, 0x8F, 0x46,
0x8F, 0x0F, 0x9F, 0x8F, 0x0F, 0x0F, 0x8F, 0x0F, 0x0F, 0x8F, 0x0F, 0x8F, 0x0F, 0x8F, 0x0F, 0x0F,
0x0D, 0x1F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, 0x00, 0x69, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0E, 0x60, 0x00, 0x00, 0x00, 0x00,
0x53, 0x00, 0x53, 0x00, 0x73, 0x00, 0x73, 0x00, 0x73, 0x00, 0x38, 0x00, 0x7C, 0x00, 0x1C, 0x00,
0x3C, 0x00, 0x1A, 0x00, 0x1C, 0x00, 0x10, 0x00, 0x1C, 0x00, 0x30, 0x00, 0x12, 0x00, 0x30, 0x00
};
AES加密读写测试函数:
void AES_encrypt_test(void){
ATCA_STATUS status;
uint8_t slot = 9;
uint8_t plaintext[16] = "Hello ATECC608A";
uint8_t ciphertext[16] = {0};
uint8_t aes_key[32] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
status = atcab_write_bytes_zone(ATCA_ZONE_DATA,slot,0x00,aes_key,32);
if (status != ATCA_SUCCESS) {
printf("Error: writing AES key to data zone:%x.\n",status);
}
status = atcab_aes_encrypt(slot, 0, plaintext, ciphertext);
/* 使用ATECC608A进行AES加密 */
status = atcab_aes_encrypt(slot, 0, plaintext, ciphertext);
if (status != ATCA_SUCCESS) {
/* 加密失败,这里需要处理错误 */
printf("加密失败,错误码:%x\r\n",status);
}
/* 打印加密前和加密后的文本 */
printf("Plaintext: %s\r\nCiphertext: ", (char*)plaintext);
for (int i = 0; i < sizeof(plaintext); i++) {
printf("%02x ", ciphertext );
}
}
串口打印的东西:

我使用AES相关函数报错F4,写入槽的东西也不能正常读出,读的时候也是报错F4;
请教下各位大佬,指导一下,万分感谢
|
|