📄 auth.c
字号:
{ // 2. shared key, need to be challenged Seq++; RemoteStatus = MLME_SUCCESS; NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory if(NStatus != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_TRACE, "AUTH - PeerAuthRspAtSeq2Action() allocate memory fail\n"); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_FAIL_NO_RESOURCE); return; } DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send AUTH request seq#3...\n"); MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, &Addr2, &pAd->PortCfg.Bssid); AuthHdr.Wep = 1; // Encrypt challenge text & auth information RTMPInitWepEngine( pAd, pAd->PortCfg.SharedKey[pAd->PortCfg.DefaultKeyId].Key, pAd->PortCfg.DefaultKeyId, pAd->PortCfg.SharedKey[pAd->PortCfg.DefaultKeyId].KeyLen, CyperChlgText); RTMPEncryptData(pAd, (PUCHAR) &Alg, CyperChlgText + 4, 2); RTMPEncryptData(pAd, (PUCHAR) &Seq, CyperChlgText + 6, 2); RTMPEncryptData(pAd, (PUCHAR) &RemoteStatus, CyperChlgText + 8, 2); Element[0] = 16; Element[1] = 128; RTMPEncryptData(pAd, Element, CyperChlgText + 10, 2); RTMPEncryptData(pAd, ChlgText, CyperChlgText + 12, 128); RTMPSetICV(pAd, CyperChlgText + 140); MakeOutgoingFrame(OutBuffer, &FrameLen, MAC_HDR_LEN, &AuthHdr, CIPHER_TEXT_LEN + 16, CyperChlgText, END_OF_ARGS); MiniportMMRequest(pAd, OutBuffer, FrameLen); RTMPSetTimer(pAd, &pAd->Mlme.AuthAux.AuthTimer, AUTH_TIMEOUT); //AUTH_KEY_TIMEOUT); pAd->Mlme.AuthMachine.CurrState = AUTH_WAIT_SEQ4; } } else { pAd->PortCfg.AuthFailReason = Status; COPY_MAC_ADDR(&pAd->PortCfg.AuthFailSta, &Addr2); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_AUTH_CONF, Status); } } } else { DBGPRINT(RT_DEBUG_TRACE, "AUTH - PeerAuthSanity() sanity check fail\n"); }}/* ========================================================================== Description: IRQL = DISPATCH_LEVEL ========================================================================== */VOID PeerAuthRspAtSeq4Action( IN PRT2570ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { MACADDR Addr2; USHORT Alg, Seq, Status; CHAR ChlgText[CIPHER_TEXT_LEN]; if(PeerAuthSanity(pAd, Elem->Msg, Elem->MsgLen, &Addr2, &Alg, &Seq, &Status, ChlgText)) { if(MAC_ADDR_EQUAL(&(pAd->Mlme.AuthAux.Addr), &Addr2) && Seq == 4) { DBGPRINT(RT_DEBUG_TRACE, "AUTH - Receive AUTH_RSP seq#4 to me\n"); RTMPCancelTimer(&pAd->Mlme.AuthAux.AuthTimer); if(Status == MLME_SUCCESS) { pAd->PortCfg.Mauth = TRUE; } else { pAd->PortCfg.AuthFailReason = Status; pAd->PortCfg.AuthFailSta = Addr2; } pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_AUTH_CONF, Status); } } else { DBGPRINT(RT_DEBUG_TRACE, "AUTH - PeerAuthRspAtSeq4Action() sanity check fail\n"); }}/* ========================================================================== Description: IRQL = DISPATCH_LEVEL ========================================================================== */VOID MlmeDeauthReqAction( IN PRT2570ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { MLME_DEAUTH_REQ_STRUCT *Info; MACHDR Hdr; UCHAR *OutBuffer = NULL; NDIS_STATUS NStatus; ULONG FrameLen = 0; Info = (MLME_DEAUTH_REQ_STRUCT *)Elem->Msg; NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory if (NStatus != NDIS_STATUS_SUCCESS) { DBGPRINT(RT_DEBUG_TRACE, "AUTH - MlmeDeauthReqAction() allocate memory fail\n"); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_DEAUTH_CONF, MLME_FAIL_NO_RESOURCE); return; } DBGPRINT(RT_DEBUG_TRACE, "AUTH - Send DE-AUTH request...\n"); MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, &Info->Addr, &pAd->PortCfg.Bssid); MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Hdr, 2, &Info->Reason, END_OF_ARGS); MiniportMMRequest(pAd, OutBuffer, FrameLen); pAd->PortCfg.DeauthReason = Info->Reason; COPY_MAC_ADDR(&pAd->PortCfg.DeauthSta, &Info->Addr); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_DEAUTH_CONF, MLME_SUCCESS);}/* ========================================================================== Description: IRQL = DISPATCH_LEVEL ========================================================================== */VOID AuthTimeoutAction( IN PRT2570ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { DBGPRINT(RT_DEBUG_TRACE, "AUTH - AuthTimeoutAction\n"); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_REJ_TIMEOUT);}/* ========================================================================== Description: IRQL = DISPATCH_LEVEL ========================================================================== */VOID InvalidStateWhenAuth( IN PRT2570ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem) { DBGPRINT(RT_DEBUG_TRACE, "AUTH - InvalidStateWhenAuth (state=%d), reset AUTH state machine\n", pAd->Mlme.AuthMachine.CurrState); pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE; MlmeCntlConfirm(pAd, MT2_AUTH_CONF, MLME_STATE_MACHINE_REJECT);}/* ========================================================================== Description: Some STA/AP Note: This action should never trigger AUTH state transition, therefore we separate it from AUTH state machine, and make it as a standalone service IRQL = DISPATCH_LEVEL ========================================================================== */VOID Cls2errAction( IN PRT2570ADAPTER pAd, IN PMACADDR pAddr) { MACHDR Hdr; UCHAR *OutBuffer = NULL; NDIS_STATUS NStatus; ULONG FrameLen = 0; USHORT Reason = REASON_CLS2ERR; NStatus = MlmeAllocateMemory(pAd, (PVOID)&OutBuffer); //Get an unused nonpaged memory if (NStatus != NDIS_STATUS_SUCCESS) return; DBGPRINT(RT_DEBUG_TRACE, "AUTH - Class 2 error, Send DEAUTH frame...\n"); MgtMacHeaderInit(pAd, &Hdr, SUBTYPE_DEAUTH, 0, pAddr, &pAd->PortCfg.Bssid); MakeOutgoingFrame(OutBuffer, &FrameLen, sizeof(MACHDR), &Hdr, 2, &Reason, END_OF_ARGS); MiniportMMRequest(pAd, OutBuffer, FrameLen); pAd->PortCfg.DeauthReason = Reason; COPY_MAC_ADDR(&pAd->PortCfg.DeauthSta, pAddr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -