From de73ce593ae1adbf11ae11898aa1287118fac41b Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Wed, 7 Dec 2022 13:25:30 +0900 Subject: [PATCH] Support PSK_SHA256 for ieee80211w Change-Id: I4017d2b245a9a5a65fcbbd4ca6c31f45e98b77f2 Signed-off-by: Jaehyun Kim --- gsupplicant/gsupplicant.h | 1 + gsupplicant/supplicant.c | 33 +++++++++++++++++++++++++++++++-- plugins/wifi.c | 11 +++++++++++ src/connman.h | 2 ++ src/network.c | 13 +++++++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h index b1493187..22b0b3e3 100755 --- a/gsupplicant/gsupplicant.h +++ b/gsupplicant/gsupplicant.h @@ -128,6 +128,7 @@ typedef enum { G_SUPPLICANT_SECURITY_SAE, G_SUPPLICANT_SECURITY_OWE, G_SUPPLICANT_SECURITY_DPP, + G_SUPPLICANT_SECURITY_PSK_SHA256, #endif } GSupplicantSecurity; diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c index 1cecf6c1..8996d2de 100755 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -308,6 +308,7 @@ struct g_supplicant_bss { GSupplicantPhy_mode phy_mode; dbus_int16_t snr; dbus_uint32_t est_throughput; + dbus_bool_t psk_sha256; #endif unsigned int wps_capabilities; #if defined TIZEN_EXT @@ -539,6 +540,8 @@ static const char *security2string(GSupplicantSecurity security) case G_SUPPLICANT_SECURITY_IEEE8021X: return "ieee8021x"; #if defined TIZEN_EXT + case G_SUPPLICANT_SECURITY_PSK_SHA256: + return "psk_sha256"; case G_SUPPLICANT_SECURITY_FT_PSK: return "ft_psk"; case G_SUPPLICANT_SECURITY_FT_IEEE8021X: @@ -670,6 +673,7 @@ static int store_network_information(GSupplicantInterface * interface, ssid->security == G_SUPPLICANT_SECURITY_PSK || #if defined TIZEN_EXT ssid->security == G_SUPPLICANT_SECURITY_SAE || + ssid->security == G_SUPPLICANT_SECURITY_PSK_SHA256 || #endif ssid->security == G_SUPPLICANT_SECURITY_NONE) && ssid->passphrase) { @@ -1941,6 +1945,7 @@ const char *g_supplicant_network_get_enc_mode(GSupplicantNetwork *network) network->best_bss->security == G_SUPPLICANT_SECURITY_SAE || network->best_bss->security == G_SUPPLICANT_SECURITY_OWE || network->best_bss->security == G_SUPPLICANT_SECURITY_DPP || + network->best_bss->security == G_SUPPLICANT_SECURITY_PSK_SHA256 || network->best_bss->security == G_SUPPLICANT_SECURITY_IEEE8021X) { unsigned int pairwise; @@ -2621,7 +2626,14 @@ static char *create_group(struct g_supplicant_bss *bss) if (mode) g_string_append_printf(str, "_%s", mode); +#if defined TIZEN_EXT + if (bss->security == G_SUPPLICANT_SECURITY_PSK_SHA256) + security = "psk"; + else + security = security2string(bss->security); +#else security = security2string(bss->security); +#endif if (security) g_string_append_printf(str, "_%s", security); @@ -3215,7 +3227,7 @@ static void bss_compute_security(struct g_supplicant_bss *bss) #if defined TIZEN_EXT if (bss->keymgmt & (G_SUPPLICANT_KEYMGMT_WPA_EAP | - G_SUPPLICANT_KEYMGMT_WPA_EAP_256)) + G_SUPPLICANT_KEYMGMT_WPA_EAP_256)) bss->ieee8021x = TRUE; else if (bss->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_FT_EAP) bss->ft_ieee8021x = TRUE; @@ -3228,9 +3240,14 @@ static void bss_compute_security(struct g_supplicant_bss *bss) #endif #if defined TIZEN_EXT + if (bss->keymgmt & + G_SUPPLICANT_KEYMGMT_WPA_PSK_256) { + bss->psk_sha256 = TRUE; + } + if (bss->keymgmt & (G_SUPPLICANT_KEYMGMT_WPA_PSK | - G_SUPPLICANT_KEYMGMT_WPA_PSK_256)) + G_SUPPLICANT_KEYMGMT_WPA_PSK_256)) bss->psk = TRUE; else if (bss->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_FT_PSK) bss->ft_psk = TRUE; @@ -3259,6 +3276,8 @@ static void bss_compute_security(struct g_supplicant_bss *bss) bss->security = G_SUPPLICANT_SECURITY_IEEE8021X; else if (bss->sae) bss->security = G_SUPPLICANT_SECURITY_SAE; + else if (bss->psk_sha256) + bss->security = G_SUPPLICANT_SECURITY_PSK_SHA256; #endif else if (bss->psk) bss->security = G_SUPPLICANT_SECURITY_PSK; @@ -7265,6 +7284,7 @@ static void add_network_ieee80211w(DBusMessageIter *dict, GSupplicantSSID *ssid) { if (ssid->security != G_SUPPLICANT_SECURITY_SAE && ssid->security != G_SUPPLICANT_SECURITY_OWE + && ssid->security != G_SUPPLICANT_SECURITY_PSK_SHA256 && ssid->security != G_SUPPLICANT_SECURITY_DPP) return; @@ -7373,6 +7393,15 @@ static void add_network_security(DBusMessageIter *dict, GSupplicantSSID *ssid) add_network_security_proto(dict, ssid); break; #if defined TIZEN_EXT + case G_SUPPLICANT_SECURITY_PSK_SHA256: + if (ssid->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_PSK) + key_mgmt = "WPA-PSK-SHA256 WPA-PSK"; + else + key_mgmt = "WPA-PSK-SHA256"; + add_network_security_psk(dict, ssid); + add_network_security_ciphers(dict, ssid); + add_network_security_proto(dict, ssid); + break; case G_SUPPLICANT_SECURITY_FT_PSK: key_mgmt = "FT-PSK"; add_network_security_psk(dict, ssid); diff --git a/plugins/wifi.c b/plugins/wifi.c index 1d61900f..3662a505 100755 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -3802,6 +3802,8 @@ static GSupplicantSecurity network_security(const char *security) return G_SUPPLICANT_SECURITY_OWE; else if (g_str_equal(security, "dpp")) return G_SUPPLICANT_SECURITY_DPP; + else if (g_str_equal(security, "psk_sha256") == TRUE) + return G_SUPPLICANT_SECURITY_PSK_SHA256; #endif return G_SUPPLICANT_SECURITY_UNKNOWN; @@ -3846,6 +3848,10 @@ static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network) #endif ssid->scan_ssid = 1; security = connman_network_get_string(network, "WiFi.Security"); +#if defined TIZEN_EXT + if (connman_network_get_psk_sha256(network)) + security = "psk_sha256"; +#endif ssid->security = network_security(security); #if defined TIZEN_EXT ssid->ieee80211w = 1; @@ -5469,6 +5475,11 @@ static void network_added(GSupplicantNetwork *supplicant_network) connman_network_set_countrycode(network, country_code); phy_mode = g_supplicant_network_get_phy_mode(supplicant_network); connman_network_set_phy_mode(network, phy_mode); + + if (g_strcmp0(security, "psk_sha256") == 0) { + connman_network_set_psk_sha256(network, true); + security = "psk"; + } #endif connman_network_set_string(network, "WiFi.Security", security); connman_network_set_strength(network, diff --git a/src/connman.h b/src/connman.h index 437c4946..eccccbb6 100755 --- a/src/connman.h +++ b/src/connman.h @@ -679,6 +679,8 @@ bool __connman_network_get_weakness(struct connman_network *network); bool __connman_network_native_autoconnect(struct connman_network *network); #if defined TIZEN_EXT dbus_bool_t __connman_network_notify_dhcp_changed(const char *key, void *val); +bool connman_network_get_psk_sha256(struct connman_network *network); +void connman_network_set_psk_sha256(struct connman_network *network, bool is_psk_sha256); #endif int __connman_config_init(); diff --git a/src/network.c b/src/network.c index e5c654ef..d702d3d9 100755 --- a/src/network.c +++ b/src/network.c @@ -165,6 +165,7 @@ struct connman_network { #if defined TIZEN_EXT /* Multiple APN services and a default APN which a user selected */ bool default_internet; + bool is_psk_sha256; #endif }; @@ -2032,6 +2033,18 @@ bool connman_network_get_connected(struct connman_network *network) return network->connected; } +#if defined TIZEN_EXT +bool connman_network_get_psk_sha256(struct connman_network *network) +{ + return network->is_psk_sha256; +} + +void connman_network_set_psk_sha256(struct connman_network *network, bool is_psk_sha256) +{ + network->is_psk_sha256 = is_psk_sha256; +} +#endif + /** * connman_network_get_associating: * @network: network structure -- 2.34.1