]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Add SAE credential support to Configurator
authorJouni Malinen <jouni@qca.qualcomm.com>
Wed, 22 Nov 2017 19:22:23 +0000 (21:22 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 22 Nov 2017 19:24:08 +0000 (21:24 +0200)
The new conf={sta,ap}-{sae,psk-sae} parameter values can now be used to
specify that the legacy configuration object is for SAE.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
src/ap/dpp_hostapd.c
src/common/dpp.c
src/common/dpp.h
wpa_supplicant/dpp_supplicant.c

index 222a53630781e85dadb7c115ea290f6d9ff120cf..0ec0ec7ea11e5b6d062c137a248448c5dc8ceffd 100644 (file)
@@ -377,8 +377,15 @@ static void hostapd_dpp_set_configurator(struct hostapd_data *hapd,
                        goto fail;
                os_memcpy(conf_sta->ssid, ssid, ssid_len);
                conf_sta->ssid_len = ssid_len;
-               if (os_strstr(cmd, " conf=sta-psk")) {
-                       conf_sta->dpp = 0;
+               if (os_strstr(cmd, " conf=sta-psk") ||
+                   os_strstr(cmd, " conf=sta-sae") ||
+                   os_strstr(cmd, " conf=sta-psk-sae")) {
+                       if (os_strstr(cmd, " conf=sta-psk-sae"))
+                               conf_sta->akm = DPP_AKM_PSK_SAE;
+                       else if (os_strstr(cmd, " conf=sta-sae"))
+                               conf_sta->akm = DPP_AKM_SAE;
+                       else
+                               conf_sta->akm = DPP_AKM_PSK;
                        if (psk_set) {
                                os_memcpy(conf_sta->psk, psk, PMK_LEN);
                        } else {
@@ -387,7 +394,7 @@ static void hostapd_dpp_set_configurator(struct hostapd_data *hapd,
                                        goto fail;
                        }
                } else if (os_strstr(cmd, " conf=sta-dpp")) {
-                       conf_sta->dpp = 1;
+                       conf_sta->akm = DPP_AKM_DPP;
                } else {
                        goto fail;
                }
@@ -399,8 +406,15 @@ static void hostapd_dpp_set_configurator(struct hostapd_data *hapd,
                        goto fail;
                os_memcpy(conf_ap->ssid, ssid, ssid_len);
                conf_ap->ssid_len = ssid_len;
-               if (os_strstr(cmd, " conf=ap-psk")) {
-                       conf_ap->dpp = 0;
+               if (os_strstr(cmd, " conf=ap-psk") ||
+                   os_strstr(cmd, " conf=ap-sae") ||
+                   os_strstr(cmd, " conf=ap-psk-sae")) {
+                       if (os_strstr(cmd, " conf=ap-psk-sae"))
+                               conf_ap->akm = DPP_AKM_PSK_SAE;
+                       else if (os_strstr(cmd, " conf=ap-sae"))
+                               conf_ap->akm = DPP_AKM_SAE;
+                       else
+                               conf_ap->akm = DPP_AKM_PSK;
                        if (psk_set) {
                                os_memcpy(conf_ap->psk, psk, PMK_LEN);
                        } else {
@@ -409,7 +423,7 @@ static void hostapd_dpp_set_configurator(struct hostapd_data *hapd,
                                        goto fail;
                        }
                } else if (os_strstr(cmd, " conf=ap-dpp")) {
-                       conf_ap->dpp = 1;
+                       conf_ap->akm = DPP_AKM_DPP;
                } else {
                        goto fail;
                }
index e82d115e691104a96db3f6ba4086db7d1a979fed..e7db569b39560dc5c73e85f03f40b3c9cad5ce03 100644 (file)
@@ -4112,7 +4112,7 @@ dpp_build_conf_obj_legacy(struct dpp_authentication *auth, int ap,
        if (!buf)
                return NULL;
 
-       wpabuf_put_str(buf, "\"cred\":{\"akm\":\"psk\",");
+       wpabuf_printf(buf, "\"cred\":{\"akm\":\"%s\",", dpp_akm_str(conf->akm));
        if (conf->passphrase) {
                char pass[63 * 6 + 1];
 
@@ -4165,7 +4165,7 @@ dpp_build_conf_obj(struct dpp_authentication *auth, int ap)
                return NULL;
        }
 
-       if (conf->dpp)
+       if (conf->akm == DPP_AKM_DPP)
                return dpp_build_conf_obj_dpp(auth, ap, conf);
        return dpp_build_conf_obj_legacy(auth, ap, conf);
 }
index b972126853b59ec5679ee548cc023a16f667197f..4c7586392297b0f77f7d827f62e7d4234707a380 100644 (file)
@@ -147,7 +147,7 @@ enum dpp_akm {
 struct dpp_configuration {
        u8 ssid[32];
        size_t ssid_len;
-       int dpp; /* whether to use DPP or legacy configuration */
+       enum dpp_akm akm;
 
        /* For DPP configuration (connector) */
        os_time_t netaccesskey_expiry;
index c20891c79b394865a8d77dfd0e36b500e656be56..bc986fc503d11fca798bc3c95462d9fe5f6b43cb 100644 (file)
@@ -536,8 +536,15 @@ static void wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
                        goto fail;
                os_memcpy(conf_sta->ssid, ssid, ssid_len);
                conf_sta->ssid_len = ssid_len;
-               if (os_strstr(cmd, " conf=sta-psk")) {
-                       conf_sta->dpp = 0;
+               if (os_strstr(cmd, " conf=sta-psk") ||
+                   os_strstr(cmd, " conf=sta-sae") ||
+                   os_strstr(cmd, " conf=sta-psk-sae")) {
+                       if (os_strstr(cmd, " conf=sta-psk-sae"))
+                               conf_sta->akm = DPP_AKM_PSK_SAE;
+                       else if (os_strstr(cmd, " conf=sta-sae"))
+                               conf_sta->akm = DPP_AKM_SAE;
+                       else
+                               conf_sta->akm = DPP_AKM_PSK;
                        if (psk_set) {
                                os_memcpy(conf_sta->psk, psk, PMK_LEN);
                        } else {
@@ -546,7 +553,7 @@ static void wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
                                        goto fail;
                        }
                } else if (os_strstr(cmd, " conf=sta-dpp")) {
-                       conf_sta->dpp = 1;
+                       conf_sta->akm = DPP_AKM_DPP;
                } else {
                        goto fail;
                }
@@ -558,8 +565,15 @@ static void wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
                        goto fail;
                os_memcpy(conf_ap->ssid, ssid, ssid_len);
                conf_ap->ssid_len = ssid_len;
-               if (os_strstr(cmd, " conf=ap-psk")) {
-                       conf_ap->dpp = 0;
+               if (os_strstr(cmd, " conf=ap-psk") ||
+                   os_strstr(cmd, " conf=ap-sae") ||
+                   os_strstr(cmd, " conf=ap-psk-sae")) {
+                       if (os_strstr(cmd, " conf=ap-psk-sae"))
+                               conf_ap->akm = DPP_AKM_PSK_SAE;
+                       else if (os_strstr(cmd, " conf=ap-sae"))
+                               conf_ap->akm = DPP_AKM_SAE;
+                       else
+                               conf_ap->akm = DPP_AKM_PSK;
                        if (psk_set) {
                                os_memcpy(conf_ap->psk, psk, PMK_LEN);
                        } else {
@@ -568,7 +582,7 @@ static void wpas_dpp_set_configurator(struct wpa_supplicant *wpa_s,
                                        goto fail;
                        }
                } else if (os_strstr(cmd, " conf=ap-dpp")) {
-                       conf_ap->dpp = 1;
+                       conf_ap->akm = DPP_AKM_DPP;
                } else {
                        goto fail;
                }