wpa_auth_i.h revision b36ed7cd946148d829f311de8fe53ea3ffaaffe3
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/* 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * hostapd - IEEE 802.11i-2004 / WPA Authenticator: Internal definitions 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi> 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * This software may be distributed under the terms of the BSD license. 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * See README for more details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer */ 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef WPA_AUTH_I_H 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define WPA_AUTH_I_H 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/* max(dot11RSNAConfigGroupUpdateCount,dot11RSNAConfigPairwiseUpdateCount) */ 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define RSNA_MAX_EAPOL_RETRIES 4 14ec55c941f2846db48bce4ed6dd2ce339e1a48962Ted Kremenek 1543b628cd47ecdc3caf640d79b3ad7ecef0f2c285Chris Lattnerstruct wpa_group; 16ec55c941f2846db48bce4ed6dd2ce339e1a48962Ted Kremenek 178fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramerstruct wpa_stsl_negotiation { 1823e47c6b6e8ccdd8daa378ab2a879644425c72d8Daniel Dunbar struct wpa_stsl_negotiation *next; 1903201fbbdeb3eb7f465610b09c281ee6aa84e3caTed Kremenek u8 initiator[ETH_ALEN]; 2003201fbbdeb3eb7f465610b09c281ee6aa84e3caTed Kremenek u8 peer[ETH_ALEN]; 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 23d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie 243fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattnerstruct wpa_state_machine { 253fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner struct wpa_authenticator *wpa_auth; 26d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie struct wpa_group *group; 27b54d8af9a66cc20a6a9a9219c7eaea8df7ee7fd4Chris Lattner 285f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner u8 addr[ETH_ALEN]; 290673cb30340aadaede7b795c763b00f6b64e611cChandler Carruth u8 p2p_dev_addr[ETH_ALEN]; 30341785ec52f87c0803ba52dc88faac4e136f8593Bill Wendling 313fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner enum { 3222caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED, 3322caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2, 3422caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART, 3522caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2, 36d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE 37c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith } wpa_ptk_state; 3878ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikie 3933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis enum { 4033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis WPA_PTK_GROUP_IDLE = 0, 413fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner WPA_PTK_GROUP_REKEYNEGOTIATING, 4292dd386e3f05d176b45a638199d51f536bd9d1c4Chris Lattner WPA_PTK_GROUP_REKEYESTABLISHED, 431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump WPA_PTK_GROUP_KEYERROR 44cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor } wpa_ptk_group_state; 45cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor 46cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean Init; 471e473ccb0e0f6fd1954bef330f7193c1a3fb3ba1Ted Kremenek Boolean DeauthenticationRequest; 48cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean AuthenticationRequest; 49cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean ReAuthenticationRequest; 50cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean Disconnect; 51246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu int TimeoutCtr; 52246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu int GTimeoutCtr; 53246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu Boolean TimeoutEvt; 54cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean EAPOLKeyReceived; 55cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean EAPOLKeyPairwise; 56cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean EAPOLKeyRequest; 57cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean MICVerified; 58cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor Boolean GUpdateStationKeys; 5908d6e032a2a0a8656d12b3b7b93942987bb12eb7Richard Smith u8 ANonce[WPA_NONCE_LEN]; 60cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor u8 SNonce[WPA_NONCE_LEN]; 61abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor u8 PMK[PMK_LEN]; 62182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner struct wpa_ptk PTK; 63182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner Boolean PTK_valid; 64d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie Boolean pairwise_set; 6533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis int keycount; 6633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis Boolean Pair; 67182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner struct wpa_key_replay_counter { 68182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner u8 counter[WPA_REPLAY_COUNTER_LEN]; 6978ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikie Boolean valid; 70d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie } key_replay[RSNA_MAX_EAPOL_RETRIES], 714f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor prev_key_replay[RSNA_MAX_EAPOL_RETRIES]; 724f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor Boolean PInitAKeys; /* WPA only, not in IEEE 802.11i */ 734f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor Boolean PTKRequest; /* not in IEEE 802.11i state machine */ 744f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor Boolean has_GTK; 754f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor Boolean PtkGroupInit; /* init request for PTK Group state machine */ 764f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor 7704ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner u8 *last_rx_eapol_key; /* starting from IEEE 802.1X header */ 78d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie size_t last_rx_eapol_key_len; 790827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 8004ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner unsigned int changed:1; 8104ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner unsigned int in_step_loop:1; 82d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie unsigned int pending_deinit:1; 830827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis unsigned int started:1; 8404ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner unsigned int mgmt_frame_prot:1; 8504ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner unsigned int rx_eapol_key_secure:1; 860827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis unsigned int update_snonce:1; 870827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_IEEE80211R 880827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis unsigned int ft_completed:1; 890827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis unsigned int pmk_r1_name_valid:1; 900827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_IEEE80211R */ 9104ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner unsigned int is_wnmsleep:1; 9204ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner 9304ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN]; 94d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie int req_replay_counter_used; 95abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor 96abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor u8 *wpa_ie; 9785bea9777d444ccbcc086d98f075fe666c2e865dDouglas Gregor size_t wpa_ie_len; 98abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor 99abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor enum { 100abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor WPA_VERSION_NO_WPA = 0 /* WPA not used */, 101abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor WPA_VERSION_WPA = 1 /* WPA / IEEE 802.11i/D3.0 */, 102c0a575f9b791a25c94b1c3c832dd73ec564646bbArgyrios Kyrtzidis WPA_VERSION_WPA2 = 2 /* WPA2 / IEEE 802.11i */ 103c0a575f9b791a25c94b1c3c832dd73ec564646bbArgyrios Kyrtzidis } wpa; 10485bea9777d444ccbcc086d98f075fe666c2e865dDouglas Gregor int pairwise; /* Pairwise cipher suite, WPA_CIPHER_* */ 105abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor int wpa_key_mgmt; /* the selected WPA_KEY_MGMT_* */ 10633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis struct rsn_pmksa_cache_entry *pmksa; 107d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie 108d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie u32 dot11RSNAStatsTKIPLocalMICFailures; 10933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis u32 dot11RSNAStatsTKIPRemoteMICFailures; 11033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 111abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor#ifdef CONFIG_IEEE80211R 112dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */ 113dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis size_t xxkey_len; 114dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth 115dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis * Request */ 116dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */ 117dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis size_t r0kh_id_len; 118dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name from EAPOL-Key 119dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis * message 2/4 */ 120dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis u8 *assoc_resp_ftie; 121dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis#endif /* CONFIG_IEEE80211R */ 122abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer int pending_1_of_4_timeout; 124d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie 125dfaee4922b990fbf33808b91b961dc27df585030Chad Rosier#ifdef CONFIG_P2P 12693ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor u8 ip_addr[4]; 12793ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor#endif /* CONFIG_P2P */ 12893ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor}; 12993ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor 1309e2dac9c9b6bc4384c816a447cca6516a03c89f2Douglas Gregor 1319e2dac9c9b6bc4384c816a447cca6516a03c89f2Douglas Gregor/* per group key state machine data */ 13293ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregorstruct wpa_group { 13393ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor struct wpa_group *next; 134d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie int vlan_id; 13593ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor 13693ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor Boolean GInit; 13793ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor int GKeyDoneStations; 13893ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor Boolean GTKReKey; 13993ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor int GTK_len; 14093ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor int GN, GM; 141d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie Boolean GTKAuthenticator; 142d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie u8 Counter[WPA_NONCE_LEN]; 1430827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1440827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis enum { 1450827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis WPA_GROUP_GTK_INIT = 0, 1460827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE, 1470827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis WPA_GROUP_FATAL_FAILURE 1480827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis } wpa_group_state; 1490827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1500827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 GMK[WPA_GMK_LEN]; 1510827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 GTK[2][WPA_GTK_MAX_LEN]; 1520827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 GNonce[WPA_NONCE_LEN]; 1530827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis Boolean changed; 1540827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis Boolean first_sta_seen; 1550827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis Boolean reject_4way_hs_for_entropy; 1560827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_IEEE80211W 1570827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 IGTK[2][WPA_IGTK_MAX_LEN]; 1580827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis int GN_igtk, GM_igtk; 1590827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_IEEE80211W */ 1600827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis}; 161d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie 162dfaee4922b990fbf33808b91b961dc27df585030Chad Rosier 1630827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisstruct wpa_ft_pmk_cache; 1640827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1650827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis/* per authenticator data */ 1660827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisstruct wpa_authenticator { 1670827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_group *group; 1680827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1690827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis unsigned int dot11RSNAStatsTKIPRemoteMICFailures; 1700827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u32 dot11RSNAAuthenticationSuiteSelected; 1710827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u32 dot11RSNAPairwiseCipherSelected; 1727a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier u32 dot11RSNAGroupCipherSelected; 1737a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier u8 dot11RSNAPMKIDUsed[PMKID_LEN]; 1747a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier u32 dot11RSNAAuthenticationSuiteRequested; /* FIX: update */ 1757a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier u32 dot11RSNAPairwiseCipherRequested; /* FIX: update */ 1767a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier u32 dot11RSNAGroupCipherRequested; /* FIX: update */ 1777a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier unsigned int dot11RSNATKIPCounterMeasuresInvoked; 1787a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier unsigned int dot11RSNA4WayHandshakeFailures; 17987429a05ff66fe6460eaa4855fd0da574e26bf7bArgyrios Kyrtzidis 18053201a86f775c064b62ec25742106c7b43ba8749Daniel Dunbar struct wpa_stsl_negotiation *stsl_negotiations; 1810827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1820827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_auth_config conf; 18309ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar struct wpa_auth_callbacks cb; 1840827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1850827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 *wpa_ie; 1860827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis size_t wpa_ie_len; 1870827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1880827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis u8 addr[ETH_ALEN]; 1890827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1900827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct rsn_pmksa_cache *pmksa; 191fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner struct wpa_ft_pmk_cache *ft_pmk_cache; 1920827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1930827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_P2P 1940827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct bitfield *ip_pool; 1950827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_P2P */ 19609ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar}; 1970827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1980827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 1990827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len, 2000827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis const u8 *pmkid); 2010827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_auth_logger(struct wpa_authenticator *wpa_auth, const u8 *addr, 2020827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis logger_level level, const char *txt); 2030827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_auth_vlogger(struct wpa_authenticator *wpa_auth, const u8 *addr, 2040827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis logger_level level, const char *fmt, ...); 2050827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid __wpa_send_eapol(struct wpa_authenticator *wpa_auth, 2060827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_state_machine *sm, int key_info, 2070827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis const u8 *key_rsc, const u8 *nonce, 2080827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis const u8 *kde, size_t kde_len, 20909ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar int keyidx, int encr, int force_version); 2100827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth, 2110827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis int (*cb)(struct wpa_state_machine *sm, void *ctx), 2120827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis void *cb_ctx); 2130827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_auth_for_each_auth(struct wpa_authenticator *wpa_auth, 21409ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar int (*cb)(struct wpa_authenticator *a, void *ctx), 2150827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis void *cb_ctx); 2160827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 2170827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_PEERKEY 2180827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_stsl_remove(struct wpa_authenticator *wpa_auth, 2190827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_stsl_negotiation *neg); 2200827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_error(struct wpa_authenticator *wpa_auth, 2210827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2220827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_m1(struct wpa_authenticator *wpa_auth, 22309ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2240827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_m3(struct wpa_authenticator *wpa_auth, 2250827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2260827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_PEERKEY */ 2270827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis 2283f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#ifdef CONFIG_IEEE80211R 2293f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len); 2303f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id, 2313f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar size_t r0kh_id_len, 2323f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar const u8 *anonce, const u8 *snonce, 2333f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar u8 *buf, size_t len, const u8 *subelem, 2343f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar size_t subelem_len); 2353f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk, 2363f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar struct wpa_ptk *ptk, size_t ptk_len); 2373f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarstruct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void); 2383f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarvoid wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache); 2393f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarvoid wpa_ft_install_ptk(struct wpa_state_machine *sm); 2403f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#endif /* CONFIG_IEEE80211R */ 2413f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar 2423f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#endif /* WPA_AUTH_I_H */ 2433f22509ebf91aa96658ca6e5c5c0b926d8d62e34Chad Rosier