Linux 3.6-rc6
[linux/fpc-iii.git] / net / bluetooth / smp.c
blob8c225ef349cd733614dfeaca0f2f1bceccdae064
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 <linux/crypto.h>
24 #include <linux/scatterlist.h>
25 #include <crypto/b128ops.h>
27 #include <net/bluetooth/bluetooth.h>
28 #include <net/bluetooth/hci_core.h>
29 #include <net/bluetooth/l2cap.h>
30 #include <net/bluetooth/mgmt.h>
31 #include <net/bluetooth/smp.h>
33 #define SMP_TIMEOUT msecs_to_jiffies(30000)
35 static inline void swap128(u8 src[16], u8 dst[16])
37 int i;
38 for (i = 0; i < 16; i++)
39 dst[15 - i] = src[i];
42 static inline void swap56(u8 src[7], u8 dst[7])
44 int i;
45 for (i = 0; i < 7; i++)
46 dst[6 - i] = src[i];
49 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
51 struct blkcipher_desc desc;
52 struct scatterlist sg;
53 int err, iv_len;
54 unsigned char iv[128];
56 if (tfm == NULL) {
57 BT_ERR("tfm %p", tfm);
58 return -EINVAL;
61 desc.tfm = tfm;
62 desc.flags = 0;
64 err = crypto_blkcipher_setkey(tfm, k, 16);
65 if (err) {
66 BT_ERR("cipher setkey failed: %d", err);
67 return err;
70 sg_init_one(&sg, r, 16);
72 iv_len = crypto_blkcipher_ivsize(tfm);
73 if (iv_len) {
74 memset(&iv, 0xff, iv_len);
75 crypto_blkcipher_set_iv(tfm, iv, iv_len);
78 err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
79 if (err)
80 BT_ERR("Encrypt data error %d", err);
82 return err;
85 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
86 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
87 u8 _rat, bdaddr_t *ra, u8 res[16])
89 u8 p1[16], p2[16];
90 int err;
92 memset(p1, 0, 16);
94 /* p1 = pres || preq || _rat || _iat */
95 swap56(pres, p1);
96 swap56(preq, p1 + 7);
97 p1[14] = _rat;
98 p1[15] = _iat;
100 memset(p2, 0, 16);
102 /* p2 = padding || ia || ra */
103 baswap((bdaddr_t *) (p2 + 4), ia);
104 baswap((bdaddr_t *) (p2 + 10), ra);
106 /* res = r XOR p1 */
107 u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
109 /* res = e(k, res) */
110 err = smp_e(tfm, k, res);
111 if (err) {
112 BT_ERR("Encrypt data error");
113 return err;
116 /* res = res XOR p2 */
117 u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
119 /* res = e(k, res) */
120 err = smp_e(tfm, k, res);
121 if (err)
122 BT_ERR("Encrypt data error");
124 return err;
127 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
128 u8 r1[16], u8 r2[16], u8 _r[16])
130 int err;
132 /* Just least significant octets from r1 and r2 are considered */
133 memcpy(_r, r1 + 8, 8);
134 memcpy(_r + 8, r2 + 8, 8);
136 err = smp_e(tfm, k, _r);
137 if (err)
138 BT_ERR("Encrypt data error");
140 return err;
143 static int smp_rand(u8 *buf)
145 get_random_bytes(buf, 16);
147 return 0;
150 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
151 u16 dlen, void *data)
153 struct sk_buff *skb;
154 struct l2cap_hdr *lh;
155 int len;
157 len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
159 if (len > conn->mtu)
160 return NULL;
162 skb = bt_skb_alloc(len, GFP_ATOMIC);
163 if (!skb)
164 return NULL;
166 lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
167 lh->len = cpu_to_le16(sizeof(code) + dlen);
168 lh->cid = cpu_to_le16(L2CAP_CID_SMP);
170 memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
172 memcpy(skb_put(skb, dlen), data, dlen);
174 return skb;
177 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
179 struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
181 BT_DBG("code 0x%2.2x", code);
183 if (!skb)
184 return;
186 skb->priority = HCI_PRIO_MAX;
187 hci_send_acl(conn->hchan, skb, 0);
189 cancel_delayed_work_sync(&conn->security_timer);
190 schedule_delayed_work(&conn->security_timer, SMP_TIMEOUT);
193 static __u8 authreq_to_seclevel(__u8 authreq)
195 if (authreq & SMP_AUTH_MITM)
196 return BT_SECURITY_HIGH;
197 else
198 return BT_SECURITY_MEDIUM;
201 static __u8 seclevel_to_authreq(__u8 sec_level)
203 switch (sec_level) {
204 case BT_SECURITY_HIGH:
205 return SMP_AUTH_MITM | SMP_AUTH_BONDING;
206 case BT_SECURITY_MEDIUM:
207 return SMP_AUTH_BONDING;
208 default:
209 return SMP_AUTH_NONE;
213 static void build_pairing_cmd(struct l2cap_conn *conn,
214 struct smp_cmd_pairing *req,
215 struct smp_cmd_pairing *rsp,
216 __u8 authreq)
218 u8 dist_keys = 0;
220 if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->dev_flags)) {
221 dist_keys = SMP_DIST_ENC_KEY;
222 authreq |= SMP_AUTH_BONDING;
223 } else {
224 authreq &= ~SMP_AUTH_BONDING;
227 if (rsp == NULL) {
228 req->io_capability = conn->hcon->io_capability;
229 req->oob_flag = SMP_OOB_NOT_PRESENT;
230 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
231 req->init_key_dist = 0;
232 req->resp_key_dist = dist_keys;
233 req->auth_req = authreq;
234 return;
237 rsp->io_capability = conn->hcon->io_capability;
238 rsp->oob_flag = SMP_OOB_NOT_PRESENT;
239 rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
240 rsp->init_key_dist = 0;
241 rsp->resp_key_dist = req->resp_key_dist & dist_keys;
242 rsp->auth_req = authreq;
245 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
247 struct smp_chan *smp = conn->smp_chan;
249 if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
250 (max_key_size < SMP_MIN_ENC_KEY_SIZE))
251 return SMP_ENC_KEY_SIZE;
253 smp->enc_key_size = max_key_size;
255 return 0;
258 static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)
260 struct hci_conn *hcon = conn->hcon;
262 if (send)
263 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
264 &reason);
266 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->hcon->flags);
267 mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,
268 hcon->dst_type, reason);
270 cancel_delayed_work_sync(&conn->security_timer);
272 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
273 smp_chan_destroy(conn);
276 #define JUST_WORKS 0x00
277 #define JUST_CFM 0x01
278 #define REQ_PASSKEY 0x02
279 #define CFM_PASSKEY 0x03
280 #define REQ_OOB 0x04
281 #define OVERLAP 0xFF
283 static const u8 gen_method[5][5] = {
284 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
285 { JUST_WORKS, JUST_CFM, REQ_PASSKEY, JUST_WORKS, REQ_PASSKEY },
286 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, CFM_PASSKEY },
287 { JUST_WORKS, JUST_CFM, JUST_WORKS, JUST_WORKS, JUST_CFM },
288 { CFM_PASSKEY, CFM_PASSKEY, REQ_PASSKEY, JUST_WORKS, OVERLAP },
291 static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
292 u8 local_io, u8 remote_io)
294 struct hci_conn *hcon = conn->hcon;
295 struct smp_chan *smp = conn->smp_chan;
296 u8 method;
297 u32 passkey = 0;
298 int ret = 0;
300 /* Initialize key for JUST WORKS */
301 memset(smp->tk, 0, sizeof(smp->tk));
302 clear_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
304 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth, local_io, remote_io);
306 /* If neither side wants MITM, use JUST WORKS */
307 /* If either side has unknown io_caps, use JUST WORKS */
308 /* Otherwise, look up method from the table */
309 if (!(auth & SMP_AUTH_MITM) ||
310 local_io > SMP_IO_KEYBOARD_DISPLAY ||
311 remote_io > SMP_IO_KEYBOARD_DISPLAY)
312 method = JUST_WORKS;
313 else
314 method = gen_method[remote_io][local_io];
316 /* If not bonding, don't ask user to confirm a Zero TK */
317 if (!(auth & SMP_AUTH_BONDING) && method == JUST_CFM)
318 method = JUST_WORKS;
320 /* If Just Works, Continue with Zero TK */
321 if (method == JUST_WORKS) {
322 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
323 return 0;
326 /* Not Just Works/Confirm results in MITM Authentication */
327 if (method != JUST_CFM)
328 set_bit(SMP_FLAG_MITM_AUTH, &smp->smp_flags);
330 /* If both devices have Keyoard-Display I/O, the master
331 * Confirms and the slave Enters the passkey.
333 if (method == OVERLAP) {
334 if (hcon->link_mode & HCI_LM_MASTER)
335 method = CFM_PASSKEY;
336 else
337 method = REQ_PASSKEY;
340 /* Generate random passkey. Not valid until confirmed. */
341 if (method == CFM_PASSKEY) {
342 u8 key[16];
344 memset(key, 0, sizeof(key));
345 get_random_bytes(&passkey, sizeof(passkey));
346 passkey %= 1000000;
347 put_unaligned_le32(passkey, key);
348 swap128(key, smp->tk);
349 BT_DBG("PassKey: %d", passkey);
352 hci_dev_lock(hcon->hdev);
354 if (method == REQ_PASSKEY)
355 ret = mgmt_user_passkey_request(hcon->hdev, conn->dst,
356 hcon->type, hcon->dst_type);
357 else
358 ret = mgmt_user_confirm_request(hcon->hdev, conn->dst,
359 hcon->type, hcon->dst_type,
360 cpu_to_le32(passkey), 0);
362 hci_dev_unlock(hcon->hdev);
364 return ret;
367 static void confirm_work(struct work_struct *work)
369 struct smp_chan *smp = container_of(work, struct smp_chan, confirm);
370 struct l2cap_conn *conn = smp->conn;
371 struct crypto_blkcipher *tfm;
372 struct smp_cmd_pairing_confirm cp;
373 int ret;
374 u8 res[16], reason;
376 BT_DBG("conn %p", conn);
378 tfm = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
379 if (IS_ERR(tfm)) {
380 reason = SMP_UNSPECIFIED;
381 goto error;
384 smp->tfm = tfm;
386 if (conn->hcon->out)
387 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp, 0,
388 conn->src, conn->hcon->dst_type, conn->dst, res);
389 else
390 ret = smp_c1(tfm, smp->tk, smp->prnd, smp->preq, smp->prsp,
391 conn->hcon->dst_type, conn->dst, 0, conn->src,
392 res);
393 if (ret) {
394 reason = SMP_UNSPECIFIED;
395 goto error;
398 clear_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
400 swap128(res, cp.confirm_val);
401 smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
403 return;
405 error:
406 smp_failure(conn, reason, 1);
409 static void random_work(struct work_struct *work)
411 struct smp_chan *smp = container_of(work, struct smp_chan, random);
412 struct l2cap_conn *conn = smp->conn;
413 struct hci_conn *hcon = conn->hcon;
414 struct crypto_blkcipher *tfm = smp->tfm;
415 u8 reason, confirm[16], res[16], key[16];
416 int ret;
418 if (IS_ERR_OR_NULL(tfm)) {
419 reason = SMP_UNSPECIFIED;
420 goto error;
423 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
425 if (hcon->out)
426 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp, 0,
427 conn->src, hcon->dst_type, conn->dst, res);
428 else
429 ret = smp_c1(tfm, smp->tk, smp->rrnd, smp->preq, smp->prsp,
430 hcon->dst_type, conn->dst, 0, conn->src, res);
431 if (ret) {
432 reason = SMP_UNSPECIFIED;
433 goto error;
436 swap128(res, confirm);
438 if (memcmp(smp->pcnf, confirm, sizeof(smp->pcnf)) != 0) {
439 BT_ERR("Pairing failed (confirmation values mismatch)");
440 reason = SMP_CONFIRM_FAILED;
441 goto error;
444 if (hcon->out) {
445 u8 stk[16], rand[8];
446 __le16 ediv;
448 memset(rand, 0, sizeof(rand));
449 ediv = 0;
451 smp_s1(tfm, smp->tk, smp->rrnd, smp->prnd, key);
452 swap128(key, stk);
454 memset(stk + smp->enc_key_size, 0,
455 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
457 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags)) {
458 reason = SMP_UNSPECIFIED;
459 goto error;
462 hci_le_start_enc(hcon, ediv, rand, stk);
463 hcon->enc_key_size = smp->enc_key_size;
464 } else {
465 u8 stk[16], r[16], rand[8];
466 __le16 ediv;
468 memset(rand, 0, sizeof(rand));
469 ediv = 0;
471 swap128(smp->prnd, r);
472 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
474 smp_s1(tfm, smp->tk, smp->prnd, smp->rrnd, key);
475 swap128(key, stk);
477 memset(stk + smp->enc_key_size, 0,
478 SMP_MAX_ENC_KEY_SIZE - smp->enc_key_size);
480 hci_add_ltk(hcon->hdev, conn->dst, hcon->dst_type,
481 HCI_SMP_STK_SLAVE, 0, 0, stk, smp->enc_key_size,
482 ediv, rand);
485 return;
487 error:
488 smp_failure(conn, reason, 1);
491 static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
493 struct smp_chan *smp;
495 smp = kzalloc(sizeof(struct smp_chan), GFP_ATOMIC);
496 if (!smp)
497 return NULL;
499 INIT_WORK(&smp->confirm, confirm_work);
500 INIT_WORK(&smp->random, random_work);
502 smp->conn = conn;
503 conn->smp_chan = smp;
504 conn->hcon->smp_conn = conn;
506 hci_conn_hold(conn->hcon);
508 return smp;
511 void smp_chan_destroy(struct l2cap_conn *conn)
513 struct smp_chan *smp = conn->smp_chan;
515 BUG_ON(!smp);
517 if (smp->tfm)
518 crypto_free_blkcipher(smp->tfm);
520 kfree(smp);
521 conn->smp_chan = NULL;
522 conn->hcon->smp_conn = NULL;
523 hci_conn_put(conn->hcon);
526 int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
528 struct l2cap_conn *conn = hcon->smp_conn;
529 struct smp_chan *smp;
530 u32 value;
531 u8 key[16];
533 BT_DBG("");
535 if (!conn)
536 return -ENOTCONN;
538 smp = conn->smp_chan;
540 switch (mgmt_op) {
541 case MGMT_OP_USER_PASSKEY_REPLY:
542 value = le32_to_cpu(passkey);
543 memset(key, 0, sizeof(key));
544 BT_DBG("PassKey: %d", value);
545 put_unaligned_le32(value, key);
546 swap128(key, smp->tk);
547 /* Fall Through */
548 case MGMT_OP_USER_CONFIRM_REPLY:
549 set_bit(SMP_FLAG_TK_VALID, &smp->smp_flags);
550 break;
551 case MGMT_OP_USER_PASSKEY_NEG_REPLY:
552 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
553 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
554 return 0;
555 default:
556 smp_failure(conn, SMP_PASSKEY_ENTRY_FAILED, 1);
557 return -EOPNOTSUPP;
560 /* If it is our turn to send Pairing Confirm, do so now */
561 if (test_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags))
562 queue_work(hcon->hdev->workqueue, &smp->confirm);
564 return 0;
567 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
569 struct smp_cmd_pairing rsp, *req = (void *) skb->data;
570 struct smp_chan *smp;
571 u8 key_size;
572 u8 auth = SMP_AUTH_NONE;
573 int ret;
575 BT_DBG("conn %p", conn);
577 if (conn->hcon->link_mode & HCI_LM_MASTER)
578 return SMP_CMD_NOTSUPP;
580 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
581 smp = smp_chan_create(conn);
582 else
583 smp = conn->smp_chan;
585 if (!smp)
586 return SMP_UNSPECIFIED;
588 smp->preq[0] = SMP_CMD_PAIRING_REQ;
589 memcpy(&smp->preq[1], req, sizeof(*req));
590 skb_pull(skb, sizeof(*req));
592 /* We didn't start the pairing, so match remote */
593 if (req->auth_req & SMP_AUTH_BONDING)
594 auth = req->auth_req;
596 conn->hcon->pending_sec_level = authreq_to_seclevel(auth);
598 build_pairing_cmd(conn, req, &rsp, auth);
600 key_size = min(req->max_key_size, rsp.max_key_size);
601 if (check_enc_key_size(conn, key_size))
602 return SMP_ENC_KEY_SIZE;
604 ret = smp_rand(smp->prnd);
605 if (ret)
606 return SMP_UNSPECIFIED;
608 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
609 memcpy(&smp->prsp[1], &rsp, sizeof(rsp));
611 smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
613 /* Request setup of TK */
614 ret = tk_request(conn, 0, auth, rsp.io_capability, req->io_capability);
615 if (ret)
616 return SMP_UNSPECIFIED;
618 return 0;
621 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
623 struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
624 struct smp_chan *smp = conn->smp_chan;
625 struct hci_dev *hdev = conn->hcon->hdev;
626 u8 key_size, auth = SMP_AUTH_NONE;
627 int ret;
629 BT_DBG("conn %p", conn);
631 if (!(conn->hcon->link_mode & HCI_LM_MASTER))
632 return SMP_CMD_NOTSUPP;
634 skb_pull(skb, sizeof(*rsp));
636 req = (void *) &smp->preq[1];
638 key_size = min(req->max_key_size, rsp->max_key_size);
639 if (check_enc_key_size(conn, key_size))
640 return SMP_ENC_KEY_SIZE;
642 ret = smp_rand(smp->prnd);
643 if (ret)
644 return SMP_UNSPECIFIED;
646 smp->prsp[0] = SMP_CMD_PAIRING_RSP;
647 memcpy(&smp->prsp[1], rsp, sizeof(*rsp));
649 if ((req->auth_req & SMP_AUTH_BONDING) &&
650 (rsp->auth_req & SMP_AUTH_BONDING))
651 auth = SMP_AUTH_BONDING;
653 auth |= (req->auth_req | rsp->auth_req) & SMP_AUTH_MITM;
655 ret = tk_request(conn, 0, auth, req->io_capability, rsp->io_capability);
656 if (ret)
657 return SMP_UNSPECIFIED;
659 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
661 /* Can't compose response until we have been confirmed */
662 if (!test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags))
663 return 0;
665 queue_work(hdev->workqueue, &smp->confirm);
667 return 0;
670 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
672 struct smp_chan *smp = conn->smp_chan;
673 struct hci_dev *hdev = conn->hcon->hdev;
675 BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
677 memcpy(smp->pcnf, skb->data, sizeof(smp->pcnf));
678 skb_pull(skb, sizeof(smp->pcnf));
680 if (conn->hcon->out) {
681 u8 random[16];
683 swap128(smp->prnd, random);
684 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
685 random);
686 } else if (test_bit(SMP_FLAG_TK_VALID, &smp->smp_flags)) {
687 queue_work(hdev->workqueue, &smp->confirm);
688 } else {
689 set_bit(SMP_FLAG_CFM_PENDING, &smp->smp_flags);
692 return 0;
695 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
697 struct smp_chan *smp = conn->smp_chan;
698 struct hci_dev *hdev = conn->hcon->hdev;
700 BT_DBG("conn %p", conn);
702 swap128(skb->data, smp->rrnd);
703 skb_pull(skb, sizeof(smp->rrnd));
705 queue_work(hdev->workqueue, &smp->random);
707 return 0;
710 static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level)
712 struct smp_ltk *key;
713 struct hci_conn *hcon = conn->hcon;
715 key = hci_find_ltk_by_addr(hcon->hdev, conn->dst, hcon->dst_type);
716 if (!key)
717 return 0;
719 if (sec_level > BT_SECURITY_MEDIUM && !key->authenticated)
720 return 0;
722 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->flags))
723 return 1;
725 hci_le_start_enc(hcon, key->ediv, key->rand, key->val);
726 hcon->enc_key_size = key->enc_size;
728 return 1;
731 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
733 struct smp_cmd_security_req *rp = (void *) skb->data;
734 struct smp_cmd_pairing cp;
735 struct hci_conn *hcon = conn->hcon;
736 struct smp_chan *smp;
738 BT_DBG("conn %p", conn);
740 hcon->pending_sec_level = authreq_to_seclevel(rp->auth_req);
742 if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
743 return 0;
745 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
746 return 0;
748 smp = smp_chan_create(conn);
750 skb_pull(skb, sizeof(*rp));
752 memset(&cp, 0, sizeof(cp));
753 build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
755 smp->preq[0] = SMP_CMD_PAIRING_REQ;
756 memcpy(&smp->preq[1], &cp, sizeof(cp));
758 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
760 return 0;
763 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
765 struct l2cap_conn *conn = hcon->l2cap_data;
766 struct smp_chan *smp = conn->smp_chan;
767 __u8 authreq;
769 BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
771 if (!lmp_host_le_capable(hcon->hdev))
772 return 1;
774 if (sec_level == BT_SECURITY_LOW)
775 return 1;
777 if (hcon->sec_level >= sec_level)
778 return 1;
780 if (hcon->link_mode & HCI_LM_MASTER)
781 if (smp_ltk_encrypt(conn, sec_level))
782 goto done;
784 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags))
785 return 0;
787 smp = smp_chan_create(conn);
788 if (!smp)
789 return 1;
791 authreq = seclevel_to_authreq(sec_level);
793 if (hcon->link_mode & HCI_LM_MASTER) {
794 struct smp_cmd_pairing cp;
796 build_pairing_cmd(conn, &cp, NULL, authreq);
797 smp->preq[0] = SMP_CMD_PAIRING_REQ;
798 memcpy(&smp->preq[1], &cp, sizeof(cp));
800 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
801 } else {
802 struct smp_cmd_security_req cp;
803 cp.auth_req = authreq;
804 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
807 done:
808 hcon->pending_sec_level = sec_level;
810 return 0;
813 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
815 struct smp_cmd_encrypt_info *rp = (void *) skb->data;
816 struct smp_chan *smp = conn->smp_chan;
818 skb_pull(skb, sizeof(*rp));
820 memcpy(smp->tk, rp->ltk, sizeof(smp->tk));
822 return 0;
825 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
827 struct smp_cmd_master_ident *rp = (void *) skb->data;
828 struct smp_chan *smp = conn->smp_chan;
829 struct hci_dev *hdev = conn->hcon->hdev;
830 struct hci_conn *hcon = conn->hcon;
831 u8 authenticated;
833 skb_pull(skb, sizeof(*rp));
835 hci_dev_lock(hdev);
836 authenticated = (conn->hcon->sec_level == BT_SECURITY_HIGH);
837 hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
838 HCI_SMP_LTK, 1, authenticated, smp->tk, smp->enc_key_size,
839 rp->ediv, rp->rand);
840 smp_distribute_keys(conn, 1);
841 hci_dev_unlock(hdev);
843 return 0;
846 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
848 __u8 code = skb->data[0];
849 __u8 reason;
850 int err = 0;
852 if (!lmp_host_le_capable(conn->hcon->hdev)) {
853 err = -ENOTSUPP;
854 reason = SMP_PAIRING_NOTSUPP;
855 goto done;
858 skb_pull(skb, sizeof(code));
860 switch (code) {
861 case SMP_CMD_PAIRING_REQ:
862 reason = smp_cmd_pairing_req(conn, skb);
863 break;
865 case SMP_CMD_PAIRING_FAIL:
866 smp_failure(conn, skb->data[0], 0);
867 reason = 0;
868 err = -EPERM;
869 break;
871 case SMP_CMD_PAIRING_RSP:
872 reason = smp_cmd_pairing_rsp(conn, skb);
873 break;
875 case SMP_CMD_SECURITY_REQ:
876 reason = smp_cmd_security_req(conn, skb);
877 break;
879 case SMP_CMD_PAIRING_CONFIRM:
880 reason = smp_cmd_pairing_confirm(conn, skb);
881 break;
883 case SMP_CMD_PAIRING_RANDOM:
884 reason = smp_cmd_pairing_random(conn, skb);
885 break;
887 case SMP_CMD_ENCRYPT_INFO:
888 reason = smp_cmd_encrypt_info(conn, skb);
889 break;
891 case SMP_CMD_MASTER_IDENT:
892 reason = smp_cmd_master_ident(conn, skb);
893 break;
895 case SMP_CMD_IDENT_INFO:
896 case SMP_CMD_IDENT_ADDR_INFO:
897 case SMP_CMD_SIGN_INFO:
898 /* Just ignored */
899 reason = 0;
900 break;
902 default:
903 BT_DBG("Unknown command code 0x%2.2x", code);
905 reason = SMP_CMD_NOTSUPP;
906 err = -EOPNOTSUPP;
907 goto done;
910 done:
911 if (reason)
912 smp_failure(conn, reason, 1);
914 kfree_skb(skb);
915 return err;
918 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
920 struct smp_cmd_pairing *req, *rsp;
921 struct smp_chan *smp = conn->smp_chan;
922 __u8 *keydist;
924 BT_DBG("conn %p force %d", conn, force);
926 if (!test_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))
927 return 0;
929 rsp = (void *) &smp->prsp[1];
931 /* The responder sends its keys first */
932 if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
933 return 0;
935 req = (void *) &smp->preq[1];
937 if (conn->hcon->out) {
938 keydist = &rsp->init_key_dist;
939 *keydist &= req->init_key_dist;
940 } else {
941 keydist = &rsp->resp_key_dist;
942 *keydist &= req->resp_key_dist;
946 BT_DBG("keydist 0x%x", *keydist);
948 if (*keydist & SMP_DIST_ENC_KEY) {
949 struct smp_cmd_encrypt_info enc;
950 struct smp_cmd_master_ident ident;
951 struct hci_conn *hcon = conn->hcon;
952 u8 authenticated;
953 __le16 ediv;
955 get_random_bytes(enc.ltk, sizeof(enc.ltk));
956 get_random_bytes(&ediv, sizeof(ediv));
957 get_random_bytes(ident.rand, sizeof(ident.rand));
959 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
961 authenticated = hcon->sec_level == BT_SECURITY_HIGH;
962 hci_add_ltk(conn->hcon->hdev, conn->dst, hcon->dst_type,
963 HCI_SMP_LTK_SLAVE, 1, authenticated,
964 enc.ltk, smp->enc_key_size, ediv, ident.rand);
966 ident.ediv = ediv;
968 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
970 *keydist &= ~SMP_DIST_ENC_KEY;
973 if (*keydist & SMP_DIST_ID_KEY) {
974 struct smp_cmd_ident_addr_info addrinfo;
975 struct smp_cmd_ident_info idinfo;
977 /* Send a dummy key */
978 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
980 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
982 /* Just public address */
983 memset(&addrinfo, 0, sizeof(addrinfo));
984 bacpy(&addrinfo.bdaddr, conn->src);
986 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
987 &addrinfo);
989 *keydist &= ~SMP_DIST_ID_KEY;
992 if (*keydist & SMP_DIST_SIGN) {
993 struct smp_cmd_sign_info sign;
995 /* Send a dummy key */
996 get_random_bytes(sign.csrk, sizeof(sign.csrk));
998 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
1000 *keydist &= ~SMP_DIST_SIGN;
1003 if (conn->hcon->out || force) {
1004 clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags);
1005 cancel_delayed_work_sync(&conn->security_timer);
1006 smp_chan_destroy(conn);
1009 return 0;