89 lines
2.8 KiB
Diff
89 lines
2.8 KiB
Diff
From 417097c87d7027ad319d7e8c9931deb666779533 Mon Sep 17 00:00:00 2001
|
|
From: Chung-Hsien Hsu <stanley.hsu@cypress.com>
|
|
Date: Tue, 29 Oct 2019 17:22:18 +0800
|
|
Subject: [PATCH 07/49] SAE: Pass SAE password on connect for SAE
|
|
authentication offload support
|
|
|
|
Pass SAE password on connect if driver advertises SAE authentication
|
|
offload support.
|
|
|
|
Signed-off-by: Chung-Hsien Hsu <chung-hsien.hsu@infineon.com>
|
|
---
|
|
src/drivers/driver.h | 8 ++++++++
|
|
src/drivers/driver_nl80211.c | 26 ++++++++++++++++++++++++--
|
|
2 files changed, 32 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
|
|
index c563317d1..7cfa92ed8 100644
|
|
--- a/src/drivers/driver.h
|
|
+++ b/src/drivers/driver.h
|
|
@@ -1014,6 +1014,14 @@ struct wpa_driver_associate_params {
|
|
*/
|
|
const u8 *psk;
|
|
|
|
+ /**
|
|
+ * sae_password - Password for SAE authentication
|
|
+ *
|
|
+ * This value is made available only for WPA3-Personal (SAE) and only
|
|
+ * for drivers that set WPA_DRIVER_FLAGS2_SAE_OFFLOAD.
|
|
+ */
|
|
+ const char *sae_password;
|
|
+
|
|
/**
|
|
* drop_unencrypted - Enable/disable unencrypted frame filtering
|
|
*
|
|
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
|
|
index aec179ac3..91e8d44d8 100644
|
|
--- a/src/drivers/driver_nl80211.c
|
|
+++ b/src/drivers/driver_nl80211.c
|
|
@@ -6173,8 +6173,12 @@ static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv,
|
|
|
|
if (params->wpa_proto & WPA_PROTO_WPA)
|
|
ver |= NL80211_WPA_VERSION_1;
|
|
- if (params->wpa_proto & WPA_PROTO_RSN)
|
|
- ver |= NL80211_WPA_VERSION_2;
|
|
+ if (params->wpa_proto & WPA_PROTO_RSN) {
|
|
+ if (params->key_mgmt_suite == WPA_KEY_MGMT_SAE)
|
|
+ ver |= NL80211_WPA_VERSION_3;
|
|
+ else
|
|
+ ver |= NL80211_WPA_VERSION_2;
|
|
+ }
|
|
|
|
wpa_printf(MSG_DEBUG, " * WPA Versions 0x%x", ver);
|
|
if (nla_put_u32(msg, NL80211_ATTR_WPA_VERSIONS, ver))
|
|
@@ -6304,6 +6308,22 @@ static int nl80211_connect_common(struct wpa_driver_nl80211_data *drv,
|
|
return -1;
|
|
}
|
|
|
|
+ /* add SAE password in case of SAE authentication offload */
|
|
+ if ((params->sae_password || params->passphrase) &&
|
|
+ (drv->capa.flags2 & WPA_DRIVER_FLAGS2_SAE_OFFLOAD)) {
|
|
+ const char *password;
|
|
+ size_t pwd_len;
|
|
+
|
|
+ password = params->sae_password;
|
|
+ if (!password)
|
|
+ password = params->passphrase;
|
|
+ pwd_len = os_strlen(password);
|
|
+ wpa_hexdump_ascii_key(MSG_DEBUG, " * SAE password",
|
|
+ (u8 *) password, pwd_len);
|
|
+ if (nla_put(msg, NL80211_ATTR_SAE_PASSWORD, pwd_len, password))
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
if (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT))
|
|
return -1;
|
|
|
|
@@ -6419,6 +6439,8 @@ static int wpa_driver_nl80211_try_connect(
|
|
algs++;
|
|
if (params->auth_alg & WPA_AUTH_ALG_FT)
|
|
algs++;
|
|
+ if (params->auth_alg & WPA_AUTH_ALG_SAE)
|
|
+ algs++;
|
|
if (algs > 1) {
|
|
wpa_printf(MSG_DEBUG, " * Leave out Auth Type for automatic "
|
|
"selection");
|
|
--
|
|
2.17.1
|
|
|