[RFC 47/56] NAN: Add an API to retrieve TK
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Sun Dec 7 03:18:56 PST 2025
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 | 4 ++++
src/nan/nan_sec.c | 24 ++++++++++++++++++++++++
4 files changed, 50 insertions(+)
diff --git a/src/nan/nan.c b/src/nan/nan.c
index 6cd6c4c595..eac97004a0 100644
--- a/src/nan/nan.c
+++ b/src/nan/nan.c
@@ -1697,3 +1697,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 15da8a5d36..4b8cc437c2 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -451,4 +451,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 2ed7a92e2f..87c46a4d0d 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -594,4 +594,8 @@ int nan_sec_pre_tx(struct nan_data *nan, struct nan_peer *peer,
void 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
diff --git a/src/nan/nan_sec.c b/src/nan/nan_sec.c
index cbd74cfe79..a22757623b 100644
--- a/src/nan/nan_sec.c
+++ b/src/nan/nan_sec.c
@@ -1180,3 +1180,27 @@ store:
os_memcpy(cur->pmk, ndp_sec->pmk, PMK_LEN);
os_memcpy(&cur->ptk, &ndp_sec->ptk, sizeof(cur->ptk));
}
+
+
+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.49.0
More information about the Hostap
mailing list