/drivers/net/wireless/bcm4329/include/proto/eapol.h
C Header | 172 lines | 111 code | 32 blank | 29 comment | 0 complexity | 7661dabfba35f65393edba7a9a06e473 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
1/*
2 * 802.1x EAPOL definitions
3 *
4 * See
5 * IEEE Std 802.1X-2001
6 * IEEE 802.1X RADIUS Usage Guidelines
7 *
8 * Copyright (C) 2002 Broadcom Corporation
9 *
10 * $Id: eapol.h,v 9.18.260.1.2.1.6.6 2009/04/08 05:00:08 Exp $
11 */
12
13#ifndef _eapol_h_
14#define _eapol_h_
15
16#ifndef _TYPEDEFS_H_
17#include <typedefs.h>
18#endif
19
20/* This marks the start of a packed structure section. */
21#include <packed_section_start.h>
22
23#define AKW_BLOCK_LEN 8 /* The only def we need here */
24
25/* EAPOL for 802.3/Ethernet */
26typedef struct {
27 struct ether_header eth; /* 802.3/Ethernet header */
28 unsigned char version; /* EAPOL protocol version */
29 unsigned char type; /* EAPOL type */
30 unsigned short length; /* Length of body */
31 unsigned char body[1]; /* Body (optional) */
32} eapol_header_t;
33
34#define EAPOL_HEADER_LEN 18
35
36/* EAPOL version */
37#define WPA2_EAPOL_VERSION 2
38#define WPA_EAPOL_VERSION 1
39#define LEAP_EAPOL_VERSION 1
40#define SES_EAPOL_VERSION 1
41
42/* EAPOL types */
43#define EAP_PACKET 0
44#define EAPOL_START 1
45#define EAPOL_LOGOFF 2
46#define EAPOL_KEY 3
47#define EAPOL_ASF 4
48
49/* EAPOL-Key types */
50#define EAPOL_RC4_KEY 1
51#define EAPOL_WPA2_KEY 2 /* 802.11i/WPA2 */
52#define EAPOL_WPA_KEY 254 /* WPA */
53
54/* RC4 EAPOL-Key header field sizes */
55#define EAPOL_KEY_REPLAY_LEN 8
56#define EAPOL_KEY_IV_LEN 16
57#define EAPOL_KEY_SIG_LEN 16
58
59/* RC4 EAPOL-Key */
60typedef BWL_PRE_PACKED_STRUCT struct {
61 unsigned char type; /* Key Descriptor Type */
62 unsigned short length; /* Key Length (unaligned) */
63 unsigned char replay[EAPOL_KEY_REPLAY_LEN]; /* Replay Counter */
64 unsigned char iv[EAPOL_KEY_IV_LEN]; /* Key IV */
65 unsigned char index; /* Key Flags & Index */
66 unsigned char signature[EAPOL_KEY_SIG_LEN]; /* Key Signature */
67 unsigned char key[1]; /* Key (optional) */
68} BWL_POST_PACKED_STRUCT eapol_key_header_t;
69
70#define EAPOL_KEY_HEADER_LEN 44
71
72/* RC4 EAPOL-Key flags */
73#define EAPOL_KEY_FLAGS_MASK 0x80
74#define EAPOL_KEY_BROADCAST 0
75#define EAPOL_KEY_UNICAST 0x80
76
77/* RC4 EAPOL-Key index */
78#define EAPOL_KEY_INDEX_MASK 0x7f
79
80/* WPA/802.11i/WPA2 EAPOL-Key header field sizes */
81#define EAPOL_WPA_KEY_REPLAY_LEN 8
82#define EAPOL_WPA_KEY_NONCE_LEN 32
83#define EAPOL_WPA_KEY_IV_LEN 16
84#define EAPOL_WPA_KEY_ID_LEN 8
85#define EAPOL_WPA_KEY_RSC_LEN 8
86#define EAPOL_WPA_KEY_MIC_LEN 16
87#define EAPOL_WPA_KEY_DATA_LEN (EAPOL_WPA_MAX_KEY_SIZE + AKW_BLOCK_LEN)
88#define EAPOL_WPA_MAX_KEY_SIZE 32
89
90/* WPA EAPOL-Key */
91typedef BWL_PRE_PACKED_STRUCT struct {
92 unsigned char type; /* Key Descriptor Type */
93 unsigned short key_info; /* Key Information (unaligned) */
94 unsigned short key_len; /* Key Length (unaligned) */
95 unsigned char replay[EAPOL_WPA_KEY_REPLAY_LEN]; /* Replay Counter */
96 unsigned char nonce[EAPOL_WPA_KEY_NONCE_LEN]; /* Nonce */
97 unsigned char iv[EAPOL_WPA_KEY_IV_LEN]; /* Key IV */
98 unsigned char rsc[EAPOL_WPA_KEY_RSC_LEN]; /* Key RSC */
99 unsigned char id[EAPOL_WPA_KEY_ID_LEN]; /* WPA:Key ID, 802.11i/WPA2: Reserved */
100 unsigned char mic[EAPOL_WPA_KEY_MIC_LEN]; /* Key MIC */
101 unsigned short data_len; /* Key Data Length */
102 unsigned char data[EAPOL_WPA_KEY_DATA_LEN]; /* Key data */
103} BWL_POST_PACKED_STRUCT eapol_wpa_key_header_t;
104
105#define EAPOL_WPA_KEY_LEN 95
106
107/* WPA/802.11i/WPA2 KEY KEY_INFO bits */
108#define WPA_KEY_DESC_V1 0x01
109#define WPA_KEY_DESC_V2 0x02
110#define WPA_KEY_PAIRWISE 0x08
111#define WPA_KEY_INSTALL 0x40
112#define WPA_KEY_ACK 0x80
113#define WPA_KEY_MIC 0x100
114#define WPA_KEY_SECURE 0x200
115#define WPA_KEY_ERROR 0x400
116#define WPA_KEY_REQ 0x800
117
118/* WPA-only KEY KEY_INFO bits */
119#define WPA_KEY_INDEX_0 0x00
120#define WPA_KEY_INDEX_1 0x10
121#define WPA_KEY_INDEX_2 0x20
122#define WPA_KEY_INDEX_3 0x30
123#define WPA_KEY_INDEX_MASK 0x30
124#define WPA_KEY_INDEX_SHIFT 0x04
125
126/* 802.11i/WPA2-only KEY KEY_INFO bits */
127#define WPA_KEY_ENCRYPTED_DATA 0x1000
128
129/* Key Data encapsulation */
130typedef BWL_PRE_PACKED_STRUCT struct {
131 uint8 type;
132 uint8 length;
133 uint8 oui[3];
134 uint8 subtype;
135 uint8 data[1];
136} BWL_POST_PACKED_STRUCT eapol_wpa2_encap_data_t;
137
138#define EAPOL_WPA2_ENCAP_DATA_HDR_LEN 6
139
140#define WPA2_KEY_DATA_SUBTYPE_GTK 1
141#define WPA2_KEY_DATA_SUBTYPE_STAKEY 2
142#define WPA2_KEY_DATA_SUBTYPE_MAC 3
143#define WPA2_KEY_DATA_SUBTYPE_PMKID 4
144
145/* GTK encapsulation */
146typedef BWL_PRE_PACKED_STRUCT struct {
147 uint8 flags;
148 uint8 reserved;
149 uint8 gtk[EAPOL_WPA_MAX_KEY_SIZE];
150} BWL_POST_PACKED_STRUCT eapol_wpa2_key_gtk_encap_t;
151
152#define EAPOL_WPA2_KEY_GTK_ENCAP_HDR_LEN 2
153
154#define WPA2_GTK_INDEX_MASK 0x03
155#define WPA2_GTK_INDEX_SHIFT 0x00
156
157#define WPA2_GTK_TRANSMIT 0x04
158
159/* STAKey encapsulation */
160typedef BWL_PRE_PACKED_STRUCT struct {
161 uint8 reserved[2];
162 uint8 mac[ETHER_ADDR_LEN];
163 uint8 stakey[EAPOL_WPA_MAX_KEY_SIZE];
164} BWL_POST_PACKED_STRUCT eapol_wpa2_key_stakey_encap_t;
165
166#define WPA2_KEY_DATA_PAD 0xdd
167
168
169/* This marks the end of a packed structure section. */
170#include <packed_section_end.h>
171
172#endif /* _eapol_h_ */