Bluetooth: Reset the security timer when a command is queued
[linux-2.6.git] / net / bluetooth / smp.c
blob20c82c7000acff34fcd8004cfc25ba0ec6c9de80
1 /*
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])
35 int i;
36 for (i = 0; i < 16; i++)
37 dst[15 - i] = src[i];
40 static inline void swap56(u8 src[7], u8 dst[7])
42 int i;
43 for (i = 0; i < 7; i++)
44 dst[6 - i] = src[i];
47 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
49 struct blkcipher_desc desc;
50 struct scatterlist sg;
51 int err, iv_len;
52 unsigned char iv[128];
54 if (tfm == NULL) {
55 BT_ERR("tfm %p", tfm);
56 return -EINVAL;
59 desc.tfm = tfm;
60 desc.flags = 0;
62 err = crypto_blkcipher_setkey(tfm, k, 16);
63 if (err) {
64 BT_ERR("cipher setkey failed: %d", err);
65 return err;
68 sg_init_one(&sg, r, 16);
70 iv_len = crypto_blkcipher_ivsize(tfm);
71 if (iv_len) {
72 memset(&iv, 0xff, iv_len);
73 crypto_blkcipher_set_iv(tfm, iv, iv_len);
76 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
77 if (err)
78 BT_ERR("Encrypt data error %d", err);
80 return 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])
87 u8 p1[16], p2[16];
88 int err;
90 memset(p1, 0, 16);
92 /* p1 = pres || preq || _rat || _iat */
93 swap56(pres, p1);
94 swap56(preq, p1 + 7);
95 p1[14] = _rat;
96 p1[15] = _iat;
98 memset(p2, 0, 16);
100 /* p2 = padding || ia || ra */
101 baswap((bdaddr_t *) (p2 + 4), ia);
102 baswap((bdaddr_t *) (p2 + 10), ra);
104 /* res = r XOR p1 */
105 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
107 /* res = e(k, res) */
108 err = smp_e(tfm, k, res);
109 if (err) {
110 BT_ERR("Encrypt data error");
111 return err;
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);
119 if (err)
120 BT_ERR("Encrypt data error");
122 return err;
125 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
126 u8 r1[16], u8 r2[16], u8 _r[16])
128 int err;
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);
135 if (err)
136 BT_ERR("Encrypt data error");
138 return err;
141 static int smp_rand(u8 *buf)
143 get_random_bytes(buf, 16);
145 return 0;
148 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
149 u16 dlen, void *data)
151 struct sk_buff *skb;
152 struct l2cap_hdr *lh;
153 int len;
155 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
157 if (len > conn->mtu)
158 return NULL;
160 skb = bt_skb_alloc(len, GFP_ATOMIC);
161 if (!skb)
162 return NULL;
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);
172 return skb;
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);
181 if (!skb)
182 return;
184 hci_send_acl(conn->hcon, skb, 0);
186 mod_timer(&conn->security_timer, jiffies +
187 msecs_to_jiffies(SMP_TIMEOUT));
190 static __u8 seclevel_to_authreq(__u8 level)
192 switch (level) {
193 case BT_SECURITY_HIGH:
194 /* Right now we don't support bonding */
195 return SMP_AUTH_MITM;
197 default:
198 return SMP_AUTH_NONE;
202 static void build_pairing_cmd(struct l2cap_conn *conn,
203 struct smp_cmd_pairing *req,
204 struct smp_cmd_pairing *rsp,
205 __u8 authreq)
207 u8 dist_keys;
209 dist_keys = 0;
210 if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->flags)) {
211 dist_keys = SMP_DIST_ENC_KEY | SMP_DIST_ID_KEY | SMP_DIST_SIGN;
212 authreq |= SMP_AUTH_BONDING;
215 if (rsp == NULL) {
216 req->io_capability = conn->hcon->io_capability;
217 req->oob_flag = SMP_OOB_NOT_PRESENT;
218 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
219 req->init_key_dist = dist_keys;
220 req->resp_key_dist = dist_keys;
221 req->auth_req = authreq;
222 return;
225 rsp->io_capability = conn->hcon->io_capability;
226 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
227 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
228 rsp->init_key_dist = req->init_key_dist & dist_keys;
229 rsp->resp_key_dist = req->resp_key_dist & dist_keys;
230 rsp->auth_req = authreq;
233 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
235 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
236 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
237 return SMP_ENC_KEY_SIZE;
239 conn->smp_key_size = max_key_size;
241 return 0;
244 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
246 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
247 u8 key_size;
249 BT_DBG("conn %p", conn);
251 conn->preq[0] = SMP_CMD_PAIRING_REQ;
252 memcpy(&conn->preq[1], req, sizeof(*req));
253 skb_pull(skb, sizeof(*req));
255 if (req->oob_flag)
256 return SMP_OOB_NOT_AVAIL;
258 /* We didn't start the pairing, so no requirements */
259 build_pairing_cmd(conn, req, &rsp, SMP_AUTH_NONE);
261 key_size = min(req->max_key_size, rsp.max_key_size);
262 if (check_enc_key_size(conn, key_size))
263 return SMP_ENC_KEY_SIZE;
265 /* Just works */
266 memset(conn->tk, 0, sizeof(conn->tk));
268 conn->prsp[0] = SMP_CMD_PAIRING_RSP;
269 memcpy(&conn->prsp[1], &rsp, sizeof(rsp));
271 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
273 return 0;
276 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
278 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
279 struct smp_cmd_pairing_confirm cp;
280 struct crypto_blkcipher *tfm = conn->hcon->hdev->tfm;
281 int ret;
282 u8 res[16], key_size;
284 BT_DBG("conn %p", conn);
286 skb_pull(skb, sizeof(*rsp));
288 req = (void *) &conn->preq[1];
290 key_size = min(req->max_key_size, rsp->max_key_size);
291 if (check_enc_key_size(conn, key_size))
292 return SMP_ENC_KEY_SIZE;
294 if (rsp->oob_flag)
295 return SMP_OOB_NOT_AVAIL;
297 /* Just works */
298 memset(conn->tk, 0, sizeof(conn->tk));
300 conn->prsp[0] = SMP_CMD_PAIRING_RSP;
301 memcpy(&conn->prsp[1], rsp, sizeof(*rsp));
303 ret = smp_rand(conn->prnd);
304 if (ret)
305 return SMP_UNSPECIFIED;
307 ret = smp_c1(tfm, conn->tk, conn->prnd, conn->preq, conn->prsp, 0,
308 conn->src, conn->hcon->dst_type, conn->dst, res);
309 if (ret)
310 return SMP_UNSPECIFIED;
312 swap128(res, cp.confirm_val);
314 smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
316 return 0;
319 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
321 struct crypto_blkcipher *tfm = conn->hcon->hdev->tfm;
323 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
325 memcpy(conn->pcnf, skb->data, sizeof(conn->pcnf));
326 skb_pull(skb, sizeof(conn->pcnf));
328 if (conn->hcon->out) {
329 u8 random[16];
331 swap128(conn->prnd, random);
332 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
333 random);
334 } else {
335 struct smp_cmd_pairing_confirm cp;
336 int ret;
337 u8 res[16];
339 ret = smp_rand(conn->prnd);
340 if (ret)
341 return SMP_UNSPECIFIED;
343 ret = smp_c1(tfm, conn->tk, conn->prnd, conn->preq, conn->prsp,
344 conn->hcon->dst_type, conn->dst,
345 0, conn->src, res);
346 if (ret)
347 return SMP_CONFIRM_FAILED;
349 swap128(res, cp.confirm_val);
351 smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
354 return 0;
357 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
359 struct hci_conn *hcon = conn->hcon;
360 struct crypto_blkcipher *tfm = hcon->hdev->tfm;
361 int ret;
362 u8 key[16], res[16], random[16], confirm[16];
364 swap128(skb->data, random);
365 skb_pull(skb, sizeof(random));
367 if (conn->hcon->out)
368 ret = smp_c1(tfm, conn->tk, random, conn->preq, conn->prsp, 0,
369 conn->src, conn->hcon->dst_type, conn->dst,
370 res);
371 else
372 ret = smp_c1(tfm, conn->tk, random, conn->preq, conn->prsp,
373 conn->hcon->dst_type, conn->dst, 0, conn->src,
374 res);
375 if (ret)
376 return SMP_UNSPECIFIED;
378 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
380 swap128(res, confirm);
382 if (memcmp(conn->pcnf, confirm, sizeof(conn->pcnf)) != 0) {
383 BT_ERR("Pairing failed (confirmation values mismatch)");
384 return SMP_CONFIRM_FAILED;
387 if (conn->hcon->out) {
388 u8 stk[16], rand[8];
389 __le16 ediv;
391 memset(rand, 0, sizeof(rand));
392 ediv = 0;
394 smp_s1(tfm, conn->tk, random, conn->prnd, key);
395 swap128(key, stk);
397 memset(stk + conn->smp_key_size, 0,
398 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
400 hci_le_start_enc(hcon, ediv, rand, stk);
401 hcon->enc_key_size = conn->smp_key_size;
402 } else {
403 u8 stk[16], r[16], rand[8];
404 __le16 ediv;
406 memset(rand, 0, sizeof(rand));
407 ediv = 0;
409 swap128(conn->prnd, r);
410 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
412 smp_s1(tfm, conn->tk, conn->prnd, random, key);
413 swap128(key, stk);
415 memset(stk + conn->smp_key_size, 0,
416 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
418 hci_add_ltk(conn->hcon->hdev, 0, conn->dst, conn->smp_key_size,
419 ediv, rand, stk);
422 return 0;
425 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
427 struct smp_cmd_security_req *rp = (void *) skb->data;
428 struct smp_cmd_pairing cp;
429 struct hci_conn *hcon = conn->hcon;
431 BT_DBG("conn %p", conn);
433 if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
434 return 0;
436 skb_pull(skb, sizeof(*rp));
438 memset(&cp, 0, sizeof(cp));
439 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
441 conn->preq[0] = SMP_CMD_PAIRING_REQ;
442 memcpy(&conn->preq[1], &cp, sizeof(cp));
444 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
446 set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend);
448 return 0;
451 int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
453 struct hci_conn *hcon = conn->hcon;
454 __u8 authreq;
456 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
458 if (!lmp_host_le_capable(hcon->hdev))
459 return 1;
461 if (IS_ERR(hcon->hdev->tfm))
462 return 1;
464 if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
465 return 0;
467 if (sec_level == BT_SECURITY_LOW)
468 return 1;
470 if (hcon->sec_level >= sec_level)
471 return 1;
473 authreq = seclevel_to_authreq(sec_level);
475 if (hcon->link_mode & HCI_LM_MASTER) {
476 struct smp_cmd_pairing cp;
477 struct link_key *key;
479 key = hci_find_link_key_type(hcon->hdev, conn->dst,
480 HCI_LK_SMP_LTK);
481 if (key) {
482 struct key_master_id *master = (void *) key->data;
484 hci_le_start_enc(hcon, master->ediv, master->rand,
485 key->val);
486 hcon->enc_key_size = key->pin_len;
488 goto done;
491 build_pairing_cmd(conn, &cp, NULL, authreq);
492 conn->preq[0] = SMP_CMD_PAIRING_REQ;
493 memcpy(&conn->preq[1], &cp, sizeof(cp));
495 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
496 } else {
497 struct smp_cmd_security_req cp;
498 cp.auth_req = authreq;
499 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
502 done:
503 hcon->pending_sec_level = sec_level;
504 set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend);
506 return 0;
509 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
511 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
513 skb_pull(skb, sizeof(*rp));
515 memcpy(conn->tk, rp->ltk, sizeof(conn->tk));
517 return 0;
520 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
522 struct smp_cmd_master_ident *rp = (void *) skb->data;
524 skb_pull(skb, sizeof(*rp));
526 hci_add_ltk(conn->hcon->hdev, 1, conn->src, conn->smp_key_size,
527 rp->ediv, rp->rand, conn->tk);
529 smp_distribute_keys(conn, 1);
531 return 0;
534 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
536 __u8 code = skb->data[0];
537 __u8 reason;
538 int err = 0;
540 if (!lmp_host_le_capable(conn->hcon->hdev)) {
541 err = -ENOTSUPP;
542 reason = SMP_PAIRING_NOTSUPP;
543 goto done;
546 if (IS_ERR(conn->hcon->hdev->tfm)) {
547 err = PTR_ERR(conn->hcon->hdev->tfm);
548 reason = SMP_PAIRING_NOTSUPP;
549 goto done;
552 skb_pull(skb, sizeof(code));
554 switch (code) {
555 case SMP_CMD_PAIRING_REQ:
556 reason = smp_cmd_pairing_req(conn, skb);
557 break;
559 case SMP_CMD_PAIRING_FAIL:
560 reason = 0;
561 err = -EPERM;
562 break;
564 case SMP_CMD_PAIRING_RSP:
565 reason = smp_cmd_pairing_rsp(conn, skb);
566 break;
568 case SMP_CMD_SECURITY_REQ:
569 reason = smp_cmd_security_req(conn, skb);
570 break;
572 case SMP_CMD_PAIRING_CONFIRM:
573 reason = smp_cmd_pairing_confirm(conn, skb);
574 break;
576 case SMP_CMD_PAIRING_RANDOM:
577 reason = smp_cmd_pairing_random(conn, skb);
578 break;
580 case SMP_CMD_ENCRYPT_INFO:
581 reason = smp_cmd_encrypt_info(conn, skb);
582 break;
584 case SMP_CMD_MASTER_IDENT:
585 reason = smp_cmd_master_ident(conn, skb);
586 break;
588 case SMP_CMD_IDENT_INFO:
589 case SMP_CMD_IDENT_ADDR_INFO:
590 case SMP_CMD_SIGN_INFO:
591 /* Just ignored */
592 reason = 0;
593 break;
595 default:
596 BT_DBG("Unknown command code 0x%2.2x", code);
598 reason = SMP_CMD_NOTSUPP;
599 err = -EOPNOTSUPP;
600 goto done;
603 done:
604 if (reason)
605 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
606 &reason);
608 kfree_skb(skb);
609 return err;
612 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
614 struct smp_cmd_pairing *req, *rsp;
615 __u8 *keydist;
617 BT_DBG("conn %p force %d", conn, force);
619 if (IS_ERR(conn->hcon->hdev->tfm))
620 return PTR_ERR(conn->hcon->hdev->tfm);
622 rsp = (void *) &conn->prsp[1];
624 /* The responder sends its keys first */
625 if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
626 return 0;
628 req = (void *) &conn->preq[1];
630 if (conn->hcon->out) {
631 keydist = &rsp->init_key_dist;
632 *keydist &= req->init_key_dist;
633 } else {
634 keydist = &rsp->resp_key_dist;
635 *keydist &= req->resp_key_dist;
639 BT_DBG("keydist 0x%x", *keydist);
641 if (*keydist & SMP_DIST_ENC_KEY) {
642 struct smp_cmd_encrypt_info enc;
643 struct smp_cmd_master_ident ident;
644 __le16 ediv;
646 get_random_bytes(enc.ltk, sizeof(enc.ltk));
647 get_random_bytes(&ediv, sizeof(ediv));
648 get_random_bytes(ident.rand, sizeof(ident.rand));
650 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
652 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, conn->smp_key_size,
653 ediv, ident.rand, enc.ltk);
655 ident.ediv = cpu_to_le16(ediv);
657 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
659 *keydist &= ~SMP_DIST_ENC_KEY;
662 if (*keydist & SMP_DIST_ID_KEY) {
663 struct smp_cmd_ident_addr_info addrinfo;
664 struct smp_cmd_ident_info idinfo;
666 /* Send a dummy key */
667 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
669 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
671 /* Just public address */
672 memset(&addrinfo, 0, sizeof(addrinfo));
673 bacpy(&addrinfo.bdaddr, conn->src);
675 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
676 &addrinfo);
678 *keydist &= ~SMP_DIST_ID_KEY;
681 if (*keydist & SMP_DIST_SIGN) {
682 struct smp_cmd_sign_info sign;
684 /* Send a dummy key */
685 get_random_bytes(sign.csrk, sizeof(sign.csrk));
687 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
689 *keydist &= ~SMP_DIST_SIGN;
692 return 0;