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/include/btif_dm.h b/btif/include/btif_dm.h
index f4bddd6..ced78d3 100644
--- a/btif/include/btif_dm.h
+++ b/btif/include/btif_dm.h
@@ -61,54 +61,16 @@
 
 typedef struct
 {
-    UINT8       ltk[BT_OCTET16_LEN];
-    UINT8       rand[BT_OCTET8_LEN];
-    UINT16      ediv;
-    UINT8       sec_level;
-    UINT8       key_size;
-}btif_dm_ble_penc_keys_t;
-
-typedef struct
-{
-    UINT32          counter;
-    UINT8           csrk[BT_OCTET16_LEN];
-    UINT8           sec_level;
-}btif_dm_ble_pcsrk_keys_t;
-
-typedef struct
-{
-    UINT16      div;
-    UINT8       key_size;
-    UINT8       sec_level;
-}btif_dm_ble_lenc_keys_t;
-
-typedef struct
-{
-    UINT32          counter;
-    UINT16          div;
-    UINT8           sec_level;
-
-}btif_dm_ble_lcsrk_keys_t;
-
-typedef struct
-{
-    BT_OCTET16          irk;
-    tBLE_ADDR_TYPE      addr_type;
-    BD_ADDR             static_addr;
-}btif_dm_ble_pid_keys_t;
-
-typedef struct
-{
     BOOLEAN                   is_penc_key_rcvd;
-    btif_dm_ble_penc_keys_t   penc_key;       /* received peer encryption key */
+    tBTM_LE_PENC_KEYS         penc_key;       /* received peer encryption key */
     BOOLEAN                   is_pcsrk_key_rcvd;
-    btif_dm_ble_pcsrk_keys_t  pcsrk_key;       /* received peer device SRK */
+    tBTM_LE_PCSRK_KEYS        pcsrk_key;       /* received peer device SRK */
     BOOLEAN                   is_pid_key_rcvd;
-    btif_dm_ble_pid_keys_t    pid_key;        /* peer device ID key */
+    tBTM_LE_PID_KEYS          pid_key;        /* peer device ID key */
     BOOLEAN                   is_lenc_key_rcvd;
-    btif_dm_ble_lenc_keys_t   lenc_key;       /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/
+    tBTM_LE_LENC_KEYS         lenc_key;       /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/
     BOOLEAN                   is_lcsrk_key_rcvd;
-    btif_dm_ble_lcsrk_keys_t  lcsrk_key;      /* local device CSRK = d1(ER,DIV,1)*/
+    tBTM_LE_LCSRK_KEYS        lcsrk_key;      /* local device CSRK = d1(ER,DIV,1)*/
     BOOLEAN                   is_lidk_key_rcvd;   /* local identity key received */
 } btif_dm_ble_cb_t;
 
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)
diff --git a/btif/src/btif_gatt_util.c b/btif/src/btif_gatt_util.c
index da3d712..3e1ae23 100644
--- a/btif/src/btif_gatt_util.c
+++ b/btif/src/btif_gatt_util.c
@@ -313,7 +313,7 @@
 
 #if (!defined(BLE_DELAY_REQUEST_ENC) || (BLE_DELAY_REQUEST_ENC == FALSE))
     if ((btif_storage_get_ble_bonding_key(&bda, BTIF_DM_LE_KEY_PENC,
-                    buf, sizeof(btif_dm_ble_penc_keys_t)) == BT_STATUS_SUCCESS)
+                    buf, sizeof(tBTM_LE_PENC_KEYS)) == BT_STATUS_SUCCESS)
         && !btif_gatt_is_link_encrypted(bd_addr))
     {
         tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c
index eaa9ac9..d0aac7b 100644
--- a/btif/src/btif_storage.c
+++ b/btif/src/btif_storage.c
@@ -1211,22 +1211,22 @@
             btif_storage_set_remote_addr_type(&bd_addr, BLE_ADDR_PUBLIC);
         }
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PENC, sizeof(btif_dm_ble_penc_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PENC, sizeof(tBTM_LE_PENC_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PID, sizeof(btif_dm_ble_pid_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PID, sizeof(tBTM_LE_PID_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LID, sizeof(btif_dm_ble_pid_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LID, sizeof(tBTM_LE_PID_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_PCSRK, sizeof(btif_dm_ble_pcsrk_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_PCSRK, sizeof(tBTM_LE_PCSRK_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LENC, sizeof(btif_dm_ble_lenc_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LENC, sizeof(tBTM_LE_LENC_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
-        btif_read_le_key(BTIF_DM_LE_KEY_LCSRK, sizeof(btif_dm_ble_lcsrk_keys_t),
+        btif_read_le_key(BTIF_DM_LE_KEY_LCSRK, sizeof(tBTM_LE_LCSRK_KEYS),
                          bd_addr, addr_type, add, &device_added, &key_found);
 
         // Fill in the bonded devices