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 45d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt * @ap_channel: AP channel 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_credential { 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ssid[32]; 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; 58d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt u16 ap_channel; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_LEN 8 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_DEV_TYPE_BUFSIZE 21 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEV_TYPE_MAX_LEN 128 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of advertised WPS vendor extension attributes */ 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_VENDOR_EXTENSIONS 10 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum size of WPS Vendor extension attribute */ 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_MAX_VENDOR_EXT_LEN 1024 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* maximum number of parsed WPS vendor extension attributes */ 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define MAX_WPS_PARSE_VENDOR_EXT 10 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_device_data - WPS Device Data 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: Device MAC address 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @device_name: Device Name (0..32 octets encoded in UTF-8) 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @manufacturer: Manufacturer (0..64 octets encoded in UTF-8) 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_name: Model Name (0..32 octets encoded in UTF-8) 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @model_number: Model Number (0..32 octets encoded in UTF-8) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @serial_number: Serial Number (0..32 octets encoded in UTF-8) 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary Device Type 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sec_dev_type: Array of secondary device types 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @num_sec_dev_type: Number of secondary device types 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @os_version: OS Version 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @rf_bands: RF bands (WPS_RF_24GHZ, WPS_RF_50GHZ flags) 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @p2p: Whether the device is a P2P device 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_device_data { 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mac_addr[ETH_ALEN]; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *device_name; 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_name; 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_number; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *serial_number; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pri_dev_type[WPS_DEV_TYPE_LEN]; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPS_SEC_DEVICE_TYPES 5 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 sec_dev_type[WPS_SEC_DEVICE_TYPES][WPS_DEV_TYPE_LEN]; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 num_sec_dev_types; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 os_version; 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rf_bands; 991f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt u16 config_methods; 10004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *vendor_ext_m1; 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *vendor_ext[MAX_WPS_VENDOR_EXTENSIONS]; 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p; 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_config - WPS configuration for a single registration protocol run 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_config { 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps - Pointer to long term WPS context 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_context *wps; 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Whether this end is a Registrar 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int registrar; 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin - Enrollee Device Password (%NULL for Registrar or PBC) 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pin; 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_len - Length on pin in octets 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pin_len; 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pbc - Whether this is protocol run uses PBC 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pbc; 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * assoc_wps_ie: (Re)AssocReq WPS IE (in AP; %NULL if not AP) 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assoc_wps_ie; 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_ap_settings - New AP settings (%NULL if not used) 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This parameter provides new AP settings when using a wireless 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * stations as a Registrar to configure the AP. %NULL means that AP 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * will not be reconfigured, i.e., the station will only learn the 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current AP settings by using AP PIN. 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *new_ap_settings; 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * peer_addr: MAC address of the peer in AP; %NULL if not AP 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr; 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * use_psk_key - Use PSK format key in Credential 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Force PSK format to be used instead of ASCII passphrase when 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * building Credential for an Enrollee. The PSK value is set in 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_context::psk. 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int use_psk_key; 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev_pw_id - Device Password ID for Enrollee when PIN is used 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_pw_id; 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * p2p_dev_addr - P2P Device Address from (Re)Association Request 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * On AP/GO, this is set to the P2P Device Address of the associating 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * P2P client if a P2P IE is included in the (Re)Association Request 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * frame and the P2P Device Address is included. Otherwise, this is set 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to %NULL to indicate the station does not have a P2P Device Address. 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr; 17887fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen 17987fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen /** 18087fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * pbc_in_m1 - Do not remove PushButton config method in M1 (AP) 18187fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * 18287fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * This can be used to enable a workaround to allow Windows 7 to use 18387fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen * PBC with the AP. 18487fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen */ 18587fd279308af3f806848c8f2ab65ef18c6ac4c30Jouni Malinen int pbc_in_m1; 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_data * wps_init(const struct wps_config *cfg); 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_deinit(struct wps_data *data); 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_process_res - WPS message processing result 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res { 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_DONE - Processing done 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_DONE, 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_CONTINUE - Processing continues 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_CONTINUE, 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_FAILURE - Processing failed 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_FAILURE, 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_PENDING - Processing continues, but waiting for an external 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event (e.g., UPnP message from an external Registrar) 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_PENDING 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_process_res wps_process_msg(struct wps_data *wps, 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wsc_op_code op_code, 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *msg); 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_get_msg(struct wps_data *wps, enum wsc_op_code *op_code); 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pbc_registrar(const struct wpabuf *msg); 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_selected_pin_registrar(const struct wpabuf *msg); 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_ap_priority_compar(const struct wpabuf *wps_a, 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_b); 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr, 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ver1_compat); 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtconst u8 * wps_get_uuid_e(const struct wpabuf *msg); 2301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtint wps_is_20(const struct wpabuf *msg); 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_req_ie(enum wps_request_type req_type); 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpabuf * wps_build_assoc_resp_ie(void); 23404949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_build_probe_req_ie(u16 pw_id, struct wps_device_data *dev, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_request_type req_type, 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int num_req_dev_types, 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *req_dev_types); 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_registrar_config - WPS Registrar configuration 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar_config { 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * new_psk_cb - Callback for new PSK 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 249391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * @p2p_dev_addr: P2P Device Address of the Enrollee or all zeros if not 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk: The new PSK 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @psk_len: The length of psk in octets 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called when a new per-device PSK is provisioned. 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 256391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt int (*new_psk_cb)(void *ctx, const u8 *mac_addr, const u8 *p2p_dev_addr, 257391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt const u8 *psk, size_t psk_len); 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb - Callback for WPS IE changes 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @beacon_ie: WPS IE for Beacon 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @probe_resp_ie: WPS IE for Probe Response 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Returns: 0 on success, -1 on failure 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the WPS IE in Beacon or Probe 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Response frames needs to be changed (AP only). Callee is responsible 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * for freeing the buffers. 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*set_ie_cb)(void *ctx, struct wpabuf *beacon_ie, 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *probe_resp_ie); 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * pin_needed_cb - Callback for requesting a PIN 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the unknown Enrollee 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev: Device Data from the unknown Enrollee 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an unknown Enrollee requests to use 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * PIN method and a matching PIN (Device Password) is not found in 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Registrar data. 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*pin_needed_cb)(void *ctx, const u8 *uuid_e, 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_device_data *dev); 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * reg_success_cb - Callback for reporting successful registration 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @mac_addr: MAC address of the Enrollee 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID-E of the Enrollee 29104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @dev_pw: Device Password (PIN) used during registration 29204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt * @dev_pw_len: Length of dev_pw in octets 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever an Enrollee completes registration 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * successfully. 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*reg_success_cb)(void *ctx, const u8 *mac_addr, 29804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *uuid_e, const u8 *dev_pw, 29904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt size_t dev_pw_len); 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_sel_reg_cb - Callback for reporting selected registrar changes 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg: Whether the Registrar is selected 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_passwd_id: Device Password ID to indicate with method or 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * specific password the Registrar intends to use 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @sel_reg_config_methods: Bit field of active config methods 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This callback is called whenever the Selected Registrar state 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * changes (e.g., a new PIN becomes available or PBC is invoked). This 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * callback is only used by External Registrar implementation; 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * set_ie_cb() is used by AP implementation in similar caes, but it 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * provides the full WPS IE data instead of just the minimal Registrar 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * state information. 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*set_sel_reg_cb)(void *ctx, int sel_reg, u16 dev_passwd_id, 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enrollee_seen_cb - Callback for reporting Enrollee based on ProbeReq 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: MAC address of the Enrollee 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @uuid_e: UUID of the Enrollee 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @pri_dev_type: Primary device type 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @config_methods: Config Methods 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_password_id: Device Password ID 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @request_type: Request Type 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @dev_name: Device Name (if available) 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*enrollee_seen_cb)(void *ctx, const u8 *addr, const u8 *uuid_e, 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type, u16 config_methods, 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id, u8 request_type, 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name); 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for Registrar callbacks 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build: Do not build credential 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This option can be used to disable internal code that builds 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute into M8 based on the current network 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration and Enrollee capabilities. The extra_cred data will 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * then be used as the Credential(s). 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int skip_cred_build; 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred: Additional Credential attribute(s) 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional data (set to %NULL to disable) can be used to add 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credential attribute(s) for other networks into M8. If 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * skip_cred_build is set, this will also override the automatically 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generated Credential attribute. 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *extra_cred; 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * extra_cred_len: Length of extra_cred in octets 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t extra_cred_len; 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * disable_auto_conf - Disable auto-configuration on first registration 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * By default, the AP that is started in not configured state will 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * generate a random PSK and move to configured state when the first 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registration protocol run is completed successfully. This option can 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be used to disable this functionality and leave it up to an external 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * program to take care of configuration. This requires the extra_cred 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * to be set with a suitable Credential and skip_cred_build being used. 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int disable_auto_conf; 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * static_wep_only - Whether the BSS supports only static WEP 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int static_wep_only; 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dualband - Whether this is a concurrent dualband AP 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int dualband; 386391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt 387391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt /** 388391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * force_per_enrollee_psk - Force per-Enrollee random PSK 389391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * 390391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * This forces per-Enrollee random PSK to be generated even if a default 391391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt * PSK is set for a network. 392391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt */ 393391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt int force_per_enrollee_psk; 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * enum wps_event - WPS event types 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum wps_event { 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_M2D - M2D received (Registrar did not know us) 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_M2D, 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_FAIL - Registration failed 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_FAIL, 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_SUCCESS - Registration succeeded 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_SUCCESS, 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PWD_AUTH_FAIL - Password authentication failed 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PWD_AUTH_FAIL, 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_OVERLAP - PBC session overlap detected 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_OVERLAP, 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_PBC_TIMEOUT - PBC walktime expired before protocol run start 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_PBC_TIMEOUT, 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 432b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * WPS_EV_PBC_ACTIVE - PBC mode was activated 433b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 434b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt WPS_EV_PBC_ACTIVE, 435b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 436b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 437b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * WPS_EV_PBC_DISABLE - PBC mode was disabled 438b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 439b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt WPS_EV_PBC_DISABLE, 440b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 441b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_ADD - ER: AP added 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_ADD, 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_REMOVE - ER: AP removed 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_REMOVE, 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_ADD - ER: Enrollee added 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_ADD, 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_ENROLLEE_REMOVE - ER: Enrollee removed 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_ENROLLEE_REMOVE, 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_AP_SETTINGS - ER: AP Settings learned 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_EV_ER_AP_SETTINGS, 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * WPS_EV_ER_SET_SELECTED_REGISTRAR - ER: SetSelectedRegistrar event 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 469c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt WPS_EV_ER_SET_SELECTED_REGISTRAR, 470c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt 471c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt /** 472c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * WPS_EV_AP_PIN_SUCCESS - External Registrar used correct AP PIN 473c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt */ 474c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt WPS_EV_AP_PIN_SUCCESS 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * union wps_event_data - WPS event data 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunion wps_event_data { 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_m2d - M2D event data 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_m2d { 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *manufacturer; 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t manufacturer_len; 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_name; 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_name_len; 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *model_number; 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t model_number_len; 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *serial_number; 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t serial_number_len; 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dev_name; 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t dev_name_len; 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *primary_dev_type; /* 8 octets */ 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_password_id; 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } m2d; 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_event_fail - Registration failure information 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: enum wps_msg_type 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_fail { 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int msg; 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_error; 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 error_indication; 509b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } fail; 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 512b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt struct wps_event_success { 513b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 514b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt } success; 515b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_pwd_auth_fail { 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enrollee; 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int part; 519b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt u8 peer_macaddr[ETH_ALEN]; 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } pwd_auth_fail; 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap { 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *friendly_name; 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer_url; 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_description; 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_url; 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *upc; 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 wps_state; 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap; 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_enrollee { 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *mac_addr; 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int m1_received; 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pri_dev_type; 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *dev_name; 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *manufacturer; 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_name; 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *model_number; 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *serial_number; 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } enrollee; 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_ap_settings { 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred; 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } ap_settings; 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_event_er_set_selected_registrar { 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid; 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int sel_reg; 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 dev_passwd_id; 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods; 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_START, 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_DONE, 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPS_ER_SET_SEL_REG_FAILED 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } state; 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } set_sel_reg; 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct upnp_pending_message - Pending PutWLANResponse messages 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @next: Pointer to next pending message or %NULL 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @addr: NewWLANEventMAC 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @msg: NewMessage 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @type: Message Type 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct upnp_pending_message { 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *next; 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *msg; 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_msg_type type; 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wps_context - Long term WPS context data 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This data is stored at the higher layer Authenticator or Supplicant data 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * structures and it is maintained over multiple registration protocol runs. 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_context { 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap - Whether the local end is an access point 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap; 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * registrar - Pointer to WPS registrar data from wps_registrar_init() 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_registrar *registrar; 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wps_state - Current WPS state 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wps_state wps_state; 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_setup_locked - Whether AP setup is locked (only used at AP) 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ap_setup_locked; 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uuid - Own UUID 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 uuid[16]; 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid - SSID 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This SSID is used by the Registrar to fill in information for 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Credentials. In addition, AP uses it when acting as an Enrollee to 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * notify Registrar of the current configuration. 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ssid[32]; 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ssid_len - Length of ssid in octets 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dev - Own WPS device data 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_device_data dev; 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_ctx - Context data for Diffie-Hellman operation 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *dh_ctx; 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_privkey - Diffie-Hellman private key 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_privkey; 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * dh_pubkey_oob - Diffie-Hellman public key 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpabuf *dh_pubkey; 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * config_methods - Enabled configuration methods 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Bit field of WPS_CONFIG_* 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods; 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * encr_types - Enabled encryption types (bit field of WPS_ENCR_*) 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 encr_types; 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * auth_types - Authentication types (bit field of WPS_AUTH_*) 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 auth_types; 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key - The current Network Key (PSK) or %NULL to generate new 6698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, Registrar will generate per-device PSK. In addition, AP 6718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * uses this when acting as an Enrollee to notify Registrar of the 6728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current configuration. 6738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * When using WPA/WPA2-Person, this key can be either the ASCII 6758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * passphrase (8..63 characters) or the 32-octet PSK (64 hex 6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * characters). When this is set to the ASCII passphrase, the PSK can 6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * be provided in the psk buffer and used per-Enrollee to control which 6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * key type is included in the Credential (e.g., to reduce calculation 6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * need on low-powered devices by provisioning PSK while still allowing 6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * other devices to get the passphrase). 6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *network_key; 6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key_len - Length of network_key in octets 6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t network_key_len; 6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk - The current network PSK 6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This optional value can be used to provide the current PSK if 6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * network_key is set to the ASCII passphrase. 6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 psk[32]; 6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * psk_set - Whether psk value is set 6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int psk_set; 7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings - AP Settings override for M7 (only used at AP) 7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * If %NULL, AP Settings attributes will be generated based on the 7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * current network configuration. 7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *ap_settings; 7098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * ap_settings_len - Length of ap_settings in octets 7128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ap_settings_len; 7148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * friendly_name - Friendly Name (required for UPnP) 7178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *friendly_name; 7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * manufacturer_url - Manufacturer URL (optional for UPnP) 7228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *manufacturer_url; 7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_description - Model Description (recommended for UPnP) 7278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_description; 7298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * model_url - Model URL (optional for UPnP) 7328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *model_url; 7348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * upc - Universal Product Code (optional for UPnP) 7378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *upc; 7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cred_cb - Callback to notify that new Credentials were received 7428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @cred: The received Credential 7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Return: 0 on success, -1 on failure 7458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cred_cb)(void *ctx, const struct wps_credential *cred); 7478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 7498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * event_cb - Event callback (state information about progress) 7508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 7518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @event: Event type 7528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @data: Event data 7538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void (*event_cb)(void *ctx, enum wps_event event, 7558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt union wps_event_data *data); 7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /** 758b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * rf_band_cb - Fetch currently used RF band 759b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * @ctx: Higher layer context data (cb_ctx) 760b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt * Return: Current used RF band or 0 if not known 761b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt */ 762b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt int (*rf_band_cb)(void *ctx); 763b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt 764b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidt /** 7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * cb_ctx: Higher layer context data for callbacks 7668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx; 7688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_wps_device_sm *wps_upnp; 7708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Pending messages from UPnP PutWLANResponse */ 7728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct upnp_pending_message *upnp_msgs; 77304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 77404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt u16 ap_nfc_dev_pw_id; 77504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dh_pubkey; 77604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dh_privkey; 77704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf *ap_nfc_dev_pw; 7788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 7808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_registrar * 7818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwps_registrar_init(struct wps_context *wps, 7828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_registrar_config *cfg); 7838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_deinit(struct wps_registrar *reg); 7848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_add_pin(struct wps_registrar *reg, const u8 *addr, 7858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *uuid, const u8 *pin, size_t pin_len, 7868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int timeout); 7878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_invalidate_pin(struct wps_registrar *reg, const u8 *uuid); 7888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_wps_cancel(struct wps_registrar *reg); 7898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_unlock_pin(struct wps_registrar *reg, const u8 *uuid); 7908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_button_pushed(struct wps_registrar *reg, 7918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *p2p_dev_addr); 79204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wps_registrar_complete(struct wps_registrar *registrar, const u8 *uuid_e, 79304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *dev_pw, size_t dev_pw_len); 7948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_registrar_probe_req_rx(struct wps_registrar *reg, const u8 *addr, 7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *wps_data, 7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int p2p_wildcard); 7978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_update_ie(struct wps_registrar *reg); 7988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_get_info(struct wps_registrar *reg, const u8 *addr, 7998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt char *buf, size_t buflen); 8008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_registrar_config_ap(struct wps_registrar *reg, 8018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wps_credential *cred); 80204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_registrar_add_nfc_pw_token(struct wps_registrar *reg, 80304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *pubkey_hash, u16 pw_id, 80404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *dev_pw, size_t dev_pw_len); 80504949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_registrar_add_nfc_password_token(struct wps_registrar *reg, 80604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const u8 *oob_dev_pw, 80704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt size_t oob_dev_pw_len); 8088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8091f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtint wps_build_credential_wrap(struct wpabuf *msg, 8101f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt const struct wps_credential *cred); 8111f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 8128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_checksum(unsigned int pin); 8138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_pin_valid(unsigned int pin); 8148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtunsigned int wps_generate_pin(void); 81504949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_pin_str_valid(const char *pin); 8168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_free_pending_msgs(struct upnp_pending_message *msgs); 8178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 81804949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_get_oob_cred(struct wps_context *wps); 81904949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wps_oob_use_cred(struct wps_context *wps, struct wps_parse_attr *attr); 8208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_attr_text(struct wpabuf *data, char *buf, char *end); 821b7b4d0ec07161a6d76c40ba7ef1306e82fbb7e15Dmitry Shmidtconst char * wps_ei_str(enum wps_error_indication ei); 8228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wps_er * wps_er_init(struct wps_context *wps, const char *ifname, 8248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *filter); 8258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_refresh(struct wps_er *er); 8268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_deinit(struct wps_er *er, void (*cb)(void *ctx), void *ctx); 8278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wps_er_set_sel_reg(struct wps_er *er, int sel_reg, u16 dev_passwd_id, 8288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 sel_reg_config_methods); 8291e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_pbc(struct wps_er *er, const u8 *uuid, const u8 *addr); 8301e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtconst u8 * wps_er_get_sta_uuid(struct wps_er *er, const u8 *addr); 8311e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_learn(struct wps_er *er, const u8 *uuid, const u8 *addr, 8321e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *pin, size_t pin_len); 8331e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_set_config(struct wps_er *er, const u8 *uuid, const u8 *addr, 8348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wps_credential *cred); 8351e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtint wps_er_config(struct wps_er *er, const u8 *uuid, const u8 *addr, 8361e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *pin, size_t pin_len, 8371e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const struct wps_credential *cred); 8381e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtstruct wpabuf * wps_er_config_token_from_cred(struct wps_context *wps, 8391e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt struct wps_credential *cred); 8401e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidtstruct wpabuf * wps_er_nfc_config_token(struct wps_er *er, const u8 *uuid, 8411e78e76961664775f58b139f8c6388cfa0485f3dDmitry Shmidt const u8 *addr); 8428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_dev_type_str2bin(const char *str, u8 dev_type[WPS_DEV_TYPE_LEN]); 8448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtchar * wps_dev_type_bin2str(const u8 dev_type[WPS_DEV_TYPE_LEN], char *buf, 8458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t buf_len); 8468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid uuid_gen_mac_addr(const u8 *mac_addr, u8 *uuid); 8478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtu16 wps_config_methods_str2bin(const char *str); 84804949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_build_nfc_pw_token(u16 dev_pw_id, 84904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const struct wpabuf *pubkey, 85004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt const struct wpabuf *dev_pw); 851f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidtstruct wpabuf * wps_nfc_token_build(int ndef, int id, struct wpabuf *pubkey, 852f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidt struct wpabuf *dev_pw); 85304949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * wps_nfc_token_gen(int ndef, int *id, struct wpabuf **pubkey, 85404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf **privkey, 85504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt struct wpabuf **dev_pw); 85604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 85704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt/* ndef.c */ 85804949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * ndef_parse_wifi(const struct wpabuf *buf); 85904949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstruct wpabuf * ndef_build_wifi(const struct wpabuf *buf); 860f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidtstruct wpabuf * ndef_build_wifi_hc(int begin); 861d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidtstruct wpabuf * ndef_build_wifi_hr(void); 8628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS_STRICT 8648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon(const struct wpabuf *wps_ie); 8658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, int probe, 8668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr); 8678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_probe_req(const struct wpabuf *wps_ie, const u8 *addr); 8688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_req(const struct wpabuf *wps_ie); 8698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_assoc_resp(const struct wpabuf *wps_ie); 8708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m1(const struct wpabuf *tlvs); 8718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2(const struct wpabuf *tlvs); 8728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m2d(const struct wpabuf *tlvs); 8738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m3(const struct wpabuf *tlvs); 8748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4(const struct wpabuf *tlvs); 8758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2); 8768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5(const struct wpabuf *tlvs); 8778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2); 8788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6(const struct wpabuf *tlvs); 8798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2); 8808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7(const struct wpabuf *tlvs); 8818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, int wps2); 8828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8(const struct wpabuf *tlvs); 8838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, int wps2); 8848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_ack(const struct wpabuf *tlvs); 8858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_nack(const struct wpabuf *tlvs); 8868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_wsc_done(const struct wpabuf *tlvs); 8878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wps_validate_upnp_set_selected_registrar(const struct wpabuf *tlvs); 8888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_WPS_STRICT */ 8898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon(const struct wpabuf *wps_ie){ 8908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_beacon_probe_resp(const struct wpabuf *wps_ie, 8948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int probe, const u8 *addr) 8958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 8968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 8978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 8988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 8998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_probe_req(const struct wpabuf *wps_ie, 9008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 9018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_req(const struct wpabuf *wps_ie) 9068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_assoc_resp(const struct wpabuf *wps_ie) 9118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m1(const struct wpabuf *tlvs) 9168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2(const struct wpabuf *tlvs) 9218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m2d(const struct wpabuf *tlvs) 9268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m3(const struct wpabuf *tlvs) 9318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4(const struct wpabuf *tlvs) 9368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m4_encr(const struct wpabuf *tlvs, int wps2) 9418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5(const struct wpabuf *tlvs) 9468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m5_encr(const struct wpabuf *tlvs, int wps2) 9518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6(const struct wpabuf *tlvs) 9568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m6_encr(const struct wpabuf *tlvs, int wps2) 9618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7(const struct wpabuf *tlvs) 9668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m7_encr(const struct wpabuf *tlvs, int ap, 9718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 9728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8(const struct wpabuf *tlvs) 9778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_m8_encr(const struct wpabuf *tlvs, int ap, 9828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wps2) 9838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_ack(const struct wpabuf *tlvs) 9888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_nack(const struct wpabuf *tlvs) 9938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 9958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 9968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 9978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_wsc_done(const struct wpabuf *tlvs) 9988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 9998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wps_validate_upnp_set_selected_registrar( 10038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 10048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 10058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 10068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 10078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS_STRICT */ 10088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 10098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPS_H */ 1010