}
+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)
{
wps_process_cred_802_1x_enabled(cred, attr->dot1x_enabled))
return -1;
+ wps_workaround_cred_key(cred);
+
return 0;
}
wps_process_cred_mac_addr(cred, attr->mac_addr))
return -1;
+ wps_workaround_cred_key(cred);
+
return 0;
}