6df51017df21ff50ab41f23a6b45f3339ab59be4
[pandora-kernel.git] / net / bluetooth / smp.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4
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;
8
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.
17
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.
21 */
22
23 #include <net/bluetooth/bluetooth.h>
24 #include <net/bluetooth/hci_core.h>
25 #include <net/bluetooth/l2cap.h>
26 #include <net/bluetooth/smp.h>
27 #include <linux/crypto.h>
28 #include <linux/scatterlist.h>
29 #include <crypto/b128ops.h>
30
31 #define SMP_TIMEOUT 30000 /* 30 seconds */
32
33 static inline void swap128(u8 src[16], u8 dst[16])
34 {
35         int i;
36         for (i = 0; i < 16; i++)
37                 dst[15 - i] = src[i];
38 }
39
40 static inline void swap56(u8 src[7], u8 dst[7])
41 {
42         int i;
43         for (i = 0; i < 7; i++)
44                 dst[6 - i] = src[i];
45 }
46
47 static int smp_e(struct crypto_blkcipher *tfm, const u8 *k, u8 *r)
48 {
49         struct blkcipher_desc desc;
50         struct scatterlist sg;
51         int err, iv_len;
52         unsigned char iv[128];
53
54         if (tfm == NULL) {
55                 BT_ERR("tfm %p", tfm);
56                 return -EINVAL;
57         }
58
59         desc.tfm = tfm;
60         desc.flags = 0;
61
62         err = crypto_blkcipher_setkey(tfm, k, 16);
63         if (err) {
64                 BT_ERR("cipher setkey failed: %d", err);
65                 return err;
66         }
67
68         sg_init_one(&sg, r, 16);
69
70         iv_len = crypto_blkcipher_ivsize(tfm);
71         if (iv_len) {
72                 memset(&iv, 0xff, iv_len);
73                 crypto_blkcipher_set_iv(tfm, iv, iv_len);
74         }
75
76         err = crypto_blkcipher_encrypt(&desc, &sg, &sg, 16);
77         if (err)
78                 BT_ERR("Encrypt data error %d", err);
79
80         return err;
81 }
82
83 static int smp_c1(struct crypto_blkcipher *tfm, u8 k[16], u8 r[16],
84                 u8 preq[7], u8 pres[7], u8 _iat, bdaddr_t *ia,
85                 u8 _rat, bdaddr_t *ra, u8 res[16])
86 {
87         u8 p1[16], p2[16];
88         int err;
89
90         memset(p1, 0, 16);
91
92         /* p1 = pres || preq || _rat || _iat */
93         swap56(pres, p1);
94         swap56(preq, p1 + 7);
95         p1[14] = _rat;
96         p1[15] = _iat;
97
98         memset(p2, 0, 16);
99
100         /* p2 = padding || ia || ra */
101         baswap((bdaddr_t *) (p2 + 4), ia);
102         baswap((bdaddr_t *) (p2 + 10), ra);
103
104         /* res = r XOR p1 */
105         u128_xor((u128 *) res, (u128 *) r, (u128 *) p1);
106
107         /* res = e(k, res) */
108         err = smp_e(tfm, k, res);
109         if (err) {
110                 BT_ERR("Encrypt data error");
111                 return err;
112         }
113
114         /* res = res XOR p2 */
115         u128_xor((u128 *) res, (u128 *) res, (u128 *) p2);
116
117         /* res = e(k, res) */
118         err = smp_e(tfm, k, res);
119         if (err)
120                 BT_ERR("Encrypt data error");
121
122         return err;
123 }
124
125 static int smp_s1(struct crypto_blkcipher *tfm, u8 k[16],
126                         u8 r1[16], u8 r2[16], u8 _r[16])
127 {
128         int err;
129
130         /* Just least significant octets from r1 and r2 are considered */
131         memcpy(_r, r1 + 8, 8);
132         memcpy(_r + 8, r2 + 8, 8);
133
134         err = smp_e(tfm, k, _r);
135         if (err)
136                 BT_ERR("Encrypt data error");
137
138         return err;
139 }
140
141 static int smp_rand(u8 *buf)
142 {
143         get_random_bytes(buf, 16);
144
145         return 0;
146 }
147
148 static struct sk_buff *smp_build_cmd(struct l2cap_conn *conn, u8 code,
149                                                 u16 dlen, void *data)
150 {
151         struct sk_buff *skb;
152         struct l2cap_hdr *lh;
153         int len;
154
155         len = L2CAP_HDR_SIZE + sizeof(code) + dlen;
156
157         if (len > conn->mtu)
158                 return NULL;
159
160         skb = bt_skb_alloc(len, GFP_ATOMIC);
161         if (!skb)
162                 return NULL;
163
164         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
165         lh->len = cpu_to_le16(sizeof(code) + dlen);
166         lh->cid = cpu_to_le16(L2CAP_CID_SMP);
167
168         memcpy(skb_put(skb, sizeof(code)), &code, sizeof(code));
169
170         memcpy(skb_put(skb, dlen), data, dlen);
171
172         return skb;
173 }
174
175 static void smp_send_cmd(struct l2cap_conn *conn, u8 code, u16 len, void *data)
176 {
177         struct sk_buff *skb = smp_build_cmd(conn, code, len, data);
178
179         BT_DBG("code 0x%2.2x", code);
180
181         if (!skb)
182                 return;
183
184         hci_send_acl(conn->hcon, skb, 0);
185 }
186
187 static __u8 seclevel_to_authreq(__u8 level)
188 {
189         switch (level) {
190         case BT_SECURITY_HIGH:
191                 /* Right now we don't support bonding */
192                 return SMP_AUTH_MITM;
193
194         default:
195                 return SMP_AUTH_NONE;
196         }
197 }
198
199 static void build_pairing_cmd(struct l2cap_conn *conn,
200                                 struct smp_cmd_pairing *req,
201                                 struct smp_cmd_pairing *rsp,
202                                 __u8 authreq)
203 {
204         u8 dist_keys;
205
206         dist_keys = 0;
207         if (test_bit(HCI_PAIRABLE, &conn->hcon->hdev->flags)) {
208                 dist_keys = SMP_DIST_ENC_KEY | SMP_DIST_ID_KEY | SMP_DIST_SIGN;
209                 authreq |= SMP_AUTH_BONDING;
210         }
211
212         if (rsp == NULL) {
213                 req->io_capability = conn->hcon->io_capability;
214                 req->oob_flag = SMP_OOB_NOT_PRESENT;
215                 req->max_key_size = SMP_MAX_ENC_KEY_SIZE;
216                 req->init_key_dist = dist_keys;
217                 req->resp_key_dist = dist_keys;
218                 req->auth_req = authreq;
219                 return;
220         }
221
222         rsp->io_capability = conn->hcon->io_capability;
223         rsp->oob_flag = SMP_OOB_NOT_PRESENT;
224         rsp->max_key_size = SMP_MAX_ENC_KEY_SIZE;
225         rsp->init_key_dist = req->init_key_dist & dist_keys;
226         rsp->resp_key_dist = req->resp_key_dist & dist_keys;
227         rsp->auth_req = authreq;
228 }
229
230 static u8 check_enc_key_size(struct l2cap_conn *conn, __u8 max_key_size)
231 {
232         if ((max_key_size > SMP_MAX_ENC_KEY_SIZE) ||
233                         (max_key_size < SMP_MIN_ENC_KEY_SIZE))
234                 return SMP_ENC_KEY_SIZE;
235
236         conn->smp_key_size = max_key_size;
237
238         return 0;
239 }
240
241 static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
242 {
243         struct smp_cmd_pairing rsp, *req = (void *) skb->data;
244         u8 key_size;
245
246         BT_DBG("conn %p", conn);
247
248         conn->preq[0] = SMP_CMD_PAIRING_REQ;
249         memcpy(&conn->preq[1], req, sizeof(*req));
250         skb_pull(skb, sizeof(*req));
251
252         if (req->oob_flag)
253                 return SMP_OOB_NOT_AVAIL;
254
255         /* We didn't start the pairing, so no requirements */
256         build_pairing_cmd(conn, req, &rsp, SMP_AUTH_NONE);
257
258         key_size = min(req->max_key_size, rsp.max_key_size);
259         if (check_enc_key_size(conn, key_size))
260                 return SMP_ENC_KEY_SIZE;
261
262         /* Just works */
263         memset(conn->tk, 0, sizeof(conn->tk));
264
265         conn->prsp[0] = SMP_CMD_PAIRING_RSP;
266         memcpy(&conn->prsp[1], &rsp, sizeof(rsp));
267
268         smp_send_cmd(conn, SMP_CMD_PAIRING_RSP, sizeof(rsp), &rsp);
269
270         mod_timer(&conn->security_timer, jiffies +
271                                         msecs_to_jiffies(SMP_TIMEOUT));
272
273         return 0;
274 }
275
276 static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)
277 {
278         struct smp_cmd_pairing *req, *rsp = (void *) skb->data;
279         struct smp_cmd_pairing_confirm cp;
280         struct crypto_blkcipher *tfm = conn->hcon->hdev->tfm;
281         int ret;
282         u8 res[16], key_size;
283
284         BT_DBG("conn %p", conn);
285
286         skb_pull(skb, sizeof(*rsp));
287
288         req = (void *) &conn->preq[1];
289
290         key_size = min(req->max_key_size, rsp->max_key_size);
291         if (check_enc_key_size(conn, key_size))
292                 return SMP_ENC_KEY_SIZE;
293
294         if (rsp->oob_flag)
295                 return SMP_OOB_NOT_AVAIL;
296
297         /* Just works */
298         memset(conn->tk, 0, sizeof(conn->tk));
299
300         conn->prsp[0] = SMP_CMD_PAIRING_RSP;
301         memcpy(&conn->prsp[1], rsp, sizeof(*rsp));
302
303         ret = smp_rand(conn->prnd);
304         if (ret)
305                 return SMP_UNSPECIFIED;
306
307         ret = smp_c1(tfm, conn->tk, conn->prnd, conn->preq, conn->prsp, 0,
308                         conn->src, conn->hcon->dst_type, conn->dst, res);
309         if (ret)
310                 return SMP_UNSPECIFIED;
311
312         swap128(res, cp.confirm_val);
313
314         smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
315
316         return 0;
317 }
318
319 static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
320 {
321         struct crypto_blkcipher *tfm = conn->hcon->hdev->tfm;
322
323         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
324
325         memcpy(conn->pcnf, skb->data, sizeof(conn->pcnf));
326         skb_pull(skb, sizeof(conn->pcnf));
327
328         if (conn->hcon->out) {
329                 u8 random[16];
330
331                 swap128(conn->prnd, random);
332                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(random),
333                                                                 random);
334         } else {
335                 struct smp_cmd_pairing_confirm cp;
336                 int ret;
337                 u8 res[16];
338
339                 ret = smp_rand(conn->prnd);
340                 if (ret)
341                         return SMP_UNSPECIFIED;
342
343                 ret = smp_c1(tfm, conn->tk, conn->prnd, conn->preq, conn->prsp,
344                                                 conn->hcon->dst_type, conn->dst,
345                                                 0, conn->src, res);
346                 if (ret)
347                         return SMP_CONFIRM_FAILED;
348
349                 swap128(res, cp.confirm_val);
350
351                 smp_send_cmd(conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);
352         }
353
354         mod_timer(&conn->security_timer, jiffies +
355                                         msecs_to_jiffies(SMP_TIMEOUT));
356
357         return 0;
358 }
359
360 static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
361 {
362         struct hci_conn *hcon = conn->hcon;
363         struct crypto_blkcipher *tfm = hcon->hdev->tfm;
364         int ret;
365         u8 key[16], res[16], random[16], confirm[16];
366
367         swap128(skb->data, random);
368         skb_pull(skb, sizeof(random));
369
370         memset(hcon->ltk, 0, sizeof(hcon->ltk));
371
372         if (conn->hcon->out)
373                 ret = smp_c1(tfm, conn->tk, random, conn->preq, conn->prsp, 0,
374                                 conn->src, conn->hcon->dst_type, conn->dst,
375                                 res);
376         else
377                 ret = smp_c1(tfm, conn->tk, random, conn->preq, conn->prsp,
378                                 conn->hcon->dst_type, conn->dst, 0, conn->src,
379                                 res);
380         if (ret)
381                 return SMP_UNSPECIFIED;
382
383         BT_DBG("conn %p %s", conn, conn->hcon->out ? "master" : "slave");
384
385         swap128(res, confirm);
386
387         if (memcmp(conn->pcnf, confirm, sizeof(conn->pcnf)) != 0) {
388                 BT_ERR("Pairing failed (confirmation values mismatch)");
389                 return SMP_CONFIRM_FAILED;
390         }
391
392         if (conn->hcon->out) {
393                 u8 stk[16], rand[8];
394                 __le16 ediv;
395
396                 memset(rand, 0, sizeof(rand));
397                 ediv = 0;
398
399                 smp_s1(tfm, conn->tk, random, conn->prnd, key);
400                 swap128(key, stk);
401
402                 memset(stk + conn->smp_key_size, 0,
403                                 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
404
405                 hci_le_start_enc(hcon, ediv, rand, stk);
406         } else {
407                 u8 stk[16], r[16], rand[8];
408                 __le16 ediv;
409
410                 memset(rand, 0, sizeof(rand));
411                 ediv = 0;
412
413                 swap128(conn->prnd, r);
414                 smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(r), r);
415
416                 smp_s1(tfm, conn->tk, conn->prnd, random, key);
417                 swap128(key, stk);
418
419                 memset(stk + conn->smp_key_size, 0,
420                                 SMP_MAX_ENC_KEY_SIZE - conn->smp_key_size);
421
422                 hci_add_ltk(conn->hcon->hdev, 0, conn->dst, ediv, rand, stk);
423         }
424
425         return 0;
426 }
427
428 static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
429 {
430         struct smp_cmd_security_req *rp = (void *) skb->data;
431         struct smp_cmd_pairing cp;
432         struct hci_conn *hcon = conn->hcon;
433
434         BT_DBG("conn %p", conn);
435
436         if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
437                 return 0;
438
439         skb_pull(skb, sizeof(*rp));
440
441         memset(&cp, 0, sizeof(cp));
442         build_pairing_cmd(conn, &cp, NULL, rp->auth_req);
443
444         conn->preq[0] = SMP_CMD_PAIRING_REQ;
445         memcpy(&conn->preq[1], &cp, sizeof(cp));
446
447         smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
448
449         mod_timer(&conn->security_timer, jiffies +
450                                         msecs_to_jiffies(SMP_TIMEOUT));
451
452         set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend);
453
454         return 0;
455 }
456
457 int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level)
458 {
459         struct hci_conn *hcon = conn->hcon;
460         __u8 authreq;
461
462         BT_DBG("conn %p hcon %p level 0x%2.2x", conn, hcon, sec_level);
463
464         if (!lmp_host_le_capable(hcon->hdev))
465                 return 1;
466
467         if (IS_ERR(hcon->hdev->tfm))
468                 return 1;
469
470         if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
471                 return 0;
472
473         if (sec_level == BT_SECURITY_LOW)
474                 return 1;
475
476         if (hcon->sec_level >= sec_level)
477                 return 1;
478
479         authreq = seclevel_to_authreq(sec_level);
480
481         if (hcon->link_mode & HCI_LM_MASTER) {
482                 struct smp_cmd_pairing cp;
483
484                 build_pairing_cmd(conn, &cp, NULL, authreq);
485                 conn->preq[0] = SMP_CMD_PAIRING_REQ;
486                 memcpy(&conn->preq[1], &cp, sizeof(cp));
487
488                 mod_timer(&conn->security_timer, jiffies +
489                                         msecs_to_jiffies(SMP_TIMEOUT));
490
491                 smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
492         } else {
493                 struct smp_cmd_security_req cp;
494                 cp.auth_req = authreq;
495                 smp_send_cmd(conn, SMP_CMD_SECURITY_REQ, sizeof(cp), &cp);
496         }
497
498         hcon->pending_sec_level = sec_level;
499         set_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend);
500
501         return 0;
502 }
503
504 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
505 {
506         struct smp_cmd_encrypt_info *rp = (void *) skb->data;
507
508         skb_pull(skb, sizeof(*rp));
509
510         memcpy(conn->tk, rp->ltk, sizeof(conn->tk));
511
512         return 0;
513 }
514
515 static int smp_cmd_master_ident(struct l2cap_conn *conn, struct sk_buff *skb)
516 {
517         struct smp_cmd_master_ident *rp = (void *) skb->data;
518
519         skb_pull(skb, sizeof(*rp));
520
521         hci_add_ltk(conn->hcon->hdev, 1, conn->src, rp->ediv,
522                                                 rp->rand, conn->tk);
523
524         smp_distribute_keys(conn, 1);
525
526         return 0;
527 }
528
529 int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
530 {
531         __u8 code = skb->data[0];
532         __u8 reason;
533         int err = 0;
534
535         if (!lmp_host_le_capable(conn->hcon->hdev)) {
536                 err = -ENOTSUPP;
537                 reason = SMP_PAIRING_NOTSUPP;
538                 goto done;
539         }
540
541         if (IS_ERR(conn->hcon->hdev->tfm)) {
542                 err = PTR_ERR(conn->hcon->hdev->tfm);
543                 reason = SMP_PAIRING_NOTSUPP;
544                 goto done;
545         }
546
547         skb_pull(skb, sizeof(code));
548
549         switch (code) {
550         case SMP_CMD_PAIRING_REQ:
551                 reason = smp_cmd_pairing_req(conn, skb);
552                 break;
553
554         case SMP_CMD_PAIRING_FAIL:
555                 reason = 0;
556                 err = -EPERM;
557                 break;
558
559         case SMP_CMD_PAIRING_RSP:
560                 reason = smp_cmd_pairing_rsp(conn, skb);
561                 break;
562
563         case SMP_CMD_SECURITY_REQ:
564                 reason = smp_cmd_security_req(conn, skb);
565                 break;
566
567         case SMP_CMD_PAIRING_CONFIRM:
568                 reason = smp_cmd_pairing_confirm(conn, skb);
569                 break;
570
571         case SMP_CMD_PAIRING_RANDOM:
572                 reason = smp_cmd_pairing_random(conn, skb);
573                 break;
574
575         case SMP_CMD_ENCRYPT_INFO:
576                 reason = smp_cmd_encrypt_info(conn, skb);
577                 break;
578
579         case SMP_CMD_MASTER_IDENT:
580                 reason = smp_cmd_master_ident(conn, skb);
581                 break;
582
583         case SMP_CMD_IDENT_INFO:
584         case SMP_CMD_IDENT_ADDR_INFO:
585         case SMP_CMD_SIGN_INFO:
586                 /* Just ignored */
587                 reason = 0;
588                 break;
589
590         default:
591                 BT_DBG("Unknown command code 0x%2.2x", code);
592
593                 reason = SMP_CMD_NOTSUPP;
594                 err = -EOPNOTSUPP;
595                 goto done;
596         }
597
598 done:
599         if (reason)
600                 smp_send_cmd(conn, SMP_CMD_PAIRING_FAIL, sizeof(reason),
601                                                                 &reason);
602
603         kfree_skb(skb);
604         return err;
605 }
606
607 int smp_distribute_keys(struct l2cap_conn *conn, __u8 force)
608 {
609         struct smp_cmd_pairing *req, *rsp;
610         __u8 *keydist;
611
612         BT_DBG("conn %p force %d", conn, force);
613
614         if (IS_ERR(conn->hcon->hdev->tfm))
615                 return PTR_ERR(conn->hcon->hdev->tfm);
616
617         rsp = (void *) &conn->prsp[1];
618
619         /* The responder sends its keys first */
620         if (!force && conn->hcon->out && (rsp->resp_key_dist & 0x07))
621                 return 0;
622
623         req = (void *) &conn->preq[1];
624
625         if (conn->hcon->out) {
626                 keydist = &rsp->init_key_dist;
627                 *keydist &= req->init_key_dist;
628         } else {
629                 keydist = &rsp->resp_key_dist;
630                 *keydist &= req->resp_key_dist;
631         }
632
633
634         BT_DBG("keydist 0x%x", *keydist);
635
636         if (*keydist & SMP_DIST_ENC_KEY) {
637                 struct smp_cmd_encrypt_info enc;
638                 struct smp_cmd_master_ident ident;
639                 __le16 ediv;
640
641                 get_random_bytes(enc.ltk, sizeof(enc.ltk));
642                 get_random_bytes(&ediv, sizeof(ediv));
643                 get_random_bytes(ident.rand, sizeof(ident.rand));
644
645                 smp_send_cmd(conn, SMP_CMD_ENCRYPT_INFO, sizeof(enc), &enc);
646
647                 hci_add_ltk(conn->hcon->hdev, 1, conn->dst, ediv,
648                                                         ident.rand, enc.ltk);
649
650                 ident.ediv = cpu_to_le16(ediv);
651
652                 smp_send_cmd(conn, SMP_CMD_MASTER_IDENT, sizeof(ident), &ident);
653
654                 *keydist &= ~SMP_DIST_ENC_KEY;
655         }
656
657         if (*keydist & SMP_DIST_ID_KEY) {
658                 struct smp_cmd_ident_addr_info addrinfo;
659                 struct smp_cmd_ident_info idinfo;
660
661                 /* Send a dummy key */
662                 get_random_bytes(idinfo.irk, sizeof(idinfo.irk));
663
664                 smp_send_cmd(conn, SMP_CMD_IDENT_INFO, sizeof(idinfo), &idinfo);
665
666                 /* Just public address */
667                 memset(&addrinfo, 0, sizeof(addrinfo));
668                 bacpy(&addrinfo.bdaddr, conn->src);
669
670                 smp_send_cmd(conn, SMP_CMD_IDENT_ADDR_INFO, sizeof(addrinfo),
671                                                                 &addrinfo);
672
673                 *keydist &= ~SMP_DIST_ID_KEY;
674         }
675
676         if (*keydist & SMP_DIST_SIGN) {
677                 struct smp_cmd_sign_info sign;
678
679                 /* Send a dummy key */
680                 get_random_bytes(sign.csrk, sizeof(sign.csrk));
681
682                 smp_send_cmd(conn, SMP_CMD_SIGN_INFO, sizeof(sign), &sign);
683
684                 *keydist &= ~SMP_DIST_SIGN;
685         }
686
687         return 0;
688 }