216 lines
6.1 KiB
C
216 lines
6.1 KiB
C
|
/*
|
||
|
*************************************************************************
|
||
|
* Ralink Tech Inc.
|
||
|
* 5F., No.36, Taiyuan St., Jhubei City,
|
||
|
* Hsinchu County 302,
|
||
|
* Taiwan, R.O.C.
|
||
|
*
|
||
|
* (c) Copyright 2002-2007, Ralink Technology, Inc.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify *
|
||
|
* it under the terms of the GNU General Public License as published by *
|
||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||
|
* (at your option) any later version. *
|
||
|
* *
|
||
|
* This program is distributed in the hope that it will be useful, *
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||
|
* GNU General Public License for more details. *
|
||
|
* *
|
||
|
* You should have received a copy of the GNU General Public License *
|
||
|
* along with this program; if not, write to the *
|
||
|
* Free Software Foundation, Inc., *
|
||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||
|
* *
|
||
|
*************************************************************************
|
||
|
|
||
|
Module Name:
|
||
|
leap.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Revision History:
|
||
|
Who When What
|
||
|
-------- ---------- ----------------------------------------------
|
||
|
Name Date Modification logs
|
||
|
*/
|
||
|
#ifndef __LEAP_H__
|
||
|
#define __LEAP_H__
|
||
|
|
||
|
// Messages for Associate state machine
|
||
|
#define LEAP_MACHINE_BASE 30
|
||
|
|
||
|
#define LEAP_MSG_REQUEST_IDENTITY 31
|
||
|
#define LEAP_MSG_REQUEST_LEAP 32
|
||
|
#define LEAP_MSG_SUCCESS 33
|
||
|
#define LEAP_MSG_FAILED 34
|
||
|
#define LEAP_MSG_RESPONSE_LEAP 35
|
||
|
#define LEAP_MSG_EAPOLKEY 36
|
||
|
#define LEAP_MSG_UNKNOWN 37
|
||
|
#define LEAP_MSG 38
|
||
|
//! assoc state-machine states
|
||
|
#define LEAP_IDLE 0
|
||
|
#define LEAP_WAIT_IDENTITY_REQUEST 1
|
||
|
#define LEAP_WAIT_CHANLLENGE_REQUEST 2
|
||
|
#define LEAP_WAIT_SUCCESS 3
|
||
|
#define LEAP_WAIT_CHANLLENGE_RESPONSE 4
|
||
|
#define LEAP_WAIT_EAPOLKEY 5
|
||
|
|
||
|
#define LEAP_REASON_INVALID_AUTH 0x01
|
||
|
#define LEAP_REASON_AUTH_TIMEOUT 0x02
|
||
|
#define LEAP_REASON_CHALLENGE_FROM_AP_FAILED 0x03
|
||
|
#define LEAP_REASON_CHALLENGE_TO_AP_FAILED 0x04
|
||
|
|
||
|
#define CISCO_AuthModeLEAP 0x80
|
||
|
#define CISCO_AuthModeLEAPNone 0x00
|
||
|
#define LEAP_AUTH_TIMEOUT 30000
|
||
|
#define LEAP_CHALLENGE_RESPONSE_LENGTH 24
|
||
|
#define LEAP_CHALLENGE_REQUEST_LENGTH 8
|
||
|
|
||
|
typedef struct _LEAP_EAPOL_HEADER_ {
|
||
|
UCHAR Version;
|
||
|
UCHAR Type;
|
||
|
UCHAR Length[2];
|
||
|
} LEAP_EAPOL_HEADER, *PLEAP_EAPOL_HEADER;
|
||
|
|
||
|
typedef struct _LEAP_EAPOL_PACKET_ {
|
||
|
UCHAR Code;
|
||
|
UCHAR Identifier;
|
||
|
UCHAR Length[2];
|
||
|
UCHAR Type;
|
||
|
} LEAP_EAPOL_PACKET, *PLEAP_EAPOL_PACKET;
|
||
|
|
||
|
typedef struct _LEAP_EAP_CONTENTS_ {
|
||
|
UCHAR Version;
|
||
|
UCHAR Reserved;
|
||
|
UCHAR Length;
|
||
|
} LEAP_EAP_CONTENTS, *PLEAP_EAP_CONTENTS;
|
||
|
|
||
|
/*** EAPOL key ***/
|
||
|
typedef struct _EAPOL_KEY_HEADER_ {
|
||
|
UCHAR Type;
|
||
|
UCHAR Length[2];
|
||
|
UCHAR Counter[8];
|
||
|
UCHAR IV[16];
|
||
|
UCHAR Index;
|
||
|
UCHAR Signature[16];
|
||
|
} EAPOL_KEY_HEADER, *PEAPOL_KEY_HEADER;
|
||
|
|
||
|
BOOLEAN LeapMsgTypeSubst(
|
||
|
IN UCHAR EAPType,
|
||
|
OUT ULONG *MsgType);
|
||
|
|
||
|
VOID LeapMachinePerformAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN STATE_MACHINE *S,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID LeapMacHeaderInit(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN OUT PHEADER_802_11 pHdr80211,
|
||
|
IN UCHAR wep,
|
||
|
IN PUCHAR pAddr3);
|
||
|
|
||
|
VOID LeapStartAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID LeapIdentityAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID LeapPeerChallengeAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID HashPwd(
|
||
|
IN PUCHAR pwd,
|
||
|
IN INT pwdlen,
|
||
|
OUT PUCHAR hash);
|
||
|
|
||
|
VOID PeerChallengeResponse(
|
||
|
IN PUCHAR szChallenge,
|
||
|
IN PUCHAR smbPasswd,
|
||
|
OUT PUCHAR szResponse);
|
||
|
|
||
|
VOID ParityKey(
|
||
|
OUT PUCHAR szOut,
|
||
|
IN PUCHAR szIn);
|
||
|
|
||
|
VOID DesKey(
|
||
|
OUT ULONG k[16][2],
|
||
|
IN PUCHAR key,
|
||
|
IN INT decrypt);
|
||
|
|
||
|
VOID Des(
|
||
|
IN ULONG ks[16][2],
|
||
|
OUT UCHAR block[8]);
|
||
|
|
||
|
VOID DesEncrypt(
|
||
|
IN PUCHAR szClear,
|
||
|
IN PUCHAR szKey,
|
||
|
OUT PUCHAR szOut);
|
||
|
|
||
|
VOID LeapNetworkChallengeAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID LeapNetworkChallengeResponse(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID HashpwdHash(
|
||
|
IN PUCHAR hash,
|
||
|
IN PUCHAR hashhash);
|
||
|
|
||
|
VOID ProcessSessionKey(
|
||
|
OUT PUCHAR SessionKey,
|
||
|
IN PUCHAR hash2,
|
||
|
IN PUCHAR ChallengeToRadius,
|
||
|
IN PUCHAR ChallengeResponseFromRadius,
|
||
|
IN PUCHAR ChallengeFromRadius,
|
||
|
IN PUCHAR ChallengeResponseToRadius);
|
||
|
|
||
|
VOID LeapEapolKeyAction(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN MLME_QUEUE_ELEM *Elem);
|
||
|
|
||
|
VOID RogueApTableInit(
|
||
|
IN ROGUEAP_TABLE *Tab);
|
||
|
|
||
|
ULONG RogueApTableSearch(
|
||
|
IN ROGUEAP_TABLE *Tab,
|
||
|
IN PUCHAR pAddr);
|
||
|
|
||
|
VOID RogueApEntrySet(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
OUT ROGUEAP_ENTRY *pRogueAp,
|
||
|
IN PUCHAR pAddr,
|
||
|
IN UCHAR FaileCode);
|
||
|
|
||
|
ULONG RogueApTableSetEntry(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
OUT ROGUEAP_TABLE *Tab,
|
||
|
IN PUCHAR pAddr,
|
||
|
IN UCHAR FaileCode);
|
||
|
|
||
|
VOID RogueApTableDeleteEntry(
|
||
|
IN OUT ROGUEAP_TABLE *Tab,
|
||
|
IN PUCHAR pAddr);
|
||
|
|
||
|
VOID LeapAuthTimeout(
|
||
|
IN PVOID SystemSpecific1,
|
||
|
IN PVOID FunctionContext,
|
||
|
IN PVOID SystemSpecific2,
|
||
|
IN PVOID SystemSpecific3);
|
||
|
|
||
|
VOID LeapSendRogueAPReport(
|
||
|
IN PRTMP_ADAPTER pAd);
|
||
|
|
||
|
BOOLEAN CCKMAssocRspSanity(
|
||
|
IN PRTMP_ADAPTER pAd,
|
||
|
IN VOID *Msg,
|
||
|
IN ULONG MsgLen);
|
||
|
|
||
|
#endif // __LEAP_H__
|