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.

[参考译文] MSP430FR5994:使用用于ECB的DMA的AES加密

Guru**** 2553260 points
Other Parts Discussed in Thread: MSP-EXP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/588616/msp430fr5994-aes-encryption-using-dma-for-ecb

部件号:MSP430FR5994
主题中讨论的其他部件:MSP-EXP430FR5994

我正在使用DMA进行ECB加密。  我在加密静态缓冲区时发现一个异常问题:

UINT8_t加密缓冲器[64]=
{
0xFC,0x76,0x00,0x00,0x01, 0x5b,0x58,0xa7,
0x78,0x30,0x01,0x00,0x00, 0x01,0x5b,0x58,
0xa7,0x78,0x30,0x00,0x00, 0x00,0x00,0x40,
0x66,0x66,0x66,0x40,0x43, 0x52,0x82,0x1E,
0x52,0xD1,0x5e,0xc0,0x5e, 0x5a,0x19,0x29,
0x31,0x51,0xb2,0x3D,0xcc, 0xcc,0xcd,0x43,
0x03,0x51,0xec,0x40,0x16, 0x88,0x04,0x00,
0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x4c
; 

此缓冲区驻留在RAM中,与驻留在FRAM中的缓冲区相比,我得到不同的加密答案:
加密的RAM应答(错误):
22 f1 fe d0 94 da c2 1f ab e6 03 4c d4 64 d7 ee
F7 14 F8 C3 20 2b af ad ae 8d 1a 4F b0 3c 79 76
BF 10 5a E6 57 8d D3 67 D5 90 45 32 3e b0 86 A4
25 57 ea 72 fb a7 26 b6 bf 06 a0 d1 3e a6 da d5

加密FRAM答案(正确):
17 71 ff 8d f8 c1 50 d3 0d 4c c0 65 cb 27 5a 43
6a 2b df F7 44 EC b0 74 34 2c 6a B2 56 21 66 b0
F4 C8 C5 8e 86 7e AD 9b B3 ae 6d 46 da 30 74 be.
BD 1e ed 68 9b F4 4a D7 0f d6 8f 9f 9b 54 2a 7f


密钥是通用的:
const uint8_t default_AESkey_buffer [32]=
{
0x00,0x01,0x02,0x03,0x04, 0x05,0x06,0x07,
0x08,0x09,0x0A,0x0B,0x0C, 0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14, 0x15,0x16,0x17,
0x18,0x19,0x1A,0x1B,0x1C, 0x1D,0x1E,0x1F
; 

如果我将
encryptthisBuffer[]设置为const,则自IAR编译器将其放入FRAM (代码)内存后,它就可以工作。
但是如果它是全局静态分配的RAM缓冲区,我通过DMA加密引擎获取了错误的数据。


下面是IAR调试器中数据的一些图像片段(仅图像中加密数据的前5个字节):

错误:




良好:



我是不是干得干,做得不对,还是有问题?

谢谢!
-Jim Patten









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

    您是否可以共享仍然存在问题的缩小代码示例,以便我可以尝试在我的端生成它?

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

    这很奇怪,我把代码剥离到了main和DMA函数调用,所有的操作都是有效的。 我不确定我的项目到底发生了什么...某种内存问题还是IAR问题? 这款微型电脑有8K RAM,所以不能是RAM,我有IAR设置,用于堆栈大小为500深,我不进行任何动态内存分配。

    嗯,不确定。 我需要深入了解。
    谢谢!
    -Jim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jim:

    您认为这可能是编译器优化部分代码时的问题吗? 您是否尝试关闭优化和检查结果?

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

    不要这么认为,因为我在IAR上的优化设置为"无"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jim:

    很好的了解! 当您获得可与我共享的"工作"版本时,请告诉我。

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

    您是否能够在此问题上取得进一步进展?

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

    您好,Caleb,

    我有点放弃尝试去弄清楚。  我将input_buf声明为const,并将传递的缓冲区参数放入 绝对FRAM地址,从而使其正常工作。  

    就像我之前说过的那样,使用剥离的代码版本,将input_buf放入RAM 是可以的,但在我的完整项目中,我无法获得RAM缓冲区以正常工作。  我不知道是IAR,微型还是我的代码在做一些奇怪的事情。  我让它发挥作用并继续。

    以下是我的函数声明:

    void Aes256CbcDma(const uint8_t* input_buf, uint8_t* output_buf, const uint8_t* key,const uint8_t* init_vector,uint8_t mode, UINT16_t消息长度)

    感谢您的检查。

    -Jim

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

    这是一些奇怪的行为,我想进一步研究。 如果您愿意,您可以通过个人消息向我提交您拥有的任何表现出行为的代码。 您可以通过在E2E上请求我的友谊来完成此操作。 我将在我自己的设置中测试此操作,并告知您结果。 另外,我打算在MSP-EXP430FR5994 LaunchPad上运行此程序,因此最好消除任何外部硬件依赖性。

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

    您好,Caleb,

    当我在行动中休息一下时,我会尽最大努力让大家聚在一起。

    谢谢!

    -Jim