1 /* 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 #ifndef __KEY_H__ 31 #define __KEY_H__ 32 33 #include "ttype.h" 34 #include "tether.h" 35 #include "80211mgr.h" 36 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 42 43 44 #define AUTHENTICATOR_KEY 0x10000000 45 #define USE_KEYRSC 0x20000000 46 #define PAIRWISE_KEY 0x40000000 47 #define TRANSMIT_KEY 0x80000000 48 49 #define GROUP_KEY 0x00000000 50 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 56 57 58 typedef struct tagSKeyItem 59 { 60 BOOL bKeyValid; 61 ULONG uKeyLength; 62 BYTE abyKey[MAX_KEY_LEN]; 63 QWORD KeyRSC; 64 DWORD dwTSC47_16; 65 WORD wTSC15_0; 66 BYTE byCipherSuite; 67 BYTE byReserved0; 68 DWORD dwKeyIndex; 69 PVOID pvKeyTable; 70 } SKeyItem, *PSKeyItem; //64 71 72 typedef struct tagSKeyTable 73 { 74 BYTE abyBSSID[U_ETHER_ADDR_LEN]; //6 75 BYTE byReserved0[2]; //8 76 SKeyItem PairwiseKey; 77 SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328 78 DWORD dwGTKeyIndex; // GroupTransmitKey Index 79 BOOL bInUse; 80 //2006-1116-01,<Modify> by NomadZhao 81 //WORD wKeyCtl; 82 //BOOL bSoftWEP; 83 BOOL bSoftWEP; 84 WORD wKeyCtl; // for address of wKeyCtl at align 4 85 86 BYTE byReserved1[6]; 87 } SKeyTable, *PSKeyTable; //348 88 89 typedef struct tagSKeyManagement 90 { 91 SKeyTable KeyTable[MAX_KEY_TABLE]; 92 } SKeyManagement, * PSKeyManagement; 93 94 /*--------------------- Export Types ------------------------------*/ 95 96 /*--------------------- Export Macros ------------------------------*/ 97 98 /*--------------------- Export Classes ----------------------------*/ 99 100 /*--------------------- Export Variables --------------------------*/ 101 102 /*--------------------- Export Functions --------------------------*/ 103 104 VOID KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase); 105 106 BOOL KeybGetKey( 107 IN PSKeyManagement pTable, 108 IN PBYTE pbyBSSID, 109 IN DWORD dwKeyIndex, 110 OUT PSKeyItem *pKey 111 ); 112 113 BOOL KeybSetKey( 114 PSKeyManagement pTable, 115 PBYTE pbyBSSID, 116 DWORD dwKeyIndex, 117 ULONG uKeyLength, 118 PQWORD pKeyRSC, 119 PBYTE pbyKey, 120 BYTE byKeyDecMode, 121 DWORD_PTR dwIoBase, 122 BYTE byLocalID 123 ); 124 125 BOOL KeybSetDefaultKey( 126 PSKeyManagement pTable, 127 DWORD dwKeyIndex, 128 ULONG uKeyLength, 129 PQWORD pKeyRSC, 130 PBYTE pbyKey, 131 BYTE byKeyDecMode, 132 DWORD_PTR dwIoBase, 133 BYTE byLocalID 134 ); 135 136 BOOL KeybRemoveKey( 137 PSKeyManagement pTable, 138 PBYTE pbyBSSID, 139 DWORD dwKeyIndex, 140 DWORD_PTR dwIoBase 141 ); 142 143 BOOL KeybGetTransmitKey( 144 IN PSKeyManagement pTable, 145 IN PBYTE pbyBSSID, 146 IN DWORD dwKeyType, 147 OUT PSKeyItem *pKey 148 ); 149 150 BOOL KeybCheckPairewiseKey( 151 IN PSKeyManagement pTable, 152 OUT PSKeyItem *pKey 153 ); 154 155 BOOL KeybRemoveAllKey( 156 PSKeyManagement pTable, 157 PBYTE pbyBSSID, 158 DWORD_PTR dwIoBase 159 ); 160 161 VOID KeyvRemoveWEPKey( 162 PSKeyManagement pTable, 163 DWORD dwKeyIndex, 164 DWORD_PTR dwIoBase 165 ); 166 167 VOID KeyvRemoveAllWEPKey( 168 PSKeyManagement pTable, 169 DWORD_PTR dwIoBase 170 ); 171 172 BOOL KeybSetAllGroupKey ( 173 PSKeyManagement pTable, 174 DWORD dwKeyIndex, 175 ULONG uKeyLength, 176 PQWORD pKeyRSC, 177 PBYTE pbyKey, 178 BYTE byKeyDecMode, 179 DWORD_PTR dwIoBase, 180 BYTE byLocalID 181 ); 182 183 #endif // __KEY_H__ 184 185