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.

[参考译文] RTOS/CC1350STK:CryptoCC26XX.h AES128 ECB 不工作

Guru**** 2815215 points

Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/707434/rtos-cc1350stk-cryptocc26xx-h-aes128-ecb-not-working

器件型号:CC1350STK
Thread 中讨论的其他器件:CC2650

工具/软件:TI-RTOS

大家好、我在使用 CryptoCC26XX.h 库进行加密时遇到问题。 我执行了该 示例 dev.ti.com/.../_crypto_c_c26_x_x_8h.html 中的所有操作、但它不起作用。

变量状态= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);获取始终值1且值为0、这意味着加密失败。

代码如下:  

/* for usleep()*/
#include 
#include 
#include 

#include 
#include 
#include 
#include 

#include 
#include 

/*板头文件*/
#include "Board.h"

void encrypt();
void decrypt ();

typedef struct
{
uint8_t key[16]; //存储 AES 密钥
加密 CC26XX_KeyLocation 密钥位置;//密钥 RAM
uint8_t cleartext[AES_ECb_length]中的位置;//输入消息- cleartext
uint8_t msgOut[AES_ECb_length]; //输出消息
} AESECBExample;

AESECBExample ecbExample =
{
0x2B、0x7E、0x15、0x16、0x28、 0xAE、0xD2、0xA6、
0xAB、0xF7、 0x15、0x88、0x09、0xCF、0x4F、 0x3C}、
CRYPTOCC26XX_KEY_0、
{"t"、"h"、"i"、"S"、"i"、"a"、"p"、"l"、"a"、"a"、"i"、"n"、"t"、"e"、"x"、"t"、"t"}、
{0x0、0x0 0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0}
};

CryptoCC26XX_handle 句柄;
int32_t KeyIndex;
Int32_t status;
CryptoCC26XX_AESECB_Transaction trans;

void encrypt()//memcpy (ecbExample.cleartext、data、16); //memcpy (data、ecbExample.msgOut、16);如果您不想直接使用结构
{
CryptoCC26XX_transac_init ((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_TRANS_Index);//初始化事务
//设置事务处理。



* crypto_intract.text = CC26XX_tract_tran.tran.tran.tract.tran.tran.tran.cc32= CC26xx (transcal.tran.tran.tran.tran.tran.transcal.tran.tran.tran.tran.tran.tran.cc32= CC26xx


system_abort ("加密失败。\n");
}


void decring()
{
CryptoCC26XX_transac_init (((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_ECB_trdecrypt);// clearexceed.keyIndex

=


cyIndex;Initialize.msgample = 0xt_out.tran.text = clearmsOut_extran.tran.tran.tran.u.text = clearb.eSb (在
原始 ECB 文本之前)、tran.tran.tran.tran.tran.tran.tran.tran.tran.tran.tran.text = clearmsect_tran.tran.tran.tran.tran.tran.text =
//使用 AES ECB 状态对明文进行解密
= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);
if (status!= CRYPTOCC26XX_STATUS_SUCCESS){
System_abort ("加密失败.\n");
}

void * mainThread (void Cryptoarg0)
{CC26XX_status_open/CC26XX

(Crypto/CC26XX)/init/crto handle (
crto open/CC26XX);}void * Crypto/CC26XX (crto handle CC26XX_open/init (crto handle)。
如果(!handle) System_abort ("无法打开加密模块。\n");

keyIndex = CryptoCC26XX_allocateKey (handle、ecbExample.keyLocation、(const uint32_t *) ecbExample.key);
if (keyIndex = CRYPTOCC26XX_STATUS_ERROR) System_Abort Key ("未分配)。
uint32_t 时间= 1;/* 1秒延迟*/

/*调用驱动程序初始化函数*/
GPIO_init();
// I2C_init ();
// SDSPI_init ();
// spi_init();
// uart_init();
// Watchdog_init();
/*配置 LED 引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*打开用户 LED */
//GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);

while (1){
睡眠(时间);
GPIO_toggle (Board_GPIO_LED0);
encrypt();
printf ("encrypted\n");
decrypt ();
printf ("deced\n");
}
}

是否有人知道为什么它不起作用?

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

    我在这里编写了一些代码: e2e.ti.com/.../581133

    以下是使用 CCM 的示例: e2e.ti.com/.../641353
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我知道不推荐使用它、但我只需要它来测量功耗、所以这并不重要。
    当我参考库文档中的示例时、了解我的错误会非常有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用哪种加密模式无关紧要、我建议您运行我链接到的 CCM 代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我实际上需要为我的项目使用 ECB、很抱歉、我不够清楚
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于我使用 的是 dev.ti.com/.../_crypto_c_c26_x_x_8h.html 中的代码 、我不确定它为什么不起作用。

    来自同一链接的 CCM 示例在我的项目中也不起作用

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

    当我在某一点调试我时、我会得到该错误;
    无法在"C:\Jenkins\Jobs\FWGroup-DriverLib\workspaces\modules\output\cc13xx_cha_2_0_ext\driverlib\bin\ccs/./../../../driverlib/crypto.c 中找到源文件

    请帮帮我。 我必须安装哪些驱动程序?

    另请注意、它正在 Jenkins 用户处查找文件、因为我是唯一的用户、所以我的 PC 上不存在该文件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以尝试使用最新的 SDK 执行此操作吗? Jenkins 是我们一方的构建服务器、您在导入代码时不应对此有任何引用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在 Resource Explorer 主页上使用了最新的 SDK、但问题仍然相同。
    安装了以下版本:
    SimpleLink CC13x0 SDK 2.20.00.38
    适用于 CC2650的 TI-RTOS 2.21.00.06

    我是否必须卸载这两个选项中的一个? 我使用了 CC13x0 SDK 中的空项目模板。

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

    您必须检查项目使用的是哪一个:

    工程属性:常规:

    (我打开的随机项目示例)

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

    这是屏幕截图

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、是否有任何方法可以解决这个问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    *==== empty.c ======
    //
    
    //* for usleep()*/
    #include 
    #include 
    #include 
    #include 
    #include 
    
    /*驱动程序头文件*/
    #include 
    #include 
    //#include 
    //#include 
    //#include 
    //#include 
    //#include 
    
    /*板头文件*/
    #include "Board.h"
    #include 
    
    // AES-ECB 示例结构
    typedef 结构
    {
    uint8_t key[16]; //存储 AES 密钥
    CryptoCC26XX_KeyLocation 密钥位置;//密钥 RAM 中的位置
    uint8_t cleartext[AES_ECb_length];//输入消息- cleartext
    uint8_t msgOut[AES_ECb_length]; //输出消息
    } AESECBExample;
    
    // AES ECB 示例数据
    AESECBExample ecbExample =
    {
    {0x2B、0x7E、0x15、0x16、0x28、 0xAE、0xD2、0xA6、
    0xAB、0xF7、0x15、0x88、0x09、 0xCF、0x4F、0x3C}、
    CRYPTOCC26XX_KEY_0、
    {'t'、'h'、'i'、's'、'i'、's'、'a'、'l'、'a'、'i'、'n'、't'、'e'、'x'、't'}、
    {0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0、0x0、 0x0、0x0、0x0、0x0、0x0、 0x0 }
    ;
    
    
    
    /*
    === mainThread ====
    //
    void * mainThread (void * arg0)
    {
    //声明(通常在任务中完成)
    CryptoCC26XX_handle 句柄;
    内部32_t KeyIndex;
    内部32_t 状态;
    CryptoCC26XX_AESECB 事务传输;
    
    //初始化 Crypto 驱动程序
    CryptoCC26XX_init();
    
    //尝试打开 CryptoCC26XX。
    Handle = CryptoCC26XX_open (Board_CRYPTO0、false、NULL);
    如果(!handle){
    system_abort ("无法打开加密模块。");
    }
    
    KeyIndex = CryptoCC26XX_allocateKey (handle、ecbExample.keyLocation、
    (const uint32_t *) ecbExample.key);
    if (keyIndex =CRYPTOCC26XX_STATUS_ERROR){
    system_abort ("未分配密钥位置");
    }
    
    //初始化事务
    CryptoCC26XX_transac_init ((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_ECB_encrypt);
    
    //设置事务
    TRANS.keyIndex = keyIndex;
    TRANS.msgIn =(uint32_t *) ecbExample.cleartext;
    TRANS.msgOut =(uint32_t *) ecbExample.msgOut;
    
    
    //使用 AES ECB 加密明文
    状态= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);
    if (status!= CRYPTOCC26XX_STATUS_SUCCESS){
    System_abort ("加密失败");
    }
    
    //初始化事务
    CryptoCC26XX_transac_init ((CryptoCC26XX_Transaction *)&trans、CRYPTOCC26XX_OP_AES_ECB_Decrypt);
    
    //设置事务
    TRANS.keyIndex = keyIndex;
    TRANS.msgIn =(uint32_t *) ecbExample.msgOut;
    TRANS.msgOut =(uint32_t *) ecbExample.cleartext;
    
    //在将 cypher 文本解密到 ecbExample.cleartext 数组之前,将原始清除文本归零
    memset (ecbExample.cleartext、0x0、AES_ECB_LENGTH);
    
    //使用 AES ECB 解密明文
    状态= CryptoCC26XX_transact (handle、(CryptoCC26XX_Transaction *)&trans);
    if (status!= CRYPTOCC26XX_STATUS_SUCCESS){
    System_abort ("加密失败");
    }
    
    CryptoCC26XX_releaseKey (句柄、&keyIndex);
    
    
    /* 1秒延迟*/
    uint32_t 时间= 1;
    
    /*调用驱动程序初始化函数*/
    GPIO_init();
    // I2C_init ();
    // SDSPI_init ();
    // spi_init();
    // uart_init();
    // Watchdog_init();
    
    /*配置 LED 引脚*/
    GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
    /*打开用户 LED */
    GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
    
    while (1){
    睡眠(时间);
    GPIO_TOGGLE (Board_GPIO_LED0);
    }
    }
    

    我刚刚将 crypto.h 中的代码复制到 CC13x0 SDK 2.20中的空示例中、看起来它的工作原理如下: