Commit 16b90839 authored by Vinicius Costa Gomes's avatar Vinicius Costa Gomes Committed by Gustavo Padovan
Browse files

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: default avatarVinicius Costa Gomes <vinicius.gomes@openbossa.org>
Signed-off-by: default avatarGustavo F. Padovan <padovan@profusion.mobi>
parent 54790f73
Loading
Loading
Loading
Loading
+14 −6
Original line number Original line Diff line number Diff line
@@ -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)
static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
{
{
	BT_DBG("conn %p", conn);
	struct smp_cmd_encrypt_info *rp = (void *) skb->data;
	/* FIXME: store the ltk */

	skb_pull(skb, sizeof(*rp));

	memcpy(conn->tk, rp->ltk, sizeof(conn->tk));

	return 0;
	return 0;
}
}


static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
{
{
	struct smp_cmd_pairing *paircmd = (void *) &conn->prsp[1];
	struct smp_cmd_master_ident *rp = (void *) skb->data;
	u8 keydist = paircmd->init_key_dist;

	skb_pull(skb, sizeof(*rp));


	BT_DBG("keydist 0x%x", keydist);
	hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv,
	/* FIXME: store ediv and rand */
						rp->rand, conn->tk);


	smp_distribute_keys(conn, 1);
	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);
		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);
		ident.ediv = cpu_to_le16(ediv);


		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
		smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);