[RFC PATCH 26/34] Add support to set keys of PASN authentication

Peddolla Harshavardhan Reddy peddolla at qti.qualcomm.com
Thu May 15 00:17:49 PDT 2025


Signed-off-by: Peddolla Harshavardhan Reddy <peddolla at qti.qualcomm.com>
---
 src/common/proximity_ranging.c | 19 +++++++++++++++++--
 src/common/proximity_ranging.h |  5 +++++
 wpa_supplicant/pr_supplicant.c | 29 +++++++++++++++++++++++++++++
 3 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/src/common/proximity_ranging.c b/src/common/proximity_ranging.c
index cc7e5115a..8a4abbfd4 100644
--- a/src/common/proximity_ranging.c
+++ b/src/common/proximity_ranging.c
@@ -2260,6 +2260,10 @@ static int pr_pasn_handle_auth_1(struct pr_data *pr, struct pr_device *dev,
 		goto fail;
 	}
 
+	if (pr->cfg->set_keys)
+		pr->cfg->set_keys(pr->cfg->cb_ctx, pr->cfg->dev_addr,
+				  dev->pr_device_addr, dev->pasn->cipher,
+				  dev->pasn->akmp, &dev->pasn->ptk);
 	ret = 0;
 
 fail:
@@ -2298,6 +2302,10 @@ static int pr_pasn_handle_auth_2(struct pr_data *pr, struct pr_device *dev,
 		goto fail;
 	}
 
+	if (pr->cfg->set_keys)
+		pr->cfg->set_keys(pr->cfg->cb_ctx, pr->cfg->dev_addr,
+				  dev->pr_device_addr, dev->pasn->cipher,
+				  dev->pasn->akmp, &dev->pasn->ptk);
 	ret = 0;
 
 fail:
@@ -2316,15 +2324,22 @@ static int pr_pasn_handle_auth_3(struct pr_data *pr, struct pr_device *dev,
 	if (pr_process_pasn_ranging_wrapper_result(pr, dev, mgmt, len)) {
 		wpa_printf(MSG_ERROR,
 			   "PR PASN: Handle Auth3 action wrapper failed");
-		return -1;
+		goto fail;
 	}
 
 	if (handle_auth_pasn_3(dev->pasn, pr->cfg->dev_addr, mgmt->sa, mgmt,
 			       len) < 0) {
 		wpa_printf(MSG_ERROR, "PR PASN: Handle Auth3 failed");
-		return -1;
+		goto fail;
 	}
 	return 0;
+fail:
+
+	/* Clear the keys as M3 processing failed */
+	if (pr->cfg->clear_keys)
+		pr->cfg->clear_keys(pr->cfg->cb_ctx, pr->cfg->dev_addr,
+				    dev->pr_device_addr);
+	return -1;
 }
 
 
diff --git a/src/common/proximity_ranging.h b/src/common/proximity_ranging.h
index 92bf56f6e..f0c6387a7 100644
--- a/src/common/proximity_ranging.h
+++ b/src/common/proximity_ranging.h
@@ -360,6 +360,11 @@ struct pr_config {
 	int (*pasn_send_mgmt)(void *ctx, const u8 *data, size_t data_len,
 			      int noack, unsigned int freq, unsigned int wait);
 
+
+	void (*set_keys)(void *ctx, const u8 *own_addr, const u8 *peer_addr,
+			 int cipher, int akmp, struct wpa_ptk *ptk);
+
+	void (*clear_keys)(void *ctx, const u8 *own_addr, const u8 *peer_addr);
 };
 
 struct pr_data {
diff --git a/wpa_supplicant/pr_supplicant.c b/wpa_supplicant/pr_supplicant.c
index e9f0e7ef7..f0ddb5fcc 100644
--- a/wpa_supplicant/pr_supplicant.c
+++ b/wpa_supplicant/pr_supplicant.c
@@ -85,6 +85,33 @@ static int wpas_pr_pasn_send_mgmt(void *ctx, const u8 *data, size_t data_len,
 }
 
 
+static void wpas_pr_pasn_set_keys(void *ctx, const u8 *own_addr,
+				  const u8 *peer_addr, int cipher, int akmp,
+				  struct wpa_ptk *ptk)
+{
+	struct wpa_supplicant *wpa_s = ctx;
+
+	wpa_printf(MSG_DEBUG, "PASN: set secure ranging context for " MACSTR,
+		   MAC2STR(peer_addr));
+	wpa_drv_set_secure_ranging_ctx(wpa_s, own_addr, peer_addr, cipher,
+				       ptk->tk_len, ptk->tk,
+				       ptk->ltf_keyseed_len,
+				       ptk->ltf_keyseed, 0);
+}
+
+
+static void wpas_pr_pasn_clear_keys(void *ctx, const u8 *own_addr,
+				    const u8 *peer_addr)
+{
+	struct wpa_supplicant *wpa_s = ctx;
+
+	wpa_printf(MSG_DEBUG, "PASN: clear secure ranging context for " MACSTR,
+		   MAC2STR(peer_addr));
+	wpa_drv_set_secure_ranging_ctx(wpa_s, own_addr, peer_addr, 0, 0, NULL,
+				       0, NULL, 1);
+}
+
+
 struct wpabuf * wpas_pr_usd_elems(struct wpa_supplicant *wpa_s)
 {
 	return pr_prepare_usd_elems(wpa_s->global->pr, wpa_s->conf->country);
@@ -144,6 +171,8 @@ int wpas_pr_init(struct wpa_global *global, struct wpa_supplicant *wpa_s)
 	pr.support_6ghz = false;
 
 	pr.pasn_send_mgmt = wpas_pr_pasn_send_mgmt;
+	pr.set_keys = wpas_pr_pasn_set_keys;
+	pr.clear_keys = wpas_pr_pasn_clear_keys;
 
 	pr.secure_he_ltf = wpa_s->drv_flags2 & WPA_DRIVER_FLAGS2_SEC_LTF_STA;
 
-- 
2.34.1




More information about the Hostap mailing list