Loading system/bta/dm/bta_dm_act.cc +15 −10 Original line number Diff line number Diff line Loading @@ -1976,8 +1976,6 @@ static void bta_dm_pinname_cback(void* p_data) { ******************************************************************************/ static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, bool min_16_digit) { tBTA_DM_SEC sec_event; if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED; /* If the device name is not known, save bdaddr and devclass and initiate a Loading @@ -1994,7 +1992,9 @@ static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class, " bta_dm_pin_cback() -> Failed to start Remote Name Request "); } sec_event.pin_req.bd_addr = bd_addr; tBTA_DM_SEC sec_event = {.pin_req = { .bd_addr = bd_addr, }}; BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN + 1); sec_event.pin_req.min_16_digit = min_16_digit; Loading Loading @@ -3524,16 +3524,17 @@ static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, const RawAddress& bda, ******************************************************************************/ static void bta_dm_ble_id_key_cback(uint8_t key_type, tBTM_BLE_LOCAL_KEYS* p_key) { uint8_t evt; tBTA_DM_SEC dm_key; switch (key_type) { case BTM_BLE_KEY_TYPE_ID: case BTM_BLE_KEY_TYPE_ER: if (bta_dm_cb.p_sec_cback) { tBTA_DM_SEC dm_key = { .ble_id_keys{}, }; memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS)); evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT uint8_t evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT : BTA_DM_BLE_LOCAL_ER_EVT; bta_dm_cb.p_sec_cback(evt, &dm_key); } Loading Loading @@ -3650,10 +3651,14 @@ void bta_dm_ble_observe(bool start, uint8_t duration, tBTM_STATUS status = BTM_BleObserve(true, duration, bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb); if (status != BTM_CMD_STARTED) { tBTA_DM_SEARCH data; APPL_TRACE_WARNING(" %s BTM_BleObserve failed. status %d", __func__, status); data.inq_cmpl.num_resps = 0; tBTA_DM_SEARCH data = { .inq_cmpl = { .num_resps = 0, }, }; if (bta_dm_search_cb.p_scan_cback) { bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); } Loading system/stack/smp/smp_act.cc +32 −16 Original line number Diff line number Diff line Loading @@ -355,7 +355,6 @@ void smp_send_keypress_notification(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { * Description send encryption information command. ******************************************************************************/ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s: p_cb->loc_enc_size = %d", __func__, p_cb->loc_enc_size); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, false); Loading @@ -364,10 +363,15 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_send_cmd(SMP_OPCODE_CENTRAL_ID, p_cb); /* save the DIV and key size information when acting as peripheral device */ le_key.lenc_key.ltk = p_cb->ltk; le_key.lenc_key.div = p_cb->div; le_key.lenc_key.key_size = p_cb->loc_enc_size; le_key.lenc_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE le_key = { .lenc_key = { .ltk = p_cb->ltk, .div = p_cb->div, .key_size = p_cb->loc_enc_size, .sec_level = p_cb->sec_level, }, }; if ((p_cb->peer_auth_req & SMP_AUTH_BOND) && (p_cb->loc_auth_req & SMP_AUTH_BOND)) Loading @@ -383,7 +387,6 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { * Description send ID information command. ******************************************************************************/ void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, false); Loading @@ -392,22 +395,26 @@ void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { if ((p_cb->peer_auth_req & SMP_AUTH_BOND) && (p_cb->loc_auth_req & SMP_AUTH_BOND)) btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, &le_key, true); btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, nullptr, true); smp_key_distribution_by_transport(p_cb, NULL); } /** send CSRK command. */ void smp_send_csrk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE key; SMP_TRACE_DEBUG("%s", __func__); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, false); if (smp_send_cmd(SMP_OPCODE_SIGN_INFO, p_cb)) { key.lcsrk_key.div = p_cb->div; key.lcsrk_key.sec_level = p_cb->sec_level; key.lcsrk_key.counter = 0; /* initialize the local counter */ key.lcsrk_key.csrk = p_cb->csrk; tBTM_LE_KEY_VALUE key = { .lcsrk_key = { .div = p_cb->div, .sec_level = p_cb->sec_level, .counter = 0, /* initialize the local counter */ .csrk = p_cb->csrk, }, }; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LCSRK, &key, true); } Loading Loading @@ -973,7 +980,6 @@ void smp_proc_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /** process central ID from peripheral device */ void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { uint8_t* p = p_data->p_data; tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -986,6 +992,9 @@ void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, true); tBTM_LE_KEY_VALUE le_key = { .penc_key = {}, }; STREAM_TO_UINT16(le_key.penc_key.ediv, p); STREAM_TO_ARRAY(le_key.penc_key.rand, p, BT_OCTET8_LEN); Loading Loading @@ -1022,7 +1031,6 @@ void smp_proc_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /** process identity address from peer device */ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { uint8_t* p = p_data->p_data; tBTM_LE_KEY_VALUE pid_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -1036,6 +1044,10 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, true); tBTM_LE_KEY_VALUE pid_key = { .pid_key = {}, }; ; STREAM_TO_UINT8(pid_key.pid_key.identity_addr_type, p); STREAM_TO_BDADDR(pid_key.pid_key.identity_addr, p); pid_key.pid_key.irk = p_cb->tk; Loading @@ -1054,7 +1066,6 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /* process security information from peer device */ void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -1069,7 +1080,12 @@ void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, true); /* save CSRK to security record */ le_key.pcsrk_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE le_key = { .pcsrk_key = { .sec_level = p_cb->sec_level, }, }; /* get peer CSRK */ maybe_non_aligned_memcpy(le_key.pcsrk_key.csrk.data(), p_data->p_data, Loading system/stack/smp/smp_keys.cc +3 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,9 @@ void smp_proc_passkey(tSMP_CB* p_cb, BT_OCTET8 rand) { UINT32_TO_STREAM(tt, passkey); if (p_cb->p_callback) { tSMP_EVT_DATA smp_evt_data; smp_evt_data.passkey = passkey; tSMP_EVT_DATA smp_evt_data = { .passkey = passkey, }; (*p_cb->p_callback)(SMP_PASSKEY_NOTIF_EVT, p_cb->pairing_bda, &smp_evt_data); } Loading system/stack/smp/smp_utils.cc +18 −10 Original line number Diff line number Diff line Loading @@ -1463,22 +1463,30 @@ bool smp_check_commitment(tSMP_CB* p_cb) { * ******************************************************************************/ void smp_save_secure_connections_long_term_key(tSMP_CB* p_cb) { tBTM_LE_KEY_VALUE lle_key; tBTM_LE_KEY_VALUE ple_key; SMP_TRACE_DEBUG("%s-Save LTK as local LTK key", __func__); lle_key.lenc_key.ltk = p_cb->ltk; lle_key.lenc_key.div = 0; lle_key.lenc_key.key_size = p_cb->loc_enc_size; lle_key.lenc_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE lle_key = { .lenc_key = { .ltk = p_cb->ltk, .div = 0, .key_size = p_cb->loc_enc_size, .sec_level = p_cb->sec_level, }, }; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LENC, &lle_key, true); SMP_TRACE_DEBUG("%s-Save LTK as peer LTK key", __func__); ple_key.penc_key.ediv = 0; tBTM_LE_KEY_VALUE ple_key = { .penc_key = { .ltk = p_cb->ltk, .sec_level = p_cb->sec_level, .key_size = p_cb->loc_enc_size, .ediv = 0, }, }; memset(ple_key.penc_key.rand, 0, BT_OCTET8_LEN); ple_key.penc_key.ltk = p_cb->ltk; ple_key.penc_key.sec_level = p_cb->sec_level; ple_key.penc_key.key_size = p_cb->loc_enc_size; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_PENC, &ple_key, true); } Loading Loading
system/bta/dm/bta_dm_act.cc +15 −10 Original line number Diff line number Diff line Loading @@ -1976,8 +1976,6 @@ static void bta_dm_pinname_cback(void* p_data) { ******************************************************************************/ static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class, BD_NAME bd_name, bool min_16_digit) { tBTA_DM_SEC sec_event; if (!bta_dm_cb.p_sec_cback) return BTM_NOT_AUTHORIZED; /* If the device name is not known, save bdaddr and devclass and initiate a Loading @@ -1994,7 +1992,9 @@ static uint8_t bta_dm_pin_cback(const RawAddress& bd_addr, DEV_CLASS dev_class, " bta_dm_pin_cback() -> Failed to start Remote Name Request "); } sec_event.pin_req.bd_addr = bd_addr; tBTA_DM_SEC sec_event = {.pin_req = { .bd_addr = bd_addr, }}; BTA_COPY_DEVICE_CLASS(sec_event.pin_req.dev_class, dev_class); strlcpy((char*)sec_event.pin_req.bd_name, (char*)bd_name, BD_NAME_LEN + 1); sec_event.pin_req.min_16_digit = min_16_digit; Loading Loading @@ -3524,16 +3524,17 @@ static uint8_t bta_dm_ble_smp_cback(tBTM_LE_EVT event, const RawAddress& bda, ******************************************************************************/ static void bta_dm_ble_id_key_cback(uint8_t key_type, tBTM_BLE_LOCAL_KEYS* p_key) { uint8_t evt; tBTA_DM_SEC dm_key; switch (key_type) { case BTM_BLE_KEY_TYPE_ID: case BTM_BLE_KEY_TYPE_ER: if (bta_dm_cb.p_sec_cback) { tBTA_DM_SEC dm_key = { .ble_id_keys{}, }; memcpy(&dm_key.ble_id_keys, p_key, sizeof(tBTM_BLE_LOCAL_KEYS)); evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT uint8_t evt = (key_type == BTM_BLE_KEY_TYPE_ID) ? BTA_DM_BLE_LOCAL_IR_EVT : BTA_DM_BLE_LOCAL_ER_EVT; bta_dm_cb.p_sec_cback(evt, &dm_key); } Loading Loading @@ -3650,10 +3651,14 @@ void bta_dm_ble_observe(bool start, uint8_t duration, tBTM_STATUS status = BTM_BleObserve(true, duration, bta_dm_observe_results_cb, bta_dm_observe_cmpl_cb); if (status != BTM_CMD_STARTED) { tBTA_DM_SEARCH data; APPL_TRACE_WARNING(" %s BTM_BleObserve failed. status %d", __func__, status); data.inq_cmpl.num_resps = 0; tBTA_DM_SEARCH data = { .inq_cmpl = { .num_resps = 0, }, }; if (bta_dm_search_cb.p_scan_cback) { bta_dm_search_cb.p_scan_cback(BTA_DM_INQ_CMPL_EVT, &data); } Loading
system/stack/smp/smp_act.cc +32 −16 Original line number Diff line number Diff line Loading @@ -355,7 +355,6 @@ void smp_send_keypress_notification(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { * Description send encryption information command. ******************************************************************************/ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s: p_cb->loc_enc_size = %d", __func__, p_cb->loc_enc_size); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, false); Loading @@ -364,10 +363,15 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_send_cmd(SMP_OPCODE_CENTRAL_ID, p_cb); /* save the DIV and key size information when acting as peripheral device */ le_key.lenc_key.ltk = p_cb->ltk; le_key.lenc_key.div = p_cb->div; le_key.lenc_key.key_size = p_cb->loc_enc_size; le_key.lenc_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE le_key = { .lenc_key = { .ltk = p_cb->ltk, .div = p_cb->div, .key_size = p_cb->loc_enc_size, .sec_level = p_cb->sec_level, }, }; if ((p_cb->peer_auth_req & SMP_AUTH_BOND) && (p_cb->loc_auth_req & SMP_AUTH_BOND)) Loading @@ -383,7 +387,6 @@ void smp_send_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { * Description send ID information command. ******************************************************************************/ void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, false); Loading @@ -392,22 +395,26 @@ void smp_send_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { if ((p_cb->peer_auth_req & SMP_AUTH_BOND) && (p_cb->loc_auth_req & SMP_AUTH_BOND)) btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, &le_key, true); btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LID, nullptr, true); smp_key_distribution_by_transport(p_cb, NULL); } /** send CSRK command. */ void smp_send_csrk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE key; SMP_TRACE_DEBUG("%s", __func__); smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, false); if (smp_send_cmd(SMP_OPCODE_SIGN_INFO, p_cb)) { key.lcsrk_key.div = p_cb->div; key.lcsrk_key.sec_level = p_cb->sec_level; key.lcsrk_key.counter = 0; /* initialize the local counter */ key.lcsrk_key.csrk = p_cb->csrk; tBTM_LE_KEY_VALUE key = { .lcsrk_key = { .div = p_cb->div, .sec_level = p_cb->sec_level, .counter = 0, /* initialize the local counter */ .csrk = p_cb->csrk, }, }; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LCSRK, &key, true); } Loading Loading @@ -973,7 +980,6 @@ void smp_proc_enc_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /** process central ID from peripheral device */ void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { uint8_t* p = p_data->p_data; tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -986,6 +992,9 @@ void smp_proc_central_id(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ENC, true); tBTM_LE_KEY_VALUE le_key = { .penc_key = {}, }; STREAM_TO_UINT16(le_key.penc_key.ediv, p); STREAM_TO_ARRAY(le_key.penc_key.rand, p, BT_OCTET8_LEN); Loading Loading @@ -1022,7 +1031,6 @@ void smp_proc_id_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /** process identity address from peer device */ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { uint8_t* p = p_data->p_data; tBTM_LE_KEY_VALUE pid_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -1036,6 +1044,10 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_ID, true); tBTM_LE_KEY_VALUE pid_key = { .pid_key = {}, }; ; STREAM_TO_UINT8(pid_key.pid_key.identity_addr_type, p); STREAM_TO_BDADDR(pid_key.pid_key.identity_addr, p); pid_key.pid_key.irk = p_cb->tk; Loading @@ -1054,7 +1066,6 @@ void smp_proc_id_addr(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { /* process security information from peer device */ void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { tBTM_LE_KEY_VALUE le_key; SMP_TRACE_DEBUG("%s", __func__); Loading @@ -1069,7 +1080,12 @@ void smp_proc_srk_info(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) { smp_update_key_mask(p_cb, SMP_SEC_KEY_TYPE_CSRK, true); /* save CSRK to security record */ le_key.pcsrk_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE le_key = { .pcsrk_key = { .sec_level = p_cb->sec_level, }, }; /* get peer CSRK */ maybe_non_aligned_memcpy(le_key.pcsrk_key.csrk.data(), p_data->p_data, Loading
system/stack/smp/smp_keys.cc +3 −2 Original line number Diff line number Diff line Loading @@ -88,8 +88,9 @@ void smp_proc_passkey(tSMP_CB* p_cb, BT_OCTET8 rand) { UINT32_TO_STREAM(tt, passkey); if (p_cb->p_callback) { tSMP_EVT_DATA smp_evt_data; smp_evt_data.passkey = passkey; tSMP_EVT_DATA smp_evt_data = { .passkey = passkey, }; (*p_cb->p_callback)(SMP_PASSKEY_NOTIF_EVT, p_cb->pairing_bda, &smp_evt_data); } Loading
system/stack/smp/smp_utils.cc +18 −10 Original line number Diff line number Diff line Loading @@ -1463,22 +1463,30 @@ bool smp_check_commitment(tSMP_CB* p_cb) { * ******************************************************************************/ void smp_save_secure_connections_long_term_key(tSMP_CB* p_cb) { tBTM_LE_KEY_VALUE lle_key; tBTM_LE_KEY_VALUE ple_key; SMP_TRACE_DEBUG("%s-Save LTK as local LTK key", __func__); lle_key.lenc_key.ltk = p_cb->ltk; lle_key.lenc_key.div = 0; lle_key.lenc_key.key_size = p_cb->loc_enc_size; lle_key.lenc_key.sec_level = p_cb->sec_level; tBTM_LE_KEY_VALUE lle_key = { .lenc_key = { .ltk = p_cb->ltk, .div = 0, .key_size = p_cb->loc_enc_size, .sec_level = p_cb->sec_level, }, }; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_LENC, &lle_key, true); SMP_TRACE_DEBUG("%s-Save LTK as peer LTK key", __func__); ple_key.penc_key.ediv = 0; tBTM_LE_KEY_VALUE ple_key = { .penc_key = { .ltk = p_cb->ltk, .sec_level = p_cb->sec_level, .key_size = p_cb->loc_enc_size, .ediv = 0, }, }; memset(ple_key.penc_key.rand, 0, BT_OCTET8_LEN); ple_key.penc_key.ltk = p_cb->ltk; ple_key.penc_key.sec_level = p_cb->sec_level; ple_key.penc_key.key_size = p_cb->loc_enc_size; btm_sec_save_le_key(p_cb->pairing_bda, BTM_LE_KEY_PENC, &ple_key, true); } Loading