18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Wi-Fi Protected Setup 3de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt * Copyright (c) 2007-2016, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPS_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 129d9e60286e05ae45025b672636490bd12586138dDmitry Shmidt#include "common/ieee802_11_defs.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wps_defs.h" 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wsc_op_code - EAP-WSC OP-Code values 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wsc_op_code { 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_UPnP = 0 /* No OP Code in UPnP transport */, 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_Start = 0x01, 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_ACK = 0x02, 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_NACK = 0x03, 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_MSG = 0x04, 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_Done = 0x05, 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WSC_FRAG_ACK = 0x06 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct upnp_wps_device_sm; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_er; 3104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wps_parse_attr; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_credential - WPS Credential 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ssid: SSID 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ssid_len: Length of SSID 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @auth_type: Authentication Type (WPS_AUTH_OPEN, .. flags) 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @encr_type: Encryption Type (WPS_ENCR_NONE, .. flags) 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key_idx: Key index 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key: Key 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @key_len: Key length in octets 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Credential receiver 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred_attr: Unparsed Credential attribute data (used only in cred_cb()); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * this may be %NULL, if not used 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred_attr_len: Length of cred_attr in octets 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_credential { 489d9e60286e05ae45025b672636490bd12586138dDmitry Shmidt u8 ssid[SSID_MAX_LEN]; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 auth_type; 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 encr_type; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 key_idx; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 key[64]; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t key_len; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_addr[ETH_ALEN]; 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *cred_attr; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t cred_attr_len; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_LEN 8 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_BUFSIZE 21 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEV_TYPE_MAX_LEN 128 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of advertised WPS vendor extension attributes */ 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_VENDOR_EXTENSIONS 10 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum size of WPS Vendor extension attribute */ 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_MAX_VENDOR_EXT_LEN 1024 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of parsed WPS vendor extension attributes */ 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_PARSE_VENDOR_EXT 10 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_device_data - WPS Device Data 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: Device MAC address 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @device_name: Device Name (0..32 octets encoded in UTF-8) 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @manufacturer: Manufacturer (0..64 octets encoded in UTF-8) 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_name: Model Name (0..32 octets encoded in UTF-8) 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_number: Model Number (0..32 octets encoded in UTF-8) 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @serial_number: Serial Number (0..32 octets encoded in UTF-8) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary Device Type 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sec_dev_type: Array of secondary device types 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @num_sec_dev_type: Number of secondary device types 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @os_version: OS Version 821d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt * @rf_bands: RF bands (WPS_RF_24GHZ, WPS_RF_50GHZ, WPS_RF_60GHZ flags) 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @p2p: Whether the device is a P2P device 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_device_data { 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_addr[ETH_ALEN]; 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *device_name; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer; 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_name; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_number; 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *serial_number; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pri_dev_type[WPS_DEV_TYPE_LEN]; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEVICE_TYPES 5 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 sec_dev_type[WPS_SEC_DEVICE_TYPES][WPS_DEV_TYPE_LEN]; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 num_sec_dev_types; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 os_version; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rf_bands; 981f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt u16 config_methods; 9904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *vendor_ext_m1; 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p; 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_config - WPS configuration for a single registration protocol run 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_config { 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps - Pointer to long term WPS context 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_context *wps; 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Whether this end is a Registrar 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int registrar; 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin - Enrollee Device Password (%NULL for Registrar or PBC) 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pin; 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_len - Length on pin in octets 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pin_len; 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pbc - Whether this is protocol run uses PBC 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pbc; 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * assoc_wps_ie: (Re)AssocReq WPS IE (in AP; %NULL if not AP) 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assoc_wps_ie; 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_ap_settings - New AP settings (%NULL if not used) 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This parameter provides new AP settings when using a wireless 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * stations as a Registrar to configure the AP. %NULL means that AP 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * will not be reconfigured, i.e., the station will only learn the 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current AP settings by using AP PIN. 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *new_ap_settings; 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * peer_addr: MAC address of the peer in AP; %NULL if not AP 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr; 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * use_psk_key - Use PSK format key in Credential 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Force PSK format to be used instead of ASCII passphrase when 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * building Credential for an Enrollee. The PSK value is set in 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_context::psk. 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int use_psk_key; 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev_pw_id - Device Password ID for Enrollee when PIN is used 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_pw_id; 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * p2p_dev_addr - P2P Device Address from (Re)Association Request 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * On AP/GO, this is set to the P2P Device Address of the associating 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * P2P client if a P2P IE is included in the (Re)Association Request 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * frame and the P2P Device Address is included. Otherwise, this is set 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to %NULL to indicate the station does not have a P2P Device Address. 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr; 17787fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen 17887fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen /** 17987fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * pbc_in_m1 - Do not remove PushButton config method in M1 (AP) 18087fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * 18187fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * This can be used to enable a workaround to allow Windows 7 to use 18287fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * PBC with the AP. 18387fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen */ 18487fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen int pbc_in_m1; 185cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt 186cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt /** 187cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt * peer_pubkey_hash - Peer public key hash or %NULL if not known 188cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt */ 189cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt const u8 *peer_pubkey_hash; 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_data * wps_init(const struct wps_config *cfg); 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_deinit(struct wps_data *data); 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_process_res - WPS message processing result 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res { 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_DONE - Processing done 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_DONE, 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_CONTINUE - Processing continues 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_CONTINUE, 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_FAILURE - Processing failed 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_FAILURE, 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_PENDING - Processing continues, but waiting for an external 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event (e.g., UPnP message from an external Registrar) 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_PENDING 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res wps_process_msg(struct wps_data *wps, 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wsc_op_code op_code, 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *msg); 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_get_msg(struct wps_data *wps, enum wsc_op_code *op_code); 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pbc_registrar(const struct wpabuf *msg); 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pin_registrar(const struct wpabuf *msg); 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_ap_priority_compar(const struct wpabuf *wps_a, 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_b); 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr, 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ver1_compat); 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst u8 * wps_get_uuid_e(const struct wpabuf *msg); 2341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtint wps_is_20(const struct wpabuf *msg); 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_req_ie(enum wps_request_type req_type); 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_resp_ie(void); 23804949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_build_probe_req_ie(u16 pw_id, struct wps_device_data *dev, 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_request_type req_type, 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int num_req_dev_types, 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *req_dev_types); 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_registrar_config - WPS Registrar configuration 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar_config { 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_psk_cb - Callback for new PSK 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 253391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * @p2p_dev_addr: P2P Device Address of the Enrollee or all zeros if not 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk: The new PSK 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk_len: The length of psk in octets 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called when a new per-device PSK is provisioned. 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 260391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt int (*new_psk_cb)(void *ctx, const u8 *mac_addr, const u8 *p2p_dev_addr, 261391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt const u8 *psk, size_t psk_len); 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb - Callback for WPS IE changes 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @beacon_ie: WPS IE for Beacon 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @probe_resp_ie: WPS IE for Probe Response 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the WPS IE in Beacon or Probe 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Response frames needs to be changed (AP only). Callee is responsible 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * for freeing the buffers. 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*set_ie_cb)(void *ctx, struct wpabuf *beacon_ie, 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *probe_resp_ie); 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_needed_cb - Callback for requesting a PIN 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the unknown Enrollee 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev: Device Data from the unknown Enrollee 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an unknown Enrollee requests to use 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PIN method and a matching PIN (Device Password) is not found in 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Registrar data. 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*pin_needed_cb)(void *ctx, const u8 *uuid_e, 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_device_data *dev); 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * reg_success_cb - Callback for reporting successful registration 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the Enrollee 29504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @dev_pw: Device Password (PIN) used during registration 29604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @dev_pw_len: Length of dev_pw in octets 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an Enrollee completes registration 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * successfully. 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*reg_success_cb)(void *ctx, const u8 *mac_addr, 30204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *uuid_e, const u8 *dev_pw, 30304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt size_t dev_pw_len); 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_sel_reg_cb - Callback for reporting selected registrar changes 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg: Whether the Registrar is selected 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_passwd_id: Device Password ID to indicate with method or 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * specific password the Registrar intends to use 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg_config_methods: Bit field of active config methods 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the Selected Registrar state 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * changes (e.g., a new PIN becomes available or PBC is invoked). This 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * callback is only used by External Registrar implementation; 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb() is used by AP implementation in similar caes, but it 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * provides the full WPS IE data instead of just the minimal Registrar 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * state information. 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*set_sel_reg_cb)(void *ctx, int sel_reg, u16 dev_passwd_id, 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enrollee_seen_cb - Callback for reporting Enrollee based on ProbeReq 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: MAC address of the Enrollee 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID of the Enrollee 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary device type 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @config_methods: Config Methods 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_password_id: Device Password ID 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @request_type: Request Type 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_name: Device Name (if available) 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*enrollee_seen_cb)(void *ctx, const u8 *addr, const u8 *uuid_e, 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type, u16 config_methods, 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id, u8 request_type, 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name); 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for Registrar callbacks 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build: Do not build credential 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This option can be used to disable internal code that builds 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute into M8 based on the current network 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration and Enrollee capabilities. The extra_cred data will 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * then be used as the Credential(s). 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int skip_cred_build; 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred: Additional Credential attribute(s) 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional data (set to %NULL to disable) can be used to add 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute(s) for other networks into M8. If 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build is set, this will also override the automatically 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generated Credential attribute. 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *extra_cred; 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred_len: Length of extra_cred in octets 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t extra_cred_len; 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * disable_auto_conf - Disable auto-configuration on first registration 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * By default, the AP that is started in not configured state will 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generate a random PSK and move to configured state when the first 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registration protocol run is completed successfully. This option can 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be used to disable this functionality and leave it up to an external 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * program to take care of configuration. This requires the extra_cred 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to be set with a suitable Credential and skip_cred_build being used. 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int disable_auto_conf; 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * static_wep_only - Whether the BSS supports only static WEP 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int static_wep_only; 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dualband - Whether this is a concurrent dualband AP 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int dualband; 390391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt 391391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt /** 392391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * force_per_enrollee_psk - Force per-Enrollee random PSK 393391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * 394391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * This forces per-Enrollee random PSK to be generated even if a default 395391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * PSK is set for a network. 396391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt */ 397391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt int force_per_enrollee_psk; 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_event - WPS event types 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_event { 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_M2D - M2D received (Registrar did not know us) 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_M2D, 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_FAIL - Registration failed 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_FAIL, 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_SUCCESS - Registration succeeded 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_SUCCESS, 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PWD_AUTH_FAIL - Password authentication failed 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PWD_AUTH_FAIL, 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_OVERLAP - PBC session overlap detected 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_OVERLAP, 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_TIMEOUT - PBC walktime expired before protocol run start 4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_TIMEOUT, 4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 436b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * WPS_EV_PBC_ACTIVE - PBC mode was activated 437b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 438b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt WPS_EV_PBC_ACTIVE, 439b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 440b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 441b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * WPS_EV_PBC_DISABLE - PBC mode was disabled 442b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 443b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt WPS_EV_PBC_DISABLE, 444b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 445b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_ADD - ER: AP added 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_ADD, 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_REMOVE - ER: AP removed 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_REMOVE, 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_ADD - ER: Enrollee added 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_ADD, 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_REMOVE - ER: Enrollee removed 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_REMOVE, 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_SETTINGS - ER: AP Settings learned 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_SETTINGS, 4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_SET_SELECTED_REGISTRAR - ER: SetSelectedRegistrar event 4728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 473c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt WPS_EV_ER_SET_SELECTED_REGISTRAR, 474c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt 475c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt /** 476c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * WPS_EV_AP_PIN_SUCCESS - External Registrar used correct AP PIN 477c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt */ 478c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt WPS_EV_AP_PIN_SUCCESS 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * union wps_event_data - WPS event data 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunion wps_event_data { 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_m2d - M2D event data 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_m2d { 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *manufacturer; 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t manufacturer_len; 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_name; 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_name_len; 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_number; 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_number_len; 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *serial_number; 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t serial_number_len; 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dev_name; 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t dev_name_len; 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *primary_dev_type; /* 8 octets */ 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id; 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } m2d; 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_fail - Registration failure information 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: enum wps_msg_type 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_fail { 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int msg; 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 error_indication; 513b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } fail; 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 516b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt struct wps_event_success { 517b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 518b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt } success; 519b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_pwd_auth_fail { 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enrollee; 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int part; 523b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } pwd_auth_fail; 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap { 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *friendly_name; 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer_url; 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_description; 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_url; 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *upc; 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 wps_state; 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap; 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_enrollee { 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int m1_received; 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name; 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } enrollee; 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap_settings { 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred; 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap_settings; 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_set_selected_registrar { 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int sel_reg; 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods; 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_START, 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_DONE, 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_FAILED 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } state; 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } set_sel_reg; 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct upnp_pending_message - Pending PutWLANResponse messages 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @next: Pointer to next pending message or %NULL 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: NewWLANEventMAC 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: NewMessage 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @type: Message Type 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct upnp_pending_message { 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *next; 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *msg; 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_msg_type type; 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_context - Long term WPS context data 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This data is stored at the higher layer Authenticator or Supplicant data 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * structures and it is maintained over multiple registration protocol runs. 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_context { 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap - Whether the local end is an access point 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap; 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Pointer to WPS registrar data from wps_registrar_init() 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_registrar *registrar; 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps_state - Current WPS state 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_state wps_state; 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_setup_locked - Whether AP setup is locked (only used at AP) 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap_setup_locked; 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uuid - Own UUID 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 uuid[16]; 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid - SSID 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This SSID is used by the Registrar to fill in information for 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credentials. In addition, AP uses it when acting as an Enrollee to 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * notify Registrar of the current configuration. 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6279d9e60286e05ae45025b672636490bd12586138dDmitry Shmidt u8 ssid[SSID_MAX_LEN]; 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid_len - Length of ssid in octets 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev - Own WPS device data 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_device_data dev; 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_ctx - Context data for Diffie-Hellman operation 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *dh_ctx; 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_privkey - Diffie-Hellman private key 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_privkey; 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_pubkey_oob - Diffie-Hellman public key 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_pubkey; 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * config_methods - Enabled configuration methods 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Bit field of WPS_CONFIG_* 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * encr_types - Enabled encryption types (bit field of WPS_ENCR_*) 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 encr_types; 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 667de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt * encr_types_rsn - Enabled encryption types for RSN (WPS_ENCR_*) 668de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt */ 669de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt u16 encr_types_rsn; 670de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt 671de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt /** 672de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt * encr_types_wpa - Enabled encryption types for WPA (WPS_ENCR_*) 673de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt */ 674de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt u16 encr_types_wpa; 675de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt 676de47be75037bccd4a11b62eedb3d4aed1b36fa67Dmitry Shmidt /** 6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * auth_types - Authentication types (bit field of WPS_AUTH_*) 6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 auth_types; 6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 68296be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt * encr_types - Current AP encryption type (WPS_ENCR_*) 68396be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt */ 68496be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt u16 ap_encr_type; 68596be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt 68696be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt /** 68796be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt * ap_auth_type - Current AP authentication types (WPS_AUTH_*) 68896be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt */ 68996be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt u16 ap_auth_type; 69096be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt 69196be6222df414a7dde5c5b1b72df22e67b1a77fcDmitry Shmidt /** 6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key - The current Network Key (PSK) or %NULL to generate new 6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, Registrar will generate per-device PSK. In addition, AP 6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uses this when acting as an Enrollee to notify Registrar of the 6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current configuration. 6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * When using WPA/WPA2-Person, this key can be either the ASCII 6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * passphrase (8..63 characters) or the 32-octet PSK (64 hex 7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * characters). When this is set to the ASCII passphrase, the PSK can 7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be provided in the psk buffer and used per-Enrollee to control which 7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key type is included in the Credential (e.g., to reduce calculation 7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * need on low-powered devices by provisioning PSK while still allowing 7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * other devices to get the passphrase). 7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *network_key; 7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key_len - Length of network_key in octets 7108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t network_key_len; 7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk - The current network PSK 7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 7168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional value can be used to provide the current PSK if 7178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key is set to the ASCII passphrase. 7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 psk[32]; 7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk_set - Whether psk value is set 7238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int psk_set; 7258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings - AP Settings override for M7 (only used at AP) 7288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 7298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, AP Settings attributes will be generated based on the 7308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current network configuration. 7318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *ap_settings; 7338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings_len - Length of ap_settings in octets 7368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ap_settings_len; 7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * friendly_name - Friendly Name (required for UPnP) 7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *friendly_name; 7438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * manufacturer_url - Manufacturer URL (optional for UPnP) 7468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer_url; 7488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_description - Model Description (recommended for UPnP) 7518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_description; 7538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_url - Model URL (optional for UPnP) 7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_url; 7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * upc - Universal Product Code (optional for UPnP) 7618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *upc; 7638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cred_cb - Callback to notify that new Credentials were received 7668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred: The received Credential 7688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Return: 0 on success, -1 on failure 7698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cred_cb)(void *ctx, const struct wps_credential *cred); 7718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event_cb - Event callback (state information about progress) 7748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @event: Event type 7768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @data: Event data 7778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*event_cb)(void *ctx, enum wps_event event, 7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt union wps_event_data *data); 7808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 782b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * rf_band_cb - Fetch currently used RF band 783b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 784b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * Return: Current used RF band or 0 if not known 785b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 786b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt int (*rf_band_cb)(void *ctx); 787b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 788b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 7898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for callbacks 7908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 7928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_wps_device_sm *wps_upnp; 7948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Pending messages from UPnP PutWLANResponse */ 7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *upnp_msgs; 79704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 79804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt u16 ap_nfc_dev_pw_id; 79904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dh_pubkey; 80004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dh_privkey; 80104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dev_pw; 8028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 8038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar * 8058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwps_registrar_init(struct wps_context *wps, 8068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_registrar_config *cfg); 8078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_deinit(struct wps_registrar *reg); 8088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_add_pin(struct wps_registrar *reg, const u8 *addr, 8098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, const u8 *pin, size_t pin_len, 8108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int timeout); 8118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_invalidate_pin(struct wps_registrar *reg, const u8 *uuid); 8128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_wps_cancel(struct wps_registrar *reg); 8138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_unlock_pin(struct wps_registrar *reg, const u8 *uuid); 8148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_button_pushed(struct wps_registrar *reg, 8158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr); 81604949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wps_registrar_complete(struct wps_registrar *registrar, const u8 *uuid_e, 81704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *dev_pw, size_t dev_pw_len); 8188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_probe_req_rx(struct wps_registrar *reg, const u8 *addr, 8198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_data, 8208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p_wildcard); 8218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_update_ie(struct wps_registrar *reg); 8228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_get_info(struct wps_registrar *reg, const u8 *addr, 8238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *buf, size_t buflen); 8248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_config_ap(struct wps_registrar *reg, 8258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_credential *cred); 82604949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_registrar_add_nfc_pw_token(struct wps_registrar *reg, 82704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *pubkey_hash, u16 pw_id, 828cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt const u8 *dev_pw, size_t dev_pw_len, 829cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt int pk_hash_provided_oob); 83004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_registrar_add_nfc_password_token(struct wps_registrar *reg, 83104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *oob_dev_pw, 83204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt size_t oob_dev_pw_len); 8336c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtvoid wps_registrar_flush(struct wps_registrar *reg); 8348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtint wps_build_credential_wrap(struct wpabuf *msg, 8361f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const struct wps_credential *cred); 8371f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 8388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_checksum(unsigned int pin); 8398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_valid(unsigned int pin); 84057c2d39d85825f38c5fdac9b73bb0088406ffc85Dmitry Shmidtint wps_generate_pin(unsigned int *pin); 84104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_pin_str_valid(const char *pin); 8428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_free_pending_msgs(struct upnp_pending_message *msgs); 8438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 844cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_get_oob_cred(struct wps_context *wps, int rf_band, 845cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt int channel); 84604949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_oob_use_cred(struct wps_context *wps, struct wps_parse_attr *attr); 8478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_attr_text(struct wpabuf *data, char *buf, char *end); 848b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidtconst char * wps_ei_str(enum wps_error_indication ei); 8498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_er * wps_er_init(struct wps_context *wps, const char *ifname, 8518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *filter); 8528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_refresh(struct wps_er *er); 8538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_deinit(struct wps_er *er, void (*cb)(void *ctx), void *ctx); 8548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_set_sel_reg(struct wps_er *er, int sel_reg, u16 dev_passwd_id, 8558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 8561e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_pbc(struct wps_er *er, const u8 *uuid, const u8 *addr); 8571e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtconst u8 * wps_er_get_sta_uuid(struct wps_er *er, const u8 *addr); 8581e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_learn(struct wps_er *er, const u8 *uuid, const u8 *addr, 8591e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *pin, size_t pin_len); 8601e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_set_config(struct wps_er *er, const u8 *uuid, const u8 *addr, 8618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred); 8621e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_config(struct wps_er *er, const u8 *uuid, const u8 *addr, 8631e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *pin, size_t pin_len, 8641e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const struct wps_credential *cred); 8651e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtstruct wpabuf * wps_er_config_token_from_cred(struct wps_context *wps, 8661e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt struct wps_credential *cred); 8671e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtstruct wpabuf * wps_er_nfc_config_token(struct wps_er *er, const u8 *uuid, 8681e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *addr); 869cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_er_nfc_handover_sel(struct wps_er *er, 870cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wps_context *wps, const u8 *uuid, 871cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt const u8 *addr, struct wpabuf *pubkey); 8728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_dev_type_str2bin(const char *str, u8 dev_type[WPS_DEV_TYPE_LEN]); 8748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * wps_dev_type_bin2str(const u8 dev_type[WPS_DEV_TYPE_LEN], char *buf, 8758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t buf_len); 8768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid uuid_gen_mac_addr(const u8 *mac_addr, u8 *uuid); 8778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtu16 wps_config_methods_str2bin(const char *str); 87804949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_build_nfc_pw_token(u16 dev_pw_id, 87904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const struct wpabuf *pubkey, 88004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const struct wpabuf *dev_pw); 881f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidtstruct wpabuf * wps_nfc_token_build(int ndef, int id, struct wpabuf *pubkey, 882f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidt struct wpabuf *dev_pw); 883cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtint wps_nfc_gen_dh(struct wpabuf **pubkey, struct wpabuf **privkey); 88404949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_nfc_token_gen(int ndef, int *id, struct wpabuf **pubkey, 88504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf **privkey, 88604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf **dev_pw); 887cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_build_nfc_handover_req(struct wps_context *ctx, 888cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wpabuf *nfc_dh_pubkey); 889cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_build_nfc_handover_sel(struct wps_context *ctx, 890cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wpabuf *nfc_dh_pubkey, 891cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt const u8 *bssid, int freq); 892cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_build_nfc_handover_req_p2p(struct wps_context *ctx, 893cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wpabuf *nfc_dh_pubkey); 894cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * wps_build_nfc_handover_sel_p2p(struct wps_context *ctx, 895cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt int nfc_dev_pw_id, 896cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wpabuf *nfc_dh_pubkey, 897cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct wpabuf *nfc_dev_pw); 89804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 89904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt/* ndef.c */ 90004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * ndef_parse_wifi(const struct wpabuf *buf); 90104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * ndef_build_wifi(const struct wpabuf *buf); 902cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * ndef_parse_p2p(const struct wpabuf *buf); 903cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidtstruct wpabuf * ndef_build_p2p(const struct wpabuf *buf); 9048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS_STRICT 9068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon(const struct wpabuf *wps_ie); 9078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe, 9088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr); 9098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_probe_req(const struct wpabuf *wps_ie, const u8 *addr); 9108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_req(const struct wpabuf *wps_ie); 9118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_resp(const struct wpabuf *wps_ie); 9128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m1(const struct wpabuf *tlvs); 9138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2(const struct wpabuf *tlvs); 9148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2d(const struct wpabuf *tlvs); 9158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m3(const struct wpabuf *tlvs); 9168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4(const struct wpabuf *tlvs); 9178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2); 9188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5(const struct wpabuf *tlvs); 9198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2); 9208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6(const struct wpabuf *tlvs); 9218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2); 9228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7(const struct wpabuf *tlvs); 9238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, int wps2); 9248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8(const struct wpabuf *tlvs); 9258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, int wps2); 9268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_ack(const struct wpabuf *tlvs); 9278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_nack(const struct wpabuf *tlvs); 9288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_done(const struct wpabuf *tlvs); 9298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_upnp_set_selected_registrar(const struct wpabuf *tlvs); 9308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_WPS_STRICT */ 9318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon(const struct wpabuf *wps_ie){ 9328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, 9368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int probe, const u8 *addr) 9378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_probe_req(const struct wpabuf *wps_ie, 9428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 9438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_req(const struct wpabuf *wps_ie) 9488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_resp(const struct wpabuf *wps_ie) 9538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m1(const struct wpabuf *tlvs) 9588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2(const struct wpabuf *tlvs) 9638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2d(const struct wpabuf *tlvs) 9688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m3(const struct wpabuf *tlvs) 9738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4(const struct wpabuf *tlvs) 9788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2) 9838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5(const struct wpabuf *tlvs) 9888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2) 9938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6(const struct wpabuf *tlvs) 9988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2) 10038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7(const struct wpabuf *tlvs) 10088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, 10138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 10148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8(const struct wpabuf *tlvs) 10198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, 10248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 10258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_ack(const struct wpabuf *tlvs) 10308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_nack(const struct wpabuf *tlvs) 10358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_done(const struct wpabuf *tlvs) 10408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_upnp_set_selected_registrar( 10458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 10468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS_STRICT */ 10508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPS_H */ 1052