From: Jouni Malinen Date: Sat, 24 Jan 2009 10:50:00 +0000 (+0200) Subject: WPS: Add a workaround for incorrect passphrase encoding in Network Key X-Git-Tag: hostap_0_7_0~593 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1a5a04c3de054dab90d0604256e540778ddbf099;p=thirdparty%2Fhostap.git WPS: Add a workaround for incorrect passphrase encoding in Network Key External Registrar in Vista may include NULL termination in the Network Key when encoding an ASCII passphrase for WPA/WPA2-PSK. As a workaround, remove this extra octet if present. --- diff --git a/src/wps/wps_attr_process.c b/src/wps/wps_attr_process.c index c1b59f7cf..ae6e906c2 100644 --- a/src/wps/wps_attr_process.c +++ b/src/wps/wps_attr_process.c @@ -257,6 +257,23 @@ static int wps_process_cred_802_1x_enabled(struct wps_credential *cred, } +static void wps_workaround_cred_key(struct wps_credential *cred) +{ + if (cred->auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK) && + cred->key_len > 8 && cred->key_len < 64 && + cred->key[cred->key_len - 1] == 0) { + /* + * A deployed external registrar is known to encode ASCII + * passphrases incorrectly. Remove the extra NULL termination + * to fix the encoding. + */ + wpa_printf(MSG_DEBUG, "WPS: Workaround - remove NULL " + "termination from ASCII passphrase"); + cred->key_len--; + } +} + + int wps_process_cred(struct wps_parse_attr *attr, struct wps_credential *cred) { @@ -279,6 +296,8 @@ int wps_process_cred(struct wps_parse_attr *attr, wps_process_cred_802_1x_enabled(cred, attr->dot1x_enabled)) return -1; + wps_workaround_cred_key(cred); + return 0; } @@ -298,5 +317,7 @@ int wps_process_ap_settings(struct wps_parse_attr *attr, wps_process_cred_mac_addr(cred, attr->mac_addr)) return -1; + wps_workaround_cred_key(cred); + return 0; }