完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 esp idf 4.4 和 Nimble 1.3.0
第一次我能够配对插入密钥客户端的 android 设备。一旦设备配对并绑定,我就可以永远读取和写入加密的关贸协定。 绑定在重新启动和限制最大可绑定设备大小后仍然存在。 如果我在客户端取消配对 esp32,就像通过蓝牙 Android 选项取消配对一样,我将无法读取/写入加密的 gapps。 要查看 characteristics 和 r/w over gatts svr,我使用“BLE tester”apk 这是 ble_hs_cfg。 代码: ble_hs_cfg.sm_io_cap = 4; ble_hs_cfg.sm_bonding = 1; ble_hs_cfg.sm_our_key_dist = BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID; ble_hs_cfg.sm_their_key_dist = BLE_SM_PAIR_KEY_DIST_ENC| BLE_SM_PAIR_KEY_DIST_ID; ble_hs_cfg.sm_mitm = 1; ble_hs_cfg.sm_sc = 1; 这是我的同步回调: 代码: void sync_cb(void) { // determine best adress type ble_hs_id_infer_auto(0, &addr_type); uint8_t addr_val[6]; ble_hs_id_copy_addr(addr_type, addr_val, NULL); printf(" 33[0;36m"); printf("Indirizzo host:n"); for (int j = 0; j < 6; j++) { printf(" 33[0;36m"); printf("%d ",addr_val[j]); } printf("n"); ESP_LOGI("BLE_Sync", "Device address type %i", addr_type); advertise(); // start avertising } 密码注入是由我的间隙事件处理程序回调的这种情况执行的(在主广告函数中作为 cb 插入): 代码: #if SECU case BLE_GAP_EVENT_PASSKEY_ACTION: ESP_LOGI(tag, "PASSKEY_ACTION_EVENT started n"); struct ble_sm_io pkey = {0}; int key = 0; if (event->passkey.params.action == BLE_SM_IOACT_DISP { ESP_LOGI(tag, "BLE_SM_IOACT_DISP"); pkey.action = event->passkey.params.action; pkey.passkey = 123456; // This is the passkey to be entered on peer ESP_LOGI(tag, "Enter passkey %d on the peer side", pkey.passkey); rc = ble_sm_inject_io(event->passkey.conn_handle, &pkey); ESP_LOGI(tag, "ble_sm_inject_io result: %dn", rc); } 我能够捕捉到的是,如果我像前面提到的那样取消配对客户端,则下一对连接(假设是新的客户端)不要像服务器已经识别对等点那样要求密码,但调试让我看到代码卡在 ble_sm.c 的这里 此代码来自 ble_sm.c 标准库 代码: static int ble_sm_chk_repeat_pairing(uint16_t conn_handle, ble_sm_proc_flags proc_flags, uint8_t key_size) { struct ble_gap_repeat_pairing rp; struct ble_store_value_sec bond; int rc; do { /* If the peer isn't bonded, indicate that the pairing procedure should * continue. */ rc = ble_sm_read_bond(conn_handle, &bond); switch (rc) { case 0: break; case BLE_HS_ENOENT: return 0; default: return rc; } /* Peer is already bonded. Ask the application what to do about it. */ rp.conn_handle = conn_handle; rp.cur_key_size = bond.key_size; rp.cur_authenticated = bond.authenticated; rp.cur_sc = bond.sc; rp.new_key_size = key_size; rp.new_authenticated = !!(proc_flags & BLE_SM_PROC_F_AUTHENTICATED); rp.new_sc = !!(proc_flags & BLE_SM_PROC_F_SC); rp.new_bonding = !!(proc_flags & BLE_SM_PROC_F_BONDING); rc = ble_gap_repeat_pairing_event(&rp); } while (rc == BLE_GAP_REPEAT_PAIRING_RETRY); BLE_HS_LOG(DEBUG, "silently ignoring pair request from bonded peer"); //THE ATTEMPT, IS STUCK HERE I'M ABLE TO SEE THE PRINT BUT I CAN'T READ OR WRITE ENCRYPTED GATTS. return BLE_HS_EALREADY; } 仅当我解除对等客户端的连接时才会发生这种情况。 |
|
相关推荐
1个回答
|
|
密钥似乎存储在 nvs 中,就像 our_sec、pee_sec 和 p_dev_sec 一样。cccds_sec 订阅也很好用。
|
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:40 , Processed in 1.147118 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号