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 msecs_to_jiffies(30000)
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
, SMP_TIMEOUT
);
192 static __u8
authreq_to_seclevel(__u8 authreq
)
194 if (authreq
& SMP_AUTH_MITM
)
195 return BT_SECURITY_HIGH
;
197 return BT_SECURITY_MEDIUM
;
200 static __u8
seclevel_to_authreq(__u8 sec_level
)
203 case BT_SECURITY_HIGH
:
204 return SMP_AUTH_MITM
| SMP_AUTH_BONDING
;
205 case BT_SECURITY_MEDIUM
:
206 return SMP_AUTH_BONDING
;
208 return SMP_AUTH_NONE
;
212 static void build_pairing_cmd(struct l2cap_conn
*conn
,
213 struct smp_cmd_pairing
*req
,
214 struct smp_cmd_pairing
*rsp
,
219 if (test_bit(HCI_PAIRABLE
, &conn
->hcon
->hdev
->dev_flags
)) {
220 dist_keys
= SMP_DIST_ENC_KEY
;
221 authreq
|= SMP_AUTH_BONDING
;
223 authreq
&= ~SMP_AUTH_BONDING
;
227 req
->io_capability
= conn
->hcon
->io_capability
;
228 req
->oob_flag
= SMP_OOB_NOT_PRESENT
;
229 req
->max_key_size
= SMP_MAX_ENC_KEY_SIZE
;
230 req
->init_key_dist
= 0;
231 req
->resp_key_dist
= dist_keys
;
232 req
->auth_req
= authreq
;
236 rsp
->io_capability
= conn
->hcon
->io_capability
;
237 rsp
->oob_flag
= SMP_OOB_NOT_PRESENT
;
238 rsp
->max_key_size
= SMP_MAX_ENC_KEY_SIZE
;
239 rsp
->init_key_dist
= 0;
240 rsp
->resp_key_dist
= req
->resp_key_dist
& dist_keys
;
241 rsp
->auth_req
= authreq
;
244 static u8
check_enc_key_size(struct l2cap_conn
*conn
, __u8 max_key_size
)
246 struct smp_chan
*smp
= conn
->smp_chan
;
248 if ((max_key_size
> SMP_MAX_ENC_KEY_SIZE
) ||
249 (max_key_size
< SMP_MIN_ENC_KEY_SIZE
))
250 return SMP_ENC_KEY_SIZE
;
252 smp
->enc_key_size
= max_key_size
;
257 static void smp_failure(struct l2cap_conn
*conn
, u8 reason
, u8 send
)
259 struct hci_conn
*hcon
= conn
->hcon
;
262 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
),
265 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->hcon
->flags
);
266 mgmt_auth_failed(conn
->hcon
->hdev
, conn
->dst
, hcon
->type
,
267 hcon
->dst_type
, reason
);
269 if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
)) {
270 cancel_delayed_work_sync(&conn
->security_timer
);
271 smp_chan_destroy(conn
);
275 #define JUST_WORKS 0x00
276 #define JUST_CFM 0x01
277 #define REQ_PASSKEY 0x02
278 #define CFM_PASSKEY 0x03
282 static const u8 gen_method
[5][5] = {
283 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
284 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
285 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, CFM_PASSKEY
},
286 { JUST_WORKS
, JUST_CFM
, JUST_WORKS
, JUST_WORKS
, JUST_CFM
},
287 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, OVERLAP
},
290 static int tk_request(struct l2cap_conn
*conn
, u8 remote_oob
, u8 auth
,
291 u8 local_io
, u8 remote_io
)
293 struct hci_conn
*hcon
= conn
->hcon
;
294 struct smp_chan
*smp
= conn
->smp_chan
;
299 /* Initialize key for JUST WORKS */
300 memset(smp
->tk
, 0, sizeof(smp
->tk
));
301 clear_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
303 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth
, local_io
, remote_io
);
305 /* If neither side wants MITM, use JUST WORKS */
306 /* If either side has unknown io_caps, use JUST WORKS */
307 /* Otherwise, look up method from the table */
308 if (!(auth
& SMP_AUTH_MITM
) ||
309 local_io
> SMP_IO_KEYBOARD_DISPLAY
||
310 remote_io
> SMP_IO_KEYBOARD_DISPLAY
)
313 method
= gen_method
[remote_io
][local_io
];
315 /* If not bonding, don't ask user to confirm a Zero TK */
316 if (!(auth
& SMP_AUTH_BONDING
) && method
== JUST_CFM
)
319 /* If Just Works, Continue with Zero TK */
320 if (method
== JUST_WORKS
) {
321 set_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
325 /* Not Just Works/Confirm results in MITM Authentication */
326 if (method
!= JUST_CFM
)
327 set_bit(SMP_FLAG_MITM_AUTH
, &smp
->smp_flags
);
329 /* If both devices have Keyoard-Display I/O, the master
330 * Confirms and the slave Enters the passkey.
332 if (method
== OVERLAP
) {
333 if (hcon
->link_mode
& HCI_LM_MASTER
)
334 method
= CFM_PASSKEY
;
336 method
= REQ_PASSKEY
;
339 /* Generate random passkey. Not valid until confirmed. */
340 if (method
== CFM_PASSKEY
) {
343 memset(key
, 0, sizeof(key
));
344 get_random_bytes(&passkey
, sizeof(passkey
));
346 put_unaligned_le32(passkey
, key
);
347 swap128(key
, smp
->tk
);
348 BT_DBG("PassKey: %d", passkey
);
351 hci_dev_lock(hcon
->hdev
);
353 if (method
== REQ_PASSKEY
)
354 ret
= mgmt_user_passkey_request(hcon
->hdev
, conn
->dst
,
355 hcon
->type
, hcon
->dst_type
);
357 ret
= mgmt_user_confirm_request(hcon
->hdev
, conn
->dst
,
358 hcon
->type
, hcon
->dst_type
,
359 cpu_to_le32(passkey
), 0);
361 hci_dev_unlock(hcon
->hdev
);
366 static void confirm_work(struct work_struct
*work
)
368 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, confirm
);
369 struct l2cap_conn
*conn
= smp
->conn
;
370 struct crypto_blkcipher
*tfm
;
371 struct smp_cmd_pairing_confirm cp
;
375 BT_DBG("conn %p", conn
);
377 tfm
= crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC
);
379 reason
= SMP_UNSPECIFIED
;
386 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
, 0,
387 conn
->src
, conn
->hcon
->dst_type
, conn
->dst
, res
);
389 ret
= smp_c1(tfm
, smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
,
390 conn
->hcon
->dst_type
, conn
->dst
, 0, conn
->src
,
393 reason
= SMP_UNSPECIFIED
;
397 clear_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
399 swap128(res
, cp
.confirm_val
);
400 smp_send_cmd(smp
->conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cp
), &cp
);
405 smp_failure(conn
, reason
, 1);
408 static void random_work(struct work_struct
*work
)
410 struct smp_chan
*smp
= container_of(work
, struct smp_chan
, random
);
411 struct l2cap_conn
*conn
= smp
->conn
;
412 struct hci_conn
*hcon
= conn
->hcon
;
413 struct crypto_blkcipher
*tfm
= smp
->tfm
;
414 u8 reason
, confirm
[16], res
[16], key
[16];
417 if (IS_ERR_OR_NULL(tfm
)) {
418 reason
= SMP_UNSPECIFIED
;
422 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
425 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
, 0,
426 conn
->src
, hcon
->dst_type
, conn
->dst
, res
);
428 ret
= smp_c1(tfm
, smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
,
429 hcon
->dst_type
, conn
->dst
, 0, conn
->src
, res
);
431 reason
= SMP_UNSPECIFIED
;
435 swap128(res
, confirm
);
437 if (memcmp(smp
->pcnf
, confirm
, sizeof(smp
->pcnf
)) != 0) {
438 BT_ERR("Pairing failed (confirmation values mismatch)");
439 reason
= SMP_CONFIRM_FAILED
;
447 memset(rand
, 0, sizeof(rand
));
450 smp_s1(tfm
, smp
->tk
, smp
->rrnd
, smp
->prnd
, key
);
453 memset(stk
+ smp
->enc_key_size
, 0,
454 SMP_MAX_ENC_KEY_SIZE
- smp
->enc_key_size
);
456 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->flags
)) {
457 reason
= SMP_UNSPECIFIED
;
461 hci_le_start_enc(hcon
, ediv
, rand
, stk
);
462 hcon
->enc_key_size
= smp
->enc_key_size
;
464 u8 stk
[16], r
[16], rand
[8];
467 memset(rand
, 0, sizeof(rand
));
470 swap128(smp
->prnd
, r
);
471 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(r
), r
);
473 smp_s1(tfm
, smp
->tk
, smp
->prnd
, smp
->rrnd
, key
);
476 memset(stk
+ smp
->enc_key_size
, 0,
477 SMP_MAX_ENC_KEY_SIZE
- smp
->enc_key_size
);
479 hci_add_ltk(hcon
->hdev
, conn
->dst
, hcon
->dst_type
,
480 HCI_SMP_STK_SLAVE
, 0, 0, stk
, smp
->enc_key_size
,
487 smp_failure(conn
, reason
, 1);
490 static struct smp_chan
*smp_chan_create(struct l2cap_conn
*conn
)
492 struct smp_chan
*smp
;
494 smp
= kzalloc(sizeof(struct smp_chan
), GFP_ATOMIC
);
498 INIT_WORK(&smp
->confirm
, confirm_work
);
499 INIT_WORK(&smp
->random
, random_work
);
502 conn
->smp_chan
= smp
;
503 conn
->hcon
->smp_conn
= conn
;
505 hci_conn_hold(conn
->hcon
);
510 void smp_chan_destroy(struct l2cap_conn
*conn
)
512 struct smp_chan
*smp
= conn
->smp_chan
;
517 crypto_free_blkcipher(smp
->tfm
);
520 conn
->smp_chan
= NULL
;
521 conn
->hcon
->smp_conn
= NULL
;
522 hci_conn_put(conn
->hcon
);
525 int smp_user_confirm_reply(struct hci_conn
*hcon
, u16 mgmt_op
, __le32 passkey
)
527 struct l2cap_conn
*conn
= hcon
->smp_conn
;
528 struct smp_chan
*smp
;
537 smp
= conn
->smp_chan
;
540 case MGMT_OP_USER_PASSKEY_REPLY
:
541 value
= le32_to_cpu(passkey
);
542 memset(key
, 0, sizeof(key
));
543 BT_DBG("PassKey: %d", value
);
544 put_unaligned_le32(value
, key
);
545 swap128(key
, smp
->tk
);
547 case MGMT_OP_USER_CONFIRM_REPLY
:
548 set_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
);
550 case MGMT_OP_USER_PASSKEY_NEG_REPLY
:
551 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
552 smp_failure(conn
, SMP_PASSKEY_ENTRY_FAILED
, 1);
555 smp_failure(conn
, SMP_PASSKEY_ENTRY_FAILED
, 1);
559 /* If it is our turn to send Pairing Confirm, do so now */
560 if (test_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
))
561 queue_work(hcon
->hdev
->workqueue
, &smp
->confirm
);
566 static u8
smp_cmd_pairing_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
568 struct smp_cmd_pairing rsp
, *req
= (void *) skb
->data
;
569 struct smp_chan
*smp
;
571 u8 auth
= SMP_AUTH_NONE
;
574 BT_DBG("conn %p", conn
);
576 if (conn
->hcon
->link_mode
& HCI_LM_MASTER
)
577 return SMP_CMD_NOTSUPP
;
579 if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
))
580 smp
= smp_chan_create(conn
);
582 smp
= conn
->smp_chan
;
584 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
585 memcpy(&smp
->preq
[1], req
, sizeof(*req
));
586 skb_pull(skb
, sizeof(*req
));
588 /* We didn't start the pairing, so match remote */
589 if (req
->auth_req
& SMP_AUTH_BONDING
)
590 auth
= req
->auth_req
;
592 conn
->hcon
->pending_sec_level
= authreq_to_seclevel(auth
);
594 build_pairing_cmd(conn
, req
, &rsp
, auth
);
596 key_size
= min(req
->max_key_size
, rsp
.max_key_size
);
597 if (check_enc_key_size(conn
, key_size
))
598 return SMP_ENC_KEY_SIZE
;
600 ret
= smp_rand(smp
->prnd
);
602 return SMP_UNSPECIFIED
;
604 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
605 memcpy(&smp
->prsp
[1], &rsp
, sizeof(rsp
));
607 smp_send_cmd(conn
, SMP_CMD_PAIRING_RSP
, sizeof(rsp
), &rsp
);
609 /* Request setup of TK */
610 ret
= tk_request(conn
, 0, auth
, rsp
.io_capability
, req
->io_capability
);
612 return SMP_UNSPECIFIED
;
617 static u8
smp_cmd_pairing_rsp(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
619 struct smp_cmd_pairing
*req
, *rsp
= (void *) skb
->data
;
620 struct smp_chan
*smp
= conn
->smp_chan
;
621 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
622 u8 key_size
, auth
= SMP_AUTH_NONE
;
625 BT_DBG("conn %p", conn
);
627 if (!(conn
->hcon
->link_mode
& HCI_LM_MASTER
))
628 return SMP_CMD_NOTSUPP
;
630 skb_pull(skb
, sizeof(*rsp
));
632 req
= (void *) &smp
->preq
[1];
634 key_size
= min(req
->max_key_size
, rsp
->max_key_size
);
635 if (check_enc_key_size(conn
, key_size
))
636 return SMP_ENC_KEY_SIZE
;
638 ret
= smp_rand(smp
->prnd
);
640 return SMP_UNSPECIFIED
;
642 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
643 memcpy(&smp
->prsp
[1], rsp
, sizeof(*rsp
));
645 if ((req
->auth_req
& SMP_AUTH_BONDING
) &&
646 (rsp
->auth_req
& SMP_AUTH_BONDING
))
647 auth
= SMP_AUTH_BONDING
;
649 auth
|= (req
->auth_req
| rsp
->auth_req
) & SMP_AUTH_MITM
;
651 ret
= tk_request(conn
, 0, auth
, rsp
->io_capability
, req
->io_capability
);
653 return SMP_UNSPECIFIED
;
655 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
657 /* Can't compose response until we have been confirmed */
658 if (!test_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
))
661 queue_work(hdev
->workqueue
, &smp
->confirm
);
666 static u8
smp_cmd_pairing_confirm(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
668 struct smp_chan
*smp
= conn
->smp_chan
;
669 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
671 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
673 memcpy(smp
->pcnf
, skb
->data
, sizeof(smp
->pcnf
));
674 skb_pull(skb
, sizeof(smp
->pcnf
));
676 if (conn
->hcon
->out
) {
679 swap128(smp
->prnd
, random
);
680 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(random
),
682 } else if (test_bit(SMP_FLAG_TK_VALID
, &smp
->smp_flags
)) {
683 queue_work(hdev
->workqueue
, &smp
->confirm
);
685 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->smp_flags
);
691 static u8
smp_cmd_pairing_random(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
693 struct smp_chan
*smp
= conn
->smp_chan
;
694 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
696 BT_DBG("conn %p", conn
);
698 swap128(skb
->data
, smp
->rrnd
);
699 skb_pull(skb
, sizeof(smp
->rrnd
));
701 queue_work(hdev
->workqueue
, &smp
->random
);
706 static u8
smp_ltk_encrypt(struct l2cap_conn
*conn
)
709 struct hci_conn
*hcon
= conn
->hcon
;
711 key
= hci_find_ltk_by_addr(hcon
->hdev
, conn
->dst
, hcon
->dst_type
);
715 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->flags
))
718 hci_le_start_enc(hcon
, key
->ediv
, key
->rand
, key
->val
);
719 hcon
->enc_key_size
= key
->enc_size
;
724 static u8
smp_cmd_security_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
726 struct smp_cmd_security_req
*rp
= (void *) skb
->data
;
727 struct smp_cmd_pairing cp
;
728 struct hci_conn
*hcon
= conn
->hcon
;
729 struct smp_chan
*smp
;
731 BT_DBG("conn %p", conn
);
733 hcon
->pending_sec_level
= authreq_to_seclevel(rp
->auth_req
);
735 if (smp_ltk_encrypt(conn
))
738 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
))
741 smp
= smp_chan_create(conn
);
743 skb_pull(skb
, sizeof(*rp
));
745 memset(&cp
, 0, sizeof(cp
));
746 build_pairing_cmd(conn
, &cp
, NULL
, rp
->auth_req
);
748 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
749 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
751 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
756 int smp_conn_security(struct l2cap_conn
*conn
, __u8 sec_level
)
758 struct hci_conn
*hcon
= conn
->hcon
;
759 struct smp_chan
*smp
= conn
->smp_chan
;
762 BT_DBG("conn %p hcon %p level 0x%2.2x", conn
, hcon
, sec_level
);
764 if (!lmp_host_le_capable(hcon
->hdev
))
767 if (sec_level
== BT_SECURITY_LOW
)
770 if (hcon
->sec_level
>= sec_level
)
773 if (hcon
->link_mode
& HCI_LM_MASTER
)
774 if (smp_ltk_encrypt(conn
))
777 if (test_and_set_bit(HCI_CONN_LE_SMP_PEND
, &hcon
->flags
))
780 smp
= smp_chan_create(conn
);
784 authreq
= seclevel_to_authreq(sec_level
);
786 if (hcon
->link_mode
& HCI_LM_MASTER
) {
787 struct smp_cmd_pairing cp
;
789 build_pairing_cmd(conn
, &cp
, NULL
, authreq
);
790 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
791 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
793 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
795 struct smp_cmd_security_req cp
;
796 cp
.auth_req
= authreq
;
797 smp_send_cmd(conn
, SMP_CMD_SECURITY_REQ
, sizeof(cp
), &cp
);
801 hcon
->pending_sec_level
= sec_level
;
806 static int smp_cmd_encrypt_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
808 struct smp_cmd_encrypt_info
*rp
= (void *) skb
->data
;
809 struct smp_chan
*smp
= conn
->smp_chan
;
811 skb_pull(skb
, sizeof(*rp
));
813 memcpy(smp
->tk
, rp
->ltk
, sizeof(smp
->tk
));
818 static int smp_cmd_master_ident(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
820 struct smp_cmd_master_ident
*rp
= (void *) skb
->data
;
821 struct smp_chan
*smp
= conn
->smp_chan
;
822 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
823 struct hci_conn
*hcon
= conn
->hcon
;
826 skb_pull(skb
, sizeof(*rp
));
829 authenticated
= (conn
->hcon
->sec_level
== BT_SECURITY_HIGH
);
830 hci_add_ltk(conn
->hcon
->hdev
, conn
->dst
, hcon
->dst_type
,
831 HCI_SMP_LTK
, 1, authenticated
, smp
->tk
, smp
->enc_key_size
,
833 smp_distribute_keys(conn
, 1);
834 hci_dev_unlock(hdev
);
839 int smp_sig_channel(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
841 __u8 code
= skb
->data
[0];
845 if (!lmp_host_le_capable(conn
->hcon
->hdev
)) {
847 reason
= SMP_PAIRING_NOTSUPP
;
851 skb_pull(skb
, sizeof(code
));
854 case SMP_CMD_PAIRING_REQ
:
855 reason
= smp_cmd_pairing_req(conn
, skb
);
858 case SMP_CMD_PAIRING_FAIL
:
859 smp_failure(conn
, skb
->data
[0], 0);
864 case SMP_CMD_PAIRING_RSP
:
865 reason
= smp_cmd_pairing_rsp(conn
, skb
);
868 case SMP_CMD_SECURITY_REQ
:
869 reason
= smp_cmd_security_req(conn
, skb
);
872 case SMP_CMD_PAIRING_CONFIRM
:
873 reason
= smp_cmd_pairing_confirm(conn
, skb
);
876 case SMP_CMD_PAIRING_RANDOM
:
877 reason
= smp_cmd_pairing_random(conn
, skb
);
880 case SMP_CMD_ENCRYPT_INFO
:
881 reason
= smp_cmd_encrypt_info(conn
, skb
);
884 case SMP_CMD_MASTER_IDENT
:
885 reason
= smp_cmd_master_ident(conn
, skb
);
888 case SMP_CMD_IDENT_INFO
:
889 case SMP_CMD_IDENT_ADDR_INFO
:
890 case SMP_CMD_SIGN_INFO
:
896 BT_DBG("Unknown command code 0x%2.2x", code
);
898 reason
= SMP_CMD_NOTSUPP
;
905 smp_failure(conn
, reason
, 1);
911 int smp_distribute_keys(struct l2cap_conn
*conn
, __u8 force
)
913 struct smp_cmd_pairing
*req
, *rsp
;
914 struct smp_chan
*smp
= conn
->smp_chan
;
917 BT_DBG("conn %p force %d", conn
, force
);
919 if (!test_bit(HCI_CONN_LE_SMP_PEND
, &conn
->hcon
->flags
))
922 rsp
= (void *) &smp
->prsp
[1];
924 /* The responder sends its keys first */
925 if (!force
&& conn
->hcon
->out
&& (rsp
->resp_key_dist
& 0x07))
928 req
= (void *) &smp
->preq
[1];
930 if (conn
->hcon
->out
) {
931 keydist
= &rsp
->init_key_dist
;
932 *keydist
&= req
->init_key_dist
;
934 keydist
= &rsp
->resp_key_dist
;
935 *keydist
&= req
->resp_key_dist
;
939 BT_DBG("keydist 0x%x", *keydist
);
941 if (*keydist
& SMP_DIST_ENC_KEY
) {
942 struct smp_cmd_encrypt_info enc
;
943 struct smp_cmd_master_ident ident
;
944 struct hci_conn
*hcon
= conn
->hcon
;
948 get_random_bytes(enc
.ltk
, sizeof(enc
.ltk
));
949 get_random_bytes(&ediv
, sizeof(ediv
));
950 get_random_bytes(ident
.rand
, sizeof(ident
.rand
));
952 smp_send_cmd(conn
, SMP_CMD_ENCRYPT_INFO
, sizeof(enc
), &enc
);
954 authenticated
= hcon
->sec_level
== BT_SECURITY_HIGH
;
955 hci_add_ltk(conn
->hcon
->hdev
, conn
->dst
, hcon
->dst_type
,
956 HCI_SMP_LTK_SLAVE
, 1, authenticated
,
957 enc
.ltk
, smp
->enc_key_size
, ediv
, ident
.rand
);
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
);