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.

[参考译文] CC1312R:如果数据长度大于512字节且不是64的倍数、则 contiki 上的 SHA2会导致崩溃

Guru**** 2563960 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/972362/cc1312r-sha2-on-contiki-results-in-crash-if-data-length-is-larger-then-512-bytes-and-not-a-multiple-of-64

器件型号:CC1312R

我正在尝试计算闪存中大块的 SHA256哈希、但它始终会使器件崩溃。 因此我开始实验、当您尝试散列大于512字节的数据而不是64字节的倍数时、似乎会崩溃

以下简化代码会导致器件崩溃和重新启动。

SHA2_Params 参数;
SHA2_Handle handle;
SHA2_Params_init (&params);
params.returnBehavior = SHA2_return_Behavie_blocking;
SHA2_open (0、 params);
SHA2_setHashType (handle、SHA2_hash_type_256);

uint8_t buffer1[512];
uint8_t buffer2[19];
SHA2_addData (handle、(unsigned char *) buffer1、512);
SHA2_addData (handle、(unsigned char *) buffer2、19);
SHA2_finalize (handle、digest); 

如果我删除 buffer2、则一切都正常、并计算哈希值

如果我将缓冲区2的长度更改为64字节、那么它也会起作用。

如果我删除 buffer1并且只删除哈希缓冲区2、那么它也会起作用

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

    你(们)好

    有关 Contiki 支持、请访问

    BR

    Siri

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

    但这是 coresdk 中的 SHA2驱动程序的问题,contiki 不支持,这是 TI 代码!

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

    我已尝试测试您随 SDK 发送的代码、但看不到任何问题。

    如果我们要弄清楚正在发生的情况、我们需要一种复制您所看到的内容的方法:

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您忘记了对 SHA2_finalize 的函数调用、崩溃发生在该行上。 contiki 中的 coresdk 也不是最新版本。 因此、可能是这样、但我在 changelog 中没有看到任何与 SHA2相关的东西。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您忘记了显示什么摘要被定义为:-)

    它未在您发送的代码中定义。

    在您发送的代码片段中,您也没有显示任何 SHA2_init();但我假设您已经在某处实现了它。

    请向我发送测试此测试所需的所有代码、以便我们知道我们正在测试相同的代码

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    uint8_t digit[SHA2_Digit_length_bytes_256];
    SHA2_init ();
    SHA2_Params params;
    SHA2_Handle handle;
    SHA2_Params_init (&params);
    Params.returnBehavior = SHA2_return_Behavie_blocking;
    SHA2_open (0、&params);
    SHA2_setHashType (handle、SHA2_hash-type_256);
    
    uint8_t buffer1[512];
    uint8_t buffer2[19];
    SHA2_addData (handle、buffer1、512);
    SHA2_addData (handle、buffer2、19);
    SHA2_finalize (handle、digest);
    SHA2_Close (句柄); 

    是的、程序启动时调用 init、抱歉我忘记了摘要的定义。

    contiki 中的 coresdk 版本似乎也是版本  4.10.02 2019年5月29日 TI 员工最后一次推送。

    ti 是否有责任更新 coresdk 版本、或者 contiki 社区是否应该这样做? 因此、我知道从何处获取此 SDK 版本的更新。

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

    我使用这两种方法测试了以下代码

    simplelink_cc13x2_26x2_SDK_3_10_00_53 (内核 SDK 4.10.01.00)

    simplelink_cc13x2_26x2_SDK_4_30_00_54 (内核 SDK 5.30.00.30)

    我没有看到其中任何一个问题:

    #include 
    #include 
    
    void * mainThread (void * arg0)
    {
    
    SHA2_Params 参数;
    SHA2_Handle 句柄;
    int_fast16_t 结果;
    
    uint8_t digest[SHA2_Digest_length_Bytes_256];
    
    SHA2_init();
    
    SHA2_PARAMS_INIT (params);
    Params.returnBehavior = SHA2_return_Behavie_blocking;
    句柄= SHA2_open (0、params);
    结果= SHA2_setHashType (handle、SHA2_hash-type_256);
    if (结果!= SHA2_STATUS_SUCCESS)
    while (1);
    
    uint8_t buffer1[512];
    uint8_t buffer2[19];
    
    结果= SHA2_addData (handle、(unsigned char *) buffer1、512);
    if (结果!= SHA2_STATUS_SUCCESS)
    while (1);
    
    结果= SHA2_addData (handle、(unsigned char *) buffer2、19);
    if (结果!= SHA2_STATUS_SUCCESS)
    while (1);
    
    结果= SHA2_finalize (句柄、摘要);
    if (结果!= SHA2_STATUS_SUCCESS)
    while (1);
    
    SHA2_Close (句柄);
    
    while (1);
    } 

    如果我无法在我的一侧重现任何错误、这可能会有点难调试。 也许您可以使用我们的空示例来解决此问题、看看您是否能够在您的一侧重现故障。

    BR

    Siri

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

    嗯、你是对的、我安装了 code composer studio 并使用最旧的 SDK 进行了尝试、该 SDK 应与 contiki 中使用的 coresdk 版本相匹配、并且可以正常工作。

    因此、这似乎是 contiki 的问题、我将在这里进行介绍。