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