[PATCH 65/92] NAN: Add the option to set the NIK and its lifetime
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Apr 22 05:23:56 PDT 2026
From: Avraham Stern <avraham.stern at intel.com>
Add the option to set the NIK and the NIK lifetime.
Signed-off-by: Avraham Stern <avraham.stern at intel.com>
---
src/nan/nan.h | 2 ++
src/nan/nan_pairing.c | 42 +++++++++++++++++++++++++++++++++
wpa_supplicant/nan_supplicant.c | 23 ++++++++++++++++++
3 files changed, 67 insertions(+)
diff --git a/src/nan/nan.h b/src/nan/nan.h
index 0a8629fad4..ab50545732 100644
--- a/src/nan/nan.h
+++ b/src/nan/nan.h
@@ -740,6 +740,8 @@ int nan_pairing_set_pairing_setup(struct nan_data *nan_data, bool value);
int nan_pairing_set_npk_caching(struct nan_data *nan_data, bool value);
int nan_pairing_set_pairing_verification(struct nan_data *nan_data, bool value);
int nan_pairing_set_cipher_suites(struct nan_data *nan_data, u32 value);
+int nan_pairing_set_nik(struct nan_data *nan, const u8 *nik, size_t nik_len);
+int nan_pairing_set_nik_lifetime(struct nan_data *nan, u32 lifetime);
bool nan_pairing_is_peer_paired(struct nan_data *nan_data, const u8 *peer_addr);
#else
static inline int nan_pairing_add_attrs(struct nan_data *nan_data,
diff --git a/src/nan/nan_pairing.c b/src/nan/nan_pairing.c
index 848b5ef928..0e2e87d039 100644
--- a/src/nan/nan_pairing.c
+++ b/src/nan/nan_pairing.c
@@ -1382,6 +1382,48 @@ int nan_pairing_set_cipher_suites(struct nan_data *nan, u32 value)
}
+int nan_pairing_set_nik(struct nan_data *nan, const u8 *nik, size_t nik_len)
+{
+ u8 nonce[NAN_NIRA_NONCE_LEN];
+ u8 tag[NAN_NIRA_TAG_LEN];
+
+ if (!nik || nik_len != NAN_NIK_LEN) {
+ wpa_printf(MSG_DEBUG, "NAN: Pairing: Invalid NIK (len=%zu)",
+ nik_len);
+ return -1;
+ }
+
+ if (nan->cfg->pairing_cfg.pairing_verification &&
+ nan_nira_get_tag_nonce(nan->cfg, nonce, tag) < 0) {
+ wpa_printf(MSG_DEBUG, "NAN: Failed to set NIRA for new NIK");
+ return -1;
+ }
+
+ os_memcpy(nan->cfg->nik, nik, NAN_NIK_LEN);
+ os_memcpy(nan->nira_nonce, nonce, NAN_NIRA_NONCE_LEN);
+ os_memcpy(nan->nira_tag, tag, NAN_NIRA_TAG_LEN);
+
+ wpa_hexdump_key(MSG_DEBUG, "NAN: new NIK", nan->cfg->nik, NAN_NIK_LEN);
+ return 0;
+}
+
+
+int nan_pairing_set_nik_lifetime(struct nan_data *nan, u32 lifetime)
+{
+ if (!lifetime) {
+ wpa_printf(MSG_DEBUG,
+ "NAN: Pairing: Invalid NIK lifetime (%u)",
+ lifetime);
+ return -1;
+ }
+
+ nan->cfg->nik_lifetime = lifetime;
+ wpa_printf(MSG_DEBUG, "NAN: SET: NIK lifetime: %u seconds",
+ lifetime);
+ return 0;
+}
+
+
bool nan_pairing_is_peer_paired(struct nan_data *nan_data, const u8 *peer_addr)
{
struct nan_peer *peer;
diff --git a/wpa_supplicant/nan_supplicant.c b/wpa_supplicant/nan_supplicant.c
index c58e18016e..1f7578ac45 100644
--- a/wpa_supplicant/nan_supplicant.c
+++ b/wpa_supplicant/nan_supplicant.c
@@ -1354,6 +1354,29 @@ int wpas_nan_set(struct wpa_supplicant *wpa_s, char *cmd)
#undef NAN_PARSE_PAIRING_BOOL
#undef NAN_PARSE_PAIRING_INT
+ if (os_strcmp("nik", cmd) == 0) {
+ u8 nik[NAN_NIK_LEN];
+
+ /* Parse NIK value (hex string) */
+ if (hexstr2bin(param, nik, NAN_NIK_LEN) < 0) {
+ wpa_printf(MSG_DEBUG, "NAN: Invalid NIK format");
+ return -1;
+ }
+
+ return nan_pairing_set_nik(wpa_s->nan, nik, NAN_NIK_LEN);
+ }
+
+ if (os_strcmp("nik_lifetime", cmd) == 0) {
+ u32 lifetime = atoi(param);
+
+ if (lifetime == 0) {
+ wpa_printf(MSG_DEBUG, "NAN: Invalid NIK lifetime");
+ return -1;
+ }
+
+ return nan_pairing_set_nik_lifetime(wpa_s->nan, lifetime);
+ }
+
wpa_printf(MSG_INFO, "NAN: Unknown NAN_SET cmd='%s'", cmd);
return -1;
}
--
2.53.0
More information about the Hostap
mailing list