15 #define PMK_LEN_SUITE_B_192 48 16 #define PMK_LEN_MAX 48 17 #define WPA_REPLAY_COUNTER_LEN 8 18 #define WPA_NONCE_LEN 32 19 #define WPA_KEY_RSC_LEN 8 20 #define WPA_GMK_LEN 32 21 #define WPA_GTK_MAX_LEN 32 23 #define WPA_ALLOWED_PAIRWISE_CIPHERS \ 24 (WPA_CIPHER_CCMP | WPA_CIPHER_GCMP | WPA_CIPHER_TKIP | WPA_CIPHER_NONE | \ 25 WPA_CIPHER_GCMP_256 | WPA_CIPHER_CCMP_256) 26 #define WPA_ALLOWED_GROUP_CIPHERS \ 27 (WPA_CIPHER_CCMP | WPA_CIPHER_GCMP | WPA_CIPHER_TKIP | \ 28 WPA_CIPHER_GCMP_256 | WPA_CIPHER_CCMP_256 | \ 29 WPA_CIPHER_GTK_NOT_USED) 31 #define WPA_SELECTOR_LEN 4 33 #define RSN_SELECTOR_LEN 4 36 #define RSN_SELECTOR(a, b, c, d) \ 37 ((((u32) (a)) << 24) | (((u32) (b)) << 16) | (((u32) (c)) << 8) | \ 40 #define WPA_AUTH_KEY_MGMT_NONE RSN_SELECTOR(0x00, 0x50, 0xf2, 0) 41 #define WPA_AUTH_KEY_MGMT_UNSPEC_802_1X RSN_SELECTOR(0x00, 0x50, 0xf2, 1) 42 #define WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X RSN_SELECTOR(0x00, 0x50, 0xf2, 2) 43 #define WPA_AUTH_KEY_MGMT_CCKM RSN_SELECTOR(0x00, 0x40, 0x96, 0) 44 #define WPA_CIPHER_SUITE_NONE RSN_SELECTOR(0x00, 0x50, 0xf2, 0) 45 #define WPA_CIPHER_SUITE_TKIP RSN_SELECTOR(0x00, 0x50, 0xf2, 2) 46 #define WPA_CIPHER_SUITE_CCMP RSN_SELECTOR(0x00, 0x50, 0xf2, 4) 49 #define RSN_AUTH_KEY_MGMT_UNSPEC_802_1X RSN_SELECTOR(0x00, 0x0f, 0xac, 1) 50 #define RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X RSN_SELECTOR(0x00, 0x0f, 0xac, 2) 51 #ifdef CONFIG_IEEE80211R 52 #define RSN_AUTH_KEY_MGMT_FT_802_1X RSN_SELECTOR(0x00, 0x0f, 0xac, 3) 53 #define RSN_AUTH_KEY_MGMT_FT_PSK RSN_SELECTOR(0x00, 0x0f, 0xac, 4) 55 #define RSN_AUTH_KEY_MGMT_802_1X_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 5) 56 #define RSN_AUTH_KEY_MGMT_PSK_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 6) 57 #define RSN_AUTH_KEY_MGMT_TPK_HANDSHAKE RSN_SELECTOR(0x00, 0x0f, 0xac, 7) 58 #define RSN_AUTH_KEY_MGMT_SAE RSN_SELECTOR(0x00, 0x0f, 0xac, 8) 59 #define RSN_AUTH_KEY_MGMT_FT_SAE RSN_SELECTOR(0x00, 0x0f, 0xac, 9) 60 #define RSN_AUTH_KEY_MGMT_802_1X_SUITE_B RSN_SELECTOR(0x00, 0x0f, 0xac, 11) 61 #define RSN_AUTH_KEY_MGMT_802_1X_SUITE_B_192 RSN_SELECTOR(0x00, 0x0f, 0xac, 12) 62 #define RSN_AUTH_KEY_MGMT_FT_802_1X_SUITE_B_192 \ 63 RSN_SELECTOR(0x00, 0x0f, 0xac, 13) 64 #define RSN_AUTH_KEY_MGMT_FILS_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 14) 65 #define RSN_AUTH_KEY_MGMT_FILS_SHA384 RSN_SELECTOR(0x00, 0x0f, 0xac, 15) 66 #define RSN_AUTH_KEY_MGMT_FT_FILS_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 16) 67 #define RSN_AUTH_KEY_MGMT_FT_FILS_SHA384 RSN_SELECTOR(0x00, 0x0f, 0xac, 17) 68 #define RSN_AUTH_KEY_MGMT_CCKM RSN_SELECTOR(0x00, 0x40, 0x96, 0x00) 69 #define RSN_AUTH_KEY_MGMT_OSEN RSN_SELECTOR(0x50, 0x6f, 0x9a, 0x01) 71 #define RSN_CIPHER_SUITE_NONE RSN_SELECTOR(0x00, 0x0f, 0xac, 0) 72 #define RSN_CIPHER_SUITE_TKIP RSN_SELECTOR(0x00, 0x0f, 0xac, 2) 74 #define RSN_CIPHER_SUITE_WRAP RSN_SELECTOR(0x00, 0x0f, 0xac, 3) 76 #define RSN_CIPHER_SUITE_CCMP RSN_SELECTOR(0x00, 0x0f, 0xac, 4) 77 #define RSN_CIPHER_SUITE_AES_128_CMAC RSN_SELECTOR(0x00, 0x0f, 0xac, 6) 78 #define RSN_CIPHER_SUITE_NO_GROUP_ADDRESSED RSN_SELECTOR(0x00, 0x0f, 0xac, 7) 79 #define RSN_CIPHER_SUITE_GCMP RSN_SELECTOR(0x00, 0x0f, 0xac, 8) 80 #define RSN_CIPHER_SUITE_GCMP_256 RSN_SELECTOR(0x00, 0x0f, 0xac, 9) 81 #define RSN_CIPHER_SUITE_CCMP_256 RSN_SELECTOR(0x00, 0x0f, 0xac, 10) 82 #define RSN_CIPHER_SUITE_BIP_GMAC_128 RSN_SELECTOR(0x00, 0x0f, 0xac, 11) 83 #define RSN_CIPHER_SUITE_BIP_GMAC_256 RSN_SELECTOR(0x00, 0x0f, 0xac, 12) 84 #define RSN_CIPHER_SUITE_BIP_CMAC_256 RSN_SELECTOR(0x00, 0x0f, 0xac, 13) 89 #define RSN_KEY_DATA_GROUPKEY RSN_SELECTOR(0x00, 0x0f, 0xac, 1) 91 #define RSN_KEY_DATA_STAKEY RSN_SELECTOR(0x00, 0x0f, 0xac, 2) 93 #define RSN_KEY_DATA_MAC_ADDR RSN_SELECTOR(0x00, 0x0f, 0xac, 3) 94 #define RSN_KEY_DATA_PMKID RSN_SELECTOR(0x00, 0x0f, 0xac, 4) 96 #define RSN_KEY_DATA_SMK RSN_SELECTOR(0x00, 0x0f, 0xac, 5) 97 #define RSN_KEY_DATA_NONCE RSN_SELECTOR(0x00, 0x0f, 0xac, 6) 98 #define RSN_KEY_DATA_LIFETIME RSN_SELECTOR(0x00, 0x0f, 0xac, 7) 99 #define RSN_KEY_DATA_ERROR RSN_SELECTOR(0x00, 0x0f, 0xac, 8) 101 #ifdef CONFIG_IEEE80211W 102 #define RSN_KEY_DATA_IGTK RSN_SELECTOR(0x00, 0x0f, 0xac, 9) 104 #define RSN_KEY_DATA_KEYID RSN_SELECTOR(0x00, 0x0f, 0xac, 10) 105 #define RSN_KEY_DATA_MULTIBAND_GTK RSN_SELECTOR(0x00, 0x0f, 0xac, 11) 106 #define RSN_KEY_DATA_MULTIBAND_KEYID RSN_SELECTOR(0x00, 0x0f, 0xac, 12) 108 #define WFA_KEY_DATA_IP_ADDR_REQ RSN_SELECTOR(0x50, 0x6f, 0x9a, 4) 109 #define WFA_KEY_DATA_IP_ADDR_ALLOC RSN_SELECTOR(0x50, 0x6f, 0x9a, 5) 111 #define WPA_OUI_TYPE RSN_SELECTOR(0x00, 0x50, 0xf2, 1) 113 #define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val)) 114 #define RSN_SELECTOR_GET(a) WPA_GET_BE32((const u8 *) (a)) 116 #define RSN_NUM_REPLAY_COUNTERS_1 0 117 #define RSN_NUM_REPLAY_COUNTERS_2 1 118 #define RSN_NUM_REPLAY_COUNTERS_4 2 119 #define RSN_NUM_REPLAY_COUNTERS_16 3 123 #pragma pack(push, 1) 126 #ifdef CONFIG_IEEE80211W 127 #define WPA_IGTK_LEN 16 128 #define WPA_IGTK_MAX_LEN 32 133 #define WPA_CAPABILITY_PREAUTH BIT(0) 134 #define WPA_CAPABILITY_NO_PAIRWISE BIT(1) 137 #define WPA_CAPABILITY_MFPR BIT(6) 138 #define WPA_CAPABILITY_MFPC BIT(7) 140 #define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9) 141 #define WPA_CAPABILITY_SPP_A_MSDU_CAPABLE BIT(10) 142 #define WPA_CAPABILITY_SPP_A_MSDU_REQUIRED BIT(11) 143 #define WPA_CAPABILITY_PBAC BIT(12) 144 #define WPA_CAPABILITY_EXT_KEY_ID_FOR_UNICAST BIT(13) 149 #define MOBILITY_DOMAIN_ID_LEN 2 150 #define FT_R0KH_ID_MAX_LEN 48 151 #define FT_R1KH_ID_LEN 6 152 #define WPA_PMK_NAME_LEN 16 156 #define WPA_KEY_INFO_TYPE_MASK ((u16) (BIT(0) | BIT(1) | BIT(2))) 157 #define WPA_KEY_INFO_TYPE_AKM_DEFINED 0 158 #define WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 BIT(0) 159 #define WPA_KEY_INFO_TYPE_HMAC_SHA1_AES BIT(1) 160 #define WPA_KEY_INFO_TYPE_AES_128_CMAC 3 161 #define WPA_KEY_INFO_KEY_TYPE BIT(3) 163 #define WPA_KEY_INFO_KEY_INDEX_MASK (BIT(4) | BIT(5)) 164 #define WPA_KEY_INFO_KEY_INDEX_SHIFT 4 165 #define WPA_KEY_INFO_INSTALL BIT(6) 166 #define WPA_KEY_INFO_TXRX BIT(6) 167 #define WPA_KEY_INFO_ACK BIT(7) 168 #define WPA_KEY_INFO_MIC BIT(8) 169 #define WPA_KEY_INFO_SECURE BIT(9) 170 #define WPA_KEY_INFO_ERROR BIT(10) 171 #define WPA_KEY_INFO_REQUEST BIT(11) 172 #define WPA_KEY_INFO_ENCR_KEY_DATA BIT(12) 173 #define WPA_KEY_INFO_SMK_MESSAGE BIT(13) 181 u8 replay_counter[WPA_REPLAY_COUNTER_LEN];
182 u8 key_nonce[WPA_NONCE_LEN];
184 u8 key_rsc[WPA_KEY_RSC_LEN];
191 #define WPA_EAPOL_KEY_MIC_MAX_LEN 24 192 #define WPA_KCK_MAX_LEN 24 193 #define WPA_KEK_MAX_LEN 64 194 #define WPA_TK_MAX_LEN 32 195 #define FILS_ICK_MAX_LEN 48 202 u8 kck[WPA_KCK_MAX_LEN];
203 u8 kek[WPA_KEK_MAX_LEN];
204 u8 tk[WPA_TK_MAX_LEN];
264 #ifdef CONFIG_PEERKEY 266 STK_MUI_4WAY_STA_AP = 1,
267 STK_MUI_4WAY_STAT_STA = 2,
274 STK_ERR_STA_NRSN = 2,
285 #ifdef CONFIG_IEEE80211W 286 #define WPA_IGTK_KDE_PREFIX_LEN (2 + 6) 287 struct wpa_igtk_kde {
290 u8 igtk[WPA_IGTK_MAX_LEN];
295 u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN];
299 #define RSN_FT_CAPAB_FT_OVER_DS BIT(0) 300 #define RSN_FT_CAPAB_FT_RESOURCE_REQ_SUPP BIT(1) 305 u8 anonce[WPA_NONCE_LEN];
306 u8 snonce[WPA_NONCE_LEN];
310 #define FTIE_SUBELEM_R1KH_ID 1 311 #define FTIE_SUBELEM_GTK 2 312 #define FTIE_SUBELEM_R0KH_ID 3 313 #define FTIE_SUBELEM_IGTK 4 327 int wpa_eapol_key_mic(
const u8 *key,
size_t key_len,
int akmp,
int ver,
328 const u8 *buf,
size_t len, u8 *mic);
329 int wpa_pmk_to_ptk(
const u8 *pmk,
size_t pmk_len,
const char *label,
330 const u8 *addr1,
const u8 *addr2,
331 const u8 *nonce1,
const u8 *nonce2,
332 struct wpa_ptk *ptk,
int akmp,
int cipher);
333 int fils_pmk_to_ptk(
const u8 *pmk,
size_t pmk_len,
const u8 *spa,
const u8 *aa,
334 const u8 *snonce,
const u8 *anonce,
struct wpa_ptk *ptk,
335 u8 *ick,
size_t *ick_len,
int akmp,
int cipher);
336 int fils_key_auth_sk(
const u8 *ick,
size_t ick_len,
const u8 *snonce,
337 const u8 *anonce,
const u8 *sta_addr,
const u8 *bssid,
338 const u8 *g_sta,
size_t g_sta_len,
339 const u8 *g_ap,
size_t g_ap_len,
340 int akmp, u8 *key_auth_sta, u8 *key_auth_ap,
341 size_t *key_auth_len);
343 #ifdef CONFIG_IEEE80211R 344 int wpa_ft_mic(
const u8 *kck,
size_t kck_len,
const u8 *sta_addr,
345 const u8 *ap_addr, u8 transaction_seqnum,
346 const u8 *mdie,
size_t mdie_len,
347 const u8 *ftie,
size_t ftie_len,
348 const u8 *rsnie,
size_t rsnie_len,
349 const u8 *ric,
size_t ric_len, u8 *mic);
350 void wpa_derive_pmk_r0(
const u8 *xxkey,
size_t xxkey_len,
351 const u8 *ssid,
size_t ssid_len,
352 const u8 *mdid,
const u8 *r0kh_id,
size_t r0kh_id_len,
353 const u8 *s0kh_id, u8 *pmk_r0, u8 *pmk_r0_name);
354 void wpa_derive_pmk_r1_name(
const u8 *pmk_r0_name,
const u8 *r1kh_id,
355 const u8 *s1kh_id, u8 *pmk_r1_name);
356 void wpa_derive_pmk_r1(
const u8 *pmk_r0,
const u8 *pmk_r0_name,
357 const u8 *r1kh_id,
const u8 *s1kh_id,
358 u8 *pmk_r1, u8 *pmk_r1_name);
359 int wpa_pmk_r1_to_ptk(
const u8 *pmk_r1,
const u8 *snonce,
const u8 *anonce,
360 const u8 *sta_addr,
const u8 *bssid,
361 const u8 *pmk_r1_name,
362 struct wpa_ptk *ptk, u8 *ptk_name,
int akmp,
int cipher);
373 int mgmt_group_cipher;
377 int wpa_parse_wpa_ie_rsn(
const u8 *rsn_ie,
size_t rsn_ie_len,
379 int wpa_parse_wpa_ie_wpa(
const u8 *wpa_ie,
size_t wpa_ie_len,
382 void rsn_pmkid(
const u8 *pmk,
size_t pmk_len,
const u8 *aa,
const u8 *spa,
383 u8 *pmkid,
int use_sha256);
385 int rsn_pmkid_suite_b(
const u8 *kck,
size_t kck_len,
const u8 *aa,
386 const u8 *spa, u8 *pmkid);
388 static inline int rsn_pmkid_suite_b(
const u8 *kck,
size_t kck_len,
const u8 *aa,
389 const u8 *spa, u8 *pmkid)
394 #ifdef CONFIG_SUITEB192 395 int rsn_pmkid_suite_b_192(
const u8 *kck,
size_t kck_len,
const u8 *aa,
396 const u8 *spa, u8 *pmkid);
398 static inline int rsn_pmkid_suite_b_192(
const u8 *kck,
size_t kck_len,
399 const u8 *aa,
const u8 *spa, u8 *pmkid)
405 const char * wpa_cipher_txt(
int cipher);
406 const char * wpa_key_mgmt_txt(
int key_mgmt,
int proto);
407 u32 wpa_akm_to_suite(
int akm);
408 int wpa_compare_rsn_ie(
int ft_initial_assoc,
409 const u8 *ie1,
size_t ie1len,
410 const u8 *ie2,
size_t ie2len);
411 int wpa_insert_pmkid(u8 *ies,
size_t *ies_len,
const u8 *pmkid);
436 int wpa_ft_parse_ies(
const u8 *ies,
size_t ies_len,
struct wpa_ft_ies *parse);
438 int wpa_cipher_key_len(
int cipher);
439 int wpa_cipher_rsc_len(
int cipher);
440 enum wpa_alg wpa_cipher_to_alg(
int cipher);
441 int wpa_cipher_valid_group(
int cipher);
442 int wpa_cipher_valid_pairwise(
int cipher);
443 int wpa_cipher_valid_mgmt_group(
int cipher);
444 u32 wpa_cipher_to_suite(
int proto,
int cipher);
445 int rsn_cipher_put_suites(u8 *pos,
int ciphers);
446 int wpa_cipher_put_suites(u8 *pos,
int ciphers);
447 int wpa_pick_pairwise_cipher(
int ciphers,
int none_allowed);
448 int wpa_pick_group_cipher(
int ciphers);
449 int wpa_parse_cipher(
const char *value);
450 int wpa_write_ciphers(
char *start,
char *end,
int ciphers,
const char *delim);
451 int wpa_select_ap_group_cipher(
int wpa,
int wpa_pairwise,
int rsn_pairwise);
452 unsigned int wpa_mic_len(
int akmp);
453 int fils_domain_name_hash(
const char *domain, u8 *hash);
Definition: wpa_common.h:302
Definition: wpa_common.h:257
Definition: wpa_common.h:315
Definition: wpa_common.h:176
struct wpa_ptk - WPA Pairwise Transient Key IEEE Std 802.11i-2004 - 8.5.1.2 Pairwise key hierarchy ...
Definition: wpa_common.h:201
Definition: wpa_common.h:413
Definition: wpa_common.h:294
Definition: wpa_common.h:225
Definition: wpa_common.h:280
Definition: wpa_common.h:365