Bluetooth: Use debug keys for SMP when HCI_USE_DEBUG_KEYS is set
authorJohan Hedberg <johan.hedberg@intel.com>
Tue, 24 Jun 2014 12:22:59 +0000 (15:22 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 3 Dec 2014 15:51:19 +0000 (16:51 +0100)
The HCI_USE_DEBUG_KEYS flag is intended to force our side to always use
debug keys for pairing. This means both BR/EDR SSP as well as SMP with
LE Secure Connections. This patch updates the SMP code to use the debug
keys instead of generating a random local key pair when the flag is set.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/smp.c

index 918ce036cb91f52c99dc682709d1c7e4badc9b87..779160485a50599929314c7ab1205f01c334149b 100644 (file)
@@ -1585,18 +1585,27 @@ static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
 
 static u8 sc_send_public_key(struct smp_chan *smp)
 {
+       struct hci_dev *hdev = smp->conn->hcon->hdev;
+
        BT_DBG("");
 
-       while (true) {
-               /* Generate local key pair for Secure Connections */
-               if (!ecc_make_key(smp->local_pk, smp->local_sk))
-                       return SMP_UNSPECIFIED;
+       if (test_bit(HCI_USE_DEBUG_KEYS, &hdev->dev_flags)) {
+               BT_DBG("Using debug keys");
+               memcpy(smp->local_pk, debug_pk, 64);
+               memcpy(smp->local_sk, debug_sk, 32);
+               set_bit(SMP_FLAG_DEBUG_KEY, &smp->flags);
+       } else {
+               while (true) {
+                       /* Generate local key pair for Secure Connections */
+                       if (!ecc_make_key(smp->local_pk, smp->local_sk))
+                               return SMP_UNSPECIFIED;
 
-               /* This is unlikely, but we need to check that we didn't
-                * accidentially generate a debug key.
-                */
-               if (memcmp(smp->local_sk, debug_sk, 32))
-                       break;
+                       /* This is unlikely, but we need to check that
+                        * we didn't accidentially generate a debug key.
+                        */
+                       if (memcmp(smp->local_sk, debug_sk, 32))
+                               break;
+               }
        }
 
        BT_DBG("Local Public Key X: %32phN", smp->local_pk);