Diff between 2719bb5aaf6df77edb4bf7c2654c178836300c73 and 011e562a98a8b8c278391bc64d9dc2c8df0a5585

Changed Files

File Additions Deletions Status
monitor/keys.c +26 -0 modified
monitor/keys.h +2 -0 modified
monitor/packet.c +1 -0 modified

Full Patch

diff --git a/monitor/keys.c b/monitor/keys.c
index d2fa3b2..c1eebae 100644
--- a/monitor/keys.c
+++ b/monitor/keys.c
@@ -112,3 +112,29 @@ bool keys_resolve_identity(const uint8_t addr[6], uint8_t ident[6],
 
 	return false;
 }
+
+static bool match_key(const void *data, const void *match_data)
+{
+	const struct irk_data *irk = data;
+	const uint8_t *key = match_data;
+
+	return !memcmp(irk->key, key, 16);
+}
+
+bool keys_add_identity(const uint8_t addr[6], uint8_t addr_type,
+					const uint8_t key[16])
+{
+	struct irk_data *irk;
+
+	irk = queue_find(irk_list, match_key, key);
+	if (!irk) {
+		irk = new0(struct irk_data, 1);
+		memcpy(irk->key, key, 16);
+		queue_push_tail(irk_list, irk);
+	}
+
+	memcpy(irk->addr, addr, 6);
+	irk->addr_type = addr_type;
+
+	return true;
+}
diff --git a/monitor/keys.h b/monitor/keys.h
index e40c90f..f44d332 100644
--- a/monitor/keys.h
+++ b/monitor/keys.h
@@ -20,3 +20,5 @@ void keys_update_identity_addr(const uint8_t addr[6], uint8_t addr_type);
 
 bool keys_resolve_identity(const uint8_t addr[6], uint8_t ident[6],
 							uint8_t *ident_type);
+bool keys_add_identity(const uint8_t addr[6], uint8_t addr_type,
+					const uint8_t key[16]);
diff --git a/monitor/packet.c b/monitor/packet.c
index d9e8abf..c6ff16e 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -12870,6 +12870,7 @@ static void mgmt_print_identity_resolving_key(const void *data)
 
 	mgmt_print_address(data, address_type);
 	print_hex_field("Key", data + 7, 16);
+	keys_add_identity(data, address_type, data + 7);
 }
 
 static void mgmt_print_signature_resolving_key(const void *data)