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/debugfs.h>
24 #include <linux/scatterlist.h>
25 #include <linux/crypto.h>
26 #include <crypto/aes.h>
27 #include <crypto/algapi.h>
28 #include <crypto/b128ops.h>
29 #include <crypto/hash.h>
30 #include <crypto/kpp.h>
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/l2cap.h>
35 #include <net/bluetooth/mgmt.h>
37 #include "ecdh_helper.h"
40 #define SMP_DEV(hdev) \
41 ((struct smp_dev *)((struct l2cap_chan *)((hdev)->smp_data))->data)
43 /* Low-level debug macros to be used for stuff that we don't want
44 * accidentially in dmesg, i.e. the values of the various crypto keys
45 * and the inputs & outputs of crypto functions.
48 #define SMP_DBG(fmt, ...) printk(KERN_DEBUG "%s: " fmt, __func__, \
51 #define SMP_DBG(fmt, ...) no_printk(KERN_DEBUG "%s: " fmt, __func__, \
55 #define SMP_ALLOW_CMD(smp, code) set_bit(code, &smp->allow_cmd)
57 /* Keys which are not distributed with Secure Connections */
58 #define SMP_SC_NO_DIST (SMP_DIST_ENC_KEY | SMP_DIST_LINK_KEY);
60 #define SMP_TIMEOUT msecs_to_jiffies(30000)
62 #define AUTH_REQ_MASK(dev) (hci_dev_test_flag(dev, HCI_SC_ENABLED) ? \
64 #define KEY_DIST_MASK 0x07
66 /* Maximum message length that can be passed to aes_cmac */
67 #define CMAC_MSG_MAX 80
79 SMP_FLAG_DHKEY_PENDING
,
86 /* Secure Connections OOB data */
92 struct crypto_shash
*tfm_cmac
;
93 struct crypto_kpp
*tfm_ecdh
;
97 struct l2cap_conn
*conn
;
98 struct delayed_work security_timer
;
99 unsigned long allow_cmd
; /* Bitmask of allowed commands */
101 u8 preq
[7]; /* SMP Pairing Request */
102 u8 prsp
[7]; /* SMP Pairing Response */
103 u8 prnd
[16]; /* SMP Pairing Random (local) */
104 u8 rrnd
[16]; /* SMP Pairing Random (remote) */
105 u8 pcnf
[16]; /* SMP Pairing Confirm */
106 u8 tk
[16]; /* SMP Temporary Key */
107 u8 rr
[16]; /* Remote OOB ra/rb value */
108 u8 lr
[16]; /* Local OOB ra/rb value */
114 struct smp_csrk
*csrk
;
115 struct smp_csrk
*slave_csrk
;
117 struct smp_ltk
*slave_ltk
;
118 struct smp_irk
*remote_irk
;
124 /* Secure Connections variables */
130 struct crypto_shash
*tfm_cmac
;
131 struct crypto_kpp
*tfm_ecdh
;
134 /* These debug key values are defined in the SMP section of the core
135 * specification. debug_pk is the public debug key and debug_sk the
138 static const u8 debug_pk
[64] = {
139 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
140 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
141 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
142 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20,
144 0x8b, 0xd2, 0x89, 0x15, 0xd0, 0x8e, 0x1c, 0x74,
145 0x24, 0x30, 0xed, 0x8f, 0xc2, 0x45, 0x63, 0x76,
146 0x5c, 0x15, 0x52, 0x5a, 0xbf, 0x9a, 0x32, 0x63,
147 0x6d, 0xeb, 0x2a, 0x65, 0x49, 0x9c, 0x80, 0xdc,
150 static const u8 debug_sk
[32] = {
151 0xbd, 0x1a, 0x3c, 0xcd, 0xa6, 0xb8, 0x99, 0x58,
152 0x99, 0xb7, 0x40, 0xeb, 0x7b, 0x60, 0xff, 0x4a,
153 0x50, 0x3f, 0x10, 0xd2, 0xe3, 0xb3, 0xc9, 0x74,
154 0x38, 0x5f, 0xc5, 0xa3, 0xd4, 0xf6, 0x49, 0x3f,
157 static inline void swap_buf(const u8
*src
, u8
*dst
, size_t len
)
161 for (i
= 0; i
< len
; i
++)
162 dst
[len
- 1 - i
] = src
[i
];
165 /* The following functions map to the LE SC SMP crypto functions
166 * AES-CMAC, f4, f5, f6, g2 and h6.
169 static int aes_cmac(struct crypto_shash
*tfm
, const u8 k
[16], const u8
*m
,
170 size_t len
, u8 mac
[16])
172 uint8_t tmp
[16], mac_msb
[16], msg_msb
[CMAC_MSG_MAX
];
173 SHASH_DESC_ON_STACK(desc
, tfm
);
176 if (len
> CMAC_MSG_MAX
)
180 BT_ERR("tfm %p", tfm
);
186 /* Swap key and message from LSB to MSB */
187 swap_buf(k
, tmp
, 16);
188 swap_buf(m
, msg_msb
, len
);
190 SMP_DBG("msg (len %zu) %*phN", len
, (int) len
, m
);
191 SMP_DBG("key %16phN", k
);
193 err
= crypto_shash_setkey(tfm
, tmp
, 16);
195 BT_ERR("cipher setkey failed: %d", err
);
199 err
= crypto_shash_digest(desc
, msg_msb
, len
, mac_msb
);
200 shash_desc_zero(desc
);
202 BT_ERR("Hash computation error %d", err
);
206 swap_buf(mac_msb
, mac
, 16);
208 SMP_DBG("mac %16phN", mac
);
213 static int smp_f4(struct crypto_shash
*tfm_cmac
, const u8 u
[32],
214 const u8 v
[32], const u8 x
[16], u8 z
, u8 res
[16])
219 SMP_DBG("u %32phN", u
);
220 SMP_DBG("v %32phN", v
);
221 SMP_DBG("x %16phN z %02x", x
, z
);
224 memcpy(m
+ 1, v
, 32);
225 memcpy(m
+ 33, u
, 32);
227 err
= aes_cmac(tfm_cmac
, x
, m
, sizeof(m
), res
);
231 SMP_DBG("res %16phN", res
);
236 static int smp_f5(struct crypto_shash
*tfm_cmac
, const u8 w
[32],
237 const u8 n1
[16], const u8 n2
[16], const u8 a1
[7],
238 const u8 a2
[7], u8 mackey
[16], u8 ltk
[16])
240 /* The btle, salt and length "magic" values are as defined in
241 * the SMP section of the Bluetooth core specification. In ASCII
242 * the btle value ends up being 'btle'. The salt is just a
243 * random number whereas length is the value 256 in little
246 const u8 btle
[4] = { 0x65, 0x6c, 0x74, 0x62 };
247 const u8 salt
[16] = { 0xbe, 0x83, 0x60, 0x5a, 0xdb, 0x0b, 0x37, 0x60,
248 0x38, 0xa5, 0xf5, 0xaa, 0x91, 0x83, 0x88, 0x6c };
249 const u8 length
[2] = { 0x00, 0x01 };
253 SMP_DBG("w %32phN", w
);
254 SMP_DBG("n1 %16phN n2 %16phN", n1
, n2
);
255 SMP_DBG("a1 %7phN a2 %7phN", a1
, a2
);
257 err
= aes_cmac(tfm_cmac
, salt
, w
, 32, t
);
261 SMP_DBG("t %16phN", t
);
263 memcpy(m
, length
, 2);
264 memcpy(m
+ 2, a2
, 7);
265 memcpy(m
+ 9, a1
, 7);
266 memcpy(m
+ 16, n2
, 16);
267 memcpy(m
+ 32, n1
, 16);
268 memcpy(m
+ 48, btle
, 4);
270 m
[52] = 0; /* Counter */
272 err
= aes_cmac(tfm_cmac
, t
, m
, sizeof(m
), mackey
);
276 SMP_DBG("mackey %16phN", mackey
);
278 m
[52] = 1; /* Counter */
280 err
= aes_cmac(tfm_cmac
, t
, m
, sizeof(m
), ltk
);
284 SMP_DBG("ltk %16phN", ltk
);
289 static int smp_f6(struct crypto_shash
*tfm_cmac
, const u8 w
[16],
290 const u8 n1
[16], const u8 n2
[16], const u8 r
[16],
291 const u8 io_cap
[3], const u8 a1
[7], const u8 a2
[7],
297 SMP_DBG("w %16phN", w
);
298 SMP_DBG("n1 %16phN n2 %16phN", n1
, n2
);
299 SMP_DBG("r %16phN io_cap %3phN a1 %7phN a2 %7phN", r
, io_cap
, a1
, a2
);
302 memcpy(m
+ 7, a1
, 7);
303 memcpy(m
+ 14, io_cap
, 3);
304 memcpy(m
+ 17, r
, 16);
305 memcpy(m
+ 33, n2
, 16);
306 memcpy(m
+ 49, n1
, 16);
308 err
= aes_cmac(tfm_cmac
, w
, m
, sizeof(m
), res
);
312 SMP_DBG("res %16phN", res
);
317 static int smp_g2(struct crypto_shash
*tfm_cmac
, const u8 u
[32], const u8 v
[32],
318 const u8 x
[16], const u8 y
[16], u32
*val
)
323 SMP_DBG("u %32phN", u
);
324 SMP_DBG("v %32phN", v
);
325 SMP_DBG("x %16phN y %16phN", x
, y
);
328 memcpy(m
+ 16, v
, 32);
329 memcpy(m
+ 48, u
, 32);
331 err
= aes_cmac(tfm_cmac
, x
, m
, sizeof(m
), tmp
);
335 *val
= get_unaligned_le32(tmp
);
338 SMP_DBG("val %06u", *val
);
343 static int smp_h6(struct crypto_shash
*tfm_cmac
, const u8 w
[16],
344 const u8 key_id
[4], u8 res
[16])
348 SMP_DBG("w %16phN key_id %4phN", w
, key_id
);
350 err
= aes_cmac(tfm_cmac
, w
, key_id
, 4, res
);
354 SMP_DBG("res %16phN", res
);
359 static int smp_h7(struct crypto_shash
*tfm_cmac
, const u8 w
[16],
360 const u8 salt
[16], u8 res
[16])
364 SMP_DBG("w %16phN salt %16phN", w
, salt
);
366 err
= aes_cmac(tfm_cmac
, salt
, w
, 16, res
);
370 SMP_DBG("res %16phN", res
);
375 /* The following functions map to the legacy SMP crypto functions e, c1,
379 static int smp_e(const u8
*k
, u8
*r
)
381 struct crypto_aes_ctx ctx
;
382 uint8_t tmp
[16], data
[16];
385 SMP_DBG("k %16phN r %16phN", k
, r
);
387 /* The most significant octet of key corresponds to k[0] */
388 swap_buf(k
, tmp
, 16);
390 err
= aes_expandkey(&ctx
, tmp
, 16);
392 BT_ERR("cipher setkey failed: %d", err
);
396 /* Most significant octet of plaintextData corresponds to data[0] */
397 swap_buf(r
, data
, 16);
399 aes_encrypt(&ctx
, data
, data
);
401 /* Most significant octet of encryptedData corresponds to data[0] */
402 swap_buf(data
, r
, 16);
404 SMP_DBG("r %16phN", r
);
406 memzero_explicit(&ctx
, sizeof (ctx
));
410 static int smp_c1(const u8 k
[16],
411 const u8 r
[16], const u8 preq
[7], const u8 pres
[7], u8 _iat
,
412 const bdaddr_t
*ia
, u8 _rat
, const bdaddr_t
*ra
, u8 res
[16])
417 SMP_DBG("k %16phN r %16phN", k
, r
);
418 SMP_DBG("iat %u ia %6phN rat %u ra %6phN", _iat
, ia
, _rat
, ra
);
419 SMP_DBG("preq %7phN pres %7phN", preq
, pres
);
423 /* p1 = pres || preq || _rat || _iat */
426 memcpy(p1
+ 2, preq
, 7);
427 memcpy(p1
+ 9, pres
, 7);
429 SMP_DBG("p1 %16phN", p1
);
432 u128_xor((u128
*) res
, (u128
*) r
, (u128
*) p1
);
434 /* res = e(k, res) */
437 BT_ERR("Encrypt data error");
441 /* p2 = padding || ia || ra */
443 memcpy(p2
+ 6, ia
, 6);
444 memset(p2
+ 12, 0, 4);
446 SMP_DBG("p2 %16phN", p2
);
448 /* res = res XOR p2 */
449 u128_xor((u128
*) res
, (u128
*) res
, (u128
*) p2
);
451 /* res = e(k, res) */
454 BT_ERR("Encrypt data error");
459 static int smp_s1(const u8 k
[16],
460 const u8 r1
[16], const u8 r2
[16], u8 _r
[16])
464 /* Just least significant octets from r1 and r2 are considered */
466 memcpy(_r
+ 8, r1
, 8);
470 BT_ERR("Encrypt data error");
475 static int smp_ah(const u8 irk
[16], const u8 r
[3], u8 res
[3])
480 /* r' = padding || r */
482 memset(_res
+ 3, 0, 13);
484 err
= smp_e(irk
, _res
);
486 BT_ERR("Encrypt error");
490 /* The output of the random address function ah is:
491 * ah(k, r) = e(k, r') mod 2^24
492 * The output of the security function e is then truncated to 24 bits
493 * by taking the least significant 24 bits of the output of e as the
496 memcpy(res
, _res
, 3);
501 bool smp_irk_matches(struct hci_dev
*hdev
, const u8 irk
[16],
502 const bdaddr_t
*bdaddr
)
504 struct l2cap_chan
*chan
= hdev
->smp_data
;
508 if (!chan
|| !chan
->data
)
511 BT_DBG("RPA %pMR IRK %*phN", bdaddr
, 16, irk
);
513 err
= smp_ah(irk
, &bdaddr
->b
[3], hash
);
517 return !crypto_memneq(bdaddr
->b
, hash
, 3);
520 int smp_generate_rpa(struct hci_dev
*hdev
, const u8 irk
[16], bdaddr_t
*rpa
)
522 struct l2cap_chan
*chan
= hdev
->smp_data
;
525 if (!chan
|| !chan
->data
)
528 get_random_bytes(&rpa
->b
[3], 3);
530 rpa
->b
[5] &= 0x3f; /* Clear two most significant bits */
531 rpa
->b
[5] |= 0x40; /* Set second most significant bit */
533 err
= smp_ah(irk
, &rpa
->b
[3], rpa
->b
);
537 BT_DBG("RPA %pMR", rpa
);
542 int smp_generate_oob(struct hci_dev
*hdev
, u8 hash
[16], u8 rand
[16])
544 struct l2cap_chan
*chan
= hdev
->smp_data
;
548 if (!chan
|| !chan
->data
)
553 if (hci_dev_test_flag(hdev
, HCI_USE_DEBUG_KEYS
)) {
554 BT_DBG("Using debug keys");
555 err
= set_ecdh_privkey(smp
->tfm_ecdh
, debug_sk
);
558 memcpy(smp
->local_pk
, debug_pk
, 64);
559 smp
->debug_key
= true;
562 /* Generate key pair for Secure Connections */
563 err
= generate_ecdh_keys(smp
->tfm_ecdh
, smp
->local_pk
);
567 /* This is unlikely, but we need to check that
568 * we didn't accidentially generate a debug key.
570 if (crypto_memneq(smp
->local_pk
, debug_pk
, 64))
573 smp
->debug_key
= false;
576 SMP_DBG("OOB Public Key X: %32phN", smp
->local_pk
);
577 SMP_DBG("OOB Public Key Y: %32phN", smp
->local_pk
+ 32);
579 get_random_bytes(smp
->local_rand
, 16);
581 err
= smp_f4(smp
->tfm_cmac
, smp
->local_pk
, smp
->local_pk
,
582 smp
->local_rand
, 0, hash
);
586 memcpy(rand
, smp
->local_rand
, 16);
588 smp
->local_oob
= true;
593 static void smp_send_cmd(struct l2cap_conn
*conn
, u8 code
, u16 len
, void *data
)
595 struct l2cap_chan
*chan
= conn
->smp
;
596 struct smp_chan
*smp
;
603 BT_DBG("code 0x%2.2x", code
);
605 iv
[0].iov_base
= &code
;
608 iv
[1].iov_base
= data
;
611 memset(&msg
, 0, sizeof(msg
));
613 iov_iter_kvec(&msg
.msg_iter
, WRITE
, iv
, 2, 1 + len
);
615 l2cap_chan_send(chan
, &msg
, 1 + len
);
622 cancel_delayed_work_sync(&smp
->security_timer
);
623 schedule_delayed_work(&smp
->security_timer
, SMP_TIMEOUT
);
626 static u8
authreq_to_seclevel(u8 authreq
)
628 if (authreq
& SMP_AUTH_MITM
) {
629 if (authreq
& SMP_AUTH_SC
)
630 return BT_SECURITY_FIPS
;
632 return BT_SECURITY_HIGH
;
634 return BT_SECURITY_MEDIUM
;
638 static __u8
seclevel_to_authreq(__u8 sec_level
)
641 case BT_SECURITY_FIPS
:
642 case BT_SECURITY_HIGH
:
643 return SMP_AUTH_MITM
| SMP_AUTH_BONDING
;
644 case BT_SECURITY_MEDIUM
:
645 return SMP_AUTH_BONDING
;
647 return SMP_AUTH_NONE
;
651 static void build_pairing_cmd(struct l2cap_conn
*conn
,
652 struct smp_cmd_pairing
*req
,
653 struct smp_cmd_pairing
*rsp
, __u8 authreq
)
655 struct l2cap_chan
*chan
= conn
->smp
;
656 struct smp_chan
*smp
= chan
->data
;
657 struct hci_conn
*hcon
= conn
->hcon
;
658 struct hci_dev
*hdev
= hcon
->hdev
;
659 u8 local_dist
= 0, remote_dist
= 0, oob_flag
= SMP_OOB_NOT_PRESENT
;
661 if (hci_dev_test_flag(hdev
, HCI_BONDABLE
)) {
662 local_dist
= SMP_DIST_ENC_KEY
| SMP_DIST_SIGN
;
663 remote_dist
= SMP_DIST_ENC_KEY
| SMP_DIST_SIGN
;
664 authreq
|= SMP_AUTH_BONDING
;
666 authreq
&= ~SMP_AUTH_BONDING
;
669 if (hci_dev_test_flag(hdev
, HCI_RPA_RESOLVING
))
670 remote_dist
|= SMP_DIST_ID_KEY
;
672 if (hci_dev_test_flag(hdev
, HCI_PRIVACY
))
673 local_dist
|= SMP_DIST_ID_KEY
;
675 if (hci_dev_test_flag(hdev
, HCI_SC_ENABLED
) &&
676 (authreq
& SMP_AUTH_SC
)) {
677 struct oob_data
*oob_data
;
680 if (hci_dev_test_flag(hdev
, HCI_SSP_ENABLED
)) {
681 local_dist
|= SMP_DIST_LINK_KEY
;
682 remote_dist
|= SMP_DIST_LINK_KEY
;
685 if (hcon
->dst_type
== ADDR_LE_DEV_PUBLIC
)
686 bdaddr_type
= BDADDR_LE_PUBLIC
;
688 bdaddr_type
= BDADDR_LE_RANDOM
;
690 oob_data
= hci_find_remote_oob_data(hdev
, &hcon
->dst
,
692 if (oob_data
&& oob_data
->present
) {
693 set_bit(SMP_FLAG_REMOTE_OOB
, &smp
->flags
);
694 oob_flag
= SMP_OOB_PRESENT
;
695 memcpy(smp
->rr
, oob_data
->rand256
, 16);
696 memcpy(smp
->pcnf
, oob_data
->hash256
, 16);
697 SMP_DBG("OOB Remote Confirmation: %16phN", smp
->pcnf
);
698 SMP_DBG("OOB Remote Random: %16phN", smp
->rr
);
702 authreq
&= ~SMP_AUTH_SC
;
706 req
->io_capability
= conn
->hcon
->io_capability
;
707 req
->oob_flag
= oob_flag
;
708 req
->max_key_size
= hdev
->le_max_key_size
;
709 req
->init_key_dist
= local_dist
;
710 req
->resp_key_dist
= remote_dist
;
711 req
->auth_req
= (authreq
& AUTH_REQ_MASK(hdev
));
713 smp
->remote_key_dist
= remote_dist
;
717 rsp
->io_capability
= conn
->hcon
->io_capability
;
718 rsp
->oob_flag
= oob_flag
;
719 rsp
->max_key_size
= hdev
->le_max_key_size
;
720 rsp
->init_key_dist
= req
->init_key_dist
& remote_dist
;
721 rsp
->resp_key_dist
= req
->resp_key_dist
& local_dist
;
722 rsp
->auth_req
= (authreq
& AUTH_REQ_MASK(hdev
));
724 smp
->remote_key_dist
= rsp
->init_key_dist
;
727 static u8
check_enc_key_size(struct l2cap_conn
*conn
, __u8 max_key_size
)
729 struct l2cap_chan
*chan
= conn
->smp
;
730 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
731 struct smp_chan
*smp
= chan
->data
;
733 if (max_key_size
> hdev
->le_max_key_size
||
734 max_key_size
< SMP_MIN_ENC_KEY_SIZE
)
735 return SMP_ENC_KEY_SIZE
;
737 smp
->enc_key_size
= max_key_size
;
742 static void smp_chan_destroy(struct l2cap_conn
*conn
)
744 struct l2cap_chan
*chan
= conn
->smp
;
745 struct smp_chan
*smp
= chan
->data
;
746 struct hci_conn
*hcon
= conn
->hcon
;
751 cancel_delayed_work_sync(&smp
->security_timer
);
753 complete
= test_bit(SMP_FLAG_COMPLETE
, &smp
->flags
);
754 mgmt_smp_complete(hcon
, complete
);
757 kzfree(smp
->slave_csrk
);
758 kzfree(smp
->link_key
);
760 crypto_free_shash(smp
->tfm_cmac
);
761 crypto_free_kpp(smp
->tfm_ecdh
);
763 /* Ensure that we don't leave any debug key around if debug key
764 * support hasn't been explicitly enabled.
766 if (smp
->ltk
&& smp
->ltk
->type
== SMP_LTK_P256_DEBUG
&&
767 !hci_dev_test_flag(hcon
->hdev
, HCI_KEEP_DEBUG_KEYS
)) {
768 list_del_rcu(&smp
->ltk
->list
);
769 kfree_rcu(smp
->ltk
, rcu
);
773 /* If pairing failed clean up any keys we might have */
776 list_del_rcu(&smp
->ltk
->list
);
777 kfree_rcu(smp
->ltk
, rcu
);
780 if (smp
->slave_ltk
) {
781 list_del_rcu(&smp
->slave_ltk
->list
);
782 kfree_rcu(smp
->slave_ltk
, rcu
);
785 if (smp
->remote_irk
) {
786 list_del_rcu(&smp
->remote_irk
->list
);
787 kfree_rcu(smp
->remote_irk
, rcu
);
796 static void smp_failure(struct l2cap_conn
*conn
, u8 reason
)
798 struct hci_conn
*hcon
= conn
->hcon
;
799 struct l2cap_chan
*chan
= conn
->smp
;
802 smp_send_cmd(conn
, SMP_CMD_PAIRING_FAIL
, sizeof(reason
),
805 mgmt_auth_failed(hcon
, HCI_ERROR_AUTH_FAILURE
);
808 smp_chan_destroy(conn
);
811 #define JUST_WORKS 0x00
812 #define JUST_CFM 0x01
813 #define REQ_PASSKEY 0x02
814 #define CFM_PASSKEY 0x03
816 #define DSP_PASSKEY 0x05
819 static const u8 gen_method
[5][5] = {
820 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
821 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
822 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, CFM_PASSKEY
},
823 { JUST_WORKS
, JUST_CFM
, JUST_WORKS
, JUST_WORKS
, JUST_CFM
},
824 { CFM_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, OVERLAP
},
827 static const u8 sc_method
[5][5] = {
828 { JUST_WORKS
, JUST_CFM
, REQ_PASSKEY
, JUST_WORKS
, REQ_PASSKEY
},
829 { JUST_WORKS
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, CFM_PASSKEY
},
830 { DSP_PASSKEY
, DSP_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, DSP_PASSKEY
},
831 { JUST_WORKS
, JUST_CFM
, JUST_WORKS
, JUST_WORKS
, JUST_CFM
},
832 { DSP_PASSKEY
, CFM_PASSKEY
, REQ_PASSKEY
, JUST_WORKS
, CFM_PASSKEY
},
835 static u8
get_auth_method(struct smp_chan
*smp
, u8 local_io
, u8 remote_io
)
837 /* If either side has unknown io_caps, use JUST_CFM (which gets
838 * converted later to JUST_WORKS if we're initiators.
840 if (local_io
> SMP_IO_KEYBOARD_DISPLAY
||
841 remote_io
> SMP_IO_KEYBOARD_DISPLAY
)
844 if (test_bit(SMP_FLAG_SC
, &smp
->flags
))
845 return sc_method
[remote_io
][local_io
];
847 return gen_method
[remote_io
][local_io
];
850 static int tk_request(struct l2cap_conn
*conn
, u8 remote_oob
, u8 auth
,
851 u8 local_io
, u8 remote_io
)
853 struct hci_conn
*hcon
= conn
->hcon
;
854 struct l2cap_chan
*chan
= conn
->smp
;
855 struct smp_chan
*smp
= chan
->data
;
859 /* Initialize key for JUST WORKS */
860 memset(smp
->tk
, 0, sizeof(smp
->tk
));
861 clear_bit(SMP_FLAG_TK_VALID
, &smp
->flags
);
863 BT_DBG("tk_request: auth:%d lcl:%d rem:%d", auth
, local_io
, remote_io
);
865 /* If neither side wants MITM, either "just" confirm an incoming
866 * request or use just-works for outgoing ones. The JUST_CFM
867 * will be converted to JUST_WORKS if necessary later in this
868 * function. If either side has MITM look up the method from the
871 if (!(auth
& SMP_AUTH_MITM
))
872 smp
->method
= JUST_CFM
;
874 smp
->method
= get_auth_method(smp
, local_io
, remote_io
);
876 /* Don't confirm locally initiated pairing attempts */
877 if (smp
->method
== JUST_CFM
&& test_bit(SMP_FLAG_INITIATOR
,
879 smp
->method
= JUST_WORKS
;
881 /* Don't bother user space with no IO capabilities */
882 if (smp
->method
== JUST_CFM
&&
883 hcon
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)
884 smp
->method
= JUST_WORKS
;
886 /* If Just Works, Continue with Zero TK */
887 if (smp
->method
== JUST_WORKS
) {
888 set_bit(SMP_FLAG_TK_VALID
, &smp
->flags
);
892 /* If this function is used for SC -> legacy fallback we
893 * can only recover the just-works case.
895 if (test_bit(SMP_FLAG_SC
, &smp
->flags
))
898 /* Not Just Works/Confirm results in MITM Authentication */
899 if (smp
->method
!= JUST_CFM
) {
900 set_bit(SMP_FLAG_MITM_AUTH
, &smp
->flags
);
901 if (hcon
->pending_sec_level
< BT_SECURITY_HIGH
)
902 hcon
->pending_sec_level
= BT_SECURITY_HIGH
;
905 /* If both devices have Keyoard-Display I/O, the master
906 * Confirms and the slave Enters the passkey.
908 if (smp
->method
== OVERLAP
) {
909 if (hcon
->role
== HCI_ROLE_MASTER
)
910 smp
->method
= CFM_PASSKEY
;
912 smp
->method
= REQ_PASSKEY
;
915 /* Generate random passkey. */
916 if (smp
->method
== CFM_PASSKEY
) {
917 memset(smp
->tk
, 0, sizeof(smp
->tk
));
918 get_random_bytes(&passkey
, sizeof(passkey
));
920 put_unaligned_le32(passkey
, smp
->tk
);
921 BT_DBG("PassKey: %d", passkey
);
922 set_bit(SMP_FLAG_TK_VALID
, &smp
->flags
);
925 if (smp
->method
== REQ_PASSKEY
)
926 ret
= mgmt_user_passkey_request(hcon
->hdev
, &hcon
->dst
,
927 hcon
->type
, hcon
->dst_type
);
928 else if (smp
->method
== JUST_CFM
)
929 ret
= mgmt_user_confirm_request(hcon
->hdev
, &hcon
->dst
,
930 hcon
->type
, hcon
->dst_type
,
933 ret
= mgmt_user_passkey_notify(hcon
->hdev
, &hcon
->dst
,
934 hcon
->type
, hcon
->dst_type
,
940 static u8
smp_confirm(struct smp_chan
*smp
)
942 struct l2cap_conn
*conn
= smp
->conn
;
943 struct smp_cmd_pairing_confirm cp
;
946 BT_DBG("conn %p", conn
);
948 ret
= smp_c1(smp
->tk
, smp
->prnd
, smp
->preq
, smp
->prsp
,
949 conn
->hcon
->init_addr_type
, &conn
->hcon
->init_addr
,
950 conn
->hcon
->resp_addr_type
, &conn
->hcon
->resp_addr
,
953 return SMP_UNSPECIFIED
;
955 clear_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
);
957 smp_send_cmd(smp
->conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cp
), &cp
);
960 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
962 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
967 static u8
smp_random(struct smp_chan
*smp
)
969 struct l2cap_conn
*conn
= smp
->conn
;
970 struct hci_conn
*hcon
= conn
->hcon
;
974 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
976 ret
= smp_c1(smp
->tk
, smp
->rrnd
, smp
->preq
, smp
->prsp
,
977 hcon
->init_addr_type
, &hcon
->init_addr
,
978 hcon
->resp_addr_type
, &hcon
->resp_addr
, confirm
);
980 return SMP_UNSPECIFIED
;
982 if (crypto_memneq(smp
->pcnf
, confirm
, sizeof(smp
->pcnf
))) {
983 bt_dev_err(hcon
->hdev
, "pairing failed "
984 "(confirmation values mismatch)");
985 return SMP_CONFIRM_FAILED
;
993 smp_s1(smp
->tk
, smp
->rrnd
, smp
->prnd
, stk
);
995 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->flags
))
996 return SMP_UNSPECIFIED
;
998 hci_le_start_enc(hcon
, ediv
, rand
, stk
, smp
->enc_key_size
);
999 hcon
->enc_key_size
= smp
->enc_key_size
;
1000 set_bit(HCI_CONN_STK_ENCRYPT
, &hcon
->flags
);
1006 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(smp
->prnd
),
1009 smp_s1(smp
->tk
, smp
->prnd
, smp
->rrnd
, stk
);
1011 if (hcon
->pending_sec_level
== BT_SECURITY_HIGH
)
1016 /* Even though there's no _SLAVE suffix this is the
1017 * slave STK we're adding for later lookup (the master
1018 * STK never needs to be stored).
1020 hci_add_ltk(hcon
->hdev
, &hcon
->dst
, hcon
->dst_type
,
1021 SMP_STK
, auth
, stk
, smp
->enc_key_size
, ediv
, rand
);
1027 static void smp_notify_keys(struct l2cap_conn
*conn
)
1029 struct l2cap_chan
*chan
= conn
->smp
;
1030 struct smp_chan
*smp
= chan
->data
;
1031 struct hci_conn
*hcon
= conn
->hcon
;
1032 struct hci_dev
*hdev
= hcon
->hdev
;
1033 struct smp_cmd_pairing
*req
= (void *) &smp
->preq
[1];
1034 struct smp_cmd_pairing
*rsp
= (void *) &smp
->prsp
[1];
1037 if (hcon
->type
== ACL_LINK
) {
1038 if (hcon
->key_type
== HCI_LK_DEBUG_COMBINATION
)
1041 persistent
= !test_bit(HCI_CONN_FLUSH_KEY
,
1044 /* The LTKs, IRKs and CSRKs should be persistent only if
1045 * both sides had the bonding bit set in their
1046 * authentication requests.
1048 persistent
= !!((req
->auth_req
& rsp
->auth_req
) &
1052 if (smp
->remote_irk
) {
1053 mgmt_new_irk(hdev
, smp
->remote_irk
, persistent
);
1055 /* Now that user space can be considered to know the
1056 * identity address track the connection based on it
1057 * from now on (assuming this is an LE link).
1059 if (hcon
->type
== LE_LINK
) {
1060 bacpy(&hcon
->dst
, &smp
->remote_irk
->bdaddr
);
1061 hcon
->dst_type
= smp
->remote_irk
->addr_type
;
1062 queue_work(hdev
->workqueue
, &conn
->id_addr_update_work
);
1067 smp
->csrk
->bdaddr_type
= hcon
->dst_type
;
1068 bacpy(&smp
->csrk
->bdaddr
, &hcon
->dst
);
1069 mgmt_new_csrk(hdev
, smp
->csrk
, persistent
);
1072 if (smp
->slave_csrk
) {
1073 smp
->slave_csrk
->bdaddr_type
= hcon
->dst_type
;
1074 bacpy(&smp
->slave_csrk
->bdaddr
, &hcon
->dst
);
1075 mgmt_new_csrk(hdev
, smp
->slave_csrk
, persistent
);
1079 smp
->ltk
->bdaddr_type
= hcon
->dst_type
;
1080 bacpy(&smp
->ltk
->bdaddr
, &hcon
->dst
);
1081 mgmt_new_ltk(hdev
, smp
->ltk
, persistent
);
1084 if (smp
->slave_ltk
) {
1085 smp
->slave_ltk
->bdaddr_type
= hcon
->dst_type
;
1086 bacpy(&smp
->slave_ltk
->bdaddr
, &hcon
->dst
);
1087 mgmt_new_ltk(hdev
, smp
->slave_ltk
, persistent
);
1090 if (smp
->link_key
) {
1091 struct link_key
*key
;
1094 if (test_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
))
1095 type
= HCI_LK_DEBUG_COMBINATION
;
1096 else if (hcon
->sec_level
== BT_SECURITY_FIPS
)
1097 type
= HCI_LK_AUTH_COMBINATION_P256
;
1099 type
= HCI_LK_UNAUTH_COMBINATION_P256
;
1101 key
= hci_add_link_key(hdev
, smp
->conn
->hcon
, &hcon
->dst
,
1102 smp
->link_key
, type
, 0, &persistent
);
1104 mgmt_new_link_key(hdev
, key
, persistent
);
1106 /* Don't keep debug keys around if the relevant
1109 if (!hci_dev_test_flag(hdev
, HCI_KEEP_DEBUG_KEYS
) &&
1110 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
1111 list_del_rcu(&key
->list
);
1112 kfree_rcu(key
, rcu
);
1118 static void sc_add_ltk(struct smp_chan
*smp
)
1120 struct hci_conn
*hcon
= smp
->conn
->hcon
;
1123 if (test_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
))
1124 key_type
= SMP_LTK_P256_DEBUG
;
1126 key_type
= SMP_LTK_P256
;
1128 if (hcon
->pending_sec_level
== BT_SECURITY_FIPS
)
1133 smp
->ltk
= hci_add_ltk(hcon
->hdev
, &hcon
->dst
, hcon
->dst_type
,
1134 key_type
, auth
, smp
->tk
, smp
->enc_key_size
,
1138 static void sc_generate_link_key(struct smp_chan
*smp
)
1140 /* From core spec. Spells out in ASCII as 'lebr'. */
1141 const u8 lebr
[4] = { 0x72, 0x62, 0x65, 0x6c };
1143 smp
->link_key
= kzalloc(16, GFP_KERNEL
);
1147 if (test_bit(SMP_FLAG_CT2
, &smp
->flags
)) {
1148 /* SALT = 0x000000000000000000000000746D7031 */
1149 const u8 salt
[16] = { 0x31, 0x70, 0x6d, 0x74 };
1151 if (smp_h7(smp
->tfm_cmac
, smp
->tk
, salt
, smp
->link_key
)) {
1152 kzfree(smp
->link_key
);
1153 smp
->link_key
= NULL
;
1157 /* From core spec. Spells out in ASCII as 'tmp1'. */
1158 const u8 tmp1
[4] = { 0x31, 0x70, 0x6d, 0x74 };
1160 if (smp_h6(smp
->tfm_cmac
, smp
->tk
, tmp1
, smp
->link_key
)) {
1161 kzfree(smp
->link_key
);
1162 smp
->link_key
= NULL
;
1167 if (smp_h6(smp
->tfm_cmac
, smp
->link_key
, lebr
, smp
->link_key
)) {
1168 kzfree(smp
->link_key
);
1169 smp
->link_key
= NULL
;
1174 static void smp_allow_key_dist(struct smp_chan
*smp
)
1176 /* Allow the first expected phase 3 PDU. The rest of the PDUs
1177 * will be allowed in each PDU handler to ensure we receive
1178 * them in the correct order.
1180 if (smp
->remote_key_dist
& SMP_DIST_ENC_KEY
)
1181 SMP_ALLOW_CMD(smp
, SMP_CMD_ENCRYPT_INFO
);
1182 else if (smp
->remote_key_dist
& SMP_DIST_ID_KEY
)
1183 SMP_ALLOW_CMD(smp
, SMP_CMD_IDENT_INFO
);
1184 else if (smp
->remote_key_dist
& SMP_DIST_SIGN
)
1185 SMP_ALLOW_CMD(smp
, SMP_CMD_SIGN_INFO
);
1188 static void sc_generate_ltk(struct smp_chan
*smp
)
1190 /* From core spec. Spells out in ASCII as 'brle'. */
1191 const u8 brle
[4] = { 0x65, 0x6c, 0x72, 0x62 };
1192 struct hci_conn
*hcon
= smp
->conn
->hcon
;
1193 struct hci_dev
*hdev
= hcon
->hdev
;
1194 struct link_key
*key
;
1196 key
= hci_find_link_key(hdev
, &hcon
->dst
);
1198 bt_dev_err(hdev
, "no Link Key found to generate LTK");
1202 if (key
->type
== HCI_LK_DEBUG_COMBINATION
)
1203 set_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
);
1205 if (test_bit(SMP_FLAG_CT2
, &smp
->flags
)) {
1206 /* SALT = 0x000000000000000000000000746D7032 */
1207 const u8 salt
[16] = { 0x32, 0x70, 0x6d, 0x74 };
1209 if (smp_h7(smp
->tfm_cmac
, key
->val
, salt
, smp
->tk
))
1212 /* From core spec. Spells out in ASCII as 'tmp2'. */
1213 const u8 tmp2
[4] = { 0x32, 0x70, 0x6d, 0x74 };
1215 if (smp_h6(smp
->tfm_cmac
, key
->val
, tmp2
, smp
->tk
))
1219 if (smp_h6(smp
->tfm_cmac
, smp
->tk
, brle
, smp
->tk
))
1225 static void smp_distribute_keys(struct smp_chan
*smp
)
1227 struct smp_cmd_pairing
*req
, *rsp
;
1228 struct l2cap_conn
*conn
= smp
->conn
;
1229 struct hci_conn
*hcon
= conn
->hcon
;
1230 struct hci_dev
*hdev
= hcon
->hdev
;
1233 BT_DBG("conn %p", conn
);
1235 rsp
= (void *) &smp
->prsp
[1];
1237 /* The responder sends its keys first */
1238 if (hcon
->out
&& (smp
->remote_key_dist
& KEY_DIST_MASK
)) {
1239 smp_allow_key_dist(smp
);
1243 req
= (void *) &smp
->preq
[1];
1246 keydist
= &rsp
->init_key_dist
;
1247 *keydist
&= req
->init_key_dist
;
1249 keydist
= &rsp
->resp_key_dist
;
1250 *keydist
&= req
->resp_key_dist
;
1253 if (test_bit(SMP_FLAG_SC
, &smp
->flags
)) {
1254 if (hcon
->type
== LE_LINK
&& (*keydist
& SMP_DIST_LINK_KEY
))
1255 sc_generate_link_key(smp
);
1256 if (hcon
->type
== ACL_LINK
&& (*keydist
& SMP_DIST_ENC_KEY
))
1257 sc_generate_ltk(smp
);
1259 /* Clear the keys which are generated but not distributed */
1260 *keydist
&= ~SMP_SC_NO_DIST
;
1263 BT_DBG("keydist 0x%x", *keydist
);
1265 if (*keydist
& SMP_DIST_ENC_KEY
) {
1266 struct smp_cmd_encrypt_info enc
;
1267 struct smp_cmd_master_ident ident
;
1268 struct smp_ltk
*ltk
;
1273 /* Make sure we generate only the significant amount of
1274 * bytes based on the encryption key size, and set the rest
1275 * of the value to zeroes.
1277 get_random_bytes(enc
.ltk
, smp
->enc_key_size
);
1278 memset(enc
.ltk
+ smp
->enc_key_size
, 0,
1279 sizeof(enc
.ltk
) - smp
->enc_key_size
);
1281 get_random_bytes(&ediv
, sizeof(ediv
));
1282 get_random_bytes(&rand
, sizeof(rand
));
1284 smp_send_cmd(conn
, SMP_CMD_ENCRYPT_INFO
, sizeof(enc
), &enc
);
1286 authenticated
= hcon
->sec_level
== BT_SECURITY_HIGH
;
1287 ltk
= hci_add_ltk(hdev
, &hcon
->dst
, hcon
->dst_type
,
1288 SMP_LTK_SLAVE
, authenticated
, enc
.ltk
,
1289 smp
->enc_key_size
, ediv
, rand
);
1290 smp
->slave_ltk
= ltk
;
1295 smp_send_cmd(conn
, SMP_CMD_MASTER_IDENT
, sizeof(ident
), &ident
);
1297 *keydist
&= ~SMP_DIST_ENC_KEY
;
1300 if (*keydist
& SMP_DIST_ID_KEY
) {
1301 struct smp_cmd_ident_addr_info addrinfo
;
1302 struct smp_cmd_ident_info idinfo
;
1304 memcpy(idinfo
.irk
, hdev
->irk
, sizeof(idinfo
.irk
));
1306 smp_send_cmd(conn
, SMP_CMD_IDENT_INFO
, sizeof(idinfo
), &idinfo
);
1308 /* The hci_conn contains the local identity address
1309 * after the connection has been established.
1311 * This is true even when the connection has been
1312 * established using a resolvable random address.
1314 bacpy(&addrinfo
.bdaddr
, &hcon
->src
);
1315 addrinfo
.addr_type
= hcon
->src_type
;
1317 smp_send_cmd(conn
, SMP_CMD_IDENT_ADDR_INFO
, sizeof(addrinfo
),
1320 *keydist
&= ~SMP_DIST_ID_KEY
;
1323 if (*keydist
& SMP_DIST_SIGN
) {
1324 struct smp_cmd_sign_info sign
;
1325 struct smp_csrk
*csrk
;
1327 /* Generate a new random key */
1328 get_random_bytes(sign
.csrk
, sizeof(sign
.csrk
));
1330 csrk
= kzalloc(sizeof(*csrk
), GFP_KERNEL
);
1332 if (hcon
->sec_level
> BT_SECURITY_MEDIUM
)
1333 csrk
->type
= MGMT_CSRK_LOCAL_AUTHENTICATED
;
1335 csrk
->type
= MGMT_CSRK_LOCAL_UNAUTHENTICATED
;
1336 memcpy(csrk
->val
, sign
.csrk
, sizeof(csrk
->val
));
1338 smp
->slave_csrk
= csrk
;
1340 smp_send_cmd(conn
, SMP_CMD_SIGN_INFO
, sizeof(sign
), &sign
);
1342 *keydist
&= ~SMP_DIST_SIGN
;
1345 /* If there are still keys to be received wait for them */
1346 if (smp
->remote_key_dist
& KEY_DIST_MASK
) {
1347 smp_allow_key_dist(smp
);
1351 set_bit(SMP_FLAG_COMPLETE
, &smp
->flags
);
1352 smp_notify_keys(conn
);
1354 smp_chan_destroy(conn
);
1357 static void smp_timeout(struct work_struct
*work
)
1359 struct smp_chan
*smp
= container_of(work
, struct smp_chan
,
1360 security_timer
.work
);
1361 struct l2cap_conn
*conn
= smp
->conn
;
1363 BT_DBG("conn %p", conn
);
1365 hci_disconnect(conn
->hcon
, HCI_ERROR_REMOTE_USER_TERM
);
1368 static struct smp_chan
*smp_chan_create(struct l2cap_conn
*conn
)
1370 struct l2cap_chan
*chan
= conn
->smp
;
1371 struct smp_chan
*smp
;
1373 smp
= kzalloc(sizeof(*smp
), GFP_ATOMIC
);
1377 smp
->tfm_cmac
= crypto_alloc_shash("cmac(aes)", 0, 0);
1378 if (IS_ERR(smp
->tfm_cmac
)) {
1379 BT_ERR("Unable to create CMAC crypto context");
1383 smp
->tfm_ecdh
= crypto_alloc_kpp("ecdh", CRYPTO_ALG_INTERNAL
, 0);
1384 if (IS_ERR(smp
->tfm_ecdh
)) {
1385 BT_ERR("Unable to create ECDH crypto context");
1392 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_FAIL
);
1394 INIT_DELAYED_WORK(&smp
->security_timer
, smp_timeout
);
1396 hci_conn_hold(conn
->hcon
);
1401 crypto_free_shash(smp
->tfm_cmac
);
1407 static int sc_mackey_and_ltk(struct smp_chan
*smp
, u8 mackey
[16], u8 ltk
[16])
1409 struct hci_conn
*hcon
= smp
->conn
->hcon
;
1410 u8
*na
, *nb
, a
[7], b
[7];
1420 memcpy(a
, &hcon
->init_addr
, 6);
1421 memcpy(b
, &hcon
->resp_addr
, 6);
1422 a
[6] = hcon
->init_addr_type
;
1423 b
[6] = hcon
->resp_addr_type
;
1425 return smp_f5(smp
->tfm_cmac
, smp
->dhkey
, na
, nb
, a
, b
, mackey
, ltk
);
1428 static void sc_dhkey_check(struct smp_chan
*smp
)
1430 struct hci_conn
*hcon
= smp
->conn
->hcon
;
1431 struct smp_cmd_dhkey_check check
;
1432 u8 a
[7], b
[7], *local_addr
, *remote_addr
;
1433 u8 io_cap
[3], r
[16];
1435 memcpy(a
, &hcon
->init_addr
, 6);
1436 memcpy(b
, &hcon
->resp_addr
, 6);
1437 a
[6] = hcon
->init_addr_type
;
1438 b
[6] = hcon
->resp_addr_type
;
1443 memcpy(io_cap
, &smp
->preq
[1], 3);
1447 memcpy(io_cap
, &smp
->prsp
[1], 3);
1450 memset(r
, 0, sizeof(r
));
1452 if (smp
->method
== REQ_PASSKEY
|| smp
->method
== DSP_PASSKEY
)
1453 put_unaligned_le32(hcon
->passkey_notify
, r
);
1455 if (smp
->method
== REQ_OOB
)
1456 memcpy(r
, smp
->rr
, 16);
1458 smp_f6(smp
->tfm_cmac
, smp
->mackey
, smp
->prnd
, smp
->rrnd
, r
, io_cap
,
1459 local_addr
, remote_addr
, check
.e
);
1461 smp_send_cmd(smp
->conn
, SMP_CMD_DHKEY_CHECK
, sizeof(check
), &check
);
1464 static u8
sc_passkey_send_confirm(struct smp_chan
*smp
)
1466 struct l2cap_conn
*conn
= smp
->conn
;
1467 struct hci_conn
*hcon
= conn
->hcon
;
1468 struct smp_cmd_pairing_confirm cfm
;
1471 r
= ((hcon
->passkey_notify
>> smp
->passkey_round
) & 0x01);
1474 get_random_bytes(smp
->prnd
, sizeof(smp
->prnd
));
1476 if (smp_f4(smp
->tfm_cmac
, smp
->local_pk
, smp
->remote_pk
, smp
->prnd
, r
,
1478 return SMP_UNSPECIFIED
;
1480 smp_send_cmd(conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cfm
), &cfm
);
1485 static u8
sc_passkey_round(struct smp_chan
*smp
, u8 smp_op
)
1487 struct l2cap_conn
*conn
= smp
->conn
;
1488 struct hci_conn
*hcon
= conn
->hcon
;
1489 struct hci_dev
*hdev
= hcon
->hdev
;
1492 /* Ignore the PDU if we've already done 20 rounds (0 - 19) */
1493 if (smp
->passkey_round
>= 20)
1497 case SMP_CMD_PAIRING_RANDOM
:
1498 r
= ((hcon
->passkey_notify
>> smp
->passkey_round
) & 0x01);
1501 if (smp_f4(smp
->tfm_cmac
, smp
->remote_pk
, smp
->local_pk
,
1503 return SMP_UNSPECIFIED
;
1505 if (crypto_memneq(smp
->pcnf
, cfm
, 16))
1506 return SMP_CONFIRM_FAILED
;
1508 smp
->passkey_round
++;
1510 if (smp
->passkey_round
== 20) {
1511 /* Generate MacKey and LTK */
1512 if (sc_mackey_and_ltk(smp
, smp
->mackey
, smp
->tk
))
1513 return SMP_UNSPECIFIED
;
1516 /* The round is only complete when the initiator
1517 * receives pairing random.
1520 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
,
1521 sizeof(smp
->prnd
), smp
->prnd
);
1522 if (smp
->passkey_round
== 20)
1523 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
1525 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
1529 /* Start the next round */
1530 if (smp
->passkey_round
!= 20)
1531 return sc_passkey_round(smp
, 0);
1533 /* Passkey rounds are complete - start DHKey Check */
1534 sc_dhkey_check(smp
);
1535 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
1539 case SMP_CMD_PAIRING_CONFIRM
:
1540 if (test_bit(SMP_FLAG_WAIT_USER
, &smp
->flags
)) {
1541 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
);
1545 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
1548 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
,
1549 sizeof(smp
->prnd
), smp
->prnd
);
1553 return sc_passkey_send_confirm(smp
);
1555 case SMP_CMD_PUBLIC_KEY
:
1557 /* Initiating device starts the round */
1561 BT_DBG("%s Starting passkey round %u", hdev
->name
,
1562 smp
->passkey_round
+ 1);
1564 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
1566 return sc_passkey_send_confirm(smp
);
1572 static int sc_user_reply(struct smp_chan
*smp
, u16 mgmt_op
, __le32 passkey
)
1574 struct l2cap_conn
*conn
= smp
->conn
;
1575 struct hci_conn
*hcon
= conn
->hcon
;
1578 clear_bit(SMP_FLAG_WAIT_USER
, &smp
->flags
);
1581 case MGMT_OP_USER_PASSKEY_NEG_REPLY
:
1582 smp_failure(smp
->conn
, SMP_PASSKEY_ENTRY_FAILED
);
1584 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
1585 smp_failure(smp
->conn
, SMP_NUMERIC_COMP_FAILED
);
1587 case MGMT_OP_USER_PASSKEY_REPLY
:
1588 hcon
->passkey_notify
= le32_to_cpu(passkey
);
1589 smp
->passkey_round
= 0;
1591 if (test_and_clear_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
))
1592 smp_op
= SMP_CMD_PAIRING_CONFIRM
;
1596 if (sc_passkey_round(smp
, smp_op
))
1602 /* Initiator sends DHKey check first */
1604 sc_dhkey_check(smp
);
1605 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
1606 } else if (test_and_clear_bit(SMP_FLAG_DHKEY_PENDING
, &smp
->flags
)) {
1607 sc_dhkey_check(smp
);
1614 int smp_user_confirm_reply(struct hci_conn
*hcon
, u16 mgmt_op
, __le32 passkey
)
1616 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
1617 struct l2cap_chan
*chan
;
1618 struct smp_chan
*smp
;
1631 l2cap_chan_lock(chan
);
1639 if (test_bit(SMP_FLAG_SC
, &smp
->flags
)) {
1640 err
= sc_user_reply(smp
, mgmt_op
, passkey
);
1645 case MGMT_OP_USER_PASSKEY_REPLY
:
1646 value
= le32_to_cpu(passkey
);
1647 memset(smp
->tk
, 0, sizeof(smp
->tk
));
1648 BT_DBG("PassKey: %d", value
);
1649 put_unaligned_le32(value
, smp
->tk
);
1651 case MGMT_OP_USER_CONFIRM_REPLY
:
1652 set_bit(SMP_FLAG_TK_VALID
, &smp
->flags
);
1654 case MGMT_OP_USER_PASSKEY_NEG_REPLY
:
1655 case MGMT_OP_USER_CONFIRM_NEG_REPLY
:
1656 smp_failure(conn
, SMP_PASSKEY_ENTRY_FAILED
);
1660 smp_failure(conn
, SMP_PASSKEY_ENTRY_FAILED
);
1667 /* If it is our turn to send Pairing Confirm, do so now */
1668 if (test_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
)) {
1669 u8 rsp
= smp_confirm(smp
);
1671 smp_failure(conn
, rsp
);
1675 l2cap_chan_unlock(chan
);
1679 static void build_bredr_pairing_cmd(struct smp_chan
*smp
,
1680 struct smp_cmd_pairing
*req
,
1681 struct smp_cmd_pairing
*rsp
)
1683 struct l2cap_conn
*conn
= smp
->conn
;
1684 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
1685 u8 local_dist
= 0, remote_dist
= 0;
1687 if (hci_dev_test_flag(hdev
, HCI_BONDABLE
)) {
1688 local_dist
= SMP_DIST_ENC_KEY
| SMP_DIST_SIGN
;
1689 remote_dist
= SMP_DIST_ENC_KEY
| SMP_DIST_SIGN
;
1692 if (hci_dev_test_flag(hdev
, HCI_RPA_RESOLVING
))
1693 remote_dist
|= SMP_DIST_ID_KEY
;
1695 if (hci_dev_test_flag(hdev
, HCI_PRIVACY
))
1696 local_dist
|= SMP_DIST_ID_KEY
;
1699 memset(req
, 0, sizeof(*req
));
1701 req
->auth_req
= SMP_AUTH_CT2
;
1702 req
->init_key_dist
= local_dist
;
1703 req
->resp_key_dist
= remote_dist
;
1704 req
->max_key_size
= conn
->hcon
->enc_key_size
;
1706 smp
->remote_key_dist
= remote_dist
;
1711 memset(rsp
, 0, sizeof(*rsp
));
1713 rsp
->auth_req
= SMP_AUTH_CT2
;
1714 rsp
->max_key_size
= conn
->hcon
->enc_key_size
;
1715 rsp
->init_key_dist
= req
->init_key_dist
& remote_dist
;
1716 rsp
->resp_key_dist
= req
->resp_key_dist
& local_dist
;
1718 smp
->remote_key_dist
= rsp
->init_key_dist
;
1721 static u8
smp_cmd_pairing_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
1723 struct smp_cmd_pairing rsp
, *req
= (void *) skb
->data
;
1724 struct l2cap_chan
*chan
= conn
->smp
;
1725 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
1726 struct smp_chan
*smp
;
1727 u8 key_size
, auth
, sec_level
;
1730 BT_DBG("conn %p", conn
);
1732 if (skb
->len
< sizeof(*req
))
1733 return SMP_INVALID_PARAMS
;
1735 if (conn
->hcon
->role
!= HCI_ROLE_SLAVE
)
1736 return SMP_CMD_NOTSUPP
;
1739 smp
= smp_chan_create(conn
);
1744 return SMP_UNSPECIFIED
;
1746 /* We didn't start the pairing, so match remote */
1747 auth
= req
->auth_req
& AUTH_REQ_MASK(hdev
);
1749 if (!hci_dev_test_flag(hdev
, HCI_BONDABLE
) &&
1750 (auth
& SMP_AUTH_BONDING
))
1751 return SMP_PAIRING_NOTSUPP
;
1753 if (hci_dev_test_flag(hdev
, HCI_SC_ONLY
) && !(auth
& SMP_AUTH_SC
))
1754 return SMP_AUTH_REQUIREMENTS
;
1756 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
1757 memcpy(&smp
->preq
[1], req
, sizeof(*req
));
1758 skb_pull(skb
, sizeof(*req
));
1760 /* If the remote side's OOB flag is set it means it has
1761 * successfully received our local OOB data - therefore set the
1762 * flag to indicate that local OOB is in use.
1764 if (req
->oob_flag
== SMP_OOB_PRESENT
&& SMP_DEV(hdev
)->local_oob
)
1765 set_bit(SMP_FLAG_LOCAL_OOB
, &smp
->flags
);
1767 /* SMP over BR/EDR requires special treatment */
1768 if (conn
->hcon
->type
== ACL_LINK
) {
1769 /* We must have a BR/EDR SC link */
1770 if (!test_bit(HCI_CONN_AES_CCM
, &conn
->hcon
->flags
) &&
1771 !hci_dev_test_flag(hdev
, HCI_FORCE_BREDR_SMP
))
1772 return SMP_CROSS_TRANSP_NOT_ALLOWED
;
1774 set_bit(SMP_FLAG_SC
, &smp
->flags
);
1776 build_bredr_pairing_cmd(smp
, req
, &rsp
);
1778 if (req
->auth_req
& SMP_AUTH_CT2
)
1779 set_bit(SMP_FLAG_CT2
, &smp
->flags
);
1781 key_size
= min(req
->max_key_size
, rsp
.max_key_size
);
1782 if (check_enc_key_size(conn
, key_size
))
1783 return SMP_ENC_KEY_SIZE
;
1785 /* Clear bits which are generated but not distributed */
1786 smp
->remote_key_dist
&= ~SMP_SC_NO_DIST
;
1788 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
1789 memcpy(&smp
->prsp
[1], &rsp
, sizeof(rsp
));
1790 smp_send_cmd(conn
, SMP_CMD_PAIRING_RSP
, sizeof(rsp
), &rsp
);
1792 smp_distribute_keys(smp
);
1796 build_pairing_cmd(conn
, req
, &rsp
, auth
);
1798 if (rsp
.auth_req
& SMP_AUTH_SC
) {
1799 set_bit(SMP_FLAG_SC
, &smp
->flags
);
1801 if (rsp
.auth_req
& SMP_AUTH_CT2
)
1802 set_bit(SMP_FLAG_CT2
, &smp
->flags
);
1805 if (conn
->hcon
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)
1806 sec_level
= BT_SECURITY_MEDIUM
;
1808 sec_level
= authreq_to_seclevel(auth
);
1810 if (sec_level
> conn
->hcon
->pending_sec_level
)
1811 conn
->hcon
->pending_sec_level
= sec_level
;
1813 /* If we need MITM check that it can be achieved */
1814 if (conn
->hcon
->pending_sec_level
>= BT_SECURITY_HIGH
) {
1817 method
= get_auth_method(smp
, conn
->hcon
->io_capability
,
1818 req
->io_capability
);
1819 if (method
== JUST_WORKS
|| method
== JUST_CFM
)
1820 return SMP_AUTH_REQUIREMENTS
;
1823 key_size
= min(req
->max_key_size
, rsp
.max_key_size
);
1824 if (check_enc_key_size(conn
, key_size
))
1825 return SMP_ENC_KEY_SIZE
;
1827 get_random_bytes(smp
->prnd
, sizeof(smp
->prnd
));
1829 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
1830 memcpy(&smp
->prsp
[1], &rsp
, sizeof(rsp
));
1832 smp_send_cmd(conn
, SMP_CMD_PAIRING_RSP
, sizeof(rsp
), &rsp
);
1834 clear_bit(SMP_FLAG_INITIATOR
, &smp
->flags
);
1836 /* Strictly speaking we shouldn't allow Pairing Confirm for the
1837 * SC case, however some implementations incorrectly copy RFU auth
1838 * req bits from our security request, which may create a false
1839 * positive SC enablement.
1841 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
1843 if (test_bit(SMP_FLAG_SC
, &smp
->flags
)) {
1844 SMP_ALLOW_CMD(smp
, SMP_CMD_PUBLIC_KEY
);
1845 /* Clear bits which are generated but not distributed */
1846 smp
->remote_key_dist
&= ~SMP_SC_NO_DIST
;
1847 /* Wait for Public Key from Initiating Device */
1851 /* Request setup of TK */
1852 ret
= tk_request(conn
, 0, auth
, rsp
.io_capability
, req
->io_capability
);
1854 return SMP_UNSPECIFIED
;
1859 static u8
sc_send_public_key(struct smp_chan
*smp
)
1861 struct hci_dev
*hdev
= smp
->conn
->hcon
->hdev
;
1865 if (test_bit(SMP_FLAG_LOCAL_OOB
, &smp
->flags
)) {
1866 struct l2cap_chan
*chan
= hdev
->smp_data
;
1867 struct smp_dev
*smp_dev
;
1869 if (!chan
|| !chan
->data
)
1870 return SMP_UNSPECIFIED
;
1872 smp_dev
= chan
->data
;
1874 memcpy(smp
->local_pk
, smp_dev
->local_pk
, 64);
1875 memcpy(smp
->lr
, smp_dev
->local_rand
, 16);
1877 if (smp_dev
->debug_key
)
1878 set_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
);
1883 if (hci_dev_test_flag(hdev
, HCI_USE_DEBUG_KEYS
)) {
1884 BT_DBG("Using debug keys");
1885 if (set_ecdh_privkey(smp
->tfm_ecdh
, debug_sk
))
1886 return SMP_UNSPECIFIED
;
1887 memcpy(smp
->local_pk
, debug_pk
, 64);
1888 set_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
);
1891 /* Generate key pair for Secure Connections */
1892 if (generate_ecdh_keys(smp
->tfm_ecdh
, smp
->local_pk
))
1893 return SMP_UNSPECIFIED
;
1895 /* This is unlikely, but we need to check that
1896 * we didn't accidentially generate a debug key.
1898 if (crypto_memneq(smp
->local_pk
, debug_pk
, 64))
1904 SMP_DBG("Local Public Key X: %32phN", smp
->local_pk
);
1905 SMP_DBG("Local Public Key Y: %32phN", smp
->local_pk
+ 32);
1907 smp_send_cmd(smp
->conn
, SMP_CMD_PUBLIC_KEY
, 64, smp
->local_pk
);
1912 static u8
smp_cmd_pairing_rsp(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
1914 struct smp_cmd_pairing
*req
, *rsp
= (void *) skb
->data
;
1915 struct l2cap_chan
*chan
= conn
->smp
;
1916 struct smp_chan
*smp
= chan
->data
;
1917 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
1921 BT_DBG("conn %p", conn
);
1923 if (skb
->len
< sizeof(*rsp
))
1924 return SMP_INVALID_PARAMS
;
1926 if (conn
->hcon
->role
!= HCI_ROLE_MASTER
)
1927 return SMP_CMD_NOTSUPP
;
1929 skb_pull(skb
, sizeof(*rsp
));
1931 req
= (void *) &smp
->preq
[1];
1933 key_size
= min(req
->max_key_size
, rsp
->max_key_size
);
1934 if (check_enc_key_size(conn
, key_size
))
1935 return SMP_ENC_KEY_SIZE
;
1937 auth
= rsp
->auth_req
& AUTH_REQ_MASK(hdev
);
1939 if (hci_dev_test_flag(hdev
, HCI_SC_ONLY
) && !(auth
& SMP_AUTH_SC
))
1940 return SMP_AUTH_REQUIREMENTS
;
1942 /* If the remote side's OOB flag is set it means it has
1943 * successfully received our local OOB data - therefore set the
1944 * flag to indicate that local OOB is in use.
1946 if (rsp
->oob_flag
== SMP_OOB_PRESENT
&& SMP_DEV(hdev
)->local_oob
)
1947 set_bit(SMP_FLAG_LOCAL_OOB
, &smp
->flags
);
1949 smp
->prsp
[0] = SMP_CMD_PAIRING_RSP
;
1950 memcpy(&smp
->prsp
[1], rsp
, sizeof(*rsp
));
1952 /* Update remote key distribution in case the remote cleared
1953 * some bits that we had enabled in our request.
1955 smp
->remote_key_dist
&= rsp
->resp_key_dist
;
1957 if ((req
->auth_req
& SMP_AUTH_CT2
) && (auth
& SMP_AUTH_CT2
))
1958 set_bit(SMP_FLAG_CT2
, &smp
->flags
);
1960 /* For BR/EDR this means we're done and can start phase 3 */
1961 if (conn
->hcon
->type
== ACL_LINK
) {
1962 /* Clear bits which are generated but not distributed */
1963 smp
->remote_key_dist
&= ~SMP_SC_NO_DIST
;
1964 smp_distribute_keys(smp
);
1968 if ((req
->auth_req
& SMP_AUTH_SC
) && (auth
& SMP_AUTH_SC
))
1969 set_bit(SMP_FLAG_SC
, &smp
->flags
);
1970 else if (conn
->hcon
->pending_sec_level
> BT_SECURITY_HIGH
)
1971 conn
->hcon
->pending_sec_level
= BT_SECURITY_HIGH
;
1973 /* If we need MITM check that it can be achieved */
1974 if (conn
->hcon
->pending_sec_level
>= BT_SECURITY_HIGH
) {
1977 method
= get_auth_method(smp
, req
->io_capability
,
1978 rsp
->io_capability
);
1979 if (method
== JUST_WORKS
|| method
== JUST_CFM
)
1980 return SMP_AUTH_REQUIREMENTS
;
1983 get_random_bytes(smp
->prnd
, sizeof(smp
->prnd
));
1985 /* Update remote key distribution in case the remote cleared
1986 * some bits that we had enabled in our request.
1988 smp
->remote_key_dist
&= rsp
->resp_key_dist
;
1990 if (test_bit(SMP_FLAG_SC
, &smp
->flags
)) {
1991 /* Clear bits which are generated but not distributed */
1992 smp
->remote_key_dist
&= ~SMP_SC_NO_DIST
;
1993 SMP_ALLOW_CMD(smp
, SMP_CMD_PUBLIC_KEY
);
1994 return sc_send_public_key(smp
);
1997 auth
|= req
->auth_req
;
1999 ret
= tk_request(conn
, 0, auth
, req
->io_capability
, rsp
->io_capability
);
2001 return SMP_UNSPECIFIED
;
2003 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
);
2005 /* Can't compose response until we have been confirmed */
2006 if (test_bit(SMP_FLAG_TK_VALID
, &smp
->flags
))
2007 return smp_confirm(smp
);
2012 static u8
sc_check_confirm(struct smp_chan
*smp
)
2014 struct l2cap_conn
*conn
= smp
->conn
;
2018 if (smp
->method
== REQ_PASSKEY
|| smp
->method
== DSP_PASSKEY
)
2019 return sc_passkey_round(smp
, SMP_CMD_PAIRING_CONFIRM
);
2021 if (conn
->hcon
->out
) {
2022 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(smp
->prnd
),
2024 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
2030 /* Work-around for some implementations that incorrectly copy RFU bits
2031 * from our security request and thereby create the impression that
2032 * we're doing SC when in fact the remote doesn't support it.
2034 static int fixup_sc_false_positive(struct smp_chan
*smp
)
2036 struct l2cap_conn
*conn
= smp
->conn
;
2037 struct hci_conn
*hcon
= conn
->hcon
;
2038 struct hci_dev
*hdev
= hcon
->hdev
;
2039 struct smp_cmd_pairing
*req
, *rsp
;
2042 /* The issue is only observed when we're in slave role */
2044 return SMP_UNSPECIFIED
;
2046 if (hci_dev_test_flag(hdev
, HCI_SC_ONLY
)) {
2047 bt_dev_err(hdev
, "refusing legacy fallback in SC-only mode");
2048 return SMP_UNSPECIFIED
;
2051 bt_dev_err(hdev
, "trying to fall back to legacy SMP");
2053 req
= (void *) &smp
->preq
[1];
2054 rsp
= (void *) &smp
->prsp
[1];
2056 /* Rebuild key dist flags which may have been cleared for SC */
2057 smp
->remote_key_dist
= (req
->init_key_dist
& rsp
->resp_key_dist
);
2059 auth
= req
->auth_req
& AUTH_REQ_MASK(hdev
);
2061 if (tk_request(conn
, 0, auth
, rsp
->io_capability
, req
->io_capability
)) {
2062 bt_dev_err(hdev
, "failed to fall back to legacy SMP");
2063 return SMP_UNSPECIFIED
;
2066 clear_bit(SMP_FLAG_SC
, &smp
->flags
);
2071 static u8
smp_cmd_pairing_confirm(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2073 struct l2cap_chan
*chan
= conn
->smp
;
2074 struct smp_chan
*smp
= chan
->data
;
2076 BT_DBG("conn %p %s", conn
, conn
->hcon
->out
? "master" : "slave");
2078 if (skb
->len
< sizeof(smp
->pcnf
))
2079 return SMP_INVALID_PARAMS
;
2081 memcpy(smp
->pcnf
, skb
->data
, sizeof(smp
->pcnf
));
2082 skb_pull(skb
, sizeof(smp
->pcnf
));
2084 if (test_bit(SMP_FLAG_SC
, &smp
->flags
)) {
2087 /* Public Key exchange must happen before any other steps */
2088 if (test_bit(SMP_FLAG_REMOTE_PK
, &smp
->flags
))
2089 return sc_check_confirm(smp
);
2091 BT_ERR("Unexpected SMP Pairing Confirm");
2093 ret
= fixup_sc_false_positive(smp
);
2098 if (conn
->hcon
->out
) {
2099 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(smp
->prnd
),
2101 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
2105 if (test_bit(SMP_FLAG_TK_VALID
, &smp
->flags
))
2106 return smp_confirm(smp
);
2108 set_bit(SMP_FLAG_CFM_PENDING
, &smp
->flags
);
2113 static u8
smp_cmd_pairing_random(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2115 struct l2cap_chan
*chan
= conn
->smp
;
2116 struct smp_chan
*smp
= chan
->data
;
2117 struct hci_conn
*hcon
= conn
->hcon
;
2118 u8
*pkax
, *pkbx
, *na
, *nb
, confirm_hint
;
2122 BT_DBG("conn %p", conn
);
2124 if (skb
->len
< sizeof(smp
->rrnd
))
2125 return SMP_INVALID_PARAMS
;
2127 memcpy(smp
->rrnd
, skb
->data
, sizeof(smp
->rrnd
));
2128 skb_pull(skb
, sizeof(smp
->rrnd
));
2130 if (!test_bit(SMP_FLAG_SC
, &smp
->flags
))
2131 return smp_random(smp
);
2134 pkax
= smp
->local_pk
;
2135 pkbx
= smp
->remote_pk
;
2139 pkax
= smp
->remote_pk
;
2140 pkbx
= smp
->local_pk
;
2145 if (smp
->method
== REQ_OOB
) {
2147 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
,
2148 sizeof(smp
->prnd
), smp
->prnd
);
2149 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
2150 goto mackey_and_ltk
;
2153 /* Passkey entry has special treatment */
2154 if (smp
->method
== REQ_PASSKEY
|| smp
->method
== DSP_PASSKEY
)
2155 return sc_passkey_round(smp
, SMP_CMD_PAIRING_RANDOM
);
2160 err
= smp_f4(smp
->tfm_cmac
, smp
->remote_pk
, smp
->local_pk
,
2163 return SMP_UNSPECIFIED
;
2165 if (crypto_memneq(smp
->pcnf
, cfm
, 16))
2166 return SMP_CONFIRM_FAILED
;
2168 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
, sizeof(smp
->prnd
),
2170 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
2172 /* Only Just-Works pairing requires extra checks */
2173 if (smp
->method
!= JUST_WORKS
)
2174 goto mackey_and_ltk
;
2176 /* If there already exists long term key in local host, leave
2177 * the decision to user space since the remote device could
2178 * be legitimate or malicious.
2180 if (hci_find_ltk(hcon
->hdev
, &hcon
->dst
, hcon
->dst_type
,
2182 /* Set passkey to 0. The value can be any number since
2183 * it'll be ignored anyway.
2192 /* Generate MacKey and LTK */
2193 err
= sc_mackey_and_ltk(smp
, smp
->mackey
, smp
->tk
);
2195 return SMP_UNSPECIFIED
;
2197 if (smp
->method
== JUST_WORKS
|| smp
->method
== REQ_OOB
) {
2199 sc_dhkey_check(smp
);
2200 SMP_ALLOW_CMD(smp
, SMP_CMD_DHKEY_CHECK
);
2205 err
= smp_g2(smp
->tfm_cmac
, pkax
, pkbx
, na
, nb
, &passkey
);
2207 return SMP_UNSPECIFIED
;
2212 err
= mgmt_user_confirm_request(hcon
->hdev
, &hcon
->dst
, hcon
->type
,
2213 hcon
->dst_type
, passkey
, confirm_hint
);
2215 return SMP_UNSPECIFIED
;
2217 set_bit(SMP_FLAG_WAIT_USER
, &smp
->flags
);
2222 static bool smp_ltk_encrypt(struct l2cap_conn
*conn
, u8 sec_level
)
2224 struct smp_ltk
*key
;
2225 struct hci_conn
*hcon
= conn
->hcon
;
2227 key
= hci_find_ltk(hcon
->hdev
, &hcon
->dst
, hcon
->dst_type
, hcon
->role
);
2231 if (smp_ltk_sec_level(key
) < sec_level
)
2234 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND
, &hcon
->flags
))
2237 hci_le_start_enc(hcon
, key
->ediv
, key
->rand
, key
->val
, key
->enc_size
);
2238 hcon
->enc_key_size
= key
->enc_size
;
2240 /* We never store STKs for master role, so clear this flag */
2241 clear_bit(HCI_CONN_STK_ENCRYPT
, &hcon
->flags
);
2246 bool smp_sufficient_security(struct hci_conn
*hcon
, u8 sec_level
,
2247 enum smp_key_pref key_pref
)
2249 if (sec_level
== BT_SECURITY_LOW
)
2252 /* If we're encrypted with an STK but the caller prefers using
2253 * LTK claim insufficient security. This way we allow the
2254 * connection to be re-encrypted with an LTK, even if the LTK
2255 * provides the same level of security. Only exception is if we
2256 * don't have an LTK (e.g. because of key distribution bits).
2258 if (key_pref
== SMP_USE_LTK
&&
2259 test_bit(HCI_CONN_STK_ENCRYPT
, &hcon
->flags
) &&
2260 hci_find_ltk(hcon
->hdev
, &hcon
->dst
, hcon
->dst_type
, hcon
->role
))
2263 if (hcon
->sec_level
>= sec_level
)
2269 static u8
smp_cmd_security_req(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2271 struct smp_cmd_security_req
*rp
= (void *) skb
->data
;
2272 struct smp_cmd_pairing cp
;
2273 struct hci_conn
*hcon
= conn
->hcon
;
2274 struct hci_dev
*hdev
= hcon
->hdev
;
2275 struct smp_chan
*smp
;
2278 BT_DBG("conn %p", conn
);
2280 if (skb
->len
< sizeof(*rp
))
2281 return SMP_INVALID_PARAMS
;
2283 if (hcon
->role
!= HCI_ROLE_MASTER
)
2284 return SMP_CMD_NOTSUPP
;
2286 auth
= rp
->auth_req
& AUTH_REQ_MASK(hdev
);
2288 if (hci_dev_test_flag(hdev
, HCI_SC_ONLY
) && !(auth
& SMP_AUTH_SC
))
2289 return SMP_AUTH_REQUIREMENTS
;
2291 if (hcon
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)
2292 sec_level
= BT_SECURITY_MEDIUM
;
2294 sec_level
= authreq_to_seclevel(auth
);
2296 if (smp_sufficient_security(hcon
, sec_level
, SMP_USE_LTK
)) {
2297 /* If link is already encrypted with sufficient security we
2298 * still need refresh encryption as per Core Spec 5.0 Vol 3,
2301 smp_ltk_encrypt(conn
, hcon
->sec_level
);
2305 if (sec_level
> hcon
->pending_sec_level
)
2306 hcon
->pending_sec_level
= sec_level
;
2308 if (smp_ltk_encrypt(conn
, hcon
->pending_sec_level
))
2311 smp
= smp_chan_create(conn
);
2313 return SMP_UNSPECIFIED
;
2315 if (!hci_dev_test_flag(hdev
, HCI_BONDABLE
) &&
2316 (auth
& SMP_AUTH_BONDING
))
2317 return SMP_PAIRING_NOTSUPP
;
2319 skb_pull(skb
, sizeof(*rp
));
2321 memset(&cp
, 0, sizeof(cp
));
2322 build_pairing_cmd(conn
, &cp
, NULL
, auth
);
2324 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
2325 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
2327 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
2328 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RSP
);
2333 int smp_conn_security(struct hci_conn
*hcon
, __u8 sec_level
)
2335 struct l2cap_conn
*conn
= hcon
->l2cap_data
;
2336 struct l2cap_chan
*chan
;
2337 struct smp_chan
*smp
;
2341 BT_DBG("conn %p hcon %p level 0x%2.2x", conn
, hcon
, sec_level
);
2343 /* This may be NULL if there's an unexpected disconnection */
2347 if (!hci_dev_test_flag(hcon
->hdev
, HCI_LE_ENABLED
))
2350 if (smp_sufficient_security(hcon
, sec_level
, SMP_USE_LTK
))
2353 if (sec_level
> hcon
->pending_sec_level
)
2354 hcon
->pending_sec_level
= sec_level
;
2356 if (hcon
->role
== HCI_ROLE_MASTER
)
2357 if (smp_ltk_encrypt(conn
, hcon
->pending_sec_level
))
2362 bt_dev_err(hcon
->hdev
, "security requested but not available");
2366 l2cap_chan_lock(chan
);
2368 /* If SMP is already in progress ignore this request */
2374 smp
= smp_chan_create(conn
);
2380 authreq
= seclevel_to_authreq(sec_level
);
2382 if (hci_dev_test_flag(hcon
->hdev
, HCI_SC_ENABLED
)) {
2383 authreq
|= SMP_AUTH_SC
;
2384 if (hci_dev_test_flag(hcon
->hdev
, HCI_SSP_ENABLED
))
2385 authreq
|= SMP_AUTH_CT2
;
2388 /* Require MITM if IO Capability allows or the security level
2391 if (hcon
->io_capability
!= HCI_IO_NO_INPUT_OUTPUT
||
2392 hcon
->pending_sec_level
> BT_SECURITY_MEDIUM
)
2393 authreq
|= SMP_AUTH_MITM
;
2395 if (hcon
->role
== HCI_ROLE_MASTER
) {
2396 struct smp_cmd_pairing cp
;
2398 build_pairing_cmd(conn
, &cp
, NULL
, authreq
);
2399 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
2400 memcpy(&smp
->preq
[1], &cp
, sizeof(cp
));
2402 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(cp
), &cp
);
2403 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RSP
);
2405 struct smp_cmd_security_req cp
;
2406 cp
.auth_req
= authreq
;
2407 smp_send_cmd(conn
, SMP_CMD_SECURITY_REQ
, sizeof(cp
), &cp
);
2408 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_REQ
);
2411 set_bit(SMP_FLAG_INITIATOR
, &smp
->flags
);
2415 l2cap_chan_unlock(chan
);
2419 int smp_cancel_and_remove_pairing(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2422 struct hci_conn
*hcon
;
2423 struct l2cap_conn
*conn
;
2424 struct l2cap_chan
*chan
;
2425 struct smp_chan
*smp
;
2428 err
= hci_remove_ltk(hdev
, bdaddr
, addr_type
);
2429 hci_remove_irk(hdev
, bdaddr
, addr_type
);
2431 hcon
= hci_conn_hash_lookup_le(hdev
, bdaddr
, addr_type
);
2435 conn
= hcon
->l2cap_data
;
2443 l2cap_chan_lock(chan
);
2447 /* Set keys to NULL to make sure smp_failure() does not try to
2448 * remove and free already invalidated rcu list entries. */
2450 smp
->slave_ltk
= NULL
;
2451 smp
->remote_irk
= NULL
;
2453 if (test_bit(SMP_FLAG_COMPLETE
, &smp
->flags
))
2454 smp_failure(conn
, 0);
2456 smp_failure(conn
, SMP_UNSPECIFIED
);
2460 l2cap_chan_unlock(chan
);
2466 static int smp_cmd_encrypt_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2468 struct smp_cmd_encrypt_info
*rp
= (void *) skb
->data
;
2469 struct l2cap_chan
*chan
= conn
->smp
;
2470 struct smp_chan
*smp
= chan
->data
;
2472 BT_DBG("conn %p", conn
);
2474 if (skb
->len
< sizeof(*rp
))
2475 return SMP_INVALID_PARAMS
;
2477 /* Pairing is aborted if any blocked keys are distributed */
2478 if (hci_is_blocked_key(conn
->hcon
->hdev
, HCI_BLOCKED_KEY_TYPE_LTK
,
2480 bt_dev_warn_ratelimited(conn
->hcon
->hdev
,
2481 "LTK blocked for %pMR",
2483 return SMP_INVALID_PARAMS
;
2486 SMP_ALLOW_CMD(smp
, SMP_CMD_MASTER_IDENT
);
2488 skb_pull(skb
, sizeof(*rp
));
2490 memcpy(smp
->tk
, rp
->ltk
, sizeof(smp
->tk
));
2495 static int smp_cmd_master_ident(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2497 struct smp_cmd_master_ident
*rp
= (void *) skb
->data
;
2498 struct l2cap_chan
*chan
= conn
->smp
;
2499 struct smp_chan
*smp
= chan
->data
;
2500 struct hci_dev
*hdev
= conn
->hcon
->hdev
;
2501 struct hci_conn
*hcon
= conn
->hcon
;
2502 struct smp_ltk
*ltk
;
2505 BT_DBG("conn %p", conn
);
2507 if (skb
->len
< sizeof(*rp
))
2508 return SMP_INVALID_PARAMS
;
2510 /* Mark the information as received */
2511 smp
->remote_key_dist
&= ~SMP_DIST_ENC_KEY
;
2513 if (smp
->remote_key_dist
& SMP_DIST_ID_KEY
)
2514 SMP_ALLOW_CMD(smp
, SMP_CMD_IDENT_INFO
);
2515 else if (smp
->remote_key_dist
& SMP_DIST_SIGN
)
2516 SMP_ALLOW_CMD(smp
, SMP_CMD_SIGN_INFO
);
2518 skb_pull(skb
, sizeof(*rp
));
2520 authenticated
= (hcon
->sec_level
== BT_SECURITY_HIGH
);
2521 ltk
= hci_add_ltk(hdev
, &hcon
->dst
, hcon
->dst_type
, SMP_LTK
,
2522 authenticated
, smp
->tk
, smp
->enc_key_size
,
2523 rp
->ediv
, rp
->rand
);
2525 if (!(smp
->remote_key_dist
& KEY_DIST_MASK
))
2526 smp_distribute_keys(smp
);
2531 static int smp_cmd_ident_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2533 struct smp_cmd_ident_info
*info
= (void *) skb
->data
;
2534 struct l2cap_chan
*chan
= conn
->smp
;
2535 struct smp_chan
*smp
= chan
->data
;
2539 if (skb
->len
< sizeof(*info
))
2540 return SMP_INVALID_PARAMS
;
2542 /* Pairing is aborted if any blocked keys are distributed */
2543 if (hci_is_blocked_key(conn
->hcon
->hdev
, HCI_BLOCKED_KEY_TYPE_IRK
,
2545 bt_dev_warn_ratelimited(conn
->hcon
->hdev
,
2546 "Identity key blocked for %pMR",
2548 return SMP_INVALID_PARAMS
;
2551 SMP_ALLOW_CMD(smp
, SMP_CMD_IDENT_ADDR_INFO
);
2553 skb_pull(skb
, sizeof(*info
));
2555 memcpy(smp
->irk
, info
->irk
, 16);
2560 static int smp_cmd_ident_addr_info(struct l2cap_conn
*conn
,
2561 struct sk_buff
*skb
)
2563 struct smp_cmd_ident_addr_info
*info
= (void *) skb
->data
;
2564 struct l2cap_chan
*chan
= conn
->smp
;
2565 struct smp_chan
*smp
= chan
->data
;
2566 struct hci_conn
*hcon
= conn
->hcon
;
2571 if (skb
->len
< sizeof(*info
))
2572 return SMP_INVALID_PARAMS
;
2574 /* Mark the information as received */
2575 smp
->remote_key_dist
&= ~SMP_DIST_ID_KEY
;
2577 if (smp
->remote_key_dist
& SMP_DIST_SIGN
)
2578 SMP_ALLOW_CMD(smp
, SMP_CMD_SIGN_INFO
);
2580 skb_pull(skb
, sizeof(*info
));
2582 /* Strictly speaking the Core Specification (4.1) allows sending
2583 * an empty address which would force us to rely on just the IRK
2584 * as "identity information". However, since such
2585 * implementations are not known of and in order to not over
2586 * complicate our implementation, simply pretend that we never
2587 * received an IRK for such a device.
2589 * The Identity Address must also be a Static Random or Public
2590 * Address, which hci_is_identity_address() checks for.
2592 if (!bacmp(&info
->bdaddr
, BDADDR_ANY
) ||
2593 !hci_is_identity_address(&info
->bdaddr
, info
->addr_type
)) {
2594 bt_dev_err(hcon
->hdev
, "ignoring IRK with no identity address");
2598 /* Drop IRK if peer is using identity address during pairing but is
2599 * providing different address as identity information.
2601 * Microsoft Surface Precision Mouse is known to have this bug.
2603 if (hci_is_identity_address(&hcon
->dst
, hcon
->dst_type
) &&
2604 (bacmp(&info
->bdaddr
, &hcon
->dst
) ||
2605 info
->addr_type
!= hcon
->dst_type
)) {
2606 bt_dev_err(hcon
->hdev
,
2607 "ignoring IRK with invalid identity address");
2611 bacpy(&smp
->id_addr
, &info
->bdaddr
);
2612 smp
->id_addr_type
= info
->addr_type
;
2614 if (hci_bdaddr_is_rpa(&hcon
->dst
, hcon
->dst_type
))
2615 bacpy(&rpa
, &hcon
->dst
);
2617 bacpy(&rpa
, BDADDR_ANY
);
2619 smp
->remote_irk
= hci_add_irk(conn
->hcon
->hdev
, &smp
->id_addr
,
2620 smp
->id_addr_type
, smp
->irk
, &rpa
);
2623 if (!(smp
->remote_key_dist
& KEY_DIST_MASK
))
2624 smp_distribute_keys(smp
);
2629 static int smp_cmd_sign_info(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2631 struct smp_cmd_sign_info
*rp
= (void *) skb
->data
;
2632 struct l2cap_chan
*chan
= conn
->smp
;
2633 struct smp_chan
*smp
= chan
->data
;
2634 struct smp_csrk
*csrk
;
2636 BT_DBG("conn %p", conn
);
2638 if (skb
->len
< sizeof(*rp
))
2639 return SMP_INVALID_PARAMS
;
2641 /* Mark the information as received */
2642 smp
->remote_key_dist
&= ~SMP_DIST_SIGN
;
2644 skb_pull(skb
, sizeof(*rp
));
2646 csrk
= kzalloc(sizeof(*csrk
), GFP_KERNEL
);
2648 if (conn
->hcon
->sec_level
> BT_SECURITY_MEDIUM
)
2649 csrk
->type
= MGMT_CSRK_REMOTE_AUTHENTICATED
;
2651 csrk
->type
= MGMT_CSRK_REMOTE_UNAUTHENTICATED
;
2652 memcpy(csrk
->val
, rp
->csrk
, sizeof(csrk
->val
));
2655 smp_distribute_keys(smp
);
2660 static u8
sc_select_method(struct smp_chan
*smp
)
2662 struct l2cap_conn
*conn
= smp
->conn
;
2663 struct hci_conn
*hcon
= conn
->hcon
;
2664 struct smp_cmd_pairing
*local
, *remote
;
2665 u8 local_mitm
, remote_mitm
, local_io
, remote_io
, method
;
2667 if (test_bit(SMP_FLAG_REMOTE_OOB
, &smp
->flags
) ||
2668 test_bit(SMP_FLAG_LOCAL_OOB
, &smp
->flags
))
2671 /* The preq/prsp contain the raw Pairing Request/Response PDUs
2672 * which are needed as inputs to some crypto functions. To get
2673 * the "struct smp_cmd_pairing" from them we need to skip the
2674 * first byte which contains the opcode.
2677 local
= (void *) &smp
->preq
[1];
2678 remote
= (void *) &smp
->prsp
[1];
2680 local
= (void *) &smp
->prsp
[1];
2681 remote
= (void *) &smp
->preq
[1];
2684 local_io
= local
->io_capability
;
2685 remote_io
= remote
->io_capability
;
2687 local_mitm
= (local
->auth_req
& SMP_AUTH_MITM
);
2688 remote_mitm
= (remote
->auth_req
& SMP_AUTH_MITM
);
2690 /* If either side wants MITM, look up the method from the table,
2691 * otherwise use JUST WORKS.
2693 if (local_mitm
|| remote_mitm
)
2694 method
= get_auth_method(smp
, local_io
, remote_io
);
2696 method
= JUST_WORKS
;
2698 /* Don't confirm locally initiated pairing attempts */
2699 if (method
== JUST_CFM
&& test_bit(SMP_FLAG_INITIATOR
, &smp
->flags
))
2700 method
= JUST_WORKS
;
2705 static int smp_cmd_public_key(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2707 struct smp_cmd_public_key
*key
= (void *) skb
->data
;
2708 struct hci_conn
*hcon
= conn
->hcon
;
2709 struct l2cap_chan
*chan
= conn
->smp
;
2710 struct smp_chan
*smp
= chan
->data
;
2711 struct hci_dev
*hdev
= hcon
->hdev
;
2712 struct crypto_kpp
*tfm_ecdh
;
2713 struct smp_cmd_pairing_confirm cfm
;
2716 BT_DBG("conn %p", conn
);
2718 if (skb
->len
< sizeof(*key
))
2719 return SMP_INVALID_PARAMS
;
2721 memcpy(smp
->remote_pk
, key
, 64);
2723 if (test_bit(SMP_FLAG_REMOTE_OOB
, &smp
->flags
)) {
2724 err
= smp_f4(smp
->tfm_cmac
, smp
->remote_pk
, smp
->remote_pk
,
2725 smp
->rr
, 0, cfm
.confirm_val
);
2727 return SMP_UNSPECIFIED
;
2729 if (crypto_memneq(cfm
.confirm_val
, smp
->pcnf
, 16))
2730 return SMP_CONFIRM_FAILED
;
2733 /* Non-initiating device sends its public key after receiving
2734 * the key from the initiating device.
2737 err
= sc_send_public_key(smp
);
2742 SMP_DBG("Remote Public Key X: %32phN", smp
->remote_pk
);
2743 SMP_DBG("Remote Public Key Y: %32phN", smp
->remote_pk
+ 32);
2745 /* Compute the shared secret on the same crypto tfm on which the private
2746 * key was set/generated.
2748 if (test_bit(SMP_FLAG_LOCAL_OOB
, &smp
->flags
)) {
2749 struct l2cap_chan
*hchan
= hdev
->smp_data
;
2750 struct smp_dev
*smp_dev
;
2752 if (!hchan
|| !hchan
->data
)
2753 return SMP_UNSPECIFIED
;
2755 smp_dev
= hchan
->data
;
2757 tfm_ecdh
= smp_dev
->tfm_ecdh
;
2759 tfm_ecdh
= smp
->tfm_ecdh
;
2762 if (compute_ecdh_secret(tfm_ecdh
, smp
->remote_pk
, smp
->dhkey
))
2763 return SMP_UNSPECIFIED
;
2765 SMP_DBG("DHKey %32phN", smp
->dhkey
);
2767 set_bit(SMP_FLAG_REMOTE_PK
, &smp
->flags
);
2769 smp
->method
= sc_select_method(smp
);
2771 BT_DBG("%s selected method 0x%02x", hdev
->name
, smp
->method
);
2773 /* JUST_WORKS and JUST_CFM result in an unauthenticated key */
2774 if (smp
->method
== JUST_WORKS
|| smp
->method
== JUST_CFM
)
2775 hcon
->pending_sec_level
= BT_SECURITY_MEDIUM
;
2777 hcon
->pending_sec_level
= BT_SECURITY_FIPS
;
2779 if (!crypto_memneq(debug_pk
, smp
->remote_pk
, 64))
2780 set_bit(SMP_FLAG_DEBUG_KEY
, &smp
->flags
);
2782 if (smp
->method
== DSP_PASSKEY
) {
2783 get_random_bytes(&hcon
->passkey_notify
,
2784 sizeof(hcon
->passkey_notify
));
2785 hcon
->passkey_notify
%= 1000000;
2786 hcon
->passkey_entered
= 0;
2787 smp
->passkey_round
= 0;
2788 if (mgmt_user_passkey_notify(hdev
, &hcon
->dst
, hcon
->type
,
2790 hcon
->passkey_notify
,
2791 hcon
->passkey_entered
))
2792 return SMP_UNSPECIFIED
;
2793 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
2794 return sc_passkey_round(smp
, SMP_CMD_PUBLIC_KEY
);
2797 if (smp
->method
== REQ_OOB
) {
2799 smp_send_cmd(conn
, SMP_CMD_PAIRING_RANDOM
,
2800 sizeof(smp
->prnd
), smp
->prnd
);
2802 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
2808 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
2810 if (smp
->method
== REQ_PASSKEY
) {
2811 if (mgmt_user_passkey_request(hdev
, &hcon
->dst
, hcon
->type
,
2813 return SMP_UNSPECIFIED
;
2814 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_CONFIRM
);
2815 set_bit(SMP_FLAG_WAIT_USER
, &smp
->flags
);
2819 /* The Initiating device waits for the non-initiating device to
2820 * send the confirm value.
2822 if (conn
->hcon
->out
)
2825 err
= smp_f4(smp
->tfm_cmac
, smp
->local_pk
, smp
->remote_pk
, smp
->prnd
,
2826 0, cfm
.confirm_val
);
2828 return SMP_UNSPECIFIED
;
2830 smp_send_cmd(conn
, SMP_CMD_PAIRING_CONFIRM
, sizeof(cfm
), &cfm
);
2831 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RANDOM
);
2836 static int smp_cmd_dhkey_check(struct l2cap_conn
*conn
, struct sk_buff
*skb
)
2838 struct smp_cmd_dhkey_check
*check
= (void *) skb
->data
;
2839 struct l2cap_chan
*chan
= conn
->smp
;
2840 struct hci_conn
*hcon
= conn
->hcon
;
2841 struct smp_chan
*smp
= chan
->data
;
2842 u8 a
[7], b
[7], *local_addr
, *remote_addr
;
2843 u8 io_cap
[3], r
[16], e
[16];
2846 BT_DBG("conn %p", conn
);
2848 if (skb
->len
< sizeof(*check
))
2849 return SMP_INVALID_PARAMS
;
2851 memcpy(a
, &hcon
->init_addr
, 6);
2852 memcpy(b
, &hcon
->resp_addr
, 6);
2853 a
[6] = hcon
->init_addr_type
;
2854 b
[6] = hcon
->resp_addr_type
;
2859 memcpy(io_cap
, &smp
->prsp
[1], 3);
2863 memcpy(io_cap
, &smp
->preq
[1], 3);
2866 memset(r
, 0, sizeof(r
));
2868 if (smp
->method
== REQ_PASSKEY
|| smp
->method
== DSP_PASSKEY
)
2869 put_unaligned_le32(hcon
->passkey_notify
, r
);
2870 else if (smp
->method
== REQ_OOB
)
2871 memcpy(r
, smp
->lr
, 16);
2873 err
= smp_f6(smp
->tfm_cmac
, smp
->mackey
, smp
->rrnd
, smp
->prnd
, r
,
2874 io_cap
, remote_addr
, local_addr
, e
);
2876 return SMP_UNSPECIFIED
;
2878 if (crypto_memneq(check
->e
, e
, 16))
2879 return SMP_DHKEY_CHECK_FAILED
;
2882 if (test_bit(SMP_FLAG_WAIT_USER
, &smp
->flags
)) {
2883 set_bit(SMP_FLAG_DHKEY_PENDING
, &smp
->flags
);
2887 /* Slave sends DHKey check as response to master */
2888 sc_dhkey_check(smp
);
2894 hci_le_start_enc(hcon
, 0, 0, smp
->tk
, smp
->enc_key_size
);
2895 hcon
->enc_key_size
= smp
->enc_key_size
;
2901 static int smp_cmd_keypress_notify(struct l2cap_conn
*conn
,
2902 struct sk_buff
*skb
)
2904 struct smp_cmd_keypress_notify
*kp
= (void *) skb
->data
;
2906 BT_DBG("value 0x%02x", kp
->value
);
2911 static int smp_sig_channel(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
2913 struct l2cap_conn
*conn
= chan
->conn
;
2914 struct hci_conn
*hcon
= conn
->hcon
;
2915 struct smp_chan
*smp
;
2922 if (!hci_dev_test_flag(hcon
->hdev
, HCI_LE_ENABLED
)) {
2923 reason
= SMP_PAIRING_NOTSUPP
;
2927 code
= skb
->data
[0];
2928 skb_pull(skb
, sizeof(code
));
2932 if (code
> SMP_CMD_MAX
)
2935 if (smp
&& !test_and_clear_bit(code
, &smp
->allow_cmd
))
2938 /* If we don't have a context the only allowed commands are
2939 * pairing request and security request.
2941 if (!smp
&& code
!= SMP_CMD_PAIRING_REQ
&& code
!= SMP_CMD_SECURITY_REQ
)
2945 case SMP_CMD_PAIRING_REQ
:
2946 reason
= smp_cmd_pairing_req(conn
, skb
);
2949 case SMP_CMD_PAIRING_FAIL
:
2950 smp_failure(conn
, 0);
2954 case SMP_CMD_PAIRING_RSP
:
2955 reason
= smp_cmd_pairing_rsp(conn
, skb
);
2958 case SMP_CMD_SECURITY_REQ
:
2959 reason
= smp_cmd_security_req(conn
, skb
);
2962 case SMP_CMD_PAIRING_CONFIRM
:
2963 reason
= smp_cmd_pairing_confirm(conn
, skb
);
2966 case SMP_CMD_PAIRING_RANDOM
:
2967 reason
= smp_cmd_pairing_random(conn
, skb
);
2970 case SMP_CMD_ENCRYPT_INFO
:
2971 reason
= smp_cmd_encrypt_info(conn
, skb
);
2974 case SMP_CMD_MASTER_IDENT
:
2975 reason
= smp_cmd_master_ident(conn
, skb
);
2978 case SMP_CMD_IDENT_INFO
:
2979 reason
= smp_cmd_ident_info(conn
, skb
);
2982 case SMP_CMD_IDENT_ADDR_INFO
:
2983 reason
= smp_cmd_ident_addr_info(conn
, skb
);
2986 case SMP_CMD_SIGN_INFO
:
2987 reason
= smp_cmd_sign_info(conn
, skb
);
2990 case SMP_CMD_PUBLIC_KEY
:
2991 reason
= smp_cmd_public_key(conn
, skb
);
2994 case SMP_CMD_DHKEY_CHECK
:
2995 reason
= smp_cmd_dhkey_check(conn
, skb
);
2998 case SMP_CMD_KEYPRESS_NOTIFY
:
2999 reason
= smp_cmd_keypress_notify(conn
, skb
);
3003 BT_DBG("Unknown command code 0x%2.2x", code
);
3004 reason
= SMP_CMD_NOTSUPP
;
3011 smp_failure(conn
, reason
);
3018 bt_dev_err(hcon
->hdev
, "unexpected SMP command 0x%02x from %pMR",
3024 static void smp_teardown_cb(struct l2cap_chan
*chan
, int err
)
3026 struct l2cap_conn
*conn
= chan
->conn
;
3028 BT_DBG("chan %p", chan
);
3031 smp_chan_destroy(conn
);
3034 l2cap_chan_put(chan
);
3037 static void bredr_pairing(struct l2cap_chan
*chan
)
3039 struct l2cap_conn
*conn
= chan
->conn
;
3040 struct hci_conn
*hcon
= conn
->hcon
;
3041 struct hci_dev
*hdev
= hcon
->hdev
;
3042 struct smp_cmd_pairing req
;
3043 struct smp_chan
*smp
;
3045 BT_DBG("chan %p", chan
);
3047 /* Only new pairings are interesting */
3048 if (!test_bit(HCI_CONN_NEW_LINK_KEY
, &hcon
->flags
))
3051 /* Don't bother if we're not encrypted */
3052 if (!test_bit(HCI_CONN_ENCRYPT
, &hcon
->flags
))
3055 /* Only master may initiate SMP over BR/EDR */
3056 if (hcon
->role
!= HCI_ROLE_MASTER
)
3059 /* Secure Connections support must be enabled */
3060 if (!hci_dev_test_flag(hdev
, HCI_SC_ENABLED
))
3063 /* BR/EDR must use Secure Connections for SMP */
3064 if (!test_bit(HCI_CONN_AES_CCM
, &hcon
->flags
) &&
3065 !hci_dev_test_flag(hdev
, HCI_FORCE_BREDR_SMP
))
3068 /* If our LE support is not enabled don't do anything */
3069 if (!hci_dev_test_flag(hdev
, HCI_LE_ENABLED
))
3072 /* Don't bother if remote LE support is not enabled */
3073 if (!lmp_host_le_capable(hcon
))
3076 /* Remote must support SMP fixed chan for BR/EDR */
3077 if (!(conn
->remote_fixed_chan
& L2CAP_FC_SMP_BREDR
))
3080 /* Don't bother if SMP is already ongoing */
3084 smp
= smp_chan_create(conn
);
3086 bt_dev_err(hdev
, "unable to create SMP context for BR/EDR");
3090 set_bit(SMP_FLAG_SC
, &smp
->flags
);
3092 BT_DBG("%s starting SMP over BR/EDR", hdev
->name
);
3094 /* Prepare and send the BR/EDR SMP Pairing Request */
3095 build_bredr_pairing_cmd(smp
, &req
, NULL
);
3097 smp
->preq
[0] = SMP_CMD_PAIRING_REQ
;
3098 memcpy(&smp
->preq
[1], &req
, sizeof(req
));
3100 smp_send_cmd(conn
, SMP_CMD_PAIRING_REQ
, sizeof(req
), &req
);
3101 SMP_ALLOW_CMD(smp
, SMP_CMD_PAIRING_RSP
);
3104 static void smp_resume_cb(struct l2cap_chan
*chan
)
3106 struct smp_chan
*smp
= chan
->data
;
3107 struct l2cap_conn
*conn
= chan
->conn
;
3108 struct hci_conn
*hcon
= conn
->hcon
;
3110 BT_DBG("chan %p", chan
);
3112 if (hcon
->type
== ACL_LINK
) {
3113 bredr_pairing(chan
);
3120 if (!test_bit(HCI_CONN_ENCRYPT
, &hcon
->flags
))
3123 cancel_delayed_work(&smp
->security_timer
);
3125 smp_distribute_keys(smp
);
3128 static void smp_ready_cb(struct l2cap_chan
*chan
)
3130 struct l2cap_conn
*conn
= chan
->conn
;
3131 struct hci_conn
*hcon
= conn
->hcon
;
3133 BT_DBG("chan %p", chan
);
3135 /* No need to call l2cap_chan_hold() here since we already own
3136 * the reference taken in smp_new_conn_cb(). This is just the
3137 * first time that we tie it to a specific pointer. The code in
3138 * l2cap_core.c ensures that there's no risk this function wont
3139 * get called if smp_new_conn_cb was previously called.
3143 if (hcon
->type
== ACL_LINK
&& test_bit(HCI_CONN_ENCRYPT
, &hcon
->flags
))
3144 bredr_pairing(chan
);
3147 static int smp_recv_cb(struct l2cap_chan
*chan
, struct sk_buff
*skb
)
3151 BT_DBG("chan %p", chan
);
3153 err
= smp_sig_channel(chan
, skb
);
3155 struct smp_chan
*smp
= chan
->data
;
3158 cancel_delayed_work_sync(&smp
->security_timer
);
3160 hci_disconnect(chan
->conn
->hcon
, HCI_ERROR_AUTH_FAILURE
);
3166 static struct sk_buff
*smp_alloc_skb_cb(struct l2cap_chan
*chan
,
3167 unsigned long hdr_len
,
3168 unsigned long len
, int nb
)
3170 struct sk_buff
*skb
;
3172 skb
= bt_skb_alloc(hdr_len
+ len
, GFP_KERNEL
);
3174 return ERR_PTR(-ENOMEM
);
3176 skb
->priority
= HCI_PRIO_MAX
;
3177 bt_cb(skb
)->l2cap
.chan
= chan
;
3182 static const struct l2cap_ops smp_chan_ops
= {
3183 .name
= "Security Manager",
3184 .ready
= smp_ready_cb
,
3185 .recv
= smp_recv_cb
,
3186 .alloc_skb
= smp_alloc_skb_cb
,
3187 .teardown
= smp_teardown_cb
,
3188 .resume
= smp_resume_cb
,
3190 .new_connection
= l2cap_chan_no_new_connection
,
3191 .state_change
= l2cap_chan_no_state_change
,
3192 .close
= l2cap_chan_no_close
,
3193 .defer
= l2cap_chan_no_defer
,
3194 .suspend
= l2cap_chan_no_suspend
,
3195 .set_shutdown
= l2cap_chan_no_set_shutdown
,
3196 .get_sndtimeo
= l2cap_chan_no_get_sndtimeo
,
3199 static inline struct l2cap_chan
*smp_new_conn_cb(struct l2cap_chan
*pchan
)
3201 struct l2cap_chan
*chan
;
3203 BT_DBG("pchan %p", pchan
);
3205 chan
= l2cap_chan_create();
3209 chan
->chan_type
= pchan
->chan_type
;
3210 chan
->ops
= &smp_chan_ops
;
3211 chan
->scid
= pchan
->scid
;
3212 chan
->dcid
= chan
->scid
;
3213 chan
->imtu
= pchan
->imtu
;
3214 chan
->omtu
= pchan
->omtu
;
3215 chan
->mode
= pchan
->mode
;
3217 /* Other L2CAP channels may request SMP routines in order to
3218 * change the security level. This means that the SMP channel
3219 * lock must be considered in its own category to avoid lockdep
3222 atomic_set(&chan
->nesting
, L2CAP_NESTING_SMP
);
3224 BT_DBG("created chan %p", chan
);
3229 static const struct l2cap_ops smp_root_chan_ops
= {
3230 .name
= "Security Manager Root",
3231 .new_connection
= smp_new_conn_cb
,
3233 /* None of these are implemented for the root channel */
3234 .close
= l2cap_chan_no_close
,
3235 .alloc_skb
= l2cap_chan_no_alloc_skb
,
3236 .recv
= l2cap_chan_no_recv
,
3237 .state_change
= l2cap_chan_no_state_change
,
3238 .teardown
= l2cap_chan_no_teardown
,
3239 .ready
= l2cap_chan_no_ready
,
3240 .defer
= l2cap_chan_no_defer
,
3241 .suspend
= l2cap_chan_no_suspend
,
3242 .resume
= l2cap_chan_no_resume
,
3243 .set_shutdown
= l2cap_chan_no_set_shutdown
,
3244 .get_sndtimeo
= l2cap_chan_no_get_sndtimeo
,
3247 static struct l2cap_chan
*smp_add_cid(struct hci_dev
*hdev
, u16 cid
)
3249 struct l2cap_chan
*chan
;
3250 struct smp_dev
*smp
;
3251 struct crypto_shash
*tfm_cmac
;
3252 struct crypto_kpp
*tfm_ecdh
;
3254 if (cid
== L2CAP_CID_SMP_BREDR
) {
3259 smp
= kzalloc(sizeof(*smp
), GFP_KERNEL
);
3261 return ERR_PTR(-ENOMEM
);
3263 tfm_cmac
= crypto_alloc_shash("cmac(aes)", 0, 0);
3264 if (IS_ERR(tfm_cmac
)) {
3265 BT_ERR("Unable to create CMAC crypto context");
3267 return ERR_CAST(tfm_cmac
);
3270 tfm_ecdh
= crypto_alloc_kpp("ecdh", CRYPTO_ALG_INTERNAL
, 0);
3271 if (IS_ERR(tfm_ecdh
)) {
3272 BT_ERR("Unable to create ECDH crypto context");
3273 crypto_free_shash(tfm_cmac
);
3275 return ERR_CAST(tfm_ecdh
);
3278 smp
->local_oob
= false;
3279 smp
->tfm_cmac
= tfm_cmac
;
3280 smp
->tfm_ecdh
= tfm_ecdh
;
3283 chan
= l2cap_chan_create();
3286 crypto_free_shash(smp
->tfm_cmac
);
3287 crypto_free_kpp(smp
->tfm_ecdh
);
3290 return ERR_PTR(-ENOMEM
);
3295 l2cap_add_scid(chan
, cid
);
3297 l2cap_chan_set_defaults(chan
);
3299 if (cid
== L2CAP_CID_SMP
) {
3302 hci_copy_identity_address(hdev
, &chan
->src
, &bdaddr_type
);
3304 if (bdaddr_type
== ADDR_LE_DEV_PUBLIC
)
3305 chan
->src_type
= BDADDR_LE_PUBLIC
;
3307 chan
->src_type
= BDADDR_LE_RANDOM
;
3309 bacpy(&chan
->src
, &hdev
->bdaddr
);
3310 chan
->src_type
= BDADDR_BREDR
;
3313 chan
->state
= BT_LISTEN
;
3314 chan
->mode
= L2CAP_MODE_BASIC
;
3315 chan
->imtu
= L2CAP_DEFAULT_MTU
;
3316 chan
->ops
= &smp_root_chan_ops
;
3318 /* Set correct nesting level for a parent/listening channel */
3319 atomic_set(&chan
->nesting
, L2CAP_NESTING_PARENT
);
3324 static void smp_del_chan(struct l2cap_chan
*chan
)
3326 struct smp_dev
*smp
;
3328 BT_DBG("chan %p", chan
);
3333 crypto_free_shash(smp
->tfm_cmac
);
3334 crypto_free_kpp(smp
->tfm_ecdh
);
3338 l2cap_chan_put(chan
);
3341 static ssize_t
force_bredr_smp_read(struct file
*file
,
3342 char __user
*user_buf
,
3343 size_t count
, loff_t
*ppos
)
3345 struct hci_dev
*hdev
= file
->private_data
;
3348 buf
[0] = hci_dev_test_flag(hdev
, HCI_FORCE_BREDR_SMP
) ? 'Y': 'N';
3351 return simple_read_from_buffer(user_buf
, count
, ppos
, buf
, 2);
3354 static ssize_t
force_bredr_smp_write(struct file
*file
,
3355 const char __user
*user_buf
,
3356 size_t count
, loff_t
*ppos
)
3358 struct hci_dev
*hdev
= file
->private_data
;
3362 err
= kstrtobool_from_user(user_buf
, count
, &enable
);
3366 if (enable
== hci_dev_test_flag(hdev
, HCI_FORCE_BREDR_SMP
))
3370 struct l2cap_chan
*chan
;
3372 chan
= smp_add_cid(hdev
, L2CAP_CID_SMP_BREDR
);
3374 return PTR_ERR(chan
);
3376 hdev
->smp_bredr_data
= chan
;
3378 struct l2cap_chan
*chan
;
3380 chan
= hdev
->smp_bredr_data
;
3381 hdev
->smp_bredr_data
= NULL
;
3385 hci_dev_change_flag(hdev
, HCI_FORCE_BREDR_SMP
);
3390 static const struct file_operations force_bredr_smp_fops
= {
3391 .open
= simple_open
,
3392 .read
= force_bredr_smp_read
,
3393 .write
= force_bredr_smp_write
,
3394 .llseek
= default_llseek
,
3397 int smp_register(struct hci_dev
*hdev
)
3399 struct l2cap_chan
*chan
;
3401 BT_DBG("%s", hdev
->name
);
3403 /* If the controller does not support Low Energy operation, then
3404 * there is also no need to register any SMP channel.
3406 if (!lmp_le_capable(hdev
))
3409 if (WARN_ON(hdev
->smp_data
)) {
3410 chan
= hdev
->smp_data
;
3411 hdev
->smp_data
= NULL
;
3415 chan
= smp_add_cid(hdev
, L2CAP_CID_SMP
);
3417 return PTR_ERR(chan
);
3419 hdev
->smp_data
= chan
;
3421 /* If the controller does not support BR/EDR Secure Connections
3422 * feature, then the BR/EDR SMP channel shall not be present.
3424 * To test this with Bluetooth 4.0 controllers, create a debugfs
3425 * switch that allows forcing BR/EDR SMP support and accepting
3426 * cross-transport pairing on non-AES encrypted connections.
3428 if (!lmp_sc_capable(hdev
)) {
3429 debugfs_create_file("force_bredr_smp", 0644, hdev
->debugfs
,
3430 hdev
, &force_bredr_smp_fops
);
3432 /* Flag can be already set here (due to power toggle) */
3433 if (!hci_dev_test_flag(hdev
, HCI_FORCE_BREDR_SMP
))
3437 if (WARN_ON(hdev
->smp_bredr_data
)) {
3438 chan
= hdev
->smp_bredr_data
;
3439 hdev
->smp_bredr_data
= NULL
;
3443 chan
= smp_add_cid(hdev
, L2CAP_CID_SMP_BREDR
);
3445 int err
= PTR_ERR(chan
);
3446 chan
= hdev
->smp_data
;
3447 hdev
->smp_data
= NULL
;
3452 hdev
->smp_bredr_data
= chan
;
3457 void smp_unregister(struct hci_dev
*hdev
)
3459 struct l2cap_chan
*chan
;
3461 if (hdev
->smp_bredr_data
) {
3462 chan
= hdev
->smp_bredr_data
;
3463 hdev
->smp_bredr_data
= NULL
;
3467 if (hdev
->smp_data
) {
3468 chan
= hdev
->smp_data
;
3469 hdev
->smp_data
= NULL
;
3474 #if IS_ENABLED(CONFIG_BT_SELFTEST_SMP)
3476 static int __init
test_debug_key(struct crypto_kpp
*tfm_ecdh
)
3481 err
= set_ecdh_privkey(tfm_ecdh
, debug_sk
);
3485 err
= generate_ecdh_public_key(tfm_ecdh
, pk
);
3489 if (crypto_memneq(pk
, debug_pk
, 64))
3495 static int __init
test_ah(void)
3497 const u8 irk
[16] = {
3498 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3499 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3500 const u8 r
[3] = { 0x94, 0x81, 0x70 };
3501 const u8 exp
[3] = { 0xaa, 0xfb, 0x0d };
3505 err
= smp_ah(irk
, r
, res
);
3509 if (crypto_memneq(res
, exp
, 3))
3515 static int __init
test_c1(void)
3518 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3521 0xe0, 0x2e, 0x70, 0xc6, 0x4e, 0x27, 0x88, 0x63,
3522 0x0e, 0x6f, 0xad, 0x56, 0x21, 0xd5, 0x83, 0x57 };
3523 const u8 preq
[7] = { 0x01, 0x01, 0x00, 0x00, 0x10, 0x07, 0x07 };
3524 const u8 pres
[7] = { 0x02, 0x03, 0x00, 0x00, 0x08, 0x00, 0x05 };
3525 const u8 _iat
= 0x01;
3526 const u8 _rat
= 0x00;
3527 const bdaddr_t ra
= { { 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1 } };
3528 const bdaddr_t ia
= { { 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1 } };
3529 const u8 exp
[16] = {
3530 0x86, 0x3b, 0xf1, 0xbe, 0xc5, 0x4d, 0xa7, 0xd2,
3531 0xea, 0x88, 0x89, 0x87, 0xef, 0x3f, 0x1e, 0x1e };
3535 err
= smp_c1(k
, r
, preq
, pres
, _iat
, &ia
, _rat
, &ra
, res
);
3539 if (crypto_memneq(res
, exp
, 16))
3545 static int __init
test_s1(void)
3548 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
3549 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
3551 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
3553 0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99 };
3554 const u8 exp
[16] = {
3555 0x62, 0xa0, 0x6d, 0x79, 0xae, 0x16, 0x42, 0x5b,
3556 0x9b, 0xf4, 0xb0, 0xe8, 0xf0, 0xe1, 0x1f, 0x9a };
3560 err
= smp_s1(k
, r1
, r2
, res
);
3564 if (crypto_memneq(res
, exp
, 16))
3570 static int __init
test_f4(struct crypto_shash
*tfm_cmac
)
3573 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3574 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3575 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3576 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3578 0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3579 0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3580 0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3581 0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3583 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3584 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3586 const u8 exp
[16] = {
3587 0x2d, 0x87, 0x74, 0xa9, 0xbe, 0xa1, 0xed, 0xf1,
3588 0x1c, 0xbd, 0xa9, 0x07, 0xf1, 0x16, 0xc9, 0xf2 };
3592 err
= smp_f4(tfm_cmac
, u
, v
, x
, z
, res
);
3596 if (crypto_memneq(res
, exp
, 16))
3602 static int __init
test_f5(struct crypto_shash
*tfm_cmac
)
3605 0x98, 0xa6, 0xbf, 0x73, 0xf3, 0x34, 0x8d, 0x86,
3606 0xf1, 0x66, 0xf8, 0xb4, 0x13, 0x6b, 0x79, 0x99,
3607 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3608 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3610 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3611 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3613 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3614 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3615 const u8 a1
[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3616 const u8 a2
[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3617 const u8 exp_ltk
[16] = {
3618 0x38, 0x0a, 0x75, 0x94, 0xb5, 0x22, 0x05, 0x98,
3619 0x23, 0xcd, 0xd7, 0x69, 0x11, 0x79, 0x86, 0x69 };
3620 const u8 exp_mackey
[16] = {
3621 0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3622 0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3623 u8 mackey
[16], ltk
[16];
3626 err
= smp_f5(tfm_cmac
, w
, n1
, n2
, a1
, a2
, mackey
, ltk
);
3630 if (crypto_memneq(mackey
, exp_mackey
, 16))
3633 if (crypto_memneq(ltk
, exp_ltk
, 16))
3639 static int __init
test_f6(struct crypto_shash
*tfm_cmac
)
3642 0x20, 0x6e, 0x63, 0xce, 0x20, 0x6a, 0x3f, 0xfd,
3643 0x02, 0x4a, 0x08, 0xa1, 0x76, 0xf1, 0x65, 0x29 };
3645 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3646 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3648 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3649 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3651 0xc8, 0x0f, 0x2d, 0x0c, 0xd2, 0x42, 0xda, 0x08,
3652 0x54, 0xbb, 0x53, 0xb4, 0x3b, 0x34, 0xa3, 0x12 };
3653 const u8 io_cap
[3] = { 0x02, 0x01, 0x01 };
3654 const u8 a1
[7] = { 0xce, 0xbf, 0x37, 0x37, 0x12, 0x56, 0x00 };
3655 const u8 a2
[7] = { 0xc1, 0xcf, 0x2d, 0x70, 0x13, 0xa7, 0x00 };
3656 const u8 exp
[16] = {
3657 0x61, 0x8f, 0x95, 0xda, 0x09, 0x0b, 0x6c, 0xd2,
3658 0xc5, 0xe8, 0xd0, 0x9c, 0x98, 0x73, 0xc4, 0xe3 };
3662 err
= smp_f6(tfm_cmac
, w
, n1
, n2
, r
, io_cap
, a1
, a2
, res
);
3666 if (crypto_memneq(res
, exp
, 16))
3672 static int __init
test_g2(struct crypto_shash
*tfm_cmac
)
3675 0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc,
3676 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef,
3677 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83, 0x2c, 0x5e,
3678 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20 };
3680 0xfd, 0xc5, 0x7f, 0xf4, 0x49, 0xdd, 0x4f, 0x6b,
3681 0xfb, 0x7c, 0x9d, 0xf1, 0xc2, 0x9a, 0xcb, 0x59,
3682 0x2a, 0xe7, 0xd4, 0xee, 0xfb, 0xfc, 0x0a, 0x90,
3683 0x9a, 0xbb, 0xf6, 0x32, 0x3d, 0x8b, 0x18, 0x55 };
3685 0xab, 0xae, 0x2b, 0x71, 0xec, 0xb2, 0xff, 0xff,
3686 0x3e, 0x73, 0x77, 0xd1, 0x54, 0x84, 0xcb, 0xd5 };
3688 0xcf, 0xc4, 0x3d, 0xff, 0xf7, 0x83, 0x65, 0x21,
3689 0x6e, 0x5f, 0xa7, 0x25, 0xcc, 0xe7, 0xe8, 0xa6 };
3690 const u32 exp_val
= 0x2f9ed5ba % 1000000;
3694 err
= smp_g2(tfm_cmac
, u
, v
, x
, y
, &val
);
3704 static int __init
test_h6(struct crypto_shash
*tfm_cmac
)
3707 0x9b, 0x7d, 0x39, 0x0a, 0xa6, 0x10, 0x10, 0x34,
3708 0x05, 0xad, 0xc8, 0x57, 0xa3, 0x34, 0x02, 0xec };
3709 const u8 key_id
[4] = { 0x72, 0x62, 0x65, 0x6c };
3710 const u8 exp
[16] = {
3711 0x99, 0x63, 0xb1, 0x80, 0xe2, 0xa9, 0xd3, 0xe8,
3712 0x1c, 0xc9, 0x6d, 0xe7, 0x02, 0xe1, 0x9a, 0x2d };
3716 err
= smp_h6(tfm_cmac
, w
, key_id
, res
);
3720 if (crypto_memneq(res
, exp
, 16))
3726 static char test_smp_buffer
[32];
3728 static ssize_t
test_smp_read(struct file
*file
, char __user
*user_buf
,
3729 size_t count
, loff_t
*ppos
)
3731 return simple_read_from_buffer(user_buf
, count
, ppos
, test_smp_buffer
,
3732 strlen(test_smp_buffer
));
3735 static const struct file_operations test_smp_fops
= {
3736 .open
= simple_open
,
3737 .read
= test_smp_read
,
3738 .llseek
= default_llseek
,
3741 static int __init
run_selftests(struct crypto_shash
*tfm_cmac
,
3742 struct crypto_kpp
*tfm_ecdh
)
3744 ktime_t calltime
, delta
, rettime
;
3745 unsigned long long duration
;
3748 calltime
= ktime_get();
3750 err
= test_debug_key(tfm_ecdh
);
3752 BT_ERR("debug_key test failed");
3758 BT_ERR("smp_ah test failed");
3764 BT_ERR("smp_c1 test failed");
3770 BT_ERR("smp_s1 test failed");
3774 err
= test_f4(tfm_cmac
);
3776 BT_ERR("smp_f4 test failed");
3780 err
= test_f5(tfm_cmac
);
3782 BT_ERR("smp_f5 test failed");
3786 err
= test_f6(tfm_cmac
);
3788 BT_ERR("smp_f6 test failed");
3792 err
= test_g2(tfm_cmac
);
3794 BT_ERR("smp_g2 test failed");
3798 err
= test_h6(tfm_cmac
);
3800 BT_ERR("smp_h6 test failed");
3804 rettime
= ktime_get();
3805 delta
= ktime_sub(rettime
, calltime
);
3806 duration
= (unsigned long long) ktime_to_ns(delta
) >> 10;
3808 BT_INFO("SMP test passed in %llu usecs", duration
);
3812 snprintf(test_smp_buffer
, sizeof(test_smp_buffer
),
3813 "PASS (%llu usecs)\n", duration
);
3815 snprintf(test_smp_buffer
, sizeof(test_smp_buffer
), "FAIL\n");
3817 debugfs_create_file("selftest_smp", 0444, bt_debugfs
, NULL
,
3823 int __init
bt_selftest_smp(void)
3825 struct crypto_shash
*tfm_cmac
;
3826 struct crypto_kpp
*tfm_ecdh
;
3829 tfm_cmac
= crypto_alloc_shash("cmac(aes)", 0, 0);
3830 if (IS_ERR(tfm_cmac
)) {
3831 BT_ERR("Unable to create CMAC crypto context");
3832 return PTR_ERR(tfm_cmac
);
3835 tfm_ecdh
= crypto_alloc_kpp("ecdh", CRYPTO_ALG_INTERNAL
, 0);
3836 if (IS_ERR(tfm_ecdh
)) {
3837 BT_ERR("Unable to create ECDH crypto context");
3838 crypto_free_shash(tfm_cmac
);
3839 return PTR_ERR(tfm_ecdh
);
3842 err
= run_selftests(tfm_cmac
, tfm_ecdh
);
3844 crypto_free_shash(tfm_cmac
);
3845 crypto_free_kpp(tfm_ecdh
);