[PATCH 45/92] NAN: Don't derive NPK and send NIK when pairing verification is complete
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Apr 22 05:23:36 PDT 2026
From: Avraham Stern <avraham.stern at intel.com>
When pairing verification is performed, there is no need to derive a
NPK since the NPK already exists. In addition, there is no need to
send the NIK to the peer since NIKs were already exchanged after the
original pairing.
Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
src/nan/nan_i.h | 6 ++++++
src/nan/nan_pairing.c | 8 +++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/nan/nan_i.h b/src/nan/nan_i.h
index 926eea2a9f..eedf6c2389 100644
--- a/src/nan/nan_i.h
+++ b/src/nan/nan_i.h
@@ -470,6 +470,10 @@ enum nan_pairing_role {
NAN_PAIRING_ROLE_RESPONDER,
};
+
+/* Current pairing uses pairing verification */
+#define NAN_PAIRING_FLAG_NPK_VERIFICATION BIT(0)
+
/**
* struct nan_pairing_peer_data - NAN pairing peer information
*
@@ -481,6 +485,7 @@ enum nan_pairing_role {
* @nonce_tag_valid: Indicates if the nonce and tag fields are valid
* @nonce: Nonce from peer's NIRA attribute
* @tag: Tag from peer's NIRA attribute
+ * @flags: Bitmap of pairing flags. See NAN_PAIRING_FLAG_*
*/
struct nan_pairing_peer_data {
struct nan_pairing_cfg pairing_cfg;
@@ -491,6 +496,7 @@ struct nan_pairing_peer_data {
bool nonce_tag_valid;
u8 nonce[NAN_NIRA_NONCE_LEN];
u8 tag[NAN_NIRA_TAG_LEN];
+ u32 flags;
};
/**
diff --git a/src/nan/nan_pairing.c b/src/nan/nan_pairing.c
index 1c0d2e0ffb..b4c8fafd67 100644
--- a/src/nan/nan_pairing.c
+++ b/src/nan/nan_pairing.c
@@ -543,11 +543,13 @@ int nan_pairing_initiate_pasn_auth(struct nan_data *nan_data, const u8 *addr,
peer->pairing.handle = handle;
peer->pairing.peer_instance_id = peer_instance_id;
+ peer->pairing.flags = 0;
if (responder)
return 0;
if (auth_mode == NAN_PASN_AUTH_MODE_PMK) {
+ peer->pairing.flags |= NAN_PAIRING_FLAG_NPK_VERIFICATION;
ret = wpa_pasn_verify(pasn, pasn->own_addr, pasn->peer_addr,
pasn->bssid, pasn->akmp, pasn->cipher,
pasn->group, 0, NULL, 0, NULL, 0, NULL);
@@ -586,7 +588,8 @@ static void nan_pairing_done(struct nan_data *nan_data, struct nan_peer *peer)
int ret;
if (!nan_data->cfg->pairing_cfg.npk_caching ||
- !peer->pairing.pairing_cfg.npk_caching)
+ !peer->pairing.pairing_cfg.npk_caching ||
+ peer->pairing.flags & NAN_PAIRING_FLAG_NPK_VERIFICATION)
return;
wpa_printf(MSG_DEBUG, "NAN: Pairing: Derive KEK after PASN pairing");
@@ -710,6 +713,9 @@ static int nan_send_nik(struct nan_data *nan_data, struct nan_peer *peer)
return 0;
}
+ if (peer->pairing.flags & NAN_PAIRING_FLAG_NPK_VERIFICATION)
+ return 0;
+
if (!peer->pairing.pasn || !peer->pairing.pasn->ptk.kek_len) {
wpa_printf(MSG_DEBUG,
"NAN: Pairing: KEK not available for NIK encryption");
--
2.53.0
More information about the Hostap
mailing list