1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30#ifndef __KEY_H__
31#define __KEY_H__
32
33#include "tether.h"
34#include "80211mgr.h"
35
36#define MAX_GROUP_KEY 4
37#define MAX_KEY_TABLE 11
38#define MAX_KEY_LEN 32
39#define AES_KEY_LEN 16
40
41#define AUTHENTICATOR_KEY 0x10000000
42#define USE_KEYRSC 0x20000000
43#define PAIRWISE_KEY 0x40000000
44#define TRANSMIT_KEY 0x80000000
45
46#define GROUP_KEY 0x00000000
47
48#define KEY_CTL_WEP 0x00
49#define KEY_CTL_NONE 0x01
50#define KEY_CTL_TKIP 0x02
51#define KEY_CTL_CCMP 0x03
52#define KEY_CTL_INVALID 0xFF
53
54typedef struct tagSKeyItem
55{
56 bool bKeyValid;
57 u32 uKeyLength;
58 u8 abyKey[MAX_KEY_LEN];
59 u64 KeyRSC;
60 u32 dwTSC47_16;
61 u16 wTSC15_0;
62 u8 byCipherSuite;
63 u8 byReserved0;
64 u32 dwKeyIndex;
65 void *pvKeyTable;
66} SKeyItem, *PSKeyItem;
67
68typedef struct tagSKeyTable
69{
70 u8 abyBSSID[ETH_ALEN];
71 u8 byReserved0[2];
72 SKeyItem PairwiseKey;
73 SKeyItem GroupKey[MAX_GROUP_KEY];
74 u32 dwGTKeyIndex;
75 bool bInUse;
76 u16 wKeyCtl;
77 bool bSoftWEP;
78 u8 byReserved1[6];
79} SKeyTable, *PSKeyTable;
80
81typedef struct tagSKeyManagement
82{
83 SKeyTable KeyTable[MAX_KEY_TABLE];
84} SKeyManagement, *PSKeyManagement;
85
86void KeyvInitTable(struct vnt_private *, PSKeyManagement pTable);
87
88int KeybGetKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyIndex,
89 PSKeyItem *pKey);
90
91int KeybSetKey(struct vnt_private *, PSKeyManagement pTable, u8 *pbyBSSID,
92 u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey,
93 u8 byKeyDecMode);
94
95int KeybRemoveKey(struct vnt_private *, PSKeyManagement pTable,
96 u8 *pbyBSSID, u32 dwKeyIndex);
97
98int KeybRemoveAllKey(struct vnt_private *, PSKeyManagement pTable,
99 u8 *pbyBSSID);
100
101int KeybGetTransmitKey(PSKeyManagement pTable, u8 *pbyBSSID, u32 dwKeyType,
102 PSKeyItem *pKey);
103
104int KeybSetDefaultKey(struct vnt_private *, PSKeyManagement pTable,
105 u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey,
106 u8 byKeyDecMode);
107
108int KeybSetAllGroupKey(struct vnt_private *, PSKeyManagement pTable,
109 u32 dwKeyIndex, u32 uKeyLength, u64 *KeyRSC, u8 *pbyKey,
110 u8 byKeyDecMode);
111
112#endif
113