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 *
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];
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 PMK[PMK_LEN];
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_ptk PTK;
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean PTK_valid;
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean pairwise_set;
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int keycount;
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean Pair;
67c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt	struct wpa_key_replay_counter {
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		u8 counter[WPA_REPLAY_COUNTER_LEN];
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		Boolean valid;
70c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt	} key_replay[RSNA_MAX_EAPOL_RETRIES],
71c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt		prev_key_replay[RSNA_MAX_EAPOL_RETRIES];
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean PInitAKeys; /* WPA only, not in IEEE 802.11i */
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean PTKRequest; /* not in IEEE 802.11i state machine */
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean has_GTK;
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean PtkGroupInit; /* init request for PTK Group state machine */
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 *last_rx_eapol_key; /* starting from IEEE 802.1X header */
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t last_rx_eapol_key_len;
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int changed:1;
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int in_step_loop:1;
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int pending_deinit:1;
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int started:1;
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int mgmt_frame_prot:1;
851f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	unsigned int rx_eapol_key_secure:1;
86c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt	unsigned int update_snonce:1;
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int ft_completed:1;
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int pmk_r1_name_valid:1;
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */
9161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt	unsigned int is_wnmsleep:1;
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN];
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int req_replay_counter_used;
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 *wpa_ie;
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t wpa_ie_len;
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	enum {
1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		WPA_VERSION_NO_WPA = 0 /* WPA not used */,
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		WPA_VERSION_WPA = 1 /* WPA / IEEE 802.11i/D3.0 */,
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		WPA_VERSION_WPA2 = 2 /* WPA2 / IEEE 802.11i */
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	} wpa;
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int pairwise; /* Pairwise cipher suite, WPA_CIPHER_* */
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int wpa_key_mgmt; /* the selected WPA_KEY_MGMT_* */
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct rsn_pmksa_cache_entry *pmksa;
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAStatsTKIPLocalMICFailures;
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAStatsTKIPRemoteMICFailures;
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R
1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */
1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t xxkey_len;
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					   * Request */
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t r0kh_id_len;
1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name from EAPOL-Key
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					       * message 2/4 */
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 *assoc_resp_ftie;
121d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt
122d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	void (*ft_pending_cb)(void *ctx, const u8 *dst, const u8 *bssid,
123d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt			      u16 auth_transaction, u16 status,
124d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt			      const u8 *ies, size_t ies_len);
125d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	void *ft_pending_cb_ctx;
126d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	struct wpabuf *ft_pending_req_ies;
127d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	u8 ft_pending_pull_nonce[FT_R0KH_R1KH_PULL_NONCE_LEN];
128d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	u8 ft_pending_auth_transaction;
129d11f019d62a42a8fc4c4d1f2ec17cf35b0763153Dmitry Shmidt	u8 ft_pending_current_ap[ETH_ALEN];
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */
1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int pending_1_of_4_timeout;
133cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt
134cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#ifdef CONFIG_P2P
135cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt	u8 ip_addr[4];
136cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#endif /* CONFIG_P2P */
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per group key state machine data */
1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_group {
1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_group *next;
1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int vlan_id;
1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean GInit;
1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int GKeyDoneStations;
1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean GTKReKey;
1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int GTK_len;
1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int GN, GM;
1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean GTKAuthenticator;
1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 Counter[WPA_NONCE_LEN];
1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	enum {
1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		WPA_GROUP_GTK_INIT = 0,
155fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt		WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE,
156fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt		WPA_GROUP_FATAL_FAILURE
1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	} wpa_group_state;
1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 GMK[WPA_GMK_LEN];
1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 GTK[2][WPA_GTK_MAX_LEN];
1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 GNonce[WPA_NONCE_LEN];
1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean changed;
1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean first_sta_seen;
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	Boolean reject_4way_hs_for_entropy;
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211W
166b36ed7cd946148d829f311de8fe53ea3ffaaffe3Dmitry Shmidt	u8 IGTK[2][WPA_IGTK_MAX_LEN];
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int GN_igtk, GM_igtk;
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211W */
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache;
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* per authenticator data */
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_authenticator {
1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_group *group;
1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int dot11RSNAStatsTKIPRemoteMICFailures;
1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAAuthenticationSuiteSelected;
1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAPairwiseCipherSelected;
1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAGroupCipherSelected;
1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 dot11RSNAPMKIDUsed[PMKID_LEN];
1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAAuthenticationSuiteRequested; /* FIX: update */
1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAPairwiseCipherRequested; /* FIX: update */
1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u32 dot11RSNAGroupCipherRequested; /* FIX: update */
1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int dot11RSNATKIPCounterMeasuresInvoked;
1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	unsigned int dot11RSNA4WayHandshakeFailures;
1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_stsl_negotiation *stsl_negotiations;
1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_auth_config conf;
1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_auth_callbacks cb;
1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 *wpa_ie;
1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	size_t wpa_ie_len;
1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	u8 addr[ETH_ALEN];
1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct rsn_pmksa_cache *pmksa;
2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_ft_pmk_cache *ft_pmk_cache;
201cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt
202cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#ifdef CONFIG_P2P
203cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt	struct bitfield *ip_pool;
204cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#endif /* CONFIG_P2P */
2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     const u8 *pmkid);
2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_logger(struct wpa_authenticator *wpa_auth, const u8 *addr,
2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     logger_level level, const char *txt);
2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_auth_vlogger(struct wpa_authenticator *wpa_auth, const u8 *addr,
2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      logger_level level, const char *fmt, ...);
2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid __wpa_send_eapol(struct wpa_authenticator *wpa_auth,
2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      struct wpa_state_machine *sm, int key_info,
2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      const u8 *key_rsc, const u8 *nonce,
2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      const u8 *kde, size_t kde_len,
2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		      int keyidx, int encr, int force_version);
2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth,
2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			  int (*cb)(struct wpa_state_machine *sm, void *ctx),
2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			  void *cb_ctx);
2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_for_each_auth(struct wpa_authenticator *wpa_auth,
2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   int (*cb)(struct wpa_authenticator *a, void *ctx),
2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   void *cb_ctx);
2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_PEERKEY
2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_stsl_remove(struct wpa_authenticator *wpa_auth,
2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		    struct wpa_stsl_negotiation *neg);
2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_error(struct wpa_authenticator *wpa_auth,
2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m1(struct wpa_authenticator *wpa_auth,
2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_smk_m3(struct wpa_authenticator *wpa_auth,
2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_PEERKEY */
2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R
2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len);
2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id,
2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   size_t r0kh_id_len,
2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   const u8 *anonce, const u8 *snonce,
2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   u8 *buf, size_t len, const u8 *subelem,
2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   size_t subelem_len);
2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk,
2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   struct wpa_ptk *ptk, size_t ptk_len);
2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void);
2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache);
2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_ft_install_ptk(struct wpa_state_machine *sm);
2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */
2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_AUTH_I_H */
252