Lines Matching defs:wps
19 #include "wps/wps.h"
20 #include "wps/wps_defs.h"
21 #include "wps/wps_dev_attr.h"
22 #include "wps/wps_attr_parse.h"
32 #include "wps/wps_upnp.h"
34 struct wps_context *wps);
43 static void hostapd_wps_nfc_clear(struct wps_context *wps);
128 p->wps = 1;
151 fprintf(f, "wps=1 " MACSTR " %s\n", MAC2STR(mac_addr), hex);
222 if (hapd != data->current_hapd && hapd->wps != NULL)
223 wps_registrar_complete(hapd->wps->registrar, data->uuid_e,
284 if (!wpa_psk->wps)
466 if (hapd->wps == NULL)
500 os_memcpy(hapd->wps->ssid, cred->ssid, cred->ssid_len);
501 hapd->wps->ssid_len = cred->ssid_len;
502 hapd->wps->encr_types = cred->encr_type;
503 hapd->wps->encr_types_rsn = cred->encr_type;
504 hapd->wps->encr_types_wpa = cred->encr_type;
505 hapd->wps->auth_types = cred->auth_type;
506 hapd->wps->ap_encr_type = cred->encr_type;
507 hapd->wps->ap_auth_type = cred->auth_type;
509 os_free(hapd->wps->network_key);
510 hapd->wps->network_key = NULL;
511 hapd->wps->network_key_len = 0;
518 if (hapd->wps->network_key == NULL ||
519 hapd->wps->network_key_len < cred->key_len) {
520 hapd->wps->network_key_len = 0;
521 os_free(hapd->wps->network_key);
522 hapd->wps->network_key = os_malloc(cred->key_len);
523 if (hapd->wps->network_key == NULL)
526 hapd->wps->network_key_len = cred->key_len;
527 os_memcpy(hapd->wps->network_key, cred->key, cred->key_len);
529 hapd->wps->wps_state = WPS_STATE_CONFIGURED;
733 hapd->wps->ap_setup_locked = 0;
734 wps_registrar_update_ie(hapd->wps->registrar);
742 if (!data->enrollee || hapd->conf->ap_pin == NULL || hapd->wps == NULL)
759 hapd->wps->ap_setup_locked = 1;
761 wps_registrar_update_ie(hapd->wps->registrar);
805 if (hapd->conf->ap_pin == NULL || hapd->wps == NULL)
981 if (hapd->wps && !hapd->conf->wps_independent &&
982 !is_nil_uuid(hapd->wps->uuid)) {
983 *uuid = hapd->wps->uuid;
1026 struct wps_context *wps)
1031 wpabuf_free(wps->dev.vendor_ext[i]);
1032 wps->dev.vendor_ext[i] = NULL;
1037 wps->dev.vendor_ext[i] =
1039 if (wps->dev.vendor_ext[i] == NULL) {
1041 wpabuf_free(wps->dev.vendor_ext[i]);
1051 struct wps_context *wps)
1053 wpabuf_free(wps->dev.application_ext);
1056 wps->dev.application_ext = NULL;
1060 wps->dev.application_ext = wpabuf_dup(hapd->conf->wps_application_ext);
1061 return wps->dev.application_ext ? 0 : -1;
1065 static void hostapd_free_wps(struct wps_context *wps)
1070 wpabuf_free(wps->dev.vendor_ext[i]);
1071 wps_device_data_free(&wps->dev);
1072 bin_clear_free(wps->network_key, wps->network_key_len);
1073 hostapd_wps_nfc_clear(wps);
1074 wpabuf_free(wps->dh_pubkey);
1075 wpabuf_free(wps->dh_privkey);
1076 forced_memzero(wps->psk, sizeof(wps->psk));
1077 os_free(wps);
1084 struct wps_context *wps;
1093 wps = os_zalloc(sizeof(*wps));
1094 if (wps == NULL)
1097 wps->cred_cb = hostapd_wps_cred_cb;
1098 wps->event_cb = hostapd_wps_event_cb;
1099 wps->rf_band_cb = hostapd_wps_rf_band_cb;
1100 wps->cb_ctx = hapd;
1103 wps->wps_state = hapd->conf->wps_state;
1104 wps->ap_setup_locked = hapd->conf->ap_setup_locked;
1109 os_memcpy(wps->uuid, uuid, UUID_LEN);
1111 "interface", wps->uuid, UUID_LEN);
1113 uuid_gen_mac_addr(hapd->own_addr, wps->uuid);
1115 "address", wps->uuid, UUID_LEN);
1118 os_memcpy(wps->uuid, hapd->conf->uuid, UUID_LEN);
1120 wps->uuid, UUID_LEN);
1122 wps->ssid_len = hapd->conf->ssid.ssid_len;
1123 os_memcpy(wps->ssid, hapd->conf->ssid.ssid, wps->ssid_len);
1124 wps->ap = 1;
1125 os_memcpy(wps->dev.mac_addr, hapd->own_addr, ETH_ALEN);
1126 wps->dev.device_name = hapd->conf->device_name ?
1128 wps->dev.manufacturer = hapd->conf->manufacturer ?
1130 wps->dev.model_name = hapd->conf->model_name ?
1132 wps->dev.model_number = hapd->conf->model_number ?
1134 wps->dev.serial_number = hapd->conf->serial_number ?
1136 wps->config_methods =
1138 if ((wps->config_methods &
1143 wps->config_methods |= WPS_CONFIG_VIRT_DISPLAY;
1145 if ((wps->config_methods &
1150 wps->config_methods |= WPS_CONFIG_VIRT_PUSHBUTTON;
1152 os_memcpy(wps->dev.pri_dev_type, hapd->conf->device_type,
1155 if (hostapd_wps_set_vendor_ext(hapd, wps) < 0 ||
1156 hostapd_wps_set_application_ext(hapd, wps) < 0)
1159 wps->dev.os_version = WPA_GET_BE32(hapd->conf->os_version);
1162 wps->dev.rf_bands = conf->wps_rf_bands;
1164 wps->dev.rf_bands =
1173 wps->auth_types |= WPS_AUTH_WPA2PSK;
1175 wps->auth_types |= WPS_AUTH_WPA2;
1177 wps->auth_types |= WPS_AUTH_WPA2PSK;
1182 wps->encr_types |= WPS_ENCR_AES;
1183 wps->encr_types_rsn |= WPS_ENCR_AES;
1190 wps->encr_types |= WPS_ENCR_TKIP;
1191 wps->encr_types_rsn |= WPS_ENCR_TKIP;
1205 wps->auth_types |= WPS_AUTH_WPAPSK;
1207 wps->auth_types |= WPS_AUTH_WPA;
1210 wps->encr_types |= WPS_ENCR_AES;
1211 wps->encr_types_wpa |= WPS_ENCR_AES;
1214 wps->encr_types |= WPS_ENCR_TKIP;
1215 wps->encr_types_wpa |= WPS_ENCR_TKIP;
1221 wps->encr_types |= WPS_ENCR_NONE;
1222 wps->auth_types |= WPS_AUTH_OPEN;
1228 wps->network_key = (u8 *) os_strdup(conf->ssid.wpa_passphrase);
1229 wps->network_key_len = os_strlen(conf->ssid.wpa_passphrase);
1231 wps->network_key = os_malloc(2 * PMK_LEN + 1);
1232 if (wps->network_key == NULL)
1234 wpa_snprintf_hex((char *) wps->network_key, 2 * PMK_LEN + 1,
1236 wps->network_key_len = 2 * PMK_LEN;
1239 wps->network_key = os_malloc(conf->ssid.wep.len[0]);
1240 if (wps->network_key == NULL)
1242 os_memcpy(wps->network_key, conf->ssid.wep.key[0],
1244 wps->network_key_len = conf->ssid.wep.len[0];
1249 os_memcpy(wps->psk, conf->ssid.wpa_psk->psk, PMK_LEN);
1250 wps->psk_set = 1;
1253 wps->ap_auth_type = wps->auth_types;
1254 wps->ap_encr_type = wps->encr_types;
1258 wps->auth_types = WPS_AUTH_WPA2PSK;
1259 wps->encr_types = WPS_ENCR_AES;
1260 wps->encr_types_rsn = WPS_ENCR_AES;
1261 wps->encr_types_wpa = WPS_ENCR_AES;
1263 wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK;
1264 wps->encr_types = WPS_ENCR_AES | WPS_ENCR_TKIP;
1265 wps->encr_types_rsn = WPS_ENCR_AES | WPS_ENCR_TKIP;
1266 wps->encr_types_wpa = WPS_ENCR_AES | WPS_ENCR_TKIP;
1295 wps->ap_settings = conf->ap_settings;
1296 wps->ap_settings_len = conf->ap_settings_len;
1311 if ((wps->dev.rf_bands & (WPS_RF_50GHZ | WPS_RF_24GHZ)) ==
1318 wps->registrar = wps_registrar_init(wps, &cfg);
1319 if (wps->registrar == NULL) {
1325 wps->friendly_name = hapd->conf->friendly_name;
1326 wps->manufacturer_url = hapd->conf->manufacturer_url;
1327 wps->model_description = hapd->conf->model_description;
1328 wps->model_url = hapd->conf->model_url;
1329 wps->upc = hapd->conf->upc;
1337 wps->use_passphrase = true;
1339 hapd->wps = wps;
1346 hostapd_free_wps(wps);
1353 struct wps_context *wps = hapd->wps;
1355 if (wps == NULL)
1359 if (hostapd_wps_upnp_init(hapd, wps) < 0) {
1361 wps_registrar_deinit(wps->registrar);
1362 hostapd_free_wps(wps);
1363 hapd->wps = NULL;
1372 static void hostapd_wps_nfc_clear(struct wps_context *wps)
1375 wpa_printf(MSG_DEBUG, "WPS: Clear NFC Tag context %p", wps);
1376 wps->ap_nfc_dev_pw_id = 0;
1377 wpabuf_free(wps->ap_nfc_dh_pubkey);
1378 wps->ap_nfc_dh_pubkey = NULL;
1379 wpabuf_free(wps->ap_nfc_dh_privkey);
1380 wps->ap_nfc_dh_privkey = NULL;
1381 wpabuf_free(wps->ap_nfc_dev_pw);
1382 wps->ap_nfc_dev_pw = NULL;
1434 if (hapd->wps == NULL) {
1441 wps_registrar_deinit(hapd->wps->registrar);
1442 wps_free_pending_msgs(hapd->wps->upnp_msgs);
1443 hostapd_free_wps(hapd->wps);
1444 hapd->wps = NULL;
1451 struct wps_context *wps = hapd->wps;
1454 if (!wps)
1458 wps->friendly_name = conf->friendly_name;
1459 wps->manufacturer_url = conf->manufacturer_url;
1460 wps->model_description = conf->model_description;
1461 wps->model_url = conf->model_url;
1462 wps->upc = conf->upc;
1465 os_memcpy(wps->ssid, conf->ssid.ssid, conf->ssid.ssid_len);
1466 wps->ssid_len = conf->ssid.ssid_len;
1469 os_free(wps->network_key);
1470 wps->network_key = NULL;
1471 wps->network_key_len = 0;
1472 wps->psk_set = 0;
1476 wps->network_key = (u8 *) os_strdup(conf->ssid.wpa_passphrase);
1477 if (!wps->network_key)
1479 wps->network_key_len = os_strlen(conf->ssid.wpa_passphrase);
1481 wps->network_key = os_malloc(2 * PMK_LEN + 1);
1482 if (!wps->network_key)
1484 wpa_snprintf_hex((char *) wps->network_key, 2 * PMK_LEN + 1,
1486 wps->network_key_len = 2 * PMK_LEN;
1489 wps->network_key = os_malloc(conf->ssid.wep.len[0]);
1490 if (!wps->network_key)
1492 os_memcpy(wps->network_key, conf->ssid.wep.key[0],
1494 wps->network_key_len = conf->ssid.wep.len[0];
1499 os_memcpy(wps->psk, conf->ssid.wpa_psk->psk, PMK_LEN);
1500 wps->psk_set = 1;
1503 hostapd_wps_update_multi_ap(hapd, wps->registrar);
1505 hostapd_wps_set_vendor_ext(hapd, wps);
1506 hostapd_wps_set_application_ext(hapd, wps);
1509 wps_registrar_update_ie(wps->registrar);
1530 if (hapd->wps == NULL)
1532 ret = wps_registrar_add_pin(hapd->wps->registrar, data->addr,
1576 if (hapd->wps) {
1578 return wps_registrar_button_pushed(hapd->wps->registrar,
1609 if (hapd->wps) {
1611 wps_registrar_wps_cancel(hapd->wps->registrar);
1642 if (hapd->wps == NULL)
1673 wps_registrar_probe_req_rx(hapd->wps->registrar, addr, wps_ie,
1755 p->next = hapd->wps->upnp_msgs;
1756 hapd->wps->upnp_msgs = p;
1763 struct wps_context *wps)
1777 hapd->wps_upnp = upnp_wps_device_init(ctx, wps, hapd,
1781 wps->wps_upnp = hapd->wps_upnp;
1798 if (hapd->wps == NULL)
1800 return wps_registrar_get_info(hapd->wps->registrar, addr, buf, buflen);
1819 if (hapd->wps->ap_setup_locked) {
1821 hapd->wps->ap_setup_locked = 0;
1822 wps_registrar_update_ie(hapd->wps->registrar);
1860 if (!hapd->wps)
1909 if (hapd->wps)
1910 wps_registrar_update_ie(hapd->wps->registrar);
1968 if (!hapd->wps) {
1973 return wps_registrar_config_ap(hapd->wps->registrar, &cred);
1991 if (hapd->wps == NULL)
1993 ret = wps_registrar_add_nfc_password_token(hapd->wps->registrar,
2017 const struct wpabuf *wps)
2021 wpa_hexdump_buf(MSG_DEBUG, "WPS: Received NFC tag payload", wps);
2023 if (wps_parse_msg(wps, &attr)) {
2039 const struct wpabuf *wps = data;
2053 wps = tmp;
2056 ret = hostapd_wps_nfc_tag_process(hapd, wps);
2067 if (hapd->wps == NULL)
2070 ret = wps_get_oob_cred(hapd->wps, hostapd_wps_rf_band_cb(hapd),
2089 if (hapd->wps == NULL)
2093 struct wps_context *wps = hapd->wps;
2097 hostapd_wps_nfc_clear(wps);
2098 wps->ap_nfc_dev_pw_id = DEV_PW_NFC_CONNECTION_HANDOVER;
2099 wps->ap_nfc_dh_pubkey =
2101 wps->ap_nfc_dh_privkey =
2103 if (!wps->ap_nfc_dh_pubkey || !wps->ap_nfc_dh_privkey) {
2104 hostapd_wps_nfc_clear(wps);
2109 ret = wps_build_nfc_handover_sel(hapd->wps,
2130 struct wpabuf *wps;
2142 wps = ndef_parse_wifi(req);
2143 if (wps == NULL)
2147 wpa_hexdump_buf(MSG_DEBUG, "WPS: NFC payload", wps);
2148 if (wpabuf_len(wps) < 2) {
2153 pos = wpabuf_head(wps);
2155 if (wsc_len > wpabuf_len(wps) - 2) {
2165 if (wsc_len < wpabuf_len(wps) - 2) {
2168 pos + wsc_len, wpabuf_len(wps) - 2 - wsc_len);
2209 ret = wps_registrar_add_nfc_pw_token(hapd->wps->registrar,
2215 wpabuf_free(wps);
2238 struct wps_context *wps = hapd->wps;
2241 if (wps == NULL)
2250 hostapd_wps_nfc_clear(wps);
2253 hapd->conf->wps_nfc_dev_pw_id, hapd->conf->iface, wps);
2254 wps->ap_nfc_dev_pw_id = hapd->conf->wps_nfc_dev_pw_id;
2255 wps->ap_nfc_dh_pubkey = wpabuf_dup(hapd->conf->wps_nfc_dh_pubkey);
2256 wps->ap_nfc_dh_privkey = wpabuf_dup(hapd->conf->wps_nfc_dh_privkey);
2258 wps->ap_nfc_dev_pw = wpabuf_alloc(
2260 if (wps->ap_nfc_dev_pw) {
2262 (char *) wpabuf_put(wps->ap_nfc_dev_pw,
2268 if (!wps->ap_nfc_dh_pubkey || !wps->ap_nfc_dh_privkey ||
2269 !wps->ap_nfc_dev_pw) {
2270 hostapd_wps_nfc_clear(wps);
2282 hostapd_wps_nfc_clear(hapd->wps);