Support PSK_SHA256 for ieee80211w 58/285158/1 accepted/tizen/7.0/unified/20221209.015645
authorJaehyun Kim <jeik01.kim@samsung.com>
Wed, 7 Dec 2022 04:25:30 +0000 (13:25 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Wed, 7 Dec 2022 04:25:30 +0000 (13:25 +0900)
Change-Id: I4017d2b245a9a5a65fcbbd4ca6c31f45e98b77f2
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
gsupplicant/gsupplicant.h
gsupplicant/supplicant.c
plugins/wifi.c
src/connman.h
src/network.c

index b149318..22b0b3e 100755 (executable)
@@ -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;
 
index 1cecf6c..8996d2d 100755 (executable)
@@ -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;
@@ -3229,8 +3241,13 @@ static void bss_compute_security(struct g_supplicant_bss *bss)
 
 #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);
index 1d61900..3662a50 100755 (executable)
@@ -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,
index 437c494..eccccbb 100755 (executable)
@@ -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();
index e5c654e..d702d3d 100755 (executable)
@@ -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