From patchwork Tue Nov 27 11:46:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masashi Honma X-Patchwork-Id: 202186 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from maxx.maxx.shmoo.com (maxx.shmoo.com [205.134.188.171]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "maxx.shmoo.com", Issuer "CA Cert Signing Authority" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 0284A2C008C for ; Tue, 27 Nov 2012 22:47:12 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 5A42317C006; Tue, 27 Nov 2012 06:47:07 -0500 (EST) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CYXzO8SXVqW0; Tue, 27 Nov 2012 06:47:07 -0500 (EST) Received: from maxx.shmoo.com (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 1609817C001; Tue, 27 Nov 2012 06:47:02 -0500 (EST) X-Original-To: mailman-post+hostap@maxx.shmoo.com Delivered-To: mailman-post+hostap@maxx.shmoo.com Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id D199C9C1AA for ; Tue, 27 Nov 2012 06:47:00 -0500 (EST) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GI3N8XiQhrXr for ; Tue, 27 Nov 2012 06:46:56 -0500 (EST) Received: from mail-ee0-f44.google.com (mail-ee0-f44.google.com [74.125.83.44]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (not verified)) by maxx.maxx.shmoo.com (Postfix) with ESMTPS id A3F2D9C1A8 for ; Tue, 27 Nov 2012 06:46:56 -0500 (EST) Received: by mail-ee0-f44.google.com with SMTP id b47so8829385eek.17 for ; Tue, 27 Nov 2012 03:46:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.14.205.65 with SMTP id i41mr57522622eeo.2.1354016812824; Tue, 27 Nov 2012 03:46:52 -0800 (PST) Received: by 10.14.98.66 with HTTP; Tue, 27 Nov 2012 03:46:52 -0800 (PST) Date: Tue, 27 Nov 2012 20:46:52 +0900 Message-ID: Subject: [RFC PATCH] P2P: Use PSK instead of passphrase for persistent GO fast boot From: Masashi Honma To: hostap ML X-BeenThere: hostap@lists.shmoo.com X-Mailman-Version: 2.1.9 Precedence: list List-Id: HostAP Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: hostap-bounces@lists.shmoo.com Errors-To: hostap-bounces@lists.shmoo.com As I mentioned in previous post [1], pbkdf2_sha1() is a bottleneck for persistent GO initialization. So I will propose saving a psk instead of a passphrase for persistent GO to skip re-calculation in pbkdf2_sha1(). I suppose this sequence to boot GO. ------------- add_net set_network 0 ssid '"DIRECT-X1"' set_network 0 bssid xx:xx:x:xx:xx:xx set_network 0 psk 1122334455667788990011223344556677889900112233445566778899001122 set_network 0 proto RSN set_network 0 key_mgmt WPA-PSK set_network 0 pairwise CCMP set_network 0 auth_alg OPEN set_network 0 mode 3 set_network 0 disabled 2 p2p_group_add persistent=0 freq=2412 ------------- As you know, this change breaks Wi-Fi spec. Because [2] says "A P2P Group Owner shall maintain a WPA2-PSK pass-phrase for delivery to Legacy Clients." at 3.2.1 P2P Group ID section. This change breaks interop for legacy STA (STA doesn't have WPS). So I used CONFIG_P2P_STRICT macro for user who want to conform with [2]. How do you think about this patch ? [1] http://lists.shmoo.com/pipermail/hostap/2012-November/026841.html [2] Wi-Fi Peer-to-Peer (P2P) Technical Specification Version 1.1 Signed-hostap: Masashi Honma os_memcpy(ssid->psk, params->psk, sizeof(ssid->psk)); @@ -4098,14 +4114,21 @@ int wpas_p2p_group_add_persistent(struct wpa_supplicant *wpa_s, params.psk_set = ssid->psk_set; if (params.psk_set) os_memcpy(params.psk, ssid->psk, sizeof(params.psk)); - if (ssid->passphrase == NULL || - os_strlen(ssid->passphrase) >= sizeof(params.passphrase)) { - wpa_printf(MSG_DEBUG, "P2P: Invalid passphrase in persistent " - "group"); + if (ssid->passphrase == NULL) { +#ifdef CONFIG_P2P_STRICT + wpa_printf(MSG_ERROR, "P2P: No passphrase found in " + "persistent group"); return -1; +#endif /* CONFIG_P2P_STRICT */ + } else { + if (os_strlen(ssid->passphrase) >= sizeof(params.passphrase)) { + wpa_printf(MSG_ERROR, "P2P: Invalid passphrase in " + "persistent group"); + return -1; + } + os_strlcpy(params.passphrase, ssid->passphrase, + sizeof(params.passphrase)); } - os_strlcpy(params.passphrase, ssid->passphrase, - sizeof(params.passphrase)); os_memcpy(params.ssid, ssid->ssid, ssid->ssid_len); params.ssid_len = ssid->ssid_len; params.persistent_group = 1; Regards, Masashi Honma. diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index e44bb3a..6d0f262 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -796,15 +796,28 @@ static void p2p_go_configured(void *ctx, void *data) wpa_printf(MSG_DEBUG, "P2P: Group setup without provisioning"); if (wpa_s->global->p2p_group_formation == wpa_s) wpa_s->global->p2p_group_formation = NULL; - wpa_msg(wpa_s->parent, MSG_INFO, P2P_EVENT_GROUP_STARTED - "%s GO ssid=\"%s\" freq=%d passphrase=\"%s\" " - "go_dev_addr=" MACSTR "%s", - wpa_s->ifname, - wpa_ssid_txt(ssid->ssid, ssid->ssid_len), - ssid->frequency, - params->passphrase ? params->passphrase : "", - MAC2STR(wpa_s->global->p2p_dev_addr), - params->persistent_group ? " [PERSISTENT]" : ""); + if (os_strlen(params->passphrase) > 0) + wpa_msg(wpa_s->parent, MSG_INFO, P2P_EVENT_GROUP_STARTED + "%s GO ssid=\"%s\" freq=%d passphrase=\"%s\" " + "go_dev_addr=" MACSTR "%s", wpa_s->ifname, + wpa_ssid_txt(ssid->ssid, ssid->ssid_len), + ssid->frequency, params->passphrase, + MAC2STR(wpa_s->global->p2p_dev_addr), + params->persistent_group ? " [PERSISTENT]" : + ""); + else { + char psk[65]; + wpa_snprintf_hex(psk, sizeof(psk), params->psk, + sizeof(params->psk)); + wpa_msg(wpa_s->parent, MSG_INFO, P2P_EVENT_GROUP_STARTED + "%s GO ssid=\"%s\" freq=%d psk=%s " + "go_dev_addr=" MACSTR "%s", wpa_s->ifname, + wpa_ssid_txt(ssid->ssid, ssid->ssid_len), + ssid->frequency, psk, + MAC2STR(wpa_s->global->p2p_dev_addr), + params->persistent_group ? " [PERSISTENT]" : + ""); + } if (params->persistent_group) network_id = wpas_p2p_store_persistent_group( @@ -874,13 +887,16 @@ static void wpas_start_wps_go(struct wpa_supplicant *wpa_s, ssid->key_mgmt = WPA_KEY_MGMT_PSK; ssid->proto = WPA_PROTO_RSN; ssid->pairwise_cipher = WPA_CIPHER_CCMP; - ssid->passphrase = os_strdup(params->passphrase); - if (ssid->passphrase == NULL) { - wpa_msg(wpa_s, MSG_ERROR, "P2P: Failed to copy passphrase for " - "GO"); - wpa_config_remove_network(wpa_s->conf, ssid->id); - return; - } + if (os_strlen(params->passphrase) > 0) { + ssid->passphrase = os_strdup(params->passphrase); + if (ssid->passphrase == NULL) { + wpa_msg(wpa_s, MSG_ERROR, "P2P: Failed to copy " + "passphrase for GO"); + wpa_config_remove_network(wpa_s->conf, ssid->id); + return; + } + } else + ssid->passphrase = NULL; ssid->psk_set = params->psk_set; if (ssid->psk_set)