⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
        
    } else {
        for (i=0;i<MAX_KEY_TABLE;i++) {
            if ( (pTable->KeyTable[i].bInUse == TRUE) &&
                 IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {
                
                if ((dwKeyIndex & PAIRWISE_KEY) != 0) {
                    pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;
                    bReturnValue = TRUE;
                    break;
                }
                else if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) {
                    pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = FALSE;
                    if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[i].dwGTKeyIndex & 0x7FFFFFFF)) {
                        // remove Group transmit key
                        pTable->KeyTable[i].dwGTKeyIndex = 0;
                    }
                    bReturnValue = TRUE;
                    break;
                }
                else {
                    bReturnValue = FALSE;
                    break;
                }
            } //pTable->KeyTable[i].bInUse == TRUE
        }  //for
        bReturnValue = TRUE;
    }
    
    s_vCheckKeyTableValid(pDevice,pTable);
    return bReturnValue;        }/* * Description: Remove Key from table * * Parameters: *  In: *      pTable          - Pointer to Key table *      pbyBSSID        - BSSID of Key *  Out: *      none * * Return Value: TRUE if success otherwise FALSE * */BOOL KeybRemoveAllKey (    PVOID           pDeviceHandler,    PSKeyManagement pTable,    PBYTE           pbyBSSID    ){    PSDevice    pDevice = (PSDevice) pDeviceHandler;            int  i,u;    for (i=0;i<MAX_KEY_TABLE;i++) {        if ((pTable->KeyTable[i].bInUse == TRUE) &&            IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {            pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE;            for(u=0;u<MAX_GROUP_KEY;u++) {                pTable->KeyTable[i].GroupKey[u].bKeyValid = FALSE;            }            pTable->KeyTable[i].dwGTKeyIndex = 0;            s_vCheckKeyTableValid(pDevice, pTable);                        return (TRUE);        }    }    return (FALSE);}/* * Description: Remove WEP Key from table * * Parameters: *  In: *      pTable          - Pointer to Key table *  Out: *      none * * Return Value: TRUE if success otherwise FALSE * */VOID KeyvRemoveWEPKey (    PVOID           pDeviceHandler,    PSKeyManagement pTable,    DWORD           dwKeyIndex    ){    PSDevice    pDevice = (PSDevice) pDeviceHandler;           if ((dwKeyIndex & 0x000000FF) < MAX_GROUP_KEY) {        if (pTable->KeyTable[MAX_KEY_TABLE-1].bInUse == TRUE) {            if (pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF].byCipherSuite == KEY_CTL_WEP) {                pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF].bKeyValid = FALSE;                if ((dwKeyIndex & 0x7FFFFFFF) == (pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex & 0x7FFFFFFF)) {                    // remove Group transmit key                    pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = 0;                }            }        }        s_vCheckKeyTableValid(pDevice, pTable);            }    return;}VOID KeyvRemoveAllWEPKey (    PVOID           pDeviceHandler,    PSKeyManagement pTable    ){    PSDevice    pDevice = (PSDevice) pDeviceHandler;                int i;

    for(i=0;i<MAX_GROUP_KEY;i++) {
        KeyvRemoveWEPKey(pDevice,pTable, i);
    }
}/* * Description: Get Transmit Key from table * * Parameters: *  In: *      pTable          - Pointer to Key table *      pbyBSSID        - BSSID of Key *  Out: *      pKey            - Key return * * Return Value: TRUE if found otherwise FALSE * */BOOL KeybGetTransmitKey (    IN  PSKeyManagement pTable,    IN  PBYTE           pbyBSSID,    IN  DWORD           dwKeyType,    OUT PSKeyItem       *pKey    ){    int i, ii;    *pKey = NULL;    for (i=0;i<MAX_KEY_TABLE;i++) {        if ((pTable->KeyTable[i].bInUse == TRUE) &&            IS_ETH_ADDRESS_EQUAL(pTable->KeyTable[i].abyBSSID,pbyBSSID)) {            if (dwKeyType == PAIRWISE_KEY) {                if (pTable->KeyTable[i].PairwiseKey.bKeyValid == TRUE) {                    *pKey = &(pTable->KeyTable[i].PairwiseKey);                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:");                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PAIRWISE_KEY: KeyTable.abyBSSID: ");                    for (ii = 0; ii < 6; ii++) {                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]);                    }                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");                                        return (TRUE);                }                else {                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"PairwiseKey.bKeyValid == FALSE\n");                    return (FALSE);                }            } // End of Type == PAIRWISE            else {                if (pTable->KeyTable[i].dwGTKeyIndex == 0) {                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: dwGTKeyIndex == 0 !!!\n");                    return FALSE;                }                if (pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)].bKeyValid == TRUE) {                    *pKey = &(pTable->KeyTable[i].GroupKey[(pTable->KeyTable[i].dwGTKeyIndex&0x000000FF)]);                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybGetTransmitKey:");                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GROUP_KEY: KeyTable.abyBSSID\n");                        for (ii = 0; ii < 6; ii++) {                            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]);                        }                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");                        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"dwGTKeyIndex: %lX\n", pTable->KeyTable[i].dwGTKeyIndex);                                            return (TRUE);                }                else {                    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GroupKey.bKeyValid == FALSE\n");                    return (FALSE);                }            } // End of Type = GROUP        } // BSSID match    }    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ERROR: NO Match BSSID !!! ");    for (ii = 0; ii < 6; ii++) {        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", *(pbyBSSID+ii));    }    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");    return (FALSE);}/* * Description: Check Pairewise Key * * Parameters: *  In: *      pTable          - Pointer to Key table *  Out: *      none * * Return Value: TRUE if found otherwise FALSE * */BOOL KeybCheckPairewiseKey (    IN  PSKeyManagement pTable,    OUT PSKeyItem       *pKey    ){    int i;    *pKey = NULL;    for (i=0;i<MAX_KEY_TABLE;i++) {        if ((pTable->KeyTable[i].bInUse == TRUE) &&            (pTable->KeyTable[i].PairwiseKey.bKeyValid == TRUE)) {            *pKey = &(pTable->KeyTable[i].PairwiseKey);            return (TRUE);        }    }    return (FALSE);}/* * Description: Set Key to table * * Parameters: *  In: *      pTable          - Pointer to Key table *      dwKeyIndex      - Key index (reference to NDIS DDK) *      uKeyLength      - Key length *      KeyRSC          - Key RSC *      pbyKey          - Pointer to key *  Out: *      none * * Return Value: TRUE if success otherwise FALSE * */BOOL KeybSetDefaultKey (    PVOID           pDeviceHandler,    PSKeyManagement pTable,    DWORD           dwKeyIndex,    ULONG           uKeyLength,    PQWORD          pKeyRSC,    PBYTE           pbyKey,    BYTE            byKeyDecMode    ){    PSDevice    pDevice = (PSDevice) pDeviceHandler;            UINT        ii;    PSKeyItem   pKey;    UINT        uKeyIdx;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetDefaultKey: %1x, %d \n", (int)dwKeyIndex, (int)uKeyLength);        if ((dwKeyIndex & PAIRWISE_KEY) != 0) {                  // Pairwise key        return (FALSE);    } else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) {        return (FALSE);    }    pTable->KeyTable[MAX_KEY_TABLE-1].bInUse = TRUE;    for(ii=0;ii<U_ETHER_ADDR_LEN;ii++)        pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID[ii] = 0xFF;    // Group key    pKey = &(pTable->KeyTable[MAX_KEY_TABLE-1].GroupKey[dwKeyIndex & 0x000000FF]);    if ((dwKeyIndex & TRANSMIT_KEY) != 0)  {        // Group transmit key        pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = dwKeyIndex;        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex, MAX_KEY_TABLE-1);            }    pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl &= 0x7F00;          // clear all key control filed    pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode << 4);    pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= (byKeyDecMode);    pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x0044;          // use group key for all address    uKeyIdx = (dwKeyIndex & 0x000000FF);    if ((uKeyLength == WLAN_WEP232_KEYLEN) &&        (byKeyDecMode == KEY_CTL_WEP)) {        pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0x4000;              // disable on-fly disable address match        pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP = TRUE;    } else {        if (pTable->KeyTable[MAX_KEY_TABLE-1].bSoftWEP == FALSE)            pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl |= 0xC000;          // enable on-fly disable address match    }    pKey->bKeyValid = TRUE;    pKey->uKeyLength = uKeyLength;    pKey->dwKeyIndex = dwKeyIndex;    pKey->byCipherSuite = byKeyDecMode;    MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);    if (byKeyDecMode == KEY_CTL_WEP) {        if (uKeyLength == WLAN_WEP40_KEYLEN)            pKey->abyKey[15] &= 0x7F;        if (uKeyLength == WLAN_WEP104_KEYLEN)            pKey->abyKey[15] |= 0x80;    }    MACvSetKeyEntry(pDevice, pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl, MAX_KEY_TABLE-1, uKeyIdx, pTable->KeyTable[MAX_KEY_TABLE-1].abyBSSID, (PDWORD) pKey->abyKey);        if ((dwKeyIndex & USE_KEYRSC) == 0) {        // RSC set by NIC        ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));    } else {        MEMvCopy(&(pKey->KeyRSC), pKeyRSC,  sizeof(QWORD));    }    pKey->dwTSC47_16 = 0;    pKey->wTSC15_0 = 0;        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n");    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n", pKey->bKeyValid);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n", (int)pKey->uKeyLength);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: \n");    for (ii = 0; ii < pKey->uKeyLength; ii++) {        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x", pKey->abyKey[ii]);    }    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n", pKey->dwTSC47_16);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n", pKey->wTSC15_0);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n", pKey->dwKeyIndex);    return (TRUE);}/* * Description: Set Key to table * * Parameters: *  In: *      pTable          - Pointer to Key table *      dwKeyIndex      - Key index (reference to NDIS DDK) *      uKeyLength      - Key length *      KeyRSC          - Key RSC *      pbyKey          - Pointer to key *  Out: *      none * * Return Value: TRUE if success otherwise FALSE * */BOOL KeybSetAllGroupKey (    PVOID           pDeviceHandler,    PSKeyManagement pTable,    DWORD           dwKeyIndex,    ULONG           uKeyLength,    PQWORD          pKeyRSC,    PBYTE           pbyKey,    BYTE            byKeyDecMode    ){    PSDevice    pDevice = (PSDevice) pDeviceHandler;        int         i;    UINT        ii;    PSKeyItem   pKey;    UINT        uKeyIdx;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %lX\n", dwKeyIndex);        if ((dwKeyIndex & PAIRWISE_KEY) != 0) {                  // Pairwise key        return (FALSE);    } else if ((dwKeyIndex & 0x000000FF) >= MAX_GROUP_KEY) {        return (FALSE);    }    for (i=0; i < MAX_KEY_TABLE-1; i++) {        if (pTable->KeyTable[i].bInUse == TRUE) {            // found table already exist            // Group key            pKey = &(pTable->KeyTable[i].GroupKey[dwKeyIndex & 0x000000FF]);            if ((dwKeyIndex & TRANSMIT_KEY) != 0)  {                // Group transmit key                pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex;                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[i].dwGTKeyIndex, i);                            }            pTable->KeyTable[i].wKeyCtl &= 0xFF0F;          // clear group key control filed            pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4);            pTable->KeyTable[i].wKeyCtl |= 0x0040;          // use group key for group address            uKeyIdx = (dwKeyIndex & 0x000000FF);            pTable->KeyTable[i].wKeyCtl |= 0x8000;              // enable on-fly            pKey->bKeyValid = TRUE;            pKey->uKeyLength = uKeyLength;            pKey->dwKeyIndex = dwKeyIndex;            pKey->byCipherSuite = byKeyDecMode;            MEMvCopy(pKey->abyKey, pbyKey, uKeyLength);            if (byKeyDecMode == KEY_CTL_WEP) {                if (uKeyLength == WLAN_WEP40_KEYLEN)                    pKey->abyKey[15] &= 0x7F;                if (uKeyLength == WLAN_WEP104_KEYLEN)                    pKey->abyKey[15] |= 0x80;            }                        MACvSetKeyEntry(pDevice, pTable->KeyTable[i].wKeyCtl, i, uKeyIdx, pTable->KeyTable[i].abyBSSID, (PDWORD) pKey->abyKey);            if ((dwKeyIndex & USE_KEYRSC) == 0) {                // RSC set by NIC                ZERO_MEMORY(&(pKey->KeyRSC), sizeof(QWORD));            }            else {                MEMvCopy(&(pKey->KeyRSC), pKeyRSC,  sizeof(QWORD));            }            pKey->dwTSC47_16 = 0;            pKey->wTSC15_0 = 0;            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KeybSetKey(R): \n");            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->bKeyValid: %d\n ", pKey->bKeyValid);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->uKeyLength: %d\n ", (int)pKey->uKeyLength);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->abyKey: ");            for (ii = 0; ii < pKey->uKeyLength; ii++) {                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%02x ", pKey->abyKey[ii]);            }            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");            //DBG_PRN_GRP12(("pKey->dwTSC47_16: %lX\n ", pKey->dwTSC47_16));            //DBG_PRN_GRP12(("pKey->wTSC15_0: %X\n ", pKey->wTSC15_0));            //DBG_PRN_GRP12(("pKey->dwKeyIndex: %lX\n ", pKey->dwKeyIndex));                    } // (pTable->KeyTable[i].bInUse == TRUE)    }    return (TRUE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -