From 7ccf113f6ee086f52bd66a14fed21baf9cbefe8b Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 25 Feb 2015 14:08:42 +0200 Subject: [PATCH] core/device: Update storage if CSRK counter change This makes sure the counter is stored so once the device is loaded again it should contain the proper value. --- src/device.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/device.c b/src/device.c index 68b0d6180..78e314a17 100644 --- a/src/device.c +++ b/src/device.c @@ -345,6 +345,19 @@ static void update_technologies(GKeyFile *file, struct btd_device *dev) list, len); } +static void store_csrk(struct csrk_info *csrk, GKeyFile *key_file, + const char *group) +{ + char key[33]; + int i; + + for (i = 0; i < 16; i++) + sprintf(key + (i * 2), "%2.2X", csrk->key[i]); + + g_key_file_set_string(key_file, group, "Key", key); + g_key_file_set_integer(key_file, group, "Counter", csrk->counter); +} + static gboolean store_device_info_cb(gpointer user_data) { struct btd_device *device = user_data; @@ -423,6 +436,12 @@ static gboolean store_device_info_cb(gpointer user_data) g_key_file_remove_group(key_file, "DeviceID", NULL); } + if (device->local_csrk) + store_csrk(device->local_csrk, key_file, "LocalSignatureKey"); + + if (device->remote_csrk) + store_csrk(device->remote_csrk, key_file, "RemoteSignatureKey"); + create_file(filename, S_IRUSR | S_IWUSR); str = g_key_file_to_data(key_file, &length, NULL); @@ -4024,6 +4043,8 @@ static bool local_counter(uint32_t *sign_cnt, void *user_data) *sign_cnt = dev->local_csrk->counter++; + store_device_info(dev); + return true; } @@ -4036,6 +4057,8 @@ static bool remote_counter(uint32_t *sign_cnt, void *user_data) dev->remote_csrk->counter = *sign_cnt; + store_device_info(dev); + return true; } -- 2.47.3