WPA definitions shared between hostapd and wpa_supplicant. More...
Go to the source code of this file.
Data Structures | |
struct | wpa_eapol_key |
struct | wpa_ptk |
WPA Pairwise Transient Key. More... | |
struct | wpa_ie_hdr |
struct | rsn_ie_hdr |
struct | rsn_error_kde |
struct | wpa_ie_data |
Defines | |
#define | WPA_MAX_SSID_LEN 32 |
#define | PMKID_LEN 16 |
#define | PMK_LEN 32 |
#define | WPA_REPLAY_COUNTER_LEN 8 |
#define | WPA_NONCE_LEN 32 |
#define | WPA_KEY_RSC_LEN 8 |
#define | WPA_GMK_LEN 32 |
#define | WPA_GTK_MAX_LEN 32 |
#define | WPA_SELECTOR_LEN 4 |
#define | WPA_VERSION 1 |
#define | RSN_SELECTOR_LEN 4 |
#define | RSN_VERSION 1 |
#define | RSN_SELECTOR(a, b, c, d) |
#define | WPA_AUTH_KEY_MGMT_NONE RSN_SELECTOR(0x00, 0x50, 0xf2, 0) |
#define | WPA_AUTH_KEY_MGMT_UNSPEC_802_1X RSN_SELECTOR(0x00, 0x50, 0xf2, 1) |
#define | WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X RSN_SELECTOR(0x00, 0x50, 0xf2, 2) |
#define | WPA_CIPHER_SUITE_NONE RSN_SELECTOR(0x00, 0x50, 0xf2, 0) |
#define | WPA_CIPHER_SUITE_WEP40 RSN_SELECTOR(0x00, 0x50, 0xf2, 1) |
#define | WPA_CIPHER_SUITE_TKIP RSN_SELECTOR(0x00, 0x50, 0xf2, 2) |
#define | WPA_CIPHER_SUITE_CCMP RSN_SELECTOR(0x00, 0x50, 0xf2, 4) |
#define | WPA_CIPHER_SUITE_WEP104 RSN_SELECTOR(0x00, 0x50, 0xf2, 5) |
#define | RSN_AUTH_KEY_MGMT_UNSPEC_802_1X RSN_SELECTOR(0x00, 0x0f, 0xac, 1) |
#define | RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X RSN_SELECTOR(0x00, 0x0f, 0xac, 2) |
#define | RSN_AUTH_KEY_MGMT_802_1X_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 5) |
#define | RSN_AUTH_KEY_MGMT_PSK_SHA256 RSN_SELECTOR(0x00, 0x0f, 0xac, 6) |
#define | RSN_CIPHER_SUITE_NONE RSN_SELECTOR(0x00, 0x0f, 0xac, 0) |
#define | RSN_CIPHER_SUITE_WEP40 RSN_SELECTOR(0x00, 0x0f, 0xac, 1) |
#define | RSN_CIPHER_SUITE_TKIP RSN_SELECTOR(0x00, 0x0f, 0xac, 2) |
#define | RSN_CIPHER_SUITE_CCMP RSN_SELECTOR(0x00, 0x0f, 0xac, 4) |
#define | RSN_CIPHER_SUITE_WEP104 RSN_SELECTOR(0x00, 0x0f, 0xac, 5) |
#define | RSN_KEY_DATA_GROUPKEY RSN_SELECTOR(0x00, 0x0f, 0xac, 1) |
#define | RSN_KEY_DATA_MAC_ADDR RSN_SELECTOR(0x00, 0x0f, 0xac, 3) |
#define | RSN_KEY_DATA_PMKID RSN_SELECTOR(0x00, 0x0f, 0xac, 4) |
#define | WPA_OUI_TYPE RSN_SELECTOR(0x00, 0x50, 0xf2, 1) |
#define | RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val)) |
#define | RSN_SELECTOR_GET(a) WPA_GET_BE32((const u8 *) (a)) |
#define | RSN_NUM_REPLAY_COUNTERS_1 0 |
#define | RSN_NUM_REPLAY_COUNTERS_2 1 |
#define | RSN_NUM_REPLAY_COUNTERS_4 2 |
#define | RSN_NUM_REPLAY_COUNTERS_16 3 |
#define | WPA_CAPABILITY_PREAUTH BIT(0) |
#define | WPA_CAPABILITY_NO_PAIRWISE BIT(1) |
#define | WPA_CAPABILITY_MFPR BIT(6) |
#define | WPA_CAPABILITY_MFPC BIT(7) |
#define | WPA_CAPABILITY_PEERKEY_ENABLED BIT(9) |
#define | MOBILITY_DOMAIN_ID_LEN 2 |
#define | FT_R0KH_ID_MAX_LEN 48 |
#define | FT_R1KH_ID_LEN 6 |
#define | WPA_PMK_NAME_LEN 16 |
#define | WPA_KEY_INFO_TYPE_MASK ((u16) (BIT(0) | BIT(1) | BIT(2))) |
#define | WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 BIT(0) |
#define | WPA_KEY_INFO_TYPE_HMAC_SHA1_AES BIT(1) |
#define | WPA_KEY_INFO_TYPE_AES_128_CMAC 3 |
#define | WPA_KEY_INFO_KEY_TYPE BIT(3) |
#define | WPA_KEY_INFO_KEY_INDEX_MASK (BIT(4) | BIT(5)) |
#define | WPA_KEY_INFO_KEY_INDEX_SHIFT 4 |
#define | WPA_KEY_INFO_INSTALL BIT(6) |
#define | WPA_KEY_INFO_TXRX BIT(6) |
#define | WPA_KEY_INFO_ACK BIT(7) |
#define | WPA_KEY_INFO_MIC BIT(8) |
#define | WPA_KEY_INFO_SECURE BIT(9) |
#define | WPA_KEY_INFO_ERROR BIT(10) |
#define | WPA_KEY_INFO_REQUEST BIT(11) |
#define | WPA_KEY_INFO_ENCR_KEY_DATA BIT(12) |
#define | WPA_KEY_INFO_SMK_MESSAGE BIT(13) |
Functions | |
int | wpa_eapol_key_mic (const u8 *key, int ver, const u8 *buf, size_t len, u8 *mic) |
Calculate EAPOL-Key MIC. | |
void | wpa_pmk_to_ptk (const u8 *pmk, size_t pmk_len, const char *label, const u8 *addr1, const u8 *addr2, const u8 *nonce1, const u8 *nonce2, u8 *ptk, size_t ptk_len, int use_sha256) |
Calculate PTK from PMK, addresses, and nonces. | |
int | wpa_parse_wpa_ie_rsn (const u8 *rsn_ie, size_t rsn_ie_len, struct wpa_ie_data *data) |
Parse RSN IE. | |
void | rsn_pmkid (const u8 *pmk, size_t pmk_len, const u8 *aa, const u8 *spa, u8 *pmkid, int use_sha256) |
Calculate PMK identifier. | |
const char * | wpa_cipher_txt (int cipher) |
Convert cipher suite to a text string. | |
const char * | wpa_key_mgmt_txt (int key_mgmt, int proto) |
Convert key management suite to a text string. | |
Variables | |
struct wpa_eapol_key | STRUCT_PACKED |
WPA Pairwise Transient Key. |
WPA definitions shared between hostapd and wpa_supplicant.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.
Alternatively, this software may be distributed under the terms of BSD license.
See README and COPYING for more details.
Definition in file wpa_common.h.
#define RSN_SELECTOR | ( | a, | |||
b, | |||||
c, | |||||
d | ) |
((((u32) (a)) << 24) | (((u32) (b)) << 16) | (((u32) (c)) << 8) | \ (u32) (d))
Definition at line 35 of file wpa_common.h.
void rsn_pmkid | ( | const u8 * | pmk, | |
size_t | pmk_len, | |||
const u8 * | aa, | |||
const u8 * | spa, | |||
u8 * | pmkid, | |||
int | use_sha256 | |||
) |
Calculate PMK identifier.
pmk | Pairwise master key | |
pmk_len | Length of pmk in bytes | |
aa | Authenticator address | |
spa | Supplicant address | |
pmkid | Buffer for PMKID | |
use_sha256 | Whether to use SHA256-based KDF |
IEEE Std 802.11i-2004 - 8.5.1.2 Pairwise key hierarchy PMKID = HMAC-SHA1-128(PMK, "PMK Name" || AA || SPA)
Definition at line 594 of file wpa_common.c.
const char* wpa_cipher_txt | ( | int | cipher | ) |
Convert cipher suite to a text string.
cipher | Cipher suite (WPA_CIPHER_* enum) |
Definition at line 622 of file wpa_common.c.
int wpa_eapol_key_mic | ( | const u8 * | key, | |
int | ver, | |||
const u8 * | buf, | |||
size_t | len, | |||
u8 * | mic | |||
) |
Calculate EAPOL-Key MIC.
key | EAPOL-Key Key Confirmation Key (KCK) | |
ver | Key descriptor version (WPA_KEY_INFO_TYPE_*) | |
buf | Pointer to the beginning of the EAPOL header (version field) | |
len | Length of the EAPOL frame (from EAPOL header to the end of the frame) | |
mic | Pointer to the buffer to which the EAPOL-Key MIC is written |
Calculate EAPOL-Key MIC for an EAPOL-Key packet. The EAPOL-Key MIC field has to be cleared (all zeroes) when calling this function.
Note: 'IEEE Std 802.11i-2004 - 8.5.2 EAPOL-Key frames' has an error in the description of the Key MIC calculation. It includes packet data from the beginning of the EAPOL-Key header, not EAPOL header. This incorrect change happened during final editing of the standard and the correct behavior is defined in the last draft (IEEE 802.11i/D10).
Definition at line 48 of file wpa_common.c.
const char* wpa_key_mgmt_txt | ( | int | key_mgmt, | |
int | proto | |||
) |
Convert key management suite to a text string.
key_mgmt | Key management suite (WPA_KEY_MGMT_* enum) | |
proto | WPA/WPA2 version (WPA_PROTO_*) |
Definition at line 650 of file wpa_common.c.
int wpa_parse_wpa_ie_rsn | ( | const u8 * | rsn_ie, | |
size_t | rsn_ie_len, | |||
struct wpa_ie_data * | data | |||
) |
Parse RSN IE.
rsn_ie | Buffer containing RSN IE | |
rsn_ie_len | RSN IE buffer length (including IE number and length octets) | |
data | Pointer to structure that will be filled in with parsed data |
Definition at line 247 of file wpa_common.c.
void wpa_pmk_to_ptk | ( | const u8 * | pmk, | |
size_t | pmk_len, | |||
const char * | label, | |||
const u8 * | addr1, | |||
const u8 * | addr2, | |||
const u8 * | nonce1, | |||
const u8 * | nonce2, | |||
u8 * | ptk, | |||
size_t | ptk_len, | |||
int | use_sha256 | |||
) |
Calculate PTK from PMK, addresses, and nonces.
pmk | Pairwise master key | |
pmk_len | Length of PMK | |
label | Label to use in derivation | |
addr1 | AA or SA | |
addr2 | SA or AA | |
nonce1 | ANonce or SNonce | |
nonce2 | SNonce or ANonce | |
ptk | Buffer for pairwise transient key | |
ptk_len | Length of PTK | |
use_sha256 | Whether to use SHA256-based KDF |
IEEE Std 802.11i-2004 - 8.5.1.2 Pairwise key hierarchy PTK = PRF-X(PMK, "Pairwise key expansion", Min(AA, SA) || Max(AA, SA) || Min(ANonce, SNonce) || Max(ANonce, SNonce))
STK = PRF-X(SMK, "Peer key expansion", Min(MAC_I, MAC_P) || Max(MAC_I, MAC_P) || Min(INonce, PNonce) || Max(INonce, PNonce))
Definition at line 96 of file wpa_common.c.
struct rsn_error_kde STRUCT_PACKED |
WPA Pairwise Transient Key.
IEEE Std 802.11i-2004 - 8.5.1.2 Pairwise key hierarchy