主题中讨论的其他器件: CC2651P3
工具与软件:
尊敬的 TI 支持团队:
我正在使用 CC2651R3微控制器的项目中、遇到了 AESCCM 加密功能的问题。 下面是我的开发环境和面临的问题的详细信息:
- 微控制器上 :CC2651R3
- SDK 版本 : simplelink_cc13xx_cc26xx_sdk_7_41_00_17.
- 开发环境 :Code Composer Studio (CCS)版本12.7.
- 基本代码 : Project Zero.
我将使用 AES 驱动程序进行加密和解密。 该AES_init()
函数成功执行、但在使用该AESCCM_oneStepEncrypt(handle, &operation);
函数时无法获取正确的加密值。
以下是我的加密代码流程:
静态 CryptoKey 对称密钥;
void TX_mainTaskFunc (void){
AESCCM_Handle 句柄;
AESCCM_操作操作;
int_fast16_t 状态;
/*初始化所有 CryptoKeys */
CryptoKeyPlaintext_initBlankKey (&txPublicKey、txPublicKeyMaterial、public_key_length);
CryptoKeyPlaintext_initBlankKey (&txPrivateKey、txPrivateKeyMaterial、PRIVATE_KEY_LENGTH);
CryptoKeyPlaintext_initBlankKey (&sharedSecretKey、sharedSecretKeyMaterial、public_key_length);
CryptoKeyPlaintext_initBlankKey (&symmetricKey、symmetricKeyMaterial、AES_KEY_LENGTH);
CryptoKeyPlaintext_initKey (&rxPublicKey、rxPublicKeyMaterial、public_key_length);
/*加密短语"这是明文"并将其传输*/
txPacket[packet_ident_Byte]= encrypted_packet;
txPacket[packet_length_Byte]= encrypted_packet_length;
//每次发送消息时递增唯一的随机数
com_inumentNonce (nonce、NONCE_LENGTH);
memcpy (&txPacket[header_length]、nonce、NONCE_LENGTH);
/*调试:打印随机数*/
printf ("tx 随机数:");
对于(SIZE_t I = 0;I < NONCE_LENGTH;i++){
printf ("%02x "、nonce[i]);
}
printf ("\n");
/*初始化加密*/
句柄= AESCCM_OPEN (CONFIG_AESCM0、NULL);
printf ("AESCCM 句柄值:%p\n"、句柄);
if (handle == NULL){
printf ("AESCCM 初始化失败\n");
while (1){}
}
AESCCM_Operation_init (&operation);
operation.key =对称密钥(&M);
operation.aad = txPacket;
operation.aadLength = header_length;
operation.nonce =&txPacket[header_length];
operation.nonceLength = NONCE_LENGTH;
operation.input =(uint8_t *) msgBuffer;
operation.inputLength = message_length;
operation.output =&txPacket[header_length + NONCE_LENGTH];
operation.Mac =&txPacket[header_length + NONCE_length + message_length];
operation.macLength = MAC_LENGTH;
/*执行加密事务*/
encryptionResult = AESCCM_oneStepEncrypt (handle、&operation);
if (encryptionResult!= AESCCM_STATUS_SUCCESS){
printf ("加密失败、错误代码:%d\n"、encryptionResult);
while (1){}
}
AESCCM_Close (句柄);
/*调试:打印加密的数据包*/
printf ("TX 加密数据包:");
对于(size_t i = 0;i < encrypted_packet_length;i++){
printf ("%02x "、txPacket[i]);
}
printf ("\n");
/*将加密数据包发送到 RX 任务*/
com_sendPacket (txPacket、encrypted_packet_length);
}
如果我注释掉对称密钥操作、则的值encryptionResult
变为-1
、加密失败。
您能协助我完成以下工作吗 :
- 在该环境中初始化和使用 AESCCM 的正确配置步骤或示例代码。
- 该
AESCCM_oneStepEncrypt()
函数无法生成正确加密数据的常见原因。 - 可解决此问题的调试步骤或故障排除提示。
感谢您的支持。
此致、
Aarohi Shirbavikar