功能请求:Easy Enc_block

3个帖子/ 0新
最后一篇
oren.
离线
最后一次露面:6个月前1年
专家
加入:2014-06-28 22:03
功能请求:Easy Enc_block

你好,
我现在在SDK5中查看App_easy_Timer API。这是一个非常伟大的工具 - 无需想到消息,刚刚通过一个要在计时器到期时调用的回调(在这里有任何JavaScript开发人员?)。
在我们的应用程序中,我们使用GapM_USE_ENC_BLOCK_CMD和GAPM_USER_ENC_BLOCK_IND直接加密一些用户数据。
可以为加密块实现类似的API。与定时器不同,两个加密请求无法并行运行。因此,应该有加密请求和回调的队列(带有PUSH,POP和PEEK)。
可以调用该函数:

app_easy_encrypt_block(const uint8_t *操作数_1,const uint8_t *操作数_2,void(* fn)(const uint8_t *))

它可以返回一个布尔或UINT8_T,在发生故障时包含错误(例如,如果队列已满)。
调用函数时,它应该创建操作数_1,操作数_2和fn的结构元素,并尝试将其推向队列。
如果队列在此推送之前右侧空,则意味着没有并行加密 - 该函数应该向刚插入的操作数_1和操作数_2发送新的Gapm_user_enc_block_cmd。

当GAPM_USER_ENC_BLOCK_IND到达时,我们应该从队列中弹出一个元素,并将其保存在临时变量中(断言应确保队列不为空)。
然后,如果队列仍然不为空,我们应该窥视其头部并发送新的GAPM_USER_ENC_BLOCK_CMD以继续加密进程。
最后,我们应该将FN回调称为保存的元素,并使用GapM_USER_ENC_BLOCK_IND中的结果字段。

让我知道你对它的看法,
oren zomer.

关键词:
设备:
oren.
离线
最后一次露面:6个月前1年
专家
加入:2014-06-28 22:03
有什么消息

有关此功能有什么新闻吗?
我正在尝试了解SDK5的体系结构,并定影实现我的异步加密功能的正确方法。
我可以看到一些GAPM _.._ IND处理程序定义app_gap_process_handlers []在app_task.c中。
你认为我应该在那里添加gapm_user_enc_block_ind处理程序吗?
我看到它的方式,处理程序应该在app_task.c中实现并使用execute_callback_param来调用app_on_user_enc_block_ind.应该添加到app_callbacks.在app_callbacks.h和user_callback_config.h中,并参考user_app_on_user_enc_block_ind.......

我相信有很多努力将通用代码与应用程序特定的代码分开,因此喜欢我们的用户不必触摸Target_Apps目代之外的代码,但不幸的是仍然存在许多功能......

Joacimwe.
离线
最后一次露面:1年4个月前
格鲁鲁
加入:2014-01-14 06:45
AES硬件是闪电

AES硬件根据我闪电速度快,所以应该不需要异步地进行。
使用下面的此代码进行AES-ECB加密。它确保它不会与堆栈中的挂起加密碰撞。
假设所有参数都是大endian(AES标准的方式)且未逆转。

void加密(const uint8_t键[16],const uint8_t plaintext [16],uint8_t ciphertext [16]){
volatile uint8_t * plaintext_ptr =(volatile uint8_t *)0x80000 + jump_table_struct [offset_em_enc_plain];
vieltText_ptr =(易失性uint8_t *)0x80000 + jump_struct_struct [offset_em_enc_cipher];

uint8_t saved_data [16];
if(llm_le_env.enc_pend){
而(getword32(ble_aescntl_reg)== 1){}
memcpy(saved_data,(void *)ciphertext_ptr,16);
}

uint32_t key32aligned [4];
Memcpy(key32aligned,key,16);

setword32(ble_aeskey31_0_reg,__reg(key32aligned [3]));
setword32(ble_aeskey63_32_reg,__rev(key32aligned [2]));
setword32(ble_aeskey95_64_reg,__rev(key32aligned [1]));
setword32(ble_aeskey127_96_reg,__rev(key32aligned [0]));

for(int i = 0; i <16; i ++){
plaintext_ptr [i] =明文[15 - i];
}

setword32(ble_aesptr_reg,(uint32_t)(plaintext_ptr - 0x80000));

setword32(ble_aescntl_reg,1);
而(getword32(ble_aescntl_reg)== 1){}

memcpy(密文,(void *)ciphertext_ptr,16);

if(llm_le_env.enc_pend){
memcpy((void *)ciphertext_ptr,saved_data,16);
}
}