static struct wpabuf * wps_get_oob_cred(struct wps_context *wps) { struct wps_data data; struct wpabuf *plain; plain = wpabuf_alloc(500); if (plain == NULL) { wpa_printf(MSG_ERROR, "WPS: Failed to allocate memory for OOB " "credential"); return NULL; } os_memset(&data, 0, sizeof(data)); data.wps = wps; data.auth_type = wps->auth_types; data.encr_type = wps->encr_types; if (wps_build_version(plain) || wps_build_cred(&data, plain) || wps_build_wfa_ext(plain, 0, NULL, 0)) { wpabuf_free(plain); return NULL; } return plain; }
struct wpabuf * wps_get_oob_cred(struct wps_context *wps, int rf_band, int channel) { struct wps_data data; struct wpabuf *plain; plain = wpabuf_alloc(500); if (plain == NULL) { wpa_printf(MSG_ERROR, "WPS: Failed to allocate memory for OOB " "credential"); return NULL; } os_memset(&data, 0, sizeof(data)); data.wps = wps; data.auth_type = wps->auth_types; data.encr_type = wps->encr_types; if (wps_build_cred(&data, plain) || (rf_band && wps_build_rf_bands_attr(plain, rf_band)) || (channel && wps_build_ap_channel(plain, channel)) || wps_build_mac_addr(plain, wps->dev.mac_addr) || wps_build_wfa_ext(plain, 0, NULL, 0)) { os_free(data.new_psk); wpabuf_free(plain); return NULL; } if (wps->wps_state == WPS_STATE_NOT_CONFIGURED && data.new_psk && wps->ap) { struct wps_credential cred; wpa_printf(MSG_DEBUG, "WPS: Moving to Configured state based " "on credential token generation"); os_memset(&cred, 0, sizeof(cred)); os_memcpy(cred.ssid, wps->ssid, wps->ssid_len); cred.ssid_len = wps->ssid_len; cred.auth_type = WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK; cred.encr_type = WPS_ENCR_TKIP | WPS_ENCR_AES; os_memcpy(cred.key, data.new_psk, data.new_psk_len); cred.key_len = data.new_psk_len; wps->wps_state = WPS_STATE_CONFIGURED; wpa_hexdump_ascii_key(MSG_DEBUG, "WPS: Generated random passphrase", data.new_psk, data.new_psk_len); if (wps->cred_cb) wps->cred_cb(wps->cb_ctx, &cred); } os_free(data.new_psk); return plain; }
struct wpabuf * wps_er_config_token_from_cred(struct wps_context *wps, struct wps_credential *cred) { struct wpabuf *ret; struct wps_data data; ret = wpabuf_alloc(500); if (ret == NULL) return NULL; os_memset(&data, 0, sizeof(data)); data.wps = wps; data.use_cred = cred; if (wps_build_version(ret) || wps_build_cred(&data, ret) || wps_build_wfa_ext(ret, 0, NULL, 0)) { wpabuf_free(ret); return NULL; } return ret; }