linux/drivers/staging/vt6656/key.h
<<
>>
Prefs
   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 "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; //64
  67
  68typedef struct tagSKeyTable
  69{
  70    u8        abyBSSID[ETH_ALEN];  /* 6 */
  71    u8        byReserved0[2];              //8
  72    SKeyItem    PairwiseKey;
  73    SKeyItem    GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328
  74    u32       dwGTKeyIndex;            // GroupTransmitKey Index
  75    bool        bInUse;
  76    u16        wKeyCtl;
  77    bool        bSoftWEP;
  78    u8        byReserved1[6];
  79} SKeyTable, *PSKeyTable; //352
  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 /* __KEY_H__ */
 113