[PATCH 49/58] NAN: Add an API to retrieve TK
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Thu Feb 19 12:25:05 PST 2026
From: Ilan Peer <ilan.peer at intel.com>
Add an API that would allow to retrieve the TK
for a given peer NMI, peer NDI and local NDI.
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
src/nan/nan.c | 18 ++++++++++++++++++
src/nan/nan.h | 4 ++++
src/nan/nan_i.h | 5 ++++-
src/nan/nan_sec.c | 24 ++++++++++++++++++++++++
4 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/src/nan/nan.c b/src/nan/nan.c
index f6582571e1..3e106597da 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -1703,3 +1703,21 @@ int nan_peer_get_device_capabilities(struct nan_data *nan, const u8 *addr,
return -1;
}
+
+
+int nan_peer_get_tk(struct nan_data *nan, const u8 *addr,
+ const u8 *peer_ndi, const u8 *local_ndi,
+ u8 *tk, size_t *tk_len,
+ enum nan_cipher_suite_id *csid)
+{
+ struct nan_peer *peer;
+
+ if (!nan || !tk || !tk_len || !csid)
+ return -1;
+
+ peer = nan_get_peer(nan, addr);
+ if (!peer)
+ return -1;
+
+ return nan_sec_get_tk(nan, peer, peer_ndi, local_ndi, tk, tk_len, csid);
+}
diff --git a/src/nan/nan.h b/src/nan/nan.h
index 551997e808..4957687ced 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -453,4 +453,8 @@ int nan_handle_ndp_setup(struct nan_data *nan, struct nan_ndp_params *params);
int nan_peer_get_device_capabilities(struct nan_data *nan, const u8 *addr,
u8 map_id,
struct nan_device_capabilities *capa);
+int nan_peer_get_tk(struct nan_data *nan, const u8 *addr,
+ const u8 *peer_ndi, const u8 *local_ndi,
+ u8 *tk, size_t *tk_len,
+ enum nan_cipher_suite_id *csid);
#endif /* NAN_H */
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index 2477564322..a53d3ac1dc 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -622,5 +622,8 @@ int nan_sec_pre_tx(struct nan_data *nan, struct nan_peer *peer,
struct wpabuf *buf);
bool nan_sec_ndp_store_keys(struct nan_data *nan, struct nan_peer *peer,
const u8 *peer_ndi, const u8 *local_ndi);
-
+int nan_sec_get_tk(struct nan_data *nan, struct nan_peer *peer,
+ const u8 *peer_ndi, const u8 *local_ndi,
+ u8 *tk, size_t *tk_len,
+ enum nan_cipher_suite_id *csid);
#endif /* NAN_I_H */
diff --git a/src/nan/nan_sec.c b/src/nan/nan_sec.c
index 08d9852f2f..01541fa419 100644
--- a/src/nan/nan_sec.c
+++ b/src/nan/nan_sec.c
@@ -1209,3 +1209,27 @@ store:
return true;
}
+
+
+int nan_sec_get_tk(struct nan_data *nan, struct nan_peer *peer,
+ const u8 *peer_ndi, const u8 *local_ndi,
+ u8 *tk, size_t *tk_len,
+ enum nan_cipher_suite_id *csid)
+{
+ struct nan_peer_sec_info_entry *cur;
+
+ dl_list_for_each(cur, &peer->info.sec,
+ struct nan_peer_sec_info_entry, list) {
+
+ if (os_memcmp(peer_ndi, cur->peer_ndi, ETH_ALEN) != 0 ||
+ os_memcmp(local_ndi, cur->local_ndi, ETH_ALEN) != 0)
+ continue;
+
+ os_memcpy(tk, &cur->ptk.tk, cur->ptk.tk_len);
+ *tk_len = cur->ptk.tk_len;
+ *csid = cur->csid;
+ return 0;
+ }
+
+ return -1;
+}
--
2.52.0
More information about the Hostap
mailing list