blob: 9c7d335ea08822f4be4a8624c0e81dbf431da052 [file] [log] [blame]
Forest Bond5449c682009-04-25 10:30:44 -04001/*
2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3 * All rights reserved.
4 *
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.
9 *
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.
14 *
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.
18 *
19 *
20 * File: key.h
21 *
22 * Purpose: Implement functions for 802.11i Key management
23 *
24 * Author: Jerry Chen
25 *
26 * Date: May 29, 2003
27 *
28 */
29
30
31#ifndef __KEY_H__
32#define __KEY_H__
33
34#if !defined(__TTYPE_H__)
35#include "ttype.h"
36#endif
37
38#if !defined(__TETHER_H__)
39#include "tether.h"
40#endif
41
42#if !defined(__80211MGR_H__)
43#include "80211mgr.h"
44#endif
45
46/*--------------------- Export Definitions -------------------------*/
47#define MAX_GROUP_KEY 4
48#define MAX_KEY_TABLE 11
49#define MAX_KEY_LEN 32
50#define AES_KEY_LEN 16
51
52
53#define AUTHENTICATOR_KEY 0x10000000
54#define USE_KEYRSC 0x20000000
55#define PAIRWISE_KEY 0x40000000
56#define TRANSMIT_KEY 0x80000000
57
58#define GROUP_KEY 0x00000000
59
60#define KEY_CTL_WEP 0x00
61#define KEY_CTL_NONE 0x01
62#define KEY_CTL_TKIP 0x02
63#define KEY_CTL_CCMP 0x03
64#define KEY_CTL_INVALID 0xFF
65
66
67typedef struct tagSKeyItem
68{
69 BOOL bKeyValid;
70 ULONG uKeyLength;
71 BYTE abyKey[MAX_KEY_LEN];
72 QWORD KeyRSC;
73 DWORD dwTSC47_16;
74 WORD wTSC15_0;
75 BYTE byCipherSuite;
76 BYTE byReserved0;
77 DWORD dwKeyIndex;
78 PVOID pvKeyTable;
79} SKeyItem, DEF* PSKeyItem; //64
80
81typedef struct tagSKeyTable
82{
83 BYTE abyBSSID[U_ETHER_ADDR_LEN]; //6
84 BYTE byReserved0[2]; //8
85 SKeyItem PairwiseKey;
86 SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328
87 DWORD dwGTKeyIndex; // GroupTransmitKey Index
88 BOOL bInUse;
89 //2006-1116-01,<Modify> by NomadZhao
90 //WORD wKeyCtl;
91 //BOOL bSoftWEP;
92 BOOL bSoftWEP;
93 WORD wKeyCtl; // for address of wKeyCtl at align 4
94
95 BYTE byReserved1[6];
96} SKeyTable, DEF* PSKeyTable; //348
97
98typedef struct tagSKeyManagement
99{
100 SKeyTable KeyTable[MAX_KEY_TABLE];
101} SKeyManagement, DEF* PSKeyManagement;
102
103/*--------------------- Export Types ------------------------------*/
104
105/*--------------------- Export Macros ------------------------------*/
106
107/*--------------------- Export Classes ----------------------------*/
108
109/*--------------------- Export Variables --------------------------*/
110
111/*--------------------- Export Functions --------------------------*/
112#ifdef __cplusplus
113extern "C" { /* Assume C declarations for C++ */
114#endif /* __cplusplus */
115
116VOID KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase);
117
118BOOL KeybGetKey(
119 IN PSKeyManagement pTable,
120 IN PBYTE pbyBSSID,
121 IN DWORD dwKeyIndex,
122 OUT PSKeyItem *pKey
123 );
124
125BOOL KeybSetKey(
126 PSKeyManagement pTable,
127 PBYTE pbyBSSID,
128 DWORD dwKeyIndex,
129 ULONG uKeyLength,
130 PQWORD pKeyRSC,
131 PBYTE pbyKey,
132 BYTE byKeyDecMode,
133 DWORD_PTR dwIoBase,
134 BYTE byLocalID
135 );
136
137BOOL KeybSetDefaultKey(
138 PSKeyManagement pTable,
139 DWORD dwKeyIndex,
140 ULONG uKeyLength,
141 PQWORD pKeyRSC,
142 PBYTE pbyKey,
143 BYTE byKeyDecMode,
144 DWORD_PTR dwIoBase,
145 BYTE byLocalID
146 );
147
148BOOL KeybRemoveKey(
149 PSKeyManagement pTable,
150 PBYTE pbyBSSID,
151 DWORD dwKeyIndex,
152 DWORD_PTR dwIoBase
153 );
154
155BOOL KeybGetTransmitKey(
156 IN PSKeyManagement pTable,
157 IN PBYTE pbyBSSID,
158 IN DWORD dwKeyType,
159 OUT PSKeyItem *pKey
160 );
161
162BOOL KeybCheckPairewiseKey(
163 IN PSKeyManagement pTable,
164 OUT PSKeyItem *pKey
165 );
166
167BOOL KeybRemoveAllKey(
168 PSKeyManagement pTable,
169 PBYTE pbyBSSID,
170 DWORD_PTR dwIoBase
171 );
172
173VOID KeyvRemoveWEPKey(
174 PSKeyManagement pTable,
175 DWORD dwKeyIndex,
176 DWORD_PTR dwIoBase
177 );
178
179VOID KeyvRemoveAllWEPKey(
180 PSKeyManagement pTable,
181 DWORD_PTR dwIoBase
182 );
183
184BOOL KeybSetAllGroupKey (
185 PSKeyManagement pTable,
186 DWORD dwKeyIndex,
187 ULONG uKeyLength,
188 PQWORD pKeyRSC,
189 PBYTE pbyKey,
190 BYTE byKeyDecMode,
191 DWORD_PTR dwIoBase,
192 BYTE byLocalID
193 );
194
195#ifdef __cplusplus
196} /* End of extern "C" { */
197
198#endif /* __cplusplus */
199
200
201#endif // __KEY_H__
202