[PATCH BlueZ 03/11] Add storage functions to handle SMP keys
From: Vinicius Costa Gomes <hidden>
Date: 2012-01-17 23:28:42
Subsystem:
the rest · Maintainer:
Linus Torvalds
For now, only the Long Term Key (LTK) is stored. --- src/storage.c | 32 ++++++++++++++++++++++++++++++++ src/storage.h | 2 ++ 2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/src/storage.c b/src/storage.c
index a47720a..960eeb5 100644
--- a/src/storage.c
+++ b/src/storage.c@@ -1310,3 +1310,35 @@ void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer) create_filename(filename, PATH_MAX, local, "ccc"); delete_by_pattern(filename, addr); } + +int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, const char *key) +{ + char filename[PATH_MAX + 1], addr[18]; + + if (!key) + return -EINVAL; + + create_filename(filename, PATH_MAX, local, "longtermkeys"); + + create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + + ba2str(peer, addr); + return textfile_put(filename, addr, key); +} + +gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer) +{ + char filename[PATH_MAX + 1], addr[18], *str; + + create_filename(filename, PATH_MAX, local, "longtermkeys"); + + ba2str(peer, addr); + + str = textfile_caseget(filename, addr); + if (str) { + free(str); + return TRUE; + } + + return FALSE; +}
diff --git a/src/storage.h b/src/storage.h
index 51259f6..604cc49 100644
--- a/src/storage.h
+++ b/src/storage.h@@ -88,6 +88,8 @@ int read_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint16_t handle, int write_device_ccc(bdaddr_t *local, bdaddr_t *peer, uint16_t handle, uint16_t value); void delete_device_ccc(bdaddr_t *local, bdaddr_t *peer); +int write_longtermkeys(bdaddr_t *local, bdaddr_t *peer, const char *key); +gboolean has_longtermkeys(bdaddr_t *local, bdaddr_t *peer); #define PNP_UUID "00001200-0000-1000-8000-00805f9b34fb"
--
1.7.8.1