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.

[参考译文] TM4C129ENCPDT:在非连续存储器块上使用 SHAMD5 - SHA256

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/696595/tm4c129encpdt-shamd5---sha256-on-non-consecutive-memory-blocks

器件型号:TM4C129ENCPDT

你好

我希望在外部 SPI 闪存上的一系列存储器上运行 SHA256散列、这意味着我需要从 SPI 闪存读取大量存储器块、在每个块上运行 SHA256以获取最终散列。

我可以找到有关如何使用 SHAMD5库在单个连续存储器块上运行的大量示例、这种方法效果很好。

但是、我找不到任何示例说明我如何将散列值保持在多个块上以获得最终结果。

能够向我展示如何执行此操作的示例。

谢谢

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

    下面是一个使用 SHA256作为一个块的1024字节示例、然后又是16个64字节的块。 在此示例中、数据必须是64字节的倍数。

    /cfs-file/__key/communityserver-discussions-components-files/908/SHA256.zip

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

    您好 Bob

    感谢您的回答。

    当我等待回应时、我又亲自做了一些事情、并提出了以下几点:

    首先初始化硬件:

    SHAMD5Reset (SHAMD5_base);
    SHAMD5ConfigSet (SHAMD5_base、SHAMD5_算法 SHA256);
    SHAMD5LengthSet (SHAMD5_base、size);
    

    然后、我写入1个或多个64的块(可以被多次调用、直到达到完整的64字节块的末尾。

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //将64字节的块写入 SHAMD5
    //================================================================================================================
    void SH5DataWriteBlocks (uint32_t ui32Base、uint32_t * pui32Src、int BlockCount)
    {
    while (BlockCount > 0)
    {
    SHAMD5DataWrite (ui32Base、pui32Src);
    BlockCount--;
    pui32Src += 16;
    }
    // HAMD5DataWritlock
    

    最后、如果剩余的任何数据小于我调用的64字节

    //================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    //写入最后几个字节并关闭哈希值
    ,==================================================================================================================
    void SHAMD5DataWriteLast (uint32_t ui32Base、uint32_t * pui32Src、int length)
    {
    uint32_t ui32Counter;
    
    //等待模块准备好接受数据。
    while ((HWREG (ui32Base + SHAMD5_O_IRQSTATUS)& SHAMD5_INT_INPUT_READY)= 0)
    {
    //
    
    编写可用数据。
    对于(ui32Counter = 0;ui32Counter < length;ui32Counter += 4)
    {
    HWREG (ui32Base + SHAMD5_O_DATA_0_IN + ui32Counter)=* pui32Src++;
    }
    }// SHAMD5DataWriteLast
    

    然后、我等待它完成并将结果读取到合适的缓冲器中

    //等待输出就绪。
    while ((HWREG (SHAMD5_base + SHAMD5_O_IRQSTATUS)& SHAMD5_INT_OUTPUT 就绪)= 0)
    {
    //
    
    读取结果。
    SHAMD5ResultRead (SHAMD5_base、(uint32_t *) hash256);
    

    我已经使用 SHA1和 SHA256对此进行了测试、对我来说效果不错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这看起来是一个很好的解决方案。