/* ************************************************************************* * 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__