Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/common/defs.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,14 @@
#define WPA_KEY_MGMT_SAE_EXT_KEY BIT(26)
#define WPA_KEY_MGMT_FT_SAE_EXT_KEY BIT(27)
#define WPA_KEY_MGMT_IEEE8021X_SHA384 BIT(28)
#define WPA_KEY_MGMT_FT_PSK_SHA384 BIT(29)
#define WPA_KEY_MGMT_PSK_SHA384 BIT(30)


#define WPA_KEY_MGMT_FT (WPA_KEY_MGMT_FT_PSK | \
WPA_KEY_MGMT_FT_IEEE8021X | \
WPA_KEY_MGMT_FT_IEEE8021X_SHA384 | \
WPA_KEY_MGMT_FT_PSK_SHA384 | \
WPA_KEY_MGMT_FT_SAE | \
Comment on lines 55 to 64
WPA_KEY_MGMT_FT_SAE_EXT_KEY | \
WPA_KEY_MGMT_FT_FILS_SHA256 | \
Expand All @@ -84,14 +87,18 @@ static inline int wpa_key_mgmt_wpa_psk_no_sae(int akm)
{
return !!(akm & (WPA_KEY_MGMT_PSK |
WPA_KEY_MGMT_FT_PSK |
WPA_KEY_MGMT_PSK_SHA256));
WPA_KEY_MGMT_PSK_SHA256 |
WPA_KEY_MGMT_PSK_SHA384 |
WPA_KEY_MGMT_FT_PSK_SHA384));
}

static inline int wpa_key_mgmt_wpa_psk(int akm)
{
return !!(akm & (WPA_KEY_MGMT_PSK |
WPA_KEY_MGMT_FT_PSK |
WPA_KEY_MGMT_PSK_SHA256 |
WPA_KEY_MGMT_PSK_SHA384 |
WPA_KEY_MGMT_FT_PSK_SHA384 |
WPA_KEY_MGMT_SAE |
WPA_KEY_MGMT_SAE_EXT_KEY |
WPA_KEY_MGMT_FT_SAE |
Expand Down
8 changes: 8 additions & 0 deletions src/common/wpa_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -1776,13 +1776,17 @@ static int rsn_key_mgmt_to_bitfield(const u8 *s)
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_PSK)
return WPA_KEY_MGMT_FT_PSK;
#ifdef CONFIG_SHA384
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_PSK_SHA384)
return WPA_KEY_MGMT_FT_PSK_SHA384;
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_FT_802_1X_SHA384)
return WPA_KEY_MGMT_FT_IEEE8021X_SHA384;
#endif /* CONFIG_SHA384 */
#endif /* CONFIG_IEEE80211R */
#ifdef CONFIG_SHA384
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SHA384)
return WPA_KEY_MGMT_IEEE8021X_SHA384;
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_PSK_SHA384)
return WPA_KEY_MGMT_PSK_SHA384;
#endif /* CONFIG_SHA384 */
if (RSN_SELECTOR_GET(s) == RSN_AUTH_KEY_MGMT_802_1X_SHA256)
return WPA_KEY_MGMT_IEEE8021X_SHA256;
Expand Down Expand Up @@ -2822,6 +2826,8 @@ u32 wpa_akm_to_suite(int akm)
return RSN_AUTH_KEY_MGMT_FT_802_1X_SHA384;
if (akm & WPA_KEY_MGMT_FT_IEEE8021X)
return RSN_AUTH_KEY_MGMT_FT_802_1X;
if (akm & WPA_KEY_MGMT_FT_PSK_SHA384)
return RSN_AUTH_KEY_MGMT_FT_PSK_SHA384;
if (akm & WPA_KEY_MGMT_FT_PSK)
Comment on lines +2829 to 2831
return RSN_AUTH_KEY_MGMT_FT_PSK;
if (akm & WPA_KEY_MGMT_IEEE8021X_SHA384)
Expand All @@ -2830,6 +2836,8 @@ u32 wpa_akm_to_suite(int akm)
return RSN_AUTH_KEY_MGMT_802_1X_SHA256;
if (akm & WPA_KEY_MGMT_IEEE8021X)
return RSN_AUTH_KEY_MGMT_UNSPEC_802_1X;
if (akm & WPA_KEY_MGMT_PSK_SHA384)
return RSN_AUTH_KEY_MGMT_PSK_SHA384;
if (akm & WPA_KEY_MGMT_PSK_SHA256)
return RSN_AUTH_KEY_MGMT_PSK_SHA256;
if (akm & WPA_KEY_MGMT_PSK)
Expand Down
8 changes: 8 additions & 0 deletions src/rsn_supp/wpa_ie.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,19 @@ static int wpa_gen_wpa_ie_rsn(u8 *rsn_ie, size_t rsn_ie_len,
#endif /* CONFIG_SHA384 */
} else if (key_mgmt == WPA_KEY_MGMT_FT_PSK) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_PSK);
#ifdef CONFIG_SHA384
} else if (key_mgmt == WPA_KEY_MGMT_FT_PSK_SHA384) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_FT_PSK_SHA384);
#endif /* CONFIG_SHA384 */
#endif /* CONFIG_IEEE80211R */
} else if (key_mgmt == WPA_KEY_MGMT_IEEE8021X_SHA256) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_802_1X_SHA256);
} else if (key_mgmt == WPA_KEY_MGMT_PSK_SHA256) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_PSK_SHA256);
#ifdef CONFIG_SHA384
} else if (key_mgmt == WPA_KEY_MGMT_PSK_SHA384) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_PSK_SHA384);
#endif /* CONFIG_SHA384 */
#ifdef CONFIG_SAE
} else if (key_mgmt == WPA_KEY_MGMT_SAE) {
RSN_SELECTOR_PUT(pos, RSN_AUTH_KEY_MGMT_SAE);
Expand Down
26 changes: 26 additions & 0 deletions wpa_supplicant/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -805,13 +805,17 @@ static int wpa_config_parse_key_mgmt(const struct parse_data *data,
else if (os_strcmp(start, "FT-EAP") == 0)
val |= WPA_KEY_MGMT_FT_IEEE8021X;
#ifdef CONFIG_SHA384
else if (os_strcmp(start, "FT-PSK-SHA384") == 0)
val |= WPA_KEY_MGMT_FT_PSK_SHA384;
else if (os_strcmp(start, "FT-EAP-SHA384") == 0)
val |= WPA_KEY_MGMT_FT_IEEE8021X_SHA384;
#endif /* CONFIG_SHA384 */
#endif /* CONFIG_IEEE80211R */
#ifdef CONFIG_SHA384
else if (os_strcmp(start, "WPA-EAP-SHA384") == 0)
val |= WPA_KEY_MGMT_IEEE8021X_SHA384;
else if (os_strcmp(start, "WPA-PSK-SHA384") == 0)
val |= WPA_KEY_MGMT_PSK_SHA384;
#endif /* CONFIG_SHA384 */
else if (os_strcmp(start, "WPA-PSK-SHA256") == 0)
val |= WPA_KEY_MGMT_PSK_SHA256;
Expand Down Expand Up @@ -973,6 +977,16 @@ static char * wpa_config_write_key_mgmt(const struct parse_data *data,
}

#ifdef CONFIG_SHA384
if (ssid->key_mgmt & WPA_KEY_MGMT_FT_PSK_SHA384) {
ret = os_snprintf(pos, end - pos, "%sFT-PSK-SHA384",
pos == buf ? "" : " ");
if (os_snprintf_error(end - pos, ret)) {
end[-1] = '\0';
return buf;
}
pos += ret;
}

if (ssid->key_mgmt & WPA_KEY_MGMT_FT_IEEE8021X_SHA384) {
ret = os_snprintf(pos, end - pos, "%sFT-EAP-SHA384",
pos == buf ? "" : " ");
Expand Down Expand Up @@ -1007,6 +1021,18 @@ static char * wpa_config_write_key_mgmt(const struct parse_data *data,
pos += ret;
}

#ifdef CONFIG_SHA384
if (ssid->key_mgmt & WPA_KEY_MGMT_PSK_SHA384) {
ret = os_snprintf(pos, end - pos, "%sWPA-PSK-SHA384",
pos == buf ? "" : " ");
if (os_snprintf_error(end - pos, ret)) {
end[-1] = '\0';
return buf;
}
pos += ret;
}
#endif /* CONFIG_SHA384 */

if (ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_SHA256) {
ret = os_snprintf(pos, end - pos, "%sWPA-EAP-SHA256",
pos == buf ? "" : " ");
Expand Down