Bluetooth: Add support for storing the LTK
Now when the LTK is received from the remote or generated it is stored, so it can later be used. Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@openbossa.org> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
parent
54790f73a3
commit
16b908396f
@ -496,18 +496,23 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
|
||||
|
||||
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
|
||||
{
|
||||
BT_DBG("conn %p", conn);
|
||||
/* FIXME: store the ltk */
|
||||
struct smp_cmd_encrypt_info *rp = (void *) skb->data;
|
||||
|
||||
skb_pull(skb, sizeof(*rp));
|
||||
|
||||
memcpy(conn->tk, rp->ltk, sizeof(conn->tk));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
|
||||
{
|
||||
struct smp_cmd_pairing *paircmd = (void *) &conn->prsp[1];
|
||||
u8 keydist = paircmd->init_key_dist;
|
||||
struct smp_cmd_master_ident *rp = (void *) skb->data;
|
||||
|
||||
BT_DBG("keydist 0x%x", keydist);
|
||||
/* FIXME: store ediv and rand */
|
||||
skb_pull(skb, sizeof(*rp));
|
||||
|
||||
hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv,
|
||||
rp->rand, conn->tk);
|
||||
|
||||
smp_distribute_keys(conn, 1);
|
||||
|
||||
@ -632,6 +637,9 @@ int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
|
||||
|
||||
smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
|
||||
|
||||
hci_add_ltk(conn->hcon->hdev, 1, conn->dst, ediv,
|
||||
ident.rand, enc.ltk);
|
||||
|
||||
ident.ediv = cpu_to_le16(ediv);
|
||||
|
||||
smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
|
||||
|
Loading…
Reference in New Issue
Block a user