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/mgmt.h>
27 #include <net/bluetooth/smp.h>
28 #include <linux/crypto.h>
29 #include <linux/scatterlist.h>
30 #include <crypto/b128ops.h>
32 #define SMP_TIMEOUT 30000 /* 30 seconds */
34 static inline void swap128(u8 src
[16], u8 dst
[16])
37 for (i
= 0; i
< 16; i
++)
41 static inline void swap56(u8 src
[7], u8 dst
[7])
44 for (i
= 0; i
< 7; i
++)
48 static int smp_e(struct crypto_blkcipher
*tfm
, const u8
*k
, u8
*r
)
50 struct blkcipher_desc desc
;
51 struct scatterlist sg
;
53 unsigned char iv
[128];
56 BT_ERR("tfm %p", tfm
);
63 err
= crypto_blkcipher_setkey(tfm
, k
, 16);
65 BT_ERR("cipher setkey failed: %d", err
);
69 sg_init_one(&sg
, r
, 16);
71 iv_len
= crypto_blkcipher_ivsize(tfm
);
73 memset(&iv
, 0xff, iv_len
);
74 crypto_blkcipher_set_iv(tfm
, iv
, iv_len
);
77 err
= crypto_blkcipher_encrypt(&desc
, &sg
, &sg
, 16);
79 BT_ERR("Encrypt data error %d", err
);
84 static int smp_c1(struct crypto_blkcipher
*tfm
, u8 k
[16], u8 r
[16],
85 u8 preq
[7], u8 pres
[7], u8 _iat
, bdaddr_t
*ia
,
86 u8 _rat
, bdaddr_t
*ra
, u8 res
[16])
93 /* p1 = pres || preq || _rat || _iat */
101 /* p2 = padding || ia || ra */
102 baswap((bdaddr_t
*) (p2
+ 4), ia
);
103 baswap((bdaddr_t
*) (p2
+ 10), ra
);
106 u128_xor((u128
*) res
, (u128
*) r
, (u128
*) p1
);
108 /* res = e(k, res) */
109 err
= smp_e(tfm
, k
, res
);
111 BT_ERR("Encrypt data error");
115 /* res = res XOR p2 */
116 u128_xor((u128
*) res
, (u128
*) res
, (u128
*) p2
);
118 /* res = e(k, res) */
119 err
= smp_e(tfm
, k
, res
);
121 BT_ERR("Encrypt data error");
126 static int smp_s1(struct crypto_blkcipher
*tfm
, u8 k
[16],
127 u8 r1
[16], u8 r2
[16], u8 _r
[16])
131 /* Just least significant octets from r1 and r2 are considered */
132 memcpy(_r
, r1
+ 8, 8);
133 memcpy(_r
+ 8, r2
+ 8, 8);
135 err
= smp_e(tfm
, k
, _r
);
137 BT_ERR("Encrypt data error");
142 static int smp_rand(u8
*buf
)
144 get_random_bytes(buf
, 16);
149 static struct sk_buff
*smp_build_cmd(struct l2cap_conn
*conn
, u8 code
,
150 u16 dlen
, void *data
)
153 struct l2cap_hdr
*lh
;
156 len
= L2CAP_HDR_SIZE
+ sizeof(code
) + dlen
;
161 skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
165 lh
= (struct l2cap_hdr
*) skb_put(skb
, L2CAP_HDR_SIZE
);
166 lh
->len
= cpu_to_le16(sizeof(code
) + dlen
);
167 lh
->cid
= cpu_to_le16(L2CAP_CID_SMP
);
169 memcpy(skb_put(skb
, sizeof(code
)), &code
, sizeof(code
));
171 memcpy(skb_put(skb
, dlen
), data
, dlen
);
176 static void smp_send_cmd(struct l2cap_conn
*conn
, u8 code
, u16 len
, void *data
)
178 struct sk_buff
*skb
= smp_build_cmd(conn
, code
, len
, data
);
180 BT_DBG("code 0x%2.2x", code
);
185 skb
->priority
= HCI_PRIO_MAX
;
186 hci_send_acl(conn
->hchan
, skb
, 0);
188 cancel_delayed_work_sync(&conn
->security_timer
);
189 schedule_delayed_work(&conn
->security_timer
,
190 msecs_to_jiffies(SMP_TIMEOUT
));
193 static __u8
authreq_to_seclevel(__u8 authreq
)
195 if (authreq
& SMP_AUTH_MITM
)
196 return BT_SECURITY_HIGH
;
198 return BT_SECURITY_MEDIUM
;
201 static __u8
seclevel_to_authreq(__u8 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
;
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
,
220 if (test_bit(HCI_PAIRABLE
, &conn
->hcon
->hdev
->dev_flags
)) {
221 dist_keys
= SMP_DIST_ENC_KEY
;
222 authreq
|= SMP_AUTH_BONDING
;
224 authreq
&= ~SMP_AUTH_BONDING
;
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
;
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
;
258 static void smp_failure(struct l2cap_conn
*conn
, u8 reason
, u8 send
)
261 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
),
264 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->hcon
->flags
);
265 mgmt_auth_failed(conn
->hcon
->hdev
, conn
->dst
, reason
);
267 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
)) {
268 cancel_delayed_work_sync(&conn
->security_timer
);
269 smp_chan_destroy(conn
);
273 #define JUST_WORKS 0x00
274 #define JUST_CFM 0x01
275 #define REQ_PASSKEY 0x02
276 #define CFM_PASSKEY 0x03
280 static const u8 gen_method
[5][5] = {
281 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
282 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
283 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, CFM_PASSKEY
},
284 { JUST_WORKS
, JUST_CFM
, JUST_WORKS
, JUST_WORKS
, JUST_CFM
},
285 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, OVERLAP
},
288 static int tk_request(struct l2cap_conn
*conn
, u8 remote_oob
, u8 auth
,
289 u8 local_io
, u8 remote_io
)
291 struct hci_conn
*hcon
= conn
->hcon
;
292 struct smp_chan
*smp
= conn
->smp_chan
;
297 /* Initialize key for JUST WORKS */
298 memset(smp
->tk
, 0, sizeof(smp
->tk
));
299 clear_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
301 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth
, local_io
, remote_io
);
303 /* If neither side wants MITM, use JUST WORKS */
304 /* If either side has unknown io_caps, use JUST WORKS */
305 /* Otherwise, look up method from the table */
306 if (!(auth
& SMP_AUTH_MITM
) ||
307 local_io
> SMP_IO_KEYBOARD_DISPLAY
||
308 remote_io
> SMP_IO_KEYBOARD_DISPLAY
)
311 method
= gen_method
[local_io
][remote_io
];
313 /* If not bonding, don't ask user to confirm a Zero TK */
314 if (!(auth
& SMP_AUTH_BONDING
) && method
== JUST_CFM
)
317 /* If Just Works, Continue with Zero TK */
318 if (method
== JUST_WORKS
) {
319 set_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
323 /* Not Just Works/Confirm results in MITM Authentication */
324 if (method
!= JUST_CFM
)
325 set_bit(SMP_FLAG_MITM_AUTH
, &smp
->smp_flags
);
327 /* If both devices have Keyoard-Display I/O, the master
328 * Confirms and the slave Enters the passkey.
330 if (method
== OVERLAP
) {
331 if (hcon
->link_mode
& HCI_LM_MASTER
)
332 method
= CFM_PASSKEY
;
334 method
= REQ_PASSKEY
;
337 /* Generate random passkey. Not valid until confirmed. */
338 if (method
== CFM_PASSKEY
) {
341 memset(key
, 0, sizeof(key
));
342 get_random_bytes(&passkey
, sizeof(passkey
));
344 put_unaligned_le32(passkey
, key
);
345 swap128(key
, smp
->tk
);
346 BT_DBG("PassKey: %d", passkey
);
349 hci_dev_lock(hcon
->hdev
);
351 if (method
== REQ_PASSKEY
)
352 ret
= mgmt_user_passkey_request(hcon
->hdev
, conn
->dst
,
353 hcon
->type
, hcon
->dst_type
);
355 ret
= mgmt_user_confirm_request(hcon
->hdev
, conn
->dst
,
356 hcon
->type
, hcon
->dst_type
,
357 cpu_to_le32(passkey
), 0);
359 hci_dev_unlock(hcon
->hdev
);
364 static void confirm_work(struct work_struct
*work
)
366 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, confirm
);
367 struct l2cap_conn
*conn
= smp
->conn
;
368 struct crypto_blkcipher
*tfm
;
369 struct smp_cmd_pairing_confirm cp
;
373 BT_DBG("conn %p", conn
);
375 tfm
= crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC
);
377 reason
= SMP_UNSPECIFIED
;
384 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
, 0,
385 conn
->src
, conn
->hcon
->dst_type
, conn
->dst
,
388 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
,
389 conn
->hcon
->dst_type
, conn
->dst
, 0, conn
->src
,
392 reason
= SMP_UNSPECIFIED
;
396 clear_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
398 swap128(res
, cp
.confirm_val
);
399 smp_send_cmd(smp
->conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cp
), &cp
);
404 smp_failure(conn
, reason
, 1);
407 static void random_work(struct work_struct
*work
)
409 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, random
);
410 struct l2cap_conn
*conn
= smp
->conn
;
411 struct hci_conn
*hcon
= conn
->hcon
;
412 struct crypto_blkcipher
*tfm
= smp
->tfm
;
413 u8 reason
, confirm
[16], res
[16], key
[16];
416 if (IS_ERR_OR_NULL(tfm
)) {
417 reason
= SMP_UNSPECIFIED
;
421 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
424 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
, 0,
425 conn
->src
, hcon
->dst_type
, conn
->dst
,
428 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
,
429 hcon
->dst_type
, conn
->dst
, 0, conn
->src
,
432 reason
= SMP_UNSPECIFIED
;
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
;
448 memset(rand
, 0, sizeof(rand
));
451 smp_s1(tfm
, smp
->tk
, smp
->rrnd
, smp
->prnd
, key
);
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
;
462 hci_le_start_enc(hcon
, ediv
, rand
, stk
);
463 hcon
->enc_key_size
= smp
->enc_key_size
;
465 u8 stk
[16], r
[16], rand
[8];
468 memset(rand
, 0, sizeof(rand
));
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
);
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
,
482 smp
->enc_key_size
, ediv
, rand
);
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
);
499 INIT_WORK(&smp
->confirm
, confirm_work
);
500 INIT_WORK(&smp
->random
, random_work
);
503 conn
->smp_chan
= smp
;
504 conn
->hcon
->smp_conn
= conn
;
506 hci_conn_hold(conn
->hcon
);
511 void smp_chan_destroy(struct l2cap_conn
*conn
)
513 struct smp_chan
*smp
= conn
->smp_chan
;
518 crypto_free_blkcipher(smp
->tfm
);
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
;
538 smp
= conn
->smp_chan
;
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
);
548 case MGMT_OP_USER_CONFIRM_REPLY
:
549 set_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
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);
556 smp_failure(conn
, SMP_PASSKEY_ENTRY_FAILED
, 1);
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
);
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
;
572 u8 auth
= SMP_AUTH_NONE
;
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
);
583 smp
= conn
->smp_chan
;
585 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
586 memcpy(&smp
->preq
[1], req
, sizeof(*req
));
587 skb_pull(skb
, sizeof(*req
));
589 /* We didn't start the pairing, so match remote */
590 if (req
->auth_req
& SMP_AUTH_BONDING
)
591 auth
= req
->auth_req
;
593 build_pairing_cmd(conn
, req
, &rsp
, auth
);
595 key_size
= min(req
->max_key_size
, rsp
.max_key_size
);
596 if (check_enc_key_size(conn
, key_size
))
597 return SMP_ENC_KEY_SIZE
;
599 ret
= smp_rand(smp
->prnd
);
601 return SMP_UNSPECIFIED
;
603 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
604 memcpy(&smp
->prsp
[1], &rsp
, sizeof(rsp
));
606 smp_send_cmd(conn
, SMP_CMD_PAIRING_RSP
, sizeof(rsp
), &rsp
);
608 /* Request setup of TK */
609 ret
= tk_request(conn
, 0, auth
, rsp
.io_capability
, req
->io_capability
);
611 return SMP_UNSPECIFIED
;
616 static u8
smp_cmd_pairing_rsp(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
618 struct smp_cmd_pairing
*req
, *rsp
= (void *) skb
->data
;
619 struct smp_chan
*smp
= conn
->smp_chan
;
620 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
621 u8 key_size
, auth
= SMP_AUTH_NONE
;
624 BT_DBG("conn %p", conn
);
626 if (!(conn
->hcon
->link_mode
& HCI_LM_MASTER
))
627 return SMP_CMD_NOTSUPP
;
629 skb_pull(skb
, sizeof(*rsp
));
631 req
= (void *) &smp
->preq
[1];
633 key_size
= min(req
->max_key_size
, rsp
->max_key_size
);
634 if (check_enc_key_size(conn
, key_size
))
635 return SMP_ENC_KEY_SIZE
;
637 ret
= smp_rand(smp
->prnd
);
639 return SMP_UNSPECIFIED
;
641 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
642 memcpy(&smp
->prsp
[1], rsp
, sizeof(*rsp
));
644 if ((req
->auth_req
& SMP_AUTH_BONDING
) &&
645 (rsp
->auth_req
& SMP_AUTH_BONDING
))
646 auth
= SMP_AUTH_BONDING
;
648 auth
|= (req
->auth_req
| rsp
->auth_req
) & SMP_AUTH_MITM
;
650 ret
= tk_request(conn
, 0, auth
, rsp
->io_capability
, req
->io_capability
);
652 return SMP_UNSPECIFIED
;
654 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
656 /* Can't compose response until we have been confirmed */
657 if (!test_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
))
660 queue_work(hdev
->workqueue
, &smp
->confirm
);
665 static u8
smp_cmd_pairing_confirm(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
667 struct smp_chan
*smp
= conn
->smp_chan
;
668 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
670 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
672 memcpy(smp
->pcnf
, skb
->data
, sizeof(smp
->pcnf
));
673 skb_pull(skb
, sizeof(smp
->pcnf
));
675 if (conn
->hcon
->out
) {
678 swap128(smp
->prnd
, random
);
679 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(random
),
681 } else if (test_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
)) {
682 queue_work(hdev
->workqueue
, &smp
->confirm
);
684 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
690 static u8
smp_cmd_pairing_random(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
692 struct smp_chan
*smp
= conn
->smp_chan
;
693 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
695 BT_DBG("conn %p", conn
);
697 swap128(skb
->data
, smp
->rrnd
);
698 skb_pull(skb
, sizeof(smp
->rrnd
));
700 queue_work(hdev
->workqueue
, &smp
->random
);
705 static u8
smp_ltk_encrypt(struct l2cap_conn
*conn
)
708 struct hci_conn
*hcon
= conn
->hcon
;
710 key
= hci_find_ltk_by_addr(hcon
->hdev
, conn
->dst
, hcon
->dst_type
);
714 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->flags
))
717 hci_le_start_enc(hcon
, key
->ediv
, key
->rand
, key
->val
);
718 hcon
->enc_key_size
= key
->enc_size
;
723 static u8
smp_cmd_security_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
725 struct smp_cmd_security_req
*rp
= (void *) skb
->data
;
726 struct smp_cmd_pairing cp
;
727 struct hci_conn
*hcon
= conn
->hcon
;
728 struct smp_chan
*smp
;
730 BT_DBG("conn %p", conn
);
732 hcon
->pending_sec_level
= authreq_to_seclevel(rp
->auth_req
);
734 if (smp_ltk_encrypt(conn
))
737 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
))
740 smp
= smp_chan_create(conn
);
742 skb_pull(skb
, sizeof(*rp
));
744 memset(&cp
, 0, sizeof(cp
));
745 build_pairing_cmd(conn
, &cp
, NULL
, rp
->auth_req
);
747 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
748 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
750 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
755 int smp_conn_security(struct l2cap_conn
*conn
, __u8 sec_level
)
757 struct hci_conn
*hcon
= conn
->hcon
;
758 struct smp_chan
*smp
= conn
->smp_chan
;
761 BT_DBG("conn %p hcon %p level 0x%2.2x", conn
, hcon
, sec_level
);
763 if (!lmp_host_le_capable(hcon
->hdev
))
766 if (sec_level
== BT_SECURITY_LOW
)
769 if (hcon
->sec_level
>= sec_level
)
772 if (hcon
->link_mode
& HCI_LM_MASTER
)
773 if (smp_ltk_encrypt(conn
))
776 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
))
779 smp
= smp_chan_create(conn
);
783 authreq
= seclevel_to_authreq(sec_level
);
785 if (hcon
->link_mode
& HCI_LM_MASTER
) {
786 struct smp_cmd_pairing cp
;
788 build_pairing_cmd(conn
, &cp
, NULL
, authreq
);
789 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
790 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
792 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
794 struct smp_cmd_security_req cp
;
795 cp
.auth_req
= authreq
;
796 smp_send_cmd(conn
, SMP_CMD_SECURITY_REQ
, sizeof(cp
), &cp
);
800 hcon
->pending_sec_level
= sec_level
;
805 static int smp_cmd_encrypt_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
807 struct smp_cmd_encrypt_info
*rp
= (void *) skb
->data
;
808 struct smp_chan
*smp
= conn
->smp_chan
;
810 skb_pull(skb
, sizeof(*rp
));
812 memcpy(smp
->tk
, rp
->ltk
, sizeof(smp
->tk
));
817 static int smp_cmd_master_ident(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
819 struct smp_cmd_master_ident
*rp
= (void *) skb
->data
;
820 struct smp_chan
*smp
= conn
->smp_chan
;
821 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
822 struct hci_conn
*hcon
= conn
->hcon
;
825 skb_pull(skb
, sizeof(*rp
));
828 authenticated
= (conn
->hcon
->sec_level
== BT_SECURITY_HIGH
);
829 hci_add_ltk(conn
->hcon
->hdev
, conn
->dst
, hcon
->dst_type
,
830 HCI_SMP_LTK
, 1, authenticated
, smp
->tk
,
831 smp
->enc_key_size
, rp
->ediv
, rp
->rand
);
832 smp_distribute_keys(conn
, 1);
833 hci_dev_unlock(hdev
);
838 int smp_sig_channel(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
840 __u8 code
= skb
->data
[0];
844 if (!lmp_host_le_capable(conn
->hcon
->hdev
)) {
846 reason
= SMP_PAIRING_NOTSUPP
;
850 skb_pull(skb
, sizeof(code
));
853 case SMP_CMD_PAIRING_REQ
:
854 reason
= smp_cmd_pairing_req(conn
, skb
);
857 case SMP_CMD_PAIRING_FAIL
:
858 smp_failure(conn
, skb
->data
[0], 0);
863 case SMP_CMD_PAIRING_RSP
:
864 reason
= smp_cmd_pairing_rsp(conn
, skb
);
867 case SMP_CMD_SECURITY_REQ
:
868 reason
= smp_cmd_security_req(conn
, skb
);
871 case SMP_CMD_PAIRING_CONFIRM
:
872 reason
= smp_cmd_pairing_confirm(conn
, skb
);
875 case SMP_CMD_PAIRING_RANDOM
:
876 reason
= smp_cmd_pairing_random(conn
, skb
);
879 case SMP_CMD_ENCRYPT_INFO
:
880 reason
= smp_cmd_encrypt_info(conn
, skb
);
883 case SMP_CMD_MASTER_IDENT
:
884 reason
= smp_cmd_master_ident(conn
, skb
);
887 case SMP_CMD_IDENT_INFO
:
888 case SMP_CMD_IDENT_ADDR_INFO
:
889 case SMP_CMD_SIGN_INFO
:
895 BT_DBG("Unknown command code 0x%2.2x", code
);
897 reason
= SMP_CMD_NOTSUPP
;
904 smp_failure(conn
, reason
, 1);
910 int smp_distribute_keys(struct l2cap_conn
*conn
, __u8 force
)
912 struct smp_cmd_pairing
*req
, *rsp
;
913 struct smp_chan
*smp
= conn
->smp_chan
;
916 BT_DBG("conn %p force %d", conn
, force
);
918 if (!test_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
))
921 rsp
= (void *) &smp
->prsp
[1];
923 /* The responder sends its keys first */
924 if (!force
&& conn
->hcon
->out
&& (rsp
->resp_key_dist
& 0x07))
927 req
= (void *) &smp
->preq
[1];
929 if (conn
->hcon
->out
) {
930 keydist
= &rsp
->init_key_dist
;
931 *keydist
&= req
->init_key_dist
;
933 keydist
= &rsp
->resp_key_dist
;
934 *keydist
&= req
->resp_key_dist
;
938 BT_DBG("keydist 0x%x", *keydist
);
940 if (*keydist
& SMP_DIST_ENC_KEY
) {
941 struct smp_cmd_encrypt_info enc
;
942 struct smp_cmd_master_ident ident
;
943 struct hci_conn
*hcon
= conn
->hcon
;
947 get_random_bytes(enc
.ltk
, sizeof(enc
.ltk
));
948 get_random_bytes(&ediv
, sizeof(ediv
));
949 get_random_bytes(ident
.rand
, sizeof(ident
.rand
));
951 smp_send_cmd(conn
, SMP_CMD_ENCRYPT_INFO
, sizeof(enc
), &enc
);
953 authenticated
= hcon
->sec_level
== BT_SECURITY_HIGH
;
954 hci_add_ltk(conn
->hcon
->hdev
, conn
->dst
, hcon
->dst_type
,
955 HCI_SMP_LTK_SLAVE
, 1, authenticated
,
956 enc
.ltk
, smp
->enc_key_size
,
959 ident
.ediv
= cpu_to_le16(ediv
);
961 smp_send_cmd(conn
, SMP_CMD_MASTER_IDENT
, sizeof(ident
), &ident
);
963 *keydist
&= ~SMP_DIST_ENC_KEY
;
966 if (*keydist
& SMP_DIST_ID_KEY
) {
967 struct smp_cmd_ident_addr_info addrinfo
;
968 struct smp_cmd_ident_info idinfo
;
970 /* Send a dummy key */
971 get_random_bytes(idinfo
.irk
, sizeof(idinfo
.irk
));
973 smp_send_cmd(conn
, SMP_CMD_IDENT_INFO
, sizeof(idinfo
), &idinfo
);
975 /* Just public address */
976 memset(&addrinfo
, 0, sizeof(addrinfo
));
977 bacpy(&addrinfo
.bdaddr
, conn
->src
);
979 smp_send_cmd(conn
, SMP_CMD_IDENT_ADDR_INFO
, sizeof(addrinfo
),
982 *keydist
&= ~SMP_DIST_ID_KEY
;
985 if (*keydist
& SMP_DIST_SIGN
) {
986 struct smp_cmd_sign_info sign
;
988 /* Send a dummy key */
989 get_random_bytes(sign
.csrk
, sizeof(sign
.csrk
));
991 smp_send_cmd(conn
, SMP_CMD_SIGN_INFO
, sizeof(sign
), &sign
);
993 *keydist
&= ~SMP_DIST_SIGN
;
996 if (conn
->hcon
->out
|| force
) {
997 clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
);
998 cancel_delayed_work_sync(&conn
->security_timer
);
999 smp_chan_destroy(conn
);