blob: 6818c1ff4d7351947bb892821d531ee341033c7d [file] [log] [blame]
/*
*************************************************************************
* 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__