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 58typedef struct tagSKeyItem 59{ 60 BOOL bKeyValid; 61 unsigned long 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 void *pvKeyTable; 70} SKeyItem, *PSKeyItem; //64 71 72typedef struct tagSKeyTable 73{ 74 BYTE abyBSSID[ETH_ALEN]; /* 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 WORD wKeyCtl; 81 BOOL bSoftWEP; 82 BYTE byReserved1[6]; 83} SKeyTable, *PSKeyTable; //352 84 85typedef struct tagSKeyManagement 86{ 87 SKeyTable KeyTable[MAX_KEY_TABLE]; 88} SKeyManagement, *PSKeyManagement; 89 90/*--------------------- Export Types ------------------------------*/ 91 92/*--------------------- Export Macros ------------------------------*/ 93 94/*--------------------- Export Classes ----------------------------*/ 95 96/*--------------------- Export Variables --------------------------*/ 97 98/*--------------------- Export Functions --------------------------*/ 99 100void KeyvInitTable(void *pDeviceHandler, PSKeyManagement pTable); 101 102BOOL KeybGetKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, 103 PSKeyItem *pKey); 104 105BOOL KeybSetKey( 106 void *pDeviceHandler, 107 PSKeyManagement pTable, 108 PBYTE pbyBSSID, 109 DWORD dwKeyIndex, 110 unsigned long uKeyLength, 111 PQWORD pKeyRSC, 112 PBYTE pbyKey, 113 BYTE byKeyDecMode 114 ); 115 116BOOL KeybRemoveKey( 117 void *pDeviceHandler, 118 PSKeyManagement pTable, 119 PBYTE pbyBSSID, 120 DWORD dwKeyIndex 121 ); 122 123BOOL KeybRemoveAllKey( 124 void *pDeviceHandler, 125 PSKeyManagement pTable, 126 PBYTE pbyBSSID 127 ); 128 129void KeyvRemoveWEPKey( 130 void *pDeviceHandler, 131 PSKeyManagement pTable, 132 DWORD dwKeyIndex 133 ); 134 135void KeyvRemoveAllWEPKey( 136 void *pDeviceHandler, 137 PSKeyManagement pTable 138 ); 139 140BOOL KeybGetTransmitKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType, 141 PSKeyItem *pKey); 142 143BOOL KeybCheckPairewiseKey(PSKeyManagement pTable, PSKeyItem *pKey); 144 145BOOL KeybSetDefaultKey( 146 void *pDeviceHandler, 147 PSKeyManagement pTable, 148 DWORD dwKeyIndex, 149 unsigned long uKeyLength, 150 PQWORD pKeyRSC, 151 PBYTE pbyKey, 152 BYTE byKeyDecMode 153 ); 154 155BOOL KeybSetAllGroupKey( 156 void *pDeviceHandler, 157 PSKeyManagement pTable, 158 DWORD dwKeyIndex, 159 unsigned long uKeyLength, 160 PQWORD pKeyRSC, 161 PBYTE pbyKey, 162 BYTE byKeyDecMode 163 ); 164 165#endif /* __KEY_H__ */ 166