2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License version 2 as
7 published by the Free Software Foundation;
9 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20 SOFTWARE IS DISCLAIMED.
23 #include <net/bluetooth/bluetooth.h>
24 #include <net/bluetooth/hci_core.h>
25 #include <net/bluetooth/l2cap.h>
26 #include <net/bluetooth/smp.h>
27 #include <linux/crypto.h>
28 #include <linux/scatterlist.h>
29 #include <crypto/b128ops.h>
31 #define SMP_TIMEOUT 30000 /* 30 seconds */
33 static inline void swap128(u8 src[16], u8 dst[16])
36 for (i = 0; i < 16; i++)
40 static inline void swap56(u8 src[7], u8 dst[7])
43 for (i = 0; i < 7; i++)
47 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
49 struct blkcipher_desc desc;
50 struct scatterlist sg;
52 unsigned char iv[128];
55 BT_ERR("tfm %p", tfm);
62 err = crypto_blkcipher_setkey(tfm, k, 16);
64 BT_ERR("cipher setkey failed: %d", err);
68 sg_init_one(&sg, r, 16);
70 iv_len = crypto_blkcipher_ivsize(tfm);
72 memset(&iv, 0xff, iv_len);
73 crypto_blkcipher_set_iv(tfm, iv, iv_len);
76 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
78 BT_ERR("Encrypt data error %d", err);
83 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
84 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
85 u8 _rat, bdaddr_t *ra, u8 res[16])
92 /* p1 = pres || preq || _rat || _iat */
100 /* p2 = padding || ia || ra */
101 baswap((bdaddr_t *) (p2 + 4), ia);
102 baswap((bdaddr_t *) (p2 + 10), ra);
105 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
107 /* res = e(k, res) */
108 err = smp_e(tfm, k, res);
110 BT_ERR("Encrypt data error");
114 /* res = res XOR p2 */
115 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
117 /* res = e(k, res) */
118 err = smp_e(tfm, k, res);
120 BT_ERR("Encrypt data error");
125 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
126 u8 r1[16], u8 r2[16], u8 _r[16])
130 /* Just least significant octets from r1 and r2 are considered */
131 memcpy(_r, r1 + 8, 8);
132 memcpy(_r + 8, r2 + 8, 8);
134 err = smp_e(tfm, k, _r);
136 BT_ERR("Encrypt data error");
141 static int smp_rand(u8 *buf)
143 get_random_bytes(buf, 16);
148 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
149 u16 dlen, void *data)
152 struct l2cap_hdr *lh;
155 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
160 skb = bt_skb_alloc(len, GFP_ATOMIC);
164 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
165 lh->len = cpu_to_le16(sizeof(code) + dlen);
166 lh->cid = cpu_to_le16(L2CAP_CID_SMP);
168 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
170 memcpy(skb_put(skb, dlen), data, dlen);
175 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
177 struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
179 BT_DBG("code 0x%2.2x", code);
184 skb->priority = HCI_PRIO_MAX;
185 hci_send_acl(conn->hchan, skb, 0);
187 mod_timer(&conn->security_timer, jiffies +
188 msecs_to_jiffies(SMP_TIMEOUT));
191 static void build_pairing_cmd(struct l2cap_conn *conn,
192 struct smp_cmd_pairing *req,
193 struct smp_cmd_pairing *rsp,
199 if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->flags)) {
200 dist_keys = SMP_DIST_ENC_KEY;
201 authreq |= SMP_AUTH_BONDING;
205 req->io_capability = conn->hcon->io_capability;
206 req->oob_flag = SMP_OOB_NOT_PRESENT;
207 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
208 req->init_key_dist = dist_keys;
209 req->resp_key_dist = dist_keys;
210 req->auth_req = authreq;
214 rsp->io_capability = conn->hcon->io_capability;
215 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
216 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
217 rsp->init_key_dist = req->init_key_dist & dist_keys;
218 rsp->resp_key_dist = req->resp_key_dist & dist_keys;
219 rsp->auth_req = authreq;
222 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
224 struct smp_chan *smp = conn->smp_chan;
226 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
227 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
228 return SMP_ENC_KEY_SIZE;
230 smp->smp_key_size = max_key_size;
235 static void confirm_work(struct work_struct *work)
237 struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
238 struct l2cap_conn *conn = smp->conn;
239 struct crypto_blkcipher *tfm;
240 struct smp_cmd_pairing_confirm cp;
244 BT_DBG("conn %p", conn);
246 tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
248 reason = SMP_UNSPECIFIED;
255 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp, 0,
256 conn->src, conn->hcon->dst_type, conn->dst,
259 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
260 conn->hcon->dst_type, conn->dst, 0, conn->src,
263 reason = SMP_UNSPECIFIED;
267 swap128(res, cp.confirm_val);
268 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
273 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason), &reason);
274 smp_chan_destroy(conn);
277 static void random_work(struct work_struct *work)
279 struct smp_chan *smp = container_of(work, struct smp_chan, random);
280 struct l2cap_conn *conn = smp->conn;
281 struct hci_conn *hcon = conn->hcon;
282 struct crypto_blkcipher *tfm = smp->tfm;
283 u8 reason, confirm[16], res[16], key[16];
286 if (IS_ERR_OR_NULL(tfm)) {
287 reason = SMP_UNSPECIFIED;
291 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
294 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp, 0,
295 conn->src, hcon->dst_type, conn->dst,
298 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
299 hcon->dst_type, conn->dst, 0, conn->src,
302 reason = SMP_UNSPECIFIED;
306 swap128(res, confirm);
308 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
309 BT_ERR("Pairing failed (confirmation values mismatch)");
310 reason = SMP_CONFIRM_FAILED;
318 memset(rand, 0, sizeof(rand));
321 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
324 memset(stk + smp->smp_key_size, 0,
325 SMP_MAX_ENC_KEY_SIZE - smp->smp_key_size);
327 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend)) {
328 reason = SMP_UNSPECIFIED;
332 hci_le_start_enc(hcon, ediv, rand, stk);
333 hcon->enc_key_size = smp->smp_key_size;
335 u8 stk[16], r[16], rand[8];
338 memset(rand, 0, sizeof(rand));
341 swap128(smp->prnd, r);
342 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
344 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
347 memset(stk + smp->smp_key_size, 0,
348 SMP_MAX_ENC_KEY_SIZE - smp->smp_key_size);
350 hci_add_ltk(hcon->hdev, 0, conn->dst, smp->smp_key_size,
357 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason), &reason);
358 smp_chan_destroy(conn);
361 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
363 struct smp_chan *smp;
365 smp = kzalloc(sizeof(struct smp_chan), GFP_ATOMIC);
369 INIT_WORK(&smp->confirm, confirm_work);
370 INIT_WORK(&smp->random, random_work);
373 conn->smp_chan = smp;
375 hci_conn_hold(conn->hcon);
380 void smp_chan_destroy(struct l2cap_conn *conn)
382 kfree(conn->smp_chan);
383 hci_conn_put(conn->hcon);
386 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
388 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
389 struct smp_chan *smp;
393 BT_DBG("conn %p", conn);
395 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend))
396 smp = smp_chan_create(conn);
398 smp = conn->smp_chan;
400 smp->preq[0] = SMP_CMD_PAIRING_REQ;
401 memcpy(&smp->preq[1], req, sizeof(*req));
402 skb_pull(skb, sizeof(*req));
405 return SMP_OOB_NOT_AVAIL;
407 /* We didn't start the pairing, so no requirements */
408 build_pairing_cmd(conn, req, &rsp, SMP_AUTH_NONE);
410 key_size = min(req->max_key_size, rsp.max_key_size);
411 if (check_enc_key_size(conn, key_size))
412 return SMP_ENC_KEY_SIZE;
415 memset(smp->tk, 0, sizeof(smp->tk));
417 ret = smp_rand(smp->prnd);
419 return SMP_UNSPECIFIED;
421 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
422 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
424 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
429 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
431 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
432 struct smp_chan *smp = conn->smp_chan;
433 struct hci_dev *hdev = conn->hcon->hdev;
437 BT_DBG("conn %p", conn);
439 skb_pull(skb, sizeof(*rsp));
441 req = (void *) &smp->preq[1];
443 key_size = min(req->max_key_size, rsp->max_key_size);
444 if (check_enc_key_size(conn, key_size))
445 return SMP_ENC_KEY_SIZE;
448 return SMP_OOB_NOT_AVAIL;
451 memset(smp->tk, 0, sizeof(smp->tk));
453 ret = smp_rand(smp->prnd);
455 return SMP_UNSPECIFIED;
457 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
458 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
460 queue_work(hdev->workqueue, &smp->confirm);
465 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
467 struct smp_chan *smp = conn->smp_chan;
468 struct hci_dev *hdev = conn->hcon->hdev;
470 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
472 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
473 skb_pull(skb, sizeof(smp->pcnf));
475 if (conn->hcon->out) {
478 swap128(smp->prnd, random);
479 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
482 queue_work(hdev->workqueue, &smp->confirm);
488 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
490 struct smp_chan *smp = conn->smp_chan;
491 struct hci_dev *hdev = conn->hcon->hdev;
493 BT_DBG("conn %p", conn);
495 swap128(skb->data, smp->rrnd);
496 skb_pull(skb, sizeof(smp->rrnd));
498 queue_work(hdev->workqueue, &smp->random);
503 static u8 smp_ltk_encrypt(struct l2cap_conn *conn)
505 struct link_key *key;
506 struct key_master_id *master;
507 struct hci_conn *hcon = conn->hcon;
509 key = hci_find_link_key_type(hcon->hdev, conn->dst,
514 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND,
518 master = (void *) key->data;
519 hci_le_start_enc(hcon, master->ediv, master->rand,
521 hcon->enc_key_size = key->pin_len;
526 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
528 struct smp_cmd_security_req *rp = (void *) skb->data;
529 struct smp_cmd_pairing cp;
530 struct hci_conn *hcon = conn->hcon;
531 struct smp_chan *smp;
533 BT_DBG("conn %p", conn);
535 hcon->pending_sec_level = BT_SECURITY_MEDIUM;
537 if (smp_ltk_encrypt(conn))
540 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend))
543 smp = smp_chan_create(conn);
545 skb_pull(skb, sizeof(*rp));
547 memset(&cp, 0, sizeof(cp));
548 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
550 smp->preq[0] = SMP_CMD_PAIRING_REQ;
551 memcpy(&smp->preq[1], &cp, sizeof(cp));
553 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
558 int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
560 struct hci_conn *hcon = conn->hcon;
561 struct smp_chan *smp = conn->smp_chan;
563 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
565 if (!lmp_host_le_capable(hcon->hdev))
568 if (sec_level == BT_SECURITY_LOW)
571 if (hcon->sec_level >= sec_level)
574 if (hcon->link_mode & HCI_LM_MASTER)
575 if (smp_ltk_encrypt(conn))
578 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend))
581 smp = smp_chan_create(conn);
583 if (hcon->link_mode & HCI_LM_MASTER) {
584 struct smp_cmd_pairing cp;
586 build_pairing_cmd(conn, &cp, NULL, SMP_AUTH_NONE);
587 smp->preq[0] = SMP_CMD_PAIRING_REQ;
588 memcpy(&smp->preq[1], &cp, sizeof(cp));
590 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
592 struct smp_cmd_security_req cp;
593 cp.auth_req = SMP_AUTH_NONE;
594 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
598 hcon->pending_sec_level = sec_level;
603 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
605 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
606 struct smp_chan *smp = conn->smp_chan;
608 skb_pull(skb, sizeof(*rp));
610 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
615 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
617 struct smp_cmd_master_ident *rp = (void *) skb->data;
618 struct smp_chan *smp = conn->smp_chan;
620 skb_pull(skb, sizeof(*rp));
622 hci_add_ltk(conn->hcon->hdev, 1, conn->src, smp->smp_key_size,
623 rp->ediv, rp->rand, smp->tk);
625 smp_distribute_keys(conn, 1);
630 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
632 __u8 code = skb->data[0];
636 if (!lmp_host_le_capable(conn->hcon->hdev)) {
638 reason = SMP_PAIRING_NOTSUPP;
642 skb_pull(skb, sizeof(code));
645 case SMP_CMD_PAIRING_REQ:
646 reason = smp_cmd_pairing_req(conn, skb);
649 case SMP_CMD_PAIRING_FAIL:
654 case SMP_CMD_PAIRING_RSP:
655 reason = smp_cmd_pairing_rsp(conn, skb);
658 case SMP_CMD_SECURITY_REQ:
659 reason = smp_cmd_security_req(conn, skb);
662 case SMP_CMD_PAIRING_CONFIRM:
663 reason = smp_cmd_pairing_confirm(conn, skb);
666 case SMP_CMD_PAIRING_RANDOM:
667 reason = smp_cmd_pairing_random(conn, skb);
670 case SMP_CMD_ENCRYPT_INFO:
671 reason = smp_cmd_encrypt_info(conn, skb);
674 case SMP_CMD_MASTER_IDENT:
675 reason = smp_cmd_master_ident(conn, skb);
678 case SMP_CMD_IDENT_INFO:
679 case SMP_CMD_IDENT_ADDR_INFO:
680 case SMP_CMD_SIGN_INFO:
686 BT_DBG("Unknown command code 0x%2.2x", code);
688 reason = SMP_CMD_NOTSUPP;
695 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
702 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
704 struct smp_cmd_pairing *req, *rsp;
705 struct smp_chan *smp = conn->smp_chan;
708 BT_DBG("conn %p force %d", conn, force);
710 if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend))
713 rsp = (void *) &smp->prsp[1];
715 /* The responder sends its keys first */
716 if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
719 req = (void *) &smp->preq[1];
721 if (conn->hcon->out) {
722 keydist = &rsp->init_key_dist;
723 *keydist &= req->init_key_dist;
725 keydist = &rsp->resp_key_dist;
726 *keydist &= req->resp_key_dist;
730 BT_DBG("keydist 0x%x", *keydist);
732 if (*keydist & SMP_DIST_ENC_KEY) {
733 struct smp_cmd_encrypt_info enc;
734 struct smp_cmd_master_ident ident;
737 get_random_bytes(enc.ltk, sizeof(enc.ltk));
738 get_random_bytes(&ediv, sizeof(ediv));
739 get_random_bytes(ident.rand, sizeof(ident.rand));
741 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
743 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, smp->smp_key_size,
744 ediv, ident.rand, enc.ltk);
746 ident.ediv = cpu_to_le16(ediv);
748 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
750 *keydist &= ~SMP_DIST_ENC_KEY;
753 if (*keydist & SMP_DIST_ID_KEY) {
754 struct smp_cmd_ident_addr_info addrinfo;
755 struct smp_cmd_ident_info idinfo;
757 /* Send a dummy key */
758 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
760 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
762 /* Just public address */
763 memset(&addrinfo, 0, sizeof(addrinfo));
764 bacpy(&addrinfo.bdaddr, conn->src);
766 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
769 *keydist &= ~SMP_DIST_ID_KEY;
772 if (*keydist & SMP_DIST_SIGN) {
773 struct smp_cmd_sign_info sign;
775 /* Send a dummy key */
776 get_random_bytes(sign.csrk, sizeof(sign.csrk));
778 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
780 *keydist &= ~SMP_DIST_SIGN;
783 if (conn->hcon->out || force) {
784 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend);
785 del_timer(&conn->security_timer);
786 smp_chan_destroy(conn);