wifi: implement enable SAE PK only mode API
Bug: 160642415
Test: atest VtsHalWifiSupplicantV1_4TargetTest
Change-Id: Ib03279145212cb88bed860ade503fd2df6796fff
diff --git a/wpa_supplicant/android.config b/wpa_supplicant/android.config
index 5f8c8f6..b11e371 100644
--- a/wpa_supplicant/android.config
+++ b/wpa_supplicant/android.config
@@ -556,4 +556,7 @@
# be completely removed in a future release.
CONFIG_WEP=y
+# WPA3-Personal (SAE) PK (Public Key) mode
+CONFIG_SAE_PK=y
+
include $(wildcard $(LOCAL_PATH)/android_config_*.inc)
diff --git a/wpa_supplicant/hidl/1.4/sta_iface.cpp b/wpa_supplicant/hidl/1.4/sta_iface.cpp
index 40ec870..7ba9cd8 100644
--- a/wpa_supplicant/hidl/1.4/sta_iface.cpp
+++ b/wpa_supplicant/hidl/1.4/sta_iface.cpp
@@ -683,6 +683,14 @@
&StaIface::getWpaDriverCapabilitiesInternal, _hidl_cb);
}
+Return<void> StaIface::getWpaDriverCapabilities_1_4(
+ getWpaDriverCapabilities_1_4_cb _hidl_cb)
+{
+ return validateAndCall(
+ this, V1_4::SupplicantStatusCode::FAILURE_UNKNOWN,
+ &StaIface::getWpaDriverCapabilitiesInternal_1_4, _hidl_cb);
+}
+
Return<void> StaIface::setMboCellularDataStatus(bool available,
setMboCellularDataStatus_cb _hidl_cb)
{
@@ -1513,6 +1521,12 @@
std::pair<SupplicantStatus, uint32_t>
StaIface::getWpaDriverCapabilitiesInternal()
{
+ return {{SupplicantStatusCode::FAILURE_UNKNOWN, "deprecated"}, 0};
+}
+
+std::pair<V1_4::SupplicantStatus, uint32_t>
+StaIface::getWpaDriverCapabilitiesInternal_1_4()
+{
struct wpa_supplicant *wpa_s = retrieveIfacePtr();
uint32_t mask = 0;
@@ -1526,10 +1540,13 @@
mask |= V1_3::WpaDriverCapabilitiesMask::OCE;
}
#endif
+#ifdef CONFIG_SAE_PK
+ mask |= V1_4::WpaDriverCapabilitiesMask::SAE_PK;
+#endif
wpa_printf(MSG_DEBUG, "Driver capability mask: 0x%x", mask);
- return {{SupplicantStatusCode::SUCCESS, ""}, mask};
+ return {{V1_4::SupplicantStatusCode::SUCCESS, ""}, mask};
}
SupplicantStatus StaIface::setMboCellularDataStatusInternal(bool available)
diff --git a/wpa_supplicant/hidl/1.4/sta_iface.h b/wpa_supplicant/hidl/1.4/sta_iface.h
index b6590d3..bf20b28 100644
--- a/wpa_supplicant/hidl/1.4/sta_iface.h
+++ b/wpa_supplicant/hidl/1.4/sta_iface.h
@@ -200,6 +200,8 @@
setMboCellularDataStatus_cb _hidl_cb) override;
Return<void> getKeyMgmtCapabilities_1_3(
getKeyMgmtCapabilities_1_3_cb _hidl_cb) override;
+ Return<void> getWpaDriverCapabilities_1_4(
+ getWpaDriverCapabilities_1_4_cb _hidl_cb) override;
private:
// Corresponding worker functions for the HIDL methods.
@@ -295,6 +297,7 @@
std::pair<SupplicantStatus, uint32_t> getWpaDriverCapabilitiesInternal();
SupplicantStatus setMboCellularDataStatusInternal(bool available);
std::pair<SupplicantStatus, uint32_t> getKeyMgmtCapabilitiesInternal_1_3();
+ std::pair<V1_4::SupplicantStatus, uint32_t> getWpaDriverCapabilitiesInternal_1_4();
struct wpa_supplicant* retrieveIfacePtr();
diff --git a/wpa_supplicant/hidl/1.4/sta_network.cpp b/wpa_supplicant/hidl/1.4/sta_network.cpp
index d62fdae..6d53282 100644
--- a/wpa_supplicant/hidl/1.4/sta_network.cpp
+++ b/wpa_supplicant/hidl/1.4/sta_network.cpp
@@ -997,6 +997,13 @@
&StaNetwork::enableSaeH2eOnlyModeInternal, _hidl_cb, enable);
}
+Return<void> StaNetwork::enableSaePkOnlyMode(bool enable, enableSaePkOnlyMode_cb _hidl_cb)
+{
+ return validateAndCall(
+ this, V1_4::SupplicantStatusCode::FAILURE_NETWORK_INVALID,
+ &StaNetwork::enableSaePkOnlyModeInternal, _hidl_cb, enable);
+}
+
std::pair<SupplicantStatus, uint32_t> StaNetwork::getIdInternal()
{
return {{SupplicantStatusCode::SUCCESS, ""}, network_id_};
@@ -2616,6 +2623,18 @@
return {V1_4::SupplicantStatusCode::SUCCESS, ""};
}
+V1_4::SupplicantStatus StaNetwork::enableSaePkOnlyModeInternal(bool enable)
+{
+#ifdef CONFIG_SAE_PK
+ struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
+ wpa_ssid->sae_pk = enable ? SAE_PK_MODE_ONLY : SAE_PK_MODE_AUTOMATIC;
+ resetInternalStateAfterParamsUpdate();
+ return {V1_4::SupplicantStatusCode::SUCCESS, ""};
+#else
+ return {V1_4::SupplicantStatusCode::FAILURE_UNSUPPORTED, ""};
+#endif
+}
+
} // namespace implementation
} // namespace V1_4
} // namespace supplicant
diff --git a/wpa_supplicant/hidl/1.4/sta_network.h b/wpa_supplicant/hidl/1.4/sta_network.h
index b00f8e5..48bf77b 100644
--- a/wpa_supplicant/hidl/1.4/sta_network.h
+++ b/wpa_supplicant/hidl/1.4/sta_network.h
@@ -272,6 +272,7 @@
Return<void> getGroupCipher_1_4(
getGroupCipher_1_4_cb _hidl_cb) override;
Return<void> enableSaeH2eOnlyMode(bool enable, enableSaeH2eOnlyMode_cb _hidl_cb) override;
+ Return<void> enableSaePkOnlyMode(bool enable, enableSaePkOnlyMode_cb _hidl_cb) override;
private:
// Corresponding worker functions for the HIDL methods.
@@ -414,6 +415,7 @@
V1_4::SupplicantStatus setPairwiseCipher_1_4Internal(
uint32_t pairwise_cipher_mask);
V1_4::SupplicantStatus enableSaeH2eOnlyModeInternal(bool enable);
+ V1_4::SupplicantStatus enableSaePkOnlyModeInternal(bool enable);
struct wpa_ssid* retrieveNetworkPtr();
struct wpa_supplicant* retrieveIfacePtr();