This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2651R3:在 CC2651R3上进行 AESCCM 加密/解密所需的帮助

Guru**** 2331900 points
Other Parts Discussed in Thread: CC2651R3, CC2651P3
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1464559/cc2651r3-assistance-required-for-aesccm-encryption-decryption-on-cc2651r3

器件型号:CC2651R3
主题中讨论的其他器件: 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、加密失败。

您能协助我完成以下工作吗

  1. 在该环境中初始化和使用 AESCCM 的正确配置步骤或示例代码。
  2. AESCCM_oneStepEncrypt()函数无法生成正确加密数据的常见原因。
  3. 可解决此问题的调试步骤或故障排除提示。

感谢您的支持。

此致、
Aarohi Shirbavikar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Aarohi 

    感谢您共享代码。

    您是否要从 SDK 示例开始?
    https://dev.ti.com/tirex/explore/node?node=A__AJOAPDnkx00C8yQ4dAYzbw__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST

    您能否确认来自该 SDK 示例的代码在您的 CC2651上正常运行? (请注意、使用 UART 环回、因此您需要在 UART RX 和 TX 引脚之间连接一根跳线)。
    此外、您使用的是定制电路板还是 TI EVM?

    谢谢!
    Toby

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 TI 支持团队:

    非常感谢您的答复。

    可以、我正在将定制电路板的示例代码从 CC2651P3移植到 CC2651R3。 在实现此功能时、我选择在没有 UART 的情况下驱动代码、而不是使用定制编写的代码进行数据共享。

    作为此实现的一部分、我将使用 AESCrM 驱动程序对数据进行加密和解密。 在初始实现中、加密和解密过程通过对称密钥交换正常运行。

    现在、我要将此加密功能集成到 CC2651R3的 BLE 代码中。 但是,我遇到了一个问题,代码在加密期间卡在 AESCCM_oneStepEncrypt ()函数中。

    您能否提供有关解决此问题的指导? 非常感谢您针对在 CC2651R3上将 AESCrM 驱动程序与 BLE 结合使用而提出的任何具体注意事项或调试建议。

    感谢您的帮助!

    此致、

    Aarohi Shirbavikar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    现在、我将此加密功能集成到 CC2651R3的 BLE 代码中。

    如果您未在 BLE 环境中运行、该功能是否有效?

    谢谢!
    Toby