wpa_auth_i.h revision 8d520ff1dc2da35cdca849e982051b86468016d8
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - IEEE 802.11i-2004 / WPA Authenticator: Internal definitions 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This program is free software; you can redistribute it and/or modify 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * it under the terms of the GNU General Public License version 2 as 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * published by the Free Software Foundation. 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license. 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * See README and COPYING for more details. 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_AUTH_I_H 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_AUTH_I_H 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* max(dot11RSNAConfigGroupUpdateCount,dot11RSNAConfigPairwiseUpdateCount) */ 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RSNA_MAX_EAPOL_RETRIES 4 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_group; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_stsl_negotiation { 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *next; 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 initiator[ETH_ALEN]; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 peer[ETH_ALEN]; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_state_machine { 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_authenticator *wpa_auth; 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *group; 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED, 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2, 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART, 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2, 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_ptk_state; 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_IDLE = 0, 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_REKEYNEGOTIATING, 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_REKEYESTABLISHED, 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_KEYERROR 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_ptk_group_state; 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Init; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean DeauthenticationRequest; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean AuthenticationRequest; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean ReAuthenticationRequest; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Disconnect; 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int TimeoutCtr; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GTimeoutCtr; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean TimeoutEvt; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyReceived; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyPairwise; 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyRequest; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean MICVerified; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GUpdateStationKeys; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ANonce[WPA_NONCE_LEN]; 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 SNonce[WPA_NONCE_LEN]; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 PMK[PMK_LEN]; 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk PTK; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PTK_valid; 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean pairwise_set; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int keycount; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Pair; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct { 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 counter[WPA_REPLAY_COUNTER_LEN]; 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean valid; 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } key_replay[RSNA_MAX_EAPOL_RETRIES]; 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PInitAKeys; /* WPA only, not in IEEE 802.11i */ 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PTKRequest; /* not in IEEE 802.11i state machine */ 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean has_GTK; 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PtkGroupInit; /* init request for PTK Group state machine */ 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *last_rx_eapol_key; /* starting from IEEE 802.1X header */ 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t last_rx_eapol_key_len; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int changed:1; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int in_step_loop:1; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int pending_deinit:1; 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int started:1; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int mgmt_frame_prot:1; 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int ft_completed:1; 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int pmk_r1_name_valid:1; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN]; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int req_replay_counter_used; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *wpa_ie; 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t wpa_ie_len; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_NO_WPA = 0 /* WPA not used */, 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_WPA = 1 /* WPA / IEEE 802.11i/D3.0 */, 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_WPA2 = 2 /* WPA2 / IEEE 802.11i */ 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa; 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pairwise; /* Pairwise cipher suite, WPA_CIPHER_* */ 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wpa_key_mgmt; /* the selected WPA_KEY_MGMT_* */ 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *pmksa; 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAStatsTKIPLocalMICFailures; 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAStatsTKIPRemoteMICFailures; 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */ 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t xxkey_len; 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Request */ 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */ 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t r0kh_id_len; 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name from EAPOL-Key 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * message 2/4 */ 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *assoc_resp_ftie; 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pending_1_of_4_timeout; 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per group key state machine data */ 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_group { 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *next; 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int vlan_id; 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GInit; 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GKeyDoneStations; 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GTKReKey; 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GTK_len; 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GN, GM; 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GTKAuthenticator; 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 Counter[WPA_NONCE_LEN]; 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_GROUP_GTK_INIT = 0, 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_group_state; 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GMK[WPA_GMK_LEN]; 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GTK[2][WPA_GTK_MAX_LEN]; 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GNonce[WPA_NONCE_LEN]; 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean changed; 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean first_sta_seen; 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean reject_4way_hs_for_entropy; 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211W 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 IGTK[2][WPA_IGTK_LEN]; 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GN_igtk, GM_igtk; 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211W */ 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache; 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per authenticator data */ 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_authenticator { 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *group; 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNAStatsTKIPRemoteMICFailures; 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAAuthenticationSuiteSelected; 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAPairwiseCipherSelected; 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAGroupCipherSelected; 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dot11RSNAPMKIDUsed[PMKID_LEN]; 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAAuthenticationSuiteRequested; /* FIX: update */ 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAPairwiseCipherRequested; /* FIX: update */ 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAGroupCipherRequested; /* FIX: update */ 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNATKIPCounterMeasuresInvoked; 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNA4WayHandshakeFailures; 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *stsl_negotiations; 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_auth_config conf; 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_auth_callbacks cb; 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *wpa_ie; 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t wpa_ie_len; 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa; 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ft_pmk_cache *ft_pmk_cache; 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len, 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmkid); 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_logger(struct wpa_authenticator *wpa_auth, const u8 *addr, 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt logger_level level, const char *txt); 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_vlogger(struct wpa_authenticator *wpa_auth, const u8 *addr, 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt logger_level level, const char *fmt, ...); 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid __wpa_send_eapol(struct wpa_authenticator *wpa_auth, 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_state_machine *sm, int key_info, 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key_rsc, const u8 *nonce, 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *kde, size_t kde_len, 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int keyidx, int encr, int force_version); 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth, 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cb)(struct wpa_state_machine *sm, void *ctx), 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx); 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_auth(struct wpa_authenticator *wpa_auth, 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cb)(struct wpa_authenticator *a, void *ctx), 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx); 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_PEERKEY 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_stsl_remove(struct wpa_authenticator *wpa_auth, 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *neg); 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_error(struct wpa_authenticator *wpa_auth, 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m1(struct wpa_authenticator *wpa_auth, 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m3(struct wpa_authenticator *wpa_auth, 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_state_machine *sm, struct wpa_eapol_key *key); 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_PEERKEY */ 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len); 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id, 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t r0kh_id_len, 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *anonce, const u8 *snonce, 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *buf, size_t len, const u8 *subelem, 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t subelem_len); 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk, 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk *ptk, size_t ptk_len); 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void); 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache); 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_install_ptk(struct wpa_state_machine *sm); 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_AUTH_I_H */ 235