Use BTM structures for LE pairink keys and store LTK
The long term key (LTK) was not assigned to the correct struct element
before saving the key to NVRAM.
Change-Id: Icfce82f5b70518e725875771756edde0b9caeb88
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index 195c043..7df911b 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -143,7 +143,7 @@
#if (defined(BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
BOOLEAN is_le_only;
BOOLEAN is_le_nc; /* LE Numeric comparison */
- BD_ADDR static_bdaddr;
+ bt_bdaddr_t static_bdaddr;
btif_dm_ble_cb_t ble;
#endif
} btif_dm_pairing_cb_t;
@@ -518,8 +518,10 @@
if ((pairing_cb.state == state) && (state == BT_BOND_STATE_BONDING))
{
// Cross key pairing so send callback for static address
- if (pairing_cb.static_bdaddr != NULL)
+ if (!bdaddr_is_empty(&pairing_cb.static_bdaddr))
+ {
HAL_CBACK(bt_hal_cbacks, bond_state_changed_cb, status, bd_addr, state);
+ }
return;
}
@@ -1156,7 +1158,7 @@
{
BTIF_TRACE_DEBUG("%s: bonding initiated due to cross key, adding static address",
__func__);
- bdcpy(pairing_cb.static_bdaddr, p_auth_cmpl->bd_addr);
+ bdcpy(pairing_cb.static_bdaddr.address, p_auth_cmpl->bd_addr);
}
if(btif_dm_inquiry_in_progress)
@@ -1483,7 +1485,7 @@
*/
if ((pairing_cb.state == BT_BOND_STATE_BONDING) &&
((bdcmp(p_data->disc_res.bd_addr, pairing_cb.bd_addr) == 0) ||
- (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr) == 0)) &&
+ (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr.address) == 0)) &&
pairing_cb.sdp_attempts > 0)
{
BTIF_TRACE_DEBUG("%s Remote Service SDP done. Call bond_state_changed_cb BONDED",
@@ -1492,7 +1494,7 @@
// If bonding occured due to cross-key pairing, send bonding callback
// for static address now
- if (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr) == 0)
+ if (bdcmp(p_data->disc_res.bd_addr, pairing_cb.static_bdaddr.address) == 0)
bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_BONDING);
bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_BONDED);
@@ -1818,110 +1820,31 @@
case BTA_LE_KEY_PENC:
BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PENC");
pairing_cb.ble.is_penc_key_rcvd = TRUE;
- memcpy(pairing_cb.ble.penc_key.ltk,
- p_data->ble_key.p_key_value->penc_key.ltk, 16);
- memcpy(pairing_cb.ble.penc_key.rand,
- p_data->ble_key.p_key_value->penc_key.rand,8);
- pairing_cb.ble.penc_key.ediv = p_data->ble_key.p_key_value->penc_key.ediv;
- pairing_cb.ble.penc_key.sec_level =
- p_data->ble_key.p_key_value->penc_key.sec_level;
-
- for (i=0; i<16; i++)
- {
- BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.ltk[%d]=0x%02x",
- i,pairing_cb.ble.penc_key.ltk[i]);
- }
- for (i=0; i<8; i++)
- {
- BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.rand[%d]=0x%02x",
- i,pairing_cb.ble.penc_key.rand[i]);
- }
- BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.ediv=0x%04x",
- pairing_cb.ble.penc_key.ediv);
- BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.sec_level=0x%02x",
- pairing_cb.ble.penc_key.sec_level);
- BTIF_TRACE_DEBUG("pairing_cb.ble.penc_key.key_size=0x%02x",
- pairing_cb.ble.penc_key.key_size);
+ pairing_cb.ble.penc_key = p_data->ble_key.p_key_value->penc_key;
break;
case BTA_LE_KEY_PID:
BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PID");
pairing_cb.ble.is_pid_key_rcvd = TRUE;
- pairing_cb.ble.pid_key.addr_type =
- p_data->ble_key.p_key_value->pid_key.addr_type;
- memcpy(pairing_cb.ble.pid_key.irk,
- p_data->ble_key.p_key_value->pid_key.irk, 16);
- memcpy(pairing_cb.ble.pid_key.static_addr,
- p_data->ble_key.p_key_value->pid_key.static_addr,BD_ADDR_LEN);
- for (i=0; i<16; i++)
- {
- BTIF_TRACE_DEBUG("pairing_cb.ble.pid_key.irk[%d]=0x%02x"
- ,i,pairing_cb.ble.pid_key.irk[i]);
- }
- for (i=0; i<BD_ADDR_LEN; i++)
- {
- BTIF_TRACE_DEBUG("piaring_cb.ble.pid_address[%d] = %x"
- ,i, pairing_cb.ble.pid_key.static_addr[i]);
- }
+ pairing_cb.ble.pid_key = p_data->ble_key.p_key_value->pid_key;
break;
case BTA_LE_KEY_PCSRK:
BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_PCSRK");
pairing_cb.ble.is_pcsrk_key_rcvd = TRUE;
- pairing_cb.ble.pcsrk_key.counter =
- p_data->ble_key.p_key_value->pcsrk_key.counter;
- pairing_cb.ble.pcsrk_key.sec_level =
- p_data->ble_key.p_key_value->pcsrk_key.sec_level;
- memcpy(pairing_cb.ble.pcsrk_key.csrk,
- p_data->ble_key.p_key_value->pcsrk_key.csrk,16);
-
- for (i=0; i<16; i++)
- {
- BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.csrk[%d]=0x%02x",
- i,pairing_cb.ble.pcsrk_key.csrk[i]);
- }
- BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.counter=0x%08x",
- pairing_cb.ble.pcsrk_key.counter);
- BTIF_TRACE_DEBUG("pairing_cb.ble.pcsrk_key.sec_level=0x%02x",
- pairing_cb.ble.pcsrk_key.sec_level);
+ pairing_cb.ble.pcsrk_key = p_data->ble_key.p_key_value->pcsrk_key;
break;
case BTA_LE_KEY_LENC:
BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_LENC");
pairing_cb.ble.is_lenc_key_rcvd = TRUE;
- pairing_cb.ble.lenc_key.div = p_data->ble_key.p_key_value->lenc_key.div;
- pairing_cb.ble.lenc_key.key_size =
- p_data->ble_key.p_key_value->lenc_key.key_size;
- pairing_cb.ble.lenc_key.sec_level =
- p_data->ble_key.p_key_value->lenc_key.sec_level;
-
- BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.div=0x%04x",
- pairing_cb.ble.lenc_key.div);
- BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.key_size=0x%02x",
- pairing_cb.ble.lenc_key.key_size);
- BTIF_TRACE_DEBUG("pairing_cb.ble.lenc_key.sec_level=0x%02x",
- pairing_cb.ble.lenc_key.sec_level);
+ pairing_cb.ble.lenc_key = p_data->ble_key.p_key_value->lenc_key;
break;
-
-
case BTA_LE_KEY_LCSRK:
BTIF_TRACE_DEBUG("Rcv BTA_LE_KEY_LCSRK");
pairing_cb.ble.is_lcsrk_key_rcvd = TRUE;
- pairing_cb.ble.lcsrk_key.counter =
- p_data->ble_key.p_key_value->lcsrk_key.counter;
- pairing_cb.ble.lcsrk_key.div =
- p_data->ble_key.p_key_value->lcsrk_key.div;
- pairing_cb.ble.lcsrk_key.sec_level =
- p_data->ble_key.p_key_value->lcsrk_key.sec_level;
-
- BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.div=0x%04x",
- pairing_cb.ble.lcsrk_key.div);
- BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.counter=0x%08x",
- pairing_cb.ble.lcsrk_key.counter);
- BTIF_TRACE_DEBUG("pairing_cb.ble.lcsrk_key.sec_level=0x%02x",
- pairing_cb.ble.lcsrk_key.sec_level);
-
+ pairing_cb.ble.lcsrk_key = p_data->ble_key.p_key_value->lcsrk_key;
break;
case BTA_LE_KEY_LID:
@@ -1933,7 +1856,6 @@
BTIF_TRACE_ERROR("unknown BLE key type (0x%02x)", p_data->ble_key.key_type);
break;
}
-
break;
case BTA_DM_BLE_SEC_REQ_EVT:
BTIF_TRACE_DEBUG("BTA_DM_BLE_SEC_REQ_EVT. ");
@@ -3044,7 +2966,7 @@
btif_storage_add_ble_bonding_key(&bd_addr,
(char *) &pairing_cb.ble.penc_key,
BTIF_DM_LE_KEY_PENC,
- sizeof(btif_dm_ble_penc_keys_t));
+ sizeof(tBTM_LE_PENC_KEYS));
}
if (pairing_cb.ble.is_pid_key_rcvd)
@@ -3052,7 +2974,7 @@
btif_storage_add_ble_bonding_key(&bd_addr,
(char *) &pairing_cb.ble.pid_key,
BTIF_DM_LE_KEY_PID,
- sizeof(btif_dm_ble_pid_keys_t));
+ sizeof(tBTM_LE_PID_KEYS));
}
@@ -3061,7 +2983,7 @@
btif_storage_add_ble_bonding_key(&bd_addr,
(char *) &pairing_cb.ble.pcsrk_key,
BTIF_DM_LE_KEY_PCSRK,
- sizeof(btif_dm_ble_pcsrk_keys_t));
+ sizeof(tBTM_LE_PCSRK_KEYS));
}
@@ -3070,7 +2992,7 @@
btif_storage_add_ble_bonding_key(&bd_addr,
(char *) &pairing_cb.ble.lenc_key,
BTIF_DM_LE_KEY_LENC,
- sizeof(btif_dm_ble_lenc_keys_t));
+ sizeof(tBTM_LE_LENC_KEYS));
}
if (pairing_cb.ble.is_lcsrk_key_rcvd)
@@ -3078,7 +3000,7 @@
btif_storage_add_ble_bonding_key(&bd_addr,
(char *) &pairing_cb.ble.lcsrk_key,
BTIF_DM_LE_KEY_LCSRK,
- sizeof(btif_dm_ble_lcsrk_keys_t));
+ sizeof(tBTM_LE_LCSRK_KEYS));
}
if (pairing_cb.ble.is_lidk_key_rcvd)