当设备处于扫描模式时,硬件加密不工作

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
8个职位/ 0个新职位
最后发表
wisilica
离线
最后看到:1年3个星期前
加入:2015-03-17 08:16
当设备处于扫描模式时,硬件加密不工作

嗨,团队,

我正在编写一段代码,其中设备在一段特定的时间内处于扫描模式,然后对接收到的数据进行加密,并发布加密后的数据。我使用硬件加密是为了加密目的。我面临的问题是,当我的设备处于扫描模式时,加密无法完成。回调处理器gapm_use_enc_block_ind_handler没有被调用。

谢谢,
团队Wisilica

设备:
LT_Dialog(未验证)
嗨Wisilica,

嗨Wisilica,
DA14580不导出使用硬件加密块的api。你可能需要一个软件加密。

你使用了哪个API并且期望gapm_use_enc_block_ind_handler被调用?

wisilica
离线
最后看到:1年3个星期前
加入:2015-03-17 08:16
你好,

你好,

硬件加密在设备退出扫描(观察者)模式后调用时工作。当设备处于广播模式时,它也可以工作。
下面是我们使用的代码片段:
Void aes_encrypt_hw(uint8_t* data, uint8_t* key)

struct gapm_use_enc_block_cmd *cmd = KE_MSG_ALLOC(gapm_use_enc_block_cmd, TASK_GAPM, TASK_APP, gapm_use_enc_block_cmd);

uint8_t rev_key [16];
uint8_t rev_data [16];
cmd - >操作= GAPM_USE_ENC_BLOCK;

(我= 0;< 16;+ + i)

rev_key[我]= *(键+ (15));
rev_data[我]= *(数据+ (15));

memcpy (cmd - > operand_1 rev_key 16);
memcpy (cmd - > operand_2 rev_data 16);
ke_msg_send (cmd);

现在,一旦加密完成,我们得到一个回调到处理器,

Static int gapm_use_enc_block_ind_handler(ke_msg_id_t msgid,
struct gapm_use_enc_block_ind *参数,
ke_task_id_t dest_id,
Ke_task_id_t src_id)在app_gap_process_handlers中定义如下:

Static const struct ke_msg_handler app_gap_process_handlers[]=

(ke_msg_func_t) gapm_device_ready_ind_handler}, {GAPM_DEVICE_READY_IND
(ke_msg_func_t) gapm_cmp_evt_handler}, {GAPM_CMP_EVT
(ke_msg_func_t) gapc_cmp_evt_handler}, {GAPC_CMP_EVT
(ke_msg_func_t) gapc_connection_req_ind_handler}, {GAPC_CONNECTION_REQ_IND
(ke_msg_func_t) gapc_disconnect_ind_handler}, {GAPC_DISCONNECT_IND
(ke_msg_func_t) app_module_init_cmp_evt_handler}, {APP_MODULE_INIT_CMP_EVT
(ke_msg_func_t) gapm_adv_report_ind_handler}, {GAPM_ADV_REPORT_IND
(ke_msg_func_t) gapm_use_enc_block_ind_handler}, {GAPM_USE_ENC_BLOCK_IND
#如果(BLE_APP_SEC)
(ke_msg_func_t) gapc_security_ind_handler}, {GAPC_SECURITY_IND
# endif
};

除了在SCAN模式下,我们使用DA14580芯片在所有情况下都能得到正确的加密结果。

谢谢,
Wisilica

MT_dialog
离线
最后看到:4个月3个星期前
工作人员
加入:2015-06-08 34
嗨wisillica,

嗨wisillica,

我试着你已经提到在扫描模式中,我调用加密函数,当一个广告信号发生和我总是可以得到赶上其他的回调函数,因此请尽量赶上GAPM_USE_ENC_BLOCK_IND函数而不是app_gap_process_handlers[]数组。

由于MT_dialog

wisilica
离线
最后看到:1年3个星期前
加入:2015-03-17 08:16
你好,

你好,
在DA14580数据表中,给出了该芯片支持硬件加密(附图)。因此,请建议DA14580芯片长期使用硬件AES加密是否可靠。

谢谢,
Wisilica

附件:
MT_dialog
离线
最后看到:4个月3个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

是的,芯片有一个AES-128位加密处理器,我没有意识到任何问题,你在你的应用程序中遇到了什么特别的事情吗?这是关于扫描和加密指示,你尝试过我上面提到的吗?

由于MT_dialog

wisilica
离线
最后看到:1年3个星期前
加入:2015-03-17 08:16
你好,

你好,

是的,我尝试在上面提到的catch rest函数中包含加密的回调处理程序,但由于硬件加密完成,我无法得到这个函数的回调。在设备的扫描阶段调用硬件加密。

谢谢,
Wisilica

MT_dialog
离线
最后看到:4个月3个星期前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

从SDK 5.0.4的模板,我做了以下修改,以测试您提到的,我可以验证加密消息总是返回一个指示时,从广告指示回调命令发出。

  • 将设备配置为中央user_gapm_conf后。角色= GAP_CENTRAL_MASTER并应用适当的配置为扫描过程(我设置的扫描配置.code = GAPM_SCAN_PASSIVE .addr_src = GAPM_PUBLIC_ADDR .interval = 10, .window = 5, .mode = GAP_OBSERVER_MODE .filt_policy = SCAN_ALLOW_ADV_ALL .filter_duplic = SCAN_FILT_DUPLIC_DIS)我设立了一个扫描过程。在user_on_scaning_complete()函数中,一旦扫描过程超时,就会重新启动它。
  • 为了测试加密回调,我使用了下面的函数与一些虚拟数据

空白encrypt_data(空白)

uint8_t关键[16]={15日,14日,13日,12日,11日,10、9、8、7、6、5、4、3、2、1、0};
uint8_t明文[16]= {0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00};
struct gapm_use_enc_block_cmd *cmd = KE_MSG_ALLOC(gapm_use_enc_block_cmd, TASK_GAPM, TASK_APP, gapm_use_enc_block_cmd);
cmd - >操作= GAPM_USE_ENC_BLOCK;
关键,memcpy (cmd - > operand_1 16);
memcpy (cmd - > operand_2明文16);
ke_msg_send (cmd);

  • 在user_on_adv_report_ind()函数中调用encrypt_data()函数,该函数打印发现的设备并加密一些虚拟数据,函数如下所示。

Void user_on_adv_report_ind(struct gapm_adv_report_ind const * param)

arch_set_pxact_gpio ();
arch_printf("Connect with %02x %02x %02x %02x %02x \n\r",
param - > report.adv_addr.addr [5],
param - > report.adv_addr.addr [4],
param - > report.adv_addr.addr [3],
param - > report.adv_addr.addr [2],
param - > report.adv_addr.addr [1],
param - > report.adv_addr.addr [0]);
encrypt_data ();

  • 在catch_rest()函数中,i从加密中捕获指示并打印加密的数据,函数的一部分如下所示。

Void user_catch_rest_hndl(ke_msg_id_t const msgid,
空白const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

开关(是否)


案例GAPM_USE_ENC_BLOCK_IND:

uint8_t encryted_data [16];
memset (encryted_data 0 sizeof (encryted_data));
Struct gapm_use_enc_block_ind const *msg_param = (Struct gapm_use_enc_block_ind const *)(param);
memcpy (encryted_data msg_param - >结果,sizeof (encryted_data));
arch_printf(“% 2 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 x % 02 r \ n \”,
encryted_data [0],
encryted_data [1],
encryted_data [2],
encryted_data [3],
encryted_data [4],
encryted_data [5],
encryted_data [6],
encryted_data [7],
encryted_data [8],
encryted_data [9],
encryted_data [10],
encryted_data [11],
encryted_data [12],
encryted_data [13],
encryted_data [14],
encryted_data [15]
);

}打破;

如果有一个广告指示,打印bd地址并调用encrypt_data()函数和加密指示没有发生,它将很容易在终端日志上发现,这是我在我的设置中看不到的东西。即使在非常短的时间内出现两个广告指示,消息也将进入队列,并打印两个加密响应。所以你可以试试我提到的。

由于MT_dialog