Bluetooth: Add internal function for storing P-192 and P-256 data
authorMarcel Holtmann <marcel@holtmann.org>
Fri, 10 Jan 2014 10:07:29 +0000 (02:07 -0800)
committerJohan Hedberg <johan.hedberg@intel.com>
Thu, 13 Feb 2014 07:51:34 +0000 (09:51 +0200)
Add function to allow adding P-192 and P-256 data to the internal
storage. This also fixes a few coding style issues from the previous
helper functions for the out-of-band credentials storage.

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

index 5948930f92e6679212f3120d6b732efe4561e5c4..66e96ebffe978046f741cb2d3becb304eaa73c3b 100644 (file)
@@ -761,9 +761,12 @@ int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
 
 int hci_remote_oob_data_clear(struct hci_dev *hdev);
 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
-                                                       bdaddr_t *bdaddr);
-int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
-                                                               u8 *randomizer);
+                                         bdaddr_t *bdaddr);
+int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                           u8 *hash, u8 *randomizer);
+int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                               u8 *hash192, u8 *randomizer192,
+                               u8 *hash256, u8 *randomizer256);
 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr);
 
 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
index f13c0550f368703f612b05d8bbb94a203fe3326c..499ec1b1095daf8a6a63fef7c0adb9306c17b83a 100644 (file)
@@ -2794,15 +2794,14 @@ int hci_remote_oob_data_clear(struct hci_dev *hdev)
        return 0;
 }
 
-int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
-                           u8 *randomizer)
+int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                           u8 *hash, u8 *randomizer)
 {
        struct oob_data *data;
 
        data = hci_find_remote_oob_data(hdev, bdaddr);
-
        if (!data) {
-               data = kzalloc(sizeof(*data), GFP_ATOMIC);
+               data = kmalloc(sizeof(*data), GFP_ATOMIC);
                if (!data)
                        return -ENOMEM;
 
@@ -2813,6 +2812,36 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
        memcpy(data->hash192, hash, sizeof(data->hash192));
        memcpy(data->randomizer192, randomizer, sizeof(data->randomizer192));
 
+       memset(data->hash256, 0, sizeof(data->hash256));
+       memset(data->randomizer256, 0, sizeof(data->randomizer256));
+
+       BT_DBG("%s for %pMR", hdev->name, bdaddr);
+
+       return 0;
+}
+
+int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
+                               u8 *hash192, u8 *randomizer192,
+                               u8 *hash256, u8 *randomizer256)
+{
+       struct oob_data *data;
+
+       data = hci_find_remote_oob_data(hdev, bdaddr);
+       if (!data) {
+               data = kmalloc(sizeof(*data), GFP_ATOMIC);
+               if (!data)
+                       return -ENOMEM;
+
+               bacpy(&data->bdaddr, bdaddr);
+               list_add(&data->list, &hdev->remote_oob_data);
+       }
+
+       memcpy(data->hash192, hash192, sizeof(data->hash192));
+       memcpy(data->randomizer192, randomizer192, sizeof(data->randomizer192));
+
+       memcpy(data->hash256, hash256, sizeof(data->hash256));
+       memcpy(data->randomizer256, randomizer256, sizeof(data->randomizer256));
+
        BT_DBG("%s for %pMR", hdev->name, bdaddr);
 
        return 0;