mirror of
https://github.com/espressif/esp-idf.git
synced 2025-11-27 21:15:37 +00:00
esp_wifi: Support for additional WPA3 testcases
1. Anti-Clogging Token Request support 2. Return correct status from SAE modules for invalid scenarios 3. Add PMK Caching support for WPA3
This commit is contained in:
@@ -399,12 +399,9 @@ static int wpa_supplicant_get_pmk(struct wpa_sm *sm,
|
||||
if (sm->proto == WPA_PROTO_RSN &&
|
||||
!wpa_key_mgmt_suite_b(sm->key_mgmt) &&
|
||||
!wpa_key_mgmt_ft(sm->key_mgmt)) {
|
||||
sa = pmksa_cache_add(sm->pmksa,
|
||||
sm->pmk, pmk_len,
|
||||
NULL, 0,
|
||||
src_addr, sm->own_addr,
|
||||
sm->network_ctx,
|
||||
sm->key_mgmt);
|
||||
sa = pmksa_cache_add(sm->pmksa, sm->pmk, pmk_len,
|
||||
NULL, NULL, 0, src_addr, sm->own_addr,
|
||||
sm->network_ctx, sm->key_mgmt);
|
||||
}
|
||||
if (!sm->cur_pmksa && pmkid &&
|
||||
pmksa_cache_get(sm->pmksa, src_addr, pmkid, NULL))
|
||||
@@ -590,8 +587,8 @@ void wpa_supplicant_process_1_of_4(struct wpa_sm *sm,
|
||||
if (res)
|
||||
goto failed;
|
||||
|
||||
if (esp_wifi_sta_prof_is_wpa2_internal()
|
||||
&& esp_wifi_sta_get_prof_authmode_internal() == WPA2_AUTH_ENT) {
|
||||
if (esp_wifi_sta_prof_is_wpa2_internal() &&
|
||||
esp_wifi_sta_get_prof_authmode_internal() == WPA2_AUTH_ENT) {
|
||||
pmksa_cache_set_current(sm, NULL, sm->bssid, 0, 0);
|
||||
}
|
||||
|
||||
@@ -1991,7 +1988,7 @@ void wpa_sm_set_state(enum wpa_states state)
|
||||
* Configure the PMK for WPA state machine.
|
||||
*/
|
||||
void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len,
|
||||
const u8 *bssid)
|
||||
const u8 *pmkid, const u8 *bssid)
|
||||
{
|
||||
if (sm == NULL)
|
||||
return;
|
||||
@@ -2006,9 +2003,9 @@ void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len,
|
||||
#endif /* CONFIG_IEEE80211R */
|
||||
|
||||
if (bssid) {
|
||||
pmksa_cache_add(sm->pmksa, pmk, pmk_len, NULL, 0,
|
||||
bssid, sm->own_addr,
|
||||
sm->network_ctx, sm->key_mgmt);
|
||||
pmksa_cache_add(sm->pmksa, pmk, pmk_len, pmkid, NULL, 0,
|
||||
bssid, sm->own_addr,
|
||||
sm->network_ctx, sm->key_mgmt);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2090,12 +2087,18 @@ void wpa_set_profile(u32 wpa_proto, u8 auth_mode)
|
||||
}
|
||||
}
|
||||
|
||||
void wpa_set_pmk(uint8_t *pmk)
|
||||
void wpa_set_pmk(uint8_t *pmk, const u8 *pmkid, bool cache_pmksa)
|
||||
{
|
||||
struct wpa_sm *sm = &gWpaSm;
|
||||
|
||||
memcpy(sm->pmk, pmk, PMK_LEN);
|
||||
sm->pmk_len = PMK_LEN;
|
||||
|
||||
if (cache_pmksa) {
|
||||
pmksa_cache_add(sm->pmksa, pmk, PMK_LEN, pmkid, NULL, 0,
|
||||
sm->bssid, sm->own_addr,
|
||||
sm->network_ctx, sm->key_mgmt);
|
||||
}
|
||||
}
|
||||
|
||||
int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher, char *passphrase, u8 *ssid, size_t ssid_len)
|
||||
@@ -2112,9 +2115,10 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
||||
memcpy(sm->own_addr, macddr, ETH_ALEN);
|
||||
memcpy(sm->bssid, bssid, ETH_ALEN);
|
||||
sm->ap_notify_completed_rsne = esp_wifi_sta_is_ap_notify_completed_rsne_internal();
|
||||
|
||||
if (esp_wifi_sta_prof_is_wpa2_internal()
|
||||
&& esp_wifi_sta_get_prof_authmode_internal() == WPA2_AUTH_ENT) {
|
||||
|
||||
if (sm->key_mgmt == WPA_KEY_MGMT_SAE ||
|
||||
(esp_wifi_sta_prof_is_wpa2_internal() &&
|
||||
esp_wifi_sta_get_prof_authmode_internal() == WPA2_AUTH_ENT)) {
|
||||
pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0);
|
||||
wpa_sm_set_pmk_from_pmksa(sm);
|
||||
}
|
||||
@@ -2153,7 +2157,7 @@ wpa_set_passphrase(char * passphrase, u8 *ssid, size_t ssid_len)
|
||||
* PMK.
|
||||
*/
|
||||
if (sm->key_mgmt == WPA_KEY_MGMT_SAE)
|
||||
return;
|
||||
return;
|
||||
|
||||
/* This is really SLOW, so just re cacl while reset param */
|
||||
if (esp_wifi_sta_get_reset_param_internal() != 0) {
|
||||
@@ -2358,5 +2362,13 @@ bool wpa_sta_is_cur_pmksa_set(void) {
|
||||
return (pmksa_cache_get_current(sm) != NULL);
|
||||
}
|
||||
|
||||
void wpa_sta_clear_curr_pmksa(void) {
|
||||
struct wpa_sm *sm = &gWpaSm;
|
||||
|
||||
if (sm->pmksa)
|
||||
pmksa_cache_flush(sm->pmksa, NULL, sm->pmk, sm->pmk_len);
|
||||
pmksa_cache_clear_current(sm);
|
||||
}
|
||||
|
||||
#endif // ESP_SUPPLICANT
|
||||
|
||||
|
||||
Reference in New Issue
Block a user