2
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License along
16
* with this program; if not, write to the Free Software Foundation, Inc.,
17
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22
* Purpose: Implement functions for 802.11i Key management
37
/*--------------------- Export Definitions -------------------------*/
38
#define MAX_GROUP_KEY 4
39
#define MAX_KEY_TABLE 11
40
#define MAX_KEY_LEN 32
41
#define AES_KEY_LEN 16
44
#define AUTHENTICATOR_KEY 0x10000000
45
#define USE_KEYRSC 0x20000000
46
#define PAIRWISE_KEY 0x40000000
47
#define TRANSMIT_KEY 0x80000000
49
#define GROUP_KEY 0x00000000
51
#define KEY_CTL_WEP 0x00
52
#define KEY_CTL_NONE 0x01
53
#define KEY_CTL_TKIP 0x02
54
#define KEY_CTL_CCMP 0x03
55
#define KEY_CTL_INVALID 0xFF
58
typedef struct tagSKeyItem
61
unsigned long uKeyLength;
62
unsigned char abyKey[MAX_KEY_LEN];
64
unsigned long dwTSC47_16;
65
unsigned short wTSC15_0;
66
unsigned char byCipherSuite;
67
unsigned char byReserved0;
68
unsigned long dwKeyIndex;
70
} SKeyItem, *PSKeyItem; //64
72
typedef struct tagSKeyTable
74
unsigned char abyBSSID[ETH_ALEN]; //6
75
unsigned char byReserved0[2]; //8
77
SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328
78
unsigned long dwGTKeyIndex; // GroupTransmitKey Index
80
//2006-1116-01,<Modify> by NomadZhao
81
//unsigned short wKeyCtl;
84
unsigned short wKeyCtl; // for address of wKeyCtl at align 4
86
unsigned char byReserved1[6];
87
} SKeyTable, *PSKeyTable; //348
89
typedef struct tagSKeyManagement
91
SKeyTable KeyTable[MAX_KEY_TABLE];
92
} SKeyManagement, * PSKeyManagement;
94
/*--------------------- Export Types ------------------------------*/
96
/*--------------------- Export Macros ------------------------------*/
98
/*--------------------- Export Classes ----------------------------*/
100
/*--------------------- Export Variables --------------------------*/
102
/*--------------------- Export Functions --------------------------*/
104
void KeyvInitTable(PSKeyManagement pTable, unsigned long dwIoBase);
107
PSKeyManagement pTable,
108
unsigned char *pbyBSSID,
109
unsigned long dwKeyIndex,
114
PSKeyManagement pTable,
115
unsigned char *pbyBSSID,
116
unsigned long dwKeyIndex,
117
unsigned long uKeyLength,
119
unsigned char *pbyKey,
120
unsigned char byKeyDecMode,
121
unsigned long dwIoBase,
122
unsigned char byLocalID
125
bool KeybSetDefaultKey(
126
PSKeyManagement pTable,
127
unsigned long dwKeyIndex,
128
unsigned long uKeyLength,
130
unsigned char *pbyKey,
131
unsigned char byKeyDecMode,
132
unsigned long dwIoBase,
133
unsigned char byLocalID
137
PSKeyManagement pTable,
138
unsigned char *pbyBSSID,
139
unsigned long dwKeyIndex,
140
unsigned long dwIoBase
143
bool KeybGetTransmitKey(
144
PSKeyManagement pTable,
145
unsigned char *pbyBSSID,
146
unsigned long dwKeyType,
150
bool KeybCheckPairewiseKey(
151
PSKeyManagement pTable,
155
bool KeybRemoveAllKey(
156
PSKeyManagement pTable,
157
unsigned char *pbyBSSID,
158
unsigned long dwIoBase
161
void KeyvRemoveWEPKey(
162
PSKeyManagement pTable,
163
unsigned long dwKeyIndex,
164
unsigned long dwIoBase
167
void KeyvRemoveAllWEPKey(
168
PSKeyManagement pTable,
169
unsigned long dwIoBase
172
bool KeybSetAllGroupKey (
173
PSKeyManagement pTable,
174
unsigned long dwKeyIndex,
175
unsigned long uKeyLength,
177
unsigned char *pbyKey,
178
unsigned char byKeyDecMode,
179
unsigned long dwIoBase,
180
unsigned char byLocalID