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