]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP2: Copy received ppKey into wpa_supplicant network profile
authorJouni Malinen <jouni@codeaurora.org>
Tue, 13 Oct 2020 17:29:27 +0000 (20:29 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 13 Oct 2020 20:38:47 +0000 (23:38 +0300)
Store the received privacy protection key from Connector into
wpa_supplicant network profile and indicate it through the control
interface similarly to C-sign-key.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/common/wpa_ctrl.h
wpa_supplicant/config.c
wpa_supplicant/config_file.c
wpa_supplicant/config_ssid.h
wpa_supplicant/dpp_supplicant.c

index 52888d73061c2a257d501bd430c8c74efdcb00ca..acc2d6c4c117467a1766ee5e6c2c8460538c2dc3 100644 (file)
@@ -184,6 +184,7 @@ extern "C" {
 #define DPP_EVENT_CONFOBJ_PSK "DPP-CONFOBJ-PSK "
 #define DPP_EVENT_CONNECTOR "DPP-CONNECTOR "
 #define DPP_EVENT_C_SIGN_KEY "DPP-C-SIGN-KEY "
+#define DPP_EVENT_PP_KEY "DPP-PP-KEY "
 #define DPP_EVENT_NET_ACCESS_KEY "DPP-NET-ACCESS-KEY "
 #define DPP_EVENT_SERVER_NAME "DPP-SERVER-NAME "
 #define DPP_EVENT_CERTBAG "DPP-CERTBAG "
index e3c12d8b3ab814fde82feab160d8fa2cb047905b..61761299b8fa342b071896632ef03d8b5aabb9e4 100644 (file)
@@ -2573,6 +2573,7 @@ static const struct parse_data ssid_fields[] = {
        { STR_LEN(dpp_netaccesskey) },
        { INT(dpp_netaccesskey_expiry) },
        { STR_LEN(dpp_csign) },
+       { STR_LEN(dpp_pp_key) },
        { INT_RANGE(dpp_pfs, 0, 2) },
 #endif /* CONFIG_DPP */
        { INT_RANGE(owe_group, 0, 65535) },
@@ -2776,6 +2777,7 @@ void wpa_config_free_ssid(struct wpa_ssid *ssid)
        os_free(ssid->dpp_connector);
        bin_clear_free(ssid->dpp_netaccesskey, ssid->dpp_netaccesskey_len);
        os_free(ssid->dpp_csign);
+       os_free(ssid->dpp_pp_key);
        while ((psk = dl_list_first(&ssid->psk_list, struct psk_list_entry,
                                    list))) {
                dl_list_del(&psk->list);
index da3b8a958350c4d85f50e37b88231ae8d187aa29..c01557dac6ea2457c1f034e5175e73743819a9f8 100644 (file)
@@ -928,6 +928,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
        STR(dpp_netaccesskey);
        INT(dpp_netaccesskey_expiry);
        STR(dpp_csign);
+       STR(dpp_pp_key);
        INT(dpp_pfs);
 #endif /* CONFIG_DPP */
        INT(owe_group);
index ff9cdf4f61fe020f14f174bdcdce2dc65692998d..b4fdc8a17219ee87b1c1b6ea6595d0bb1417a6be 100644 (file)
@@ -1023,6 +1023,16 @@ struct wpa_ssid {
         */
        size_t dpp_csign_len;
 
+       /**
+        * dpp_pp_key - ppKey (Configurator privacy protection public key)
+        */
+       u8 *dpp_pp_key;
+
+       /**
+        * dpp_pp_key_len - ppKey length in octets
+        */
+       size_t dpp_pp_key_len;
+
        /**
         * dpp_pfs - DPP PFS
         * 0: allow PFS to be used or not used
index 1008207b2d962e5de747784ab0ffccce858a96b5..8e9a37c8bd9fd1f205aa2f799508e4807e25094e 100644 (file)
@@ -1192,6 +1192,15 @@ static struct wpa_ssid * wpas_dpp_add_network(struct wpa_supplicant *wpa_s,
                ssid->dpp_csign_len = wpabuf_len(conf->c_sign_key);
        }
 
+       if (conf->pp_key) {
+               ssid->dpp_pp_key = os_malloc(wpabuf_len(conf->pp_key));
+               if (!ssid->dpp_pp_key)
+                       goto fail;
+               os_memcpy(ssid->dpp_pp_key, wpabuf_head(conf->pp_key),
+                         wpabuf_len(conf->pp_key));
+               ssid->dpp_pp_key_len = wpabuf_len(conf->pp_key);
+       }
+
        if (auth->net_access_key) {
                ssid->dpp_netaccesskey =
                        os_malloc(wpabuf_len(auth->net_access_key));
@@ -1429,6 +1438,20 @@ static int wpas_dpp_handle_config_obj(struct wpa_supplicant *wpa_s,
                        os_free(hex);
                }
        }
+       if (conf->pp_key) {
+               char *hex;
+               size_t hexlen;
+
+               hexlen = 2 * wpabuf_len(conf->pp_key) + 1;
+               hex = os_malloc(hexlen);
+               if (hex) {
+                       wpa_snprintf_hex(hex, hexlen,
+                                        wpabuf_head(conf->pp_key),
+                                        wpabuf_len(conf->pp_key));
+                       wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PP_KEY "%s", hex);
+                       os_free(hex);
+               }
+       }
        if (auth->net_access_key) {
                char *hex;
                size_t hexlen;