[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