无法使用AES硬件加密块

6个职位/ 0个新职位
最后发表
ankitdaf
离线
最后看到:2年11个月前
加入:2015-09-03 20:14
无法使用AES硬件加密块

我正在尝试使用AES硬件加密一些用户数据,基于BLE应用程序的骨干

我已经浏览了剩下的论坛文档,但没有帮助。

我的代码如下:

struct gapm_use_enc_block_cmd *enccmd = KE_MSG_ALLOC(gapm_use_enc_block_cmd, TASK_GAPM, TASK_APP, gapm_use_enc_block_cmd);
enccmd - >操作= GAPM_USE_ENC_BLOCK;
编号[16]= {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
Uint8_t pt[16] = {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
关键,memcpy (enccmd - > operand_1 16);
memcpy (enccmd - > operand_2、pt、16);
ke_msg_send (enccmd);

这是在user_app_init()的底部;

---

我在user_catch_rest_hndl中添加了这个

案例GAPM_USE_ENC_BLOCK_IND:

Struct gapm_use_enc_block_ind const *msg_param = (Struct gapm_use_enc_block_ind const *) (param);
uint8_t密文[16];
memcpy(密文,msg_param - >结果,16);
If(密文[0]== 0x01) {
密文[0]+ +;

If(密文[0]== 0x01) {
——密文[0];


打破;

我添加了断点,但似乎从来没有捕获到消息。你能帮我弄清楚我遗漏了什么/做错了什么吗?

谢谢

关键词:
设备:
LC_Dialog
离线
最后看到:1个月6天前
工作人员
加入:2016-09-19 23:20
你好ankitdaf,

你好ankitdaf,

我目前正在审阅您的询问,并将就此回复您。

问候,

信用证

ankitdaf
离线
最后看到:2年11个月前
加入:2015-09-03 20:14
更新:

更新:

我明白了,我猜一些组件在user_app_init返回之前没有初始化,所以调用gapm_use_enc_block_cmd失败,因为它需要那些组件。号召它在广告上开始或完成工作都很好。

我现在有一个不同的问题。如果我想加密整个数据块,比如64字节,是否有一种“阻塞”的方式来做到这一点?目前,它发生在一个调用-回调模式,这是相当麻烦的跟踪。是否可以调用硬件加密块,然后等待结果再继续?

谢谢

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
是的。查看我的帖子在https:/
ankitdaf
离线
最后看到:2年11个月前
加入:2015-09-03 20:14
谢谢,现在尝试一下!

谢谢,现在尝试一下!

我想知道你能不能解释一下其中的一些陈述。你做这几件事的确切原因我不太清楚。

1.对于直接写入的低级寄存器有文档吗?(如。BLE_AESKEY31_0_REG BLE_AESCNTL_REG等)

2.
Volatile uint8_t* plaintext_ptr = (Volatile uint8_t*)0x80000 + jump_table_struct[offset_em_enc_plain];
Volatile uint8_t* ciphertext_ptr = (Volatile uint8_t*)0x80000 + jump_table_struct[offset_em_enc_cipher];

为什么上面的两个指针地址是这样的?
他们是如何被选中的?

我想我遗漏了一些东西,一些文档或理解,并且希望更好地理解这个系统。

非常感谢您的帮助!

谢谢!

Joacimwe
离线
最后看到:1年7个月前
大师
加入:2014-01-14 06:45
没有那么多

没有比datasheet.h里面的文档多的文档。但是,字段名作为文档应该已经足够了。BLE_AESKEYX_X_REG持有密钥,BLE_AESCNTL_REG只持有一个名为AES_START的位(在写1时启动加密,在加密进行时读取1)。BLE_AESPTR_REG包含明文和密文(连续在内存中)的内存地址,设置为(volatile uint8_t*)0x80000 + jump_table_struct[offset_em_enc_plain]。它可以包含0x80000段中的任何RAM地址,因此这只是一个任意选择的区域。