wpa_common.h File Reference

WPA definitions shared between hostapd and wpa_supplicant. More...

This graph shows which files directly or indirectly include this file:

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.

Detailed Description

WPA definitions shared between hostapd and wpa_supplicant.

Copyright
Copyright (c) 2002-2008, Jouni Malinen <j@w1.fi>

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 Documentation

#define RSN_SELECTOR ( a,
b,
c,
 ) 
Value:
((((u32) (a)) << 24) | (((u32) (b)) << 16) | (((u32) (c)) << 8) | \
         (u32) (d))

Definition at line 35 of file wpa_common.h.


Function Documentation

void rsn_pmkid ( const u8 *  pmk,
size_t  pmk_len,
const u8 *  aa,
const u8 *  spa,
u8 *  pmkid,
int  use_sha256 
)

Calculate PMK identifier.

Parameters:
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.

Here is the call graph for this function:

const char* wpa_cipher_txt ( int  cipher  ) 

Convert cipher suite to a text string.

Parameters:
cipher Cipher suite (WPA_CIPHER_* enum)
Returns:
Pointer to a text string of the cipher suite name

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.

Parameters:
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
Returns:
0 on success, -1 on failure

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.

Here is the call graph for this function:

const char* wpa_key_mgmt_txt ( int  key_mgmt,
int  proto 
)

Convert key management suite to a text string.

Parameters:
key_mgmt Key management suite (WPA_KEY_MGMT_* enum)
proto WPA/WPA2 version (WPA_PROTO_*)
Returns:
Pointer to a text string of the key management suite name

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.

Parameters:
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
Returns:
0 on success, <0 on failure

Definition at line 247 of file wpa_common.c.

Here is the call graph for this function:

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.

Parameters:
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.

Here is the call graph for this function:


Variable Documentation

WPA Pairwise Transient Key.

IEEE Std 802.11i-2004 - 8.5.1.2 Pairwise key hierarchy

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Generated on Sat Nov 21 23:18:36 2009 for hostapd by  doxygen 1.6.1