18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd - IEEE 802.11i-2004 / WPA Authenticator: Internal definitions 3807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt * Copyright (c) 2004-2015, 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 WPA_AUTH_I_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_AUTH_I_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* max(dot11RSNAConfigGroupUpdateCount,dot11RSNAConfigPairwiseUpdateCount) */ 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define RSNA_MAX_EAPOL_RETRIES 4 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_group; 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_stsl_negotiation { 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *next; 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 initiator[ETH_ALEN]; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 peer[ETH_ALEN]; 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_state_machine { 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_authenticator *wpa_auth; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *group; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 29391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt u8 p2p_dev_addr[ETH_ALEN]; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED, 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2, 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART, 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2, 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_ptk_state; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_IDLE = 0, 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_REKEYNEGOTIATING, 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_REKEYESTABLISHED, 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_PTK_GROUP_KEYERROR 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_ptk_group_state; 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Init; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean DeauthenticationRequest; 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean AuthenticationRequest; 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean ReAuthenticationRequest; 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Disconnect; 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int TimeoutCtr; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GTimeoutCtr; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean TimeoutEvt; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyReceived; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyPairwise; 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean EAPOLKeyRequest; 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean MICVerified; 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GUpdateStationKeys; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ANonce[WPA_NONCE_LEN]; 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 SNonce[WPA_NONCE_LEN]; 616c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt u8 alt_SNonce[WPA_NONCE_LEN]; 626c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt u8 alt_replay_counter[WPA_REPLAY_COUNTER_LEN]; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 PMK[PMK_LEN]; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk PTK; 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PTK_valid; 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean pairwise_set; 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int keycount; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean Pair; 69c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt struct wpa_key_replay_counter { 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 counter[WPA_REPLAY_COUNTER_LEN]; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean valid; 72c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt } key_replay[RSNA_MAX_EAPOL_RETRIES], 73c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt prev_key_replay[RSNA_MAX_EAPOL_RETRIES]; 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PInitAKeys; /* WPA only, not in IEEE 802.11i */ 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PTKRequest; /* not in IEEE 802.11i state machine */ 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean has_GTK; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean PtkGroupInit; /* init request for PTK Group state machine */ 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *last_rx_eapol_key; /* starting from IEEE 802.1X header */ 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t last_rx_eapol_key_len; 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int changed:1; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int in_step_loop:1; 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int pending_deinit:1; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int started:1; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int mgmt_frame_prot:1; 871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt unsigned int rx_eapol_key_secure:1; 88c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt unsigned int update_snonce:1; 896c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt unsigned int alt_snonce_valid:1; 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int ft_completed:1; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int pmk_r1_name_valid:1; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 9461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt unsigned int is_wnmsleep:1; 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN]; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int req_replay_counter_used; 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *wpa_ie; 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t wpa_ie_len; 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_NO_WPA = 0 /* WPA not used */, 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_WPA = 1 /* WPA / IEEE 802.11i/D3.0 */, 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_VERSION_WPA2 = 2 /* WPA2 / IEEE 802.11i */ 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa; 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pairwise; /* Pairwise cipher suite, WPA_CIPHER_* */ 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wpa_key_mgmt; /* the selected WPA_KEY_MGMT_* */ 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *pmksa; 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAStatsTKIPLocalMICFailures; 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAStatsTKIPRemoteMICFailures; 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */ 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t xxkey_len; 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Request */ 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */ 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t r0kh_id_len; 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name from EAPOL-Key 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * message 2/4 */ 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *assoc_resp_ftie; 124d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt 125d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt void (*ft_pending_cb)(void *ctx, const u8 *dst, const u8 *bssid, 126d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt u16 auth_transaction, u16 status, 127d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt const u8 *ies, size_t ies_len); 128d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt void *ft_pending_cb_ctx; 129d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt struct wpabuf *ft_pending_req_ies; 130d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt u8 ft_pending_pull_nonce[FT_R0KH_R1KH_PULL_NONCE_LEN]; 131d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt u8 ft_pending_auth_transaction; 132d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt u8 ft_pending_current_ap[ETH_ALEN]; 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int pending_1_of_4_timeout; 136cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt 137cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#ifdef CONFIG_P2P 138cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt u8 ip_addr[4]; 139cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#endif /* CONFIG_P2P */ 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per group key state machine data */ 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_group { 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *next; 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int vlan_id; 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GInit; 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GKeyDoneStations; 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GTKReKey; 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GTK_len; 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GN, GM; 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean GTKAuthenticator; 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 Counter[WPA_NONCE_LEN]; 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum { 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_GROUP_GTK_INIT = 0, 158fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE, 159fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt WPA_GROUP_FATAL_FAILURE 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } wpa_group_state; 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GMK[WPA_GMK_LEN]; 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GTK[2][WPA_GTK_MAX_LEN]; 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 GNonce[WPA_NONCE_LEN]; 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean changed; 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean first_sta_seen; 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt Boolean reject_4way_hs_for_entropy; 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211W 169b36ed7cd946148d829f311de8fe53ea3ffaaffe3Dmitry Shmidt u8 IGTK[2][WPA_IGTK_MAX_LEN]; 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int GN_igtk, GM_igtk; 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211W */ 1721d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt /* Number of references except those in struct wpa_group->next */ 1731d755d025b206e22b06aeb322e25a79f98ca7777Dmitry Shmidt unsigned int references; 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache; 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per authenticator data */ 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_authenticator { 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_group *group; 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNAStatsTKIPRemoteMICFailures; 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAAuthenticationSuiteSelected; 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAPairwiseCipherSelected; 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAGroupCipherSelected; 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dot11RSNAPMKIDUsed[PMKID_LEN]; 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAAuthenticationSuiteRequested; /* FIX: update */ 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAPairwiseCipherRequested; /* FIX: update */ 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u32 dot11RSNAGroupCipherRequested; /* FIX: update */ 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNATKIPCounterMeasuresInvoked; 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNA4WayHandshakeFailures; 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *stsl_negotiations; 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_auth_config conf; 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_auth_callbacks cb; 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *wpa_ie; 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t wpa_ie_len; 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 addr[ETH_ALEN]; 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa; 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ft_pmk_cache *ft_pmk_cache; 206cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt 207cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#ifdef CONFIG_P2P 208cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt struct bitfield *ip_pool; 209cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#endif /* CONFIG_P2P */ 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len, 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *pmkid); 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_logger(struct wpa_authenticator *wpa_auth, const u8 *addr, 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt logger_level level, const char *txt); 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_vlogger(struct wpa_authenticator *wpa_auth, const u8 *addr, 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt logger_level level, const char *fmt, ...); 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid __wpa_send_eapol(struct wpa_authenticator *wpa_auth, 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_state_machine *sm, int key_info, 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key_rsc, const u8 *nonce, 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *kde, size_t kde_len, 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int keyidx, int encr, int force_version); 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth, 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cb)(struct wpa_state_machine *sm, void *ctx), 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx); 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_auth(struct wpa_authenticator *wpa_auth, 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int (*cb)(struct wpa_authenticator *a, void *ctx), 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *cb_ctx); 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_PEERKEY 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_stsl_remove(struct wpa_authenticator *wpa_auth, 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_stsl_negotiation *neg); 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_error(struct wpa_authenticator *wpa_auth, 2356c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt struct wpa_state_machine *sm, 2366c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const u8 *key_data, size_t key_data_len); 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m1(struct wpa_authenticator *wpa_auth, 2386c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt struct wpa_state_machine *sm, struct wpa_eapol_key *key, 2396c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const u8 *key_data, size_t key_data_len); 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m3(struct wpa_authenticator *wpa_auth, 2416c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt struct wpa_state_machine *sm, struct wpa_eapol_key *key, 2426c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const u8 *key_data, size_t key_data_len); 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_PEERKEY */ 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len); 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id, 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t r0kh_id_len, 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *anonce, const u8 *snonce, 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *buf, size_t len, const u8 *subelem, 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t subelem_len); 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk, 253807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt struct wpa_ptk *ptk); 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void); 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache); 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_install_ptk(struct wpa_state_machine *sm); 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_AUTH_I_H */ 260