您好! 具有一个具有自定义引导加载程序、引导加载程序区域- 0至0x5000的项目。 计划-下文。 一切在生产,良好和稳定。 使用 NoRTOS 构建的引导加载程序、对 RTOS 进行编程。 现在、我想 对射频数据进行 AESCCM 操作并发现一个问题。 当我对完整程序数据进行加密时-引导加载程序和主代码、接收器 端的 CryptoCC26XX_TRANSITION 返回错误、在存储器中没有引导加载程序而器件没有启动时-如果器件启动时出现引导加载程序错误、则一切正常。 事实上、借助引导加载程序 CryptoCC26XX_TRANSITION 使用错误的密钥加密消息、我比较了这两种情况的结果。 引导加载程序中没有加密库。 加密代码(仅用于测试)
:
memcpy(txPacket.payload,"12345678901111",14); //message
memcpy(&txPacket.payload[14],"123456789011",12);// nonce
txPacket.len=26;
// MAC_LENGHT (4)
// NONCE_LENGHT (12)
if((crypto_keyIndex = CryptoCC26XX_allocateKey(crypto_handle, CRYPTOCC26XX_KEY_ANY, (const uint32_t *) "qwertyuiop[]asd"))== CRYPTOCC26XX_STATUS_ERROR) while (1);
CryptoCC26XX_Transac_init((CryptoCC26XX_Transaction *) &crypto_trans, CRYPTOCC26XX_OP_AES_CCM_ENCRYPT);
crypto_trans.keyIndex = crypto_keyIndex;
crypto_trans.authLength = MAC_LENGHT;
crypto_trans.nonce = (char *) txPacket.payload[txPacket.len-(NONCE_LENGHT)];//
//crypto_trans.header = NULL;//(char *) txPacket.dstAddr;
crypto_trans.fieldLength = 3;
crypto_trans.msgInLength = txPacket.len-NONCE_LENGHT-MAC_LENGHT;
crypto_trans.headerLength = 0;//HDR_LENGHT;
crypto_trans.msgIn = (char *) txPacket.payload; // Message is encrypted in place
crypto_trans.msgOut = (char *) &(txPacket.payload[txPacket.len-NONCE_LENGHT-MAC_LENGHT]); // MAC will be written to this position
if( CryptoCC26XX_transact(crypto_handle, (CryptoCC26XX_Transaction *) &crypto_trans) != CRYPTOCC26XX_STATUS_SUCCESS) while (1);
if(CryptoCC26XX_releaseKey(crypto_handle, &crypto_keyIndex) != CRYPTOCC26XX_STATUS_SUCCESS ) while (1);*/
status=EasyLink_transmit(&txPacket);
if ((status == EasyLink_Status_Success))
{
GPIO_toggle(Board_GPIO_LED0);
UART_write(uart, "send\n\r", 6);
// rxPacket.payload[3]
}