summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/SecurityGen.h
diff options
context:
space:
mode:
authorDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
committerDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
commita95eaad088f61aa55da9d73015cf1ed86e64a67e (patch)
tree15b498a08a4aee4b7f8b1627d39c965b3aa3ba98 /network/wlan/WDI/COMMON/SecurityGen.h
parent1aa0338ec5418345ea0c383e92b4fa19f7c98425 (diff)
Re-submit for WDI sample driver to GitHub
Submit WDI sample driver to GitHub for RS1.
Diffstat (limited to 'network/wlan/WDI/COMMON/SecurityGen.h')
-rw-r--r--network/wlan/WDI/COMMON/SecurityGen.h1052
1 files changed, 1052 insertions, 0 deletions
diff --git a/network/wlan/WDI/COMMON/SecurityGen.h b/network/wlan/WDI/COMMON/SecurityGen.h
new file mode 100644
index 00000000..a37214e5
--- /dev/null
+++ b/network/wlan/WDI/COMMON/SecurityGen.h
@@ -0,0 +1,1052 @@
+#ifndef __INC_SECURITYGEN_H
+#define __INC_SECURITYGEN_H
+
+#define PAIRWISE_KEYIDX 0
+
+/*
+ WDK TKIP key format defintion:
+ Bit(28) of Key Index |Bit 0-127 |Bit 128-191 |Bit 192-255
+ ------------------------+-------------------+---------------+-----------
+ 0(supplicant) |Encryption key |Rx MIC key |Tx MIC Key
+ 1(Authenticator) |Rncryption key |Tx MIC key |Rx MIC Key
+
+ Linux TKIP key format defintion:
+ Bit 0-127 |Bit 128-191 |Bit 192-255
+ ----------------+---------------+-----------
+ Encryption key |Tx MIC key |Rx MIC Key
+*/
+#define TKIP_ENCKEY_POS 0
+#define TKIP_MICKEYTX_POS TKIP_ENC_KEY_LEN // for station mode, this is for RX MIC key
+#define TKIP_MICKEYRX_POS (TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN) // for station mode, this is for TX MIC key
+
+#define NDIS_802_11_AI_REQFI_CAPABILITIES 1
+#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2
+#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4
+
+#define NDIS_802_11_AI_RESFI_CAPABILITIES 1
+#define NDIS_802_11_AI_RESFI_STATUSCODE 2
+#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4
+
+typedef u4Byte RT_SEC_STATUS;
+
+#define RT_SEC_STATUS_SUCCESS (RT_SEC_STATUS)0x00000000 // Encryption/Decryption Success
+#define RT_SEC_STATUS_FAILURE (RT_SEC_STATUS)0x00000001 // Unspecified Failure
+#define RT_SEC_STATUS_PKT_TYPE_NOT_SUPPORT (RT_SEC_STATUS)0x00000002 // The type of packet is invalid to encrypt or decrypt.
+#define RT_SEC_STATUS_INVALID_PKT_LEN (RT_SEC_STATUS)0x00000003 // The length of packet is invalid to encrypt or decrypt.
+#define RT_SEC_STATUS_MGNT_FRAME_UNENCRYPT (RT_SEC_STATUS)0x00000004 // This is unencrypted packet, but the encryption type is enbled.
+#define RT_SEC_STATUS_DATA_UNICAST_IV_REPLAY (RT_SEC_STATUS)0x00000005 // This is unicast data packet with IV replay.
+#define RT_SEC_STATUS_DATA_MULTICAST_IV_REPLAY (RT_SEC_STATUS)0x00000006 // This is multicast data packet with IV replay.
+#define RT_SEC_STATUS_MGNT_IV_REPLAY (RT_SEC_STATUS)0x00000007 // This is mgnt frame with IV replay.
+#define RT_SEC_STATUS_DATA_MIC_FAILURE (RT_SEC_STATUS)0x00000008 // TKIP data packet is MIC failure
+#define RT_SEC_STATUS_MGNT_MIC_FAILURE (RT_SEC_STATUS)0x00000009 // TKIP mgnt packet is MIC failure
+#define RT_SEC_STATUS_MFP_MGNT_MHDR_FAILURE (RT_SEC_STATUS)0x0000000A // CCXv5 MFP TKIP MHDRIE is invalid
+#define RT_SEC_STATUS_MFP_MGNT_LEN_FAILURE (RT_SEC_STATUS)0x0000000B // 802.11w BIP data to long
+#define RT_SEC_STATUS_MFP_MGNT_MMIE_FAILURE (RT_SEC_STATUS)0x0000000C // 802.11w MMIE fail
+#define RT_SEC_STATUS_MFP_MGNT_MMIE_MIC_FAILURE (RT_SEC_STATUS)0x0000000D // 802.11w MMIE Mic fail
+#define RT_SEC_STATUS_UNKNOWN_TA (RT_SEC_STATUS)0x0000000E // Unknow TA, no Key to decrypt
+#define RT_SEC_STATUS_ICV_ERROR (RT_SEC_STATUS)0x0000000F // Decryption fail, ICV error
+
+
+
+
+#define PN_DECIMAL2ARRAY(ul16, ul32, keyid, pucOut)\
+ pucOut[0] = (UCHAR)(ul32 >> 0) & 0xff;\
+ pucOut[1] = (UCHAR)(ul32 >> 8) & 0xff;\
+ pucOut[2] = 0x0;\
+ pucOut[3] = (0x20 | (UCHAR)((keyid << 6) & 0xc0) );\
+ pucOut[4] = (UCHAR)(ul32 >> 16) & 0xff;\
+ pucOut[5] = (UCHAR)(ul32 >> 24) & 0xff;\
+ pucOut[6] = (UCHAR)(ul16 >> 0) & 0xff;\
+ pucOut[7] = (UCHAR)(ul16 >> 8) & 0xff;
+
+#define TKIP_TSC_DECIMAL2ARRAY(IV16, IV32, keyid, TSC)\
+ TSC[0] = EF1Byte( (UCHAR)((IV16>>8) & 0xff) );\
+ TSC[1] = EF1Byte( (UCHAR)(0x20 | (TSC[0]&0x7f)) );\
+ TSC[2] = EF1Byte( (UCHAR)((IV16>>0) & 0xff) );\
+ TSC[3] = EF1Byte( (UCHAR)(0x20 | (keyid<<6)) );\
+ TSC[4] = EF1Byte( (UCHAR)((IV32>>0) & 0xff) );\
+ TSC[5] = EF1Byte( (UCHAR)((IV32>>8) & 0xff) );\
+ TSC[6] = EF1Byte( (UCHAR)((IV32>>16) & 0xff) );\
+ TSC[7] = EF1Byte( (UCHAR)((IV32>>24) & 0xff) );
+
+//add for CKIP , by CCW
+#define CKIP_SEQ_DECIMAL2ARRAY(ul32,pucOut)\
+ pucOut[0] = EF1Byte( (UCHAR)((ul32 >> 24) & 0xff) );\
+ pucOut[1] = EF1Byte( (UCHAR)((ul32 >> 16) & 0xff) );\
+ pucOut[2] = EF1Byte( (UCHAR)((ul32 >> 8) & 0xff) );\
+ pucOut[3] = EF1Byte( (UCHAR)((ul32 >> 0) & 0xff) );
+
+/*
+//#define CKIP_IV_DECIMAL2ARRAY(ul32,pucOut, keyid)\
+// pucOut[0] = (UCHAR)((ul32 >> 16) & 0xff);\
+// pucOut[1] = (UCHAR)((ul32 >> 8) & 0xff);\
+// pucOut[2] = (UCHAR)((ul32 >> 0) & 0xff);\
+// pucOut[3] = (UCHAR)((keyid<< 6) & 0xff);
+*/
+
+// MFP Support type !!
+typedef enum _MFP_SECURITY_TYPE{
+ MFP_NONE = 0x0,
+ MFP_CCX = 0x1,
+ MFP_80211_W = 0x2,
+}MFP_SECURITY_TYPE,*PMFP_SECURITY_TYPE;
+
+#define ENCRYPTION_MAX_OVERHEAD 128 // Follow 8185, 2005.04.14, by rcnjko.
+
+typedef struct
+{
+ u4Byte K0, K1; // Key
+ u4Byte L, R; // Current state
+ u4Byte M; // Message accumulator (single word)
+ u4Byte nBytesInM; // # bytes in M
+}MicData;
+
+
+//
+// Redefine NDIS5 PMKID related data structure for multi-platform consideration.
+// 070418, by rcnjko.
+//
+typedef struct _N5_BSSID_INFO
+{
+ u1Byte BSSID[6];
+ u1Byte PMKID[16];
+} N5_BSSID_INFO, *PN5_BSSID_INFO;
+
+typedef struct _N5_802_11_PMKID
+{
+ u4Byte Length;
+ u4Byte BSSIDInfoCount;
+ N5_BSSID_INFO BSSIDInfo[1];
+} N5_802_11_PMKID, *PN5_802_11_PMKID;
+//---------------------------------
+// Add For 802.1w AES CMAC
+//---------------------------------
+
+/* AES definition & structure */
+#define AES_STATE_ROWS_1W 4 /* Block size: 4*4*8 = 128 bits */
+#define AES_STATE_COLUMNS_1W 4
+#define AES_BLOCK_SIZES_1W AES_STATE_ROWS_1W*AES_STATE_COLUMNS_1W
+#define AES_KEY_ROWS_1W 4
+#define AES_KEY_COLUMNS_1W 8 /*Key length: 4*{4,6,8}*8 = 128, 192, 256 bits */
+#define AES_KEY128_LENGTH_1W 16
+#define AES_KEY192_LENGTH_1W 24
+#define AES_KEY256_LENGTH_1W 32
+#define AES_CBC_IV_LENGTH_1W 16
+
+
+//
+// Need to move TypeDef.h .....
+//
+typedef struct _MMIE_STRUC{
+ u1Byte ID;
+ u1Byte Length;
+ u1Byte KeyID[2];
+ u1Byte IPN[6];
+ u1Byte MIC[8];
+}MMIE_STRUC,*PMMIE_STRUC;
+
+typedef struct {
+ u1Byte State[AES_STATE_ROWS_1W][AES_STATE_COLUMNS_1W];
+ u1Byte KeyWordExpansion[AES_KEY_ROWS_1W][AES_KEY_ROWS_1W*((AES_KEY256_LENGTH_1W >> 2) + 6 + 1)];
+} AES_CTX_STRUC, *PAES_CTX_STRUC;
+
+
+/* AES operations */
+VOID
+AES_KeyExpansion_1W(
+ u1Byte Key[],
+ u4Byte KeyLength,
+ AES_CTX_STRUC *paes_ctx
+);
+
+VOID
+AES_Encrypt_1W(
+ u1Byte PlainBlock[],
+ u4Byte PlainBlockSize,
+ u1Byte Key[],
+ u4Byte KeyLength,
+ u1Byte CipherBlock[],
+ u4Byte *CipherBlockSize
+);
+
+
+/* AES-CMAC operations */
+VOID
+AES_CMAC_GenerateSubKey_1W(
+ u1Byte Key[],
+ u4Byte KeyLength,
+ u1Byte SubKey1[],
+ u1Byte SubKey2[]
+);
+
+VOID AES_CMAC_1W (
+ u1Byte PlainText[],
+ u4Byte PlainTextLength,
+ u1Byte Key[],
+ u4Byte KeyLength,
+ u1Byte MACText[],
+ u4Byte *MACTextLength
+);
+
+void SecMFPEncodeAESCCM_1W(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u4Byte keyid,
+ u1Byte *plaintext,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+int SecMFPDecodeAESCCM_1W(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u1Byte *data,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+
+//---------------------------------
+// End of 802.1w
+//---------------------------------
+
+void
+TKIPGenerateKey(
+ UCHAR *RC4KEY,
+ ULONG IV32,
+ USHORT IV16,
+ const UCHAR *TA,
+ const UCHAR *TK
+);
+
+void
+SecEncodeAESCCM(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u1Byte *plaintext,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+//------------------------------------------------
+// Name : SecRSNAEncodeAESCCM
+// Function : Add for RSNA AES-CCMP Encode
+// input : plaintext = [Header] + [IV] + [Data] + [AES MIC]
+//-------------------------------------------------
+void SecRSNAEncodeAESCCM(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u4Byte keyid,
+ u1Byte *plaintext,
+ u4Byte headerLen,
+ u4Byte totalLen
+
+);
+
+//------------------------------------------------
+// Name : SecMFPEncodeAESCCM
+// Function : Add for RSNA AES-CCMP Encode
+// input : plaintext = [Header] + [IV] + [Data] + [AES MIC]
+//-------------------------------------------------
+void SecMFPEncodeAESCCM(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u4Byte keyid,
+ u1Byte *plaintext,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+int
+SecDecodeAESCCM(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u1Byte *data,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+int SecMFPDecodeAESCCM(
+ PRT_SECURITY_T pSec,
+ u4Byte pulKey[],
+ u1Byte *data,
+ u4Byte headerLen,
+ u4Byte totalLen
+);
+
+VOID
+SecHeaderFillIV(
+ PADAPTER Adapter,
+ pu1Byte PacketStart
+);
+
+BOOLEAN
+SecCheckMIC(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+VOID
+SecGetGroupCipherFromBeacon(
+ PADAPTER Adapter,
+ PRT_WLAN_BSS pbssDesc
+);
+
+VOID
+SecConstructRSNIE(
+ PADAPTER Adapter
+);
+
+RT_STATUS
+Sec_AppendWPAIE(
+ IN PADAPTER pAdapter,
+ IN CONTENT_PKT_TYPE contentType,
+ IN PVOID pInfoBuf,
+ IN u4Byte InfoBufLen,
+ IN u4Byte maxBufLen,
+ OUT POCTET_STRING posOutContent
+ );
+
+RT_STATUS
+Sec_AppendRSNIE(
+ IN PADAPTER pAdapter,
+ IN CONTENT_PKT_TYPE contentType,
+ IN PVOID pInfoBuf,
+ IN u4Byte InfoBufLen,
+ IN u4Byte maxBufLen,
+ OUT POCTET_STRING posOutContent
+ );
+
+RT_ENC_ALG
+SecGetEncryptionOverhead(
+ PADAPTER Adapter,
+ UNALIGNED pu2Byte pMPDUHead,
+ UNALIGNED pu2Byte pMPDUTail,
+ UNALIGNED pu2Byte pMSDUHead,
+ UNALIGNED pu2Byte pMSDUTail,
+ BOOLEAN bByPacket,
+ BOOLEAN bIsBroadcastPkt
+ );
+
+VOID
+SecInit(
+ PADAPTER Adapter
+);
+
+BOOLEAN
+SecCheckTKIPMIC(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+//BOOLEAN
+//SecCheckCKIPMIC(
+// PADAPTER Adapter,
+// PRT_RFD pRfd
+//);
+
+BOOLEAN
+SecSWWEPDecryption(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+BOOLEAN
+SecSWTKIPDecryption(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+BOOLEAN
+SecSWAESDecryption(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+BOOLEAN
+SecSWCKIPDecryption(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+VOID
+SecClearAllKeys(
+ PADAPTER Adapter
+);
+
+VOID
+SecClearGroupKeyByIdx(
+ PADAPTER Adapter,
+ u1Byte paraIndex
+);
+
+VOID
+SecClearWEPKeyByIdx(
+ PADAPTER Adapter,
+ u1Byte paraIndex
+);
+
+
+
+//for AP mode
+VOID
+SecClearPairwiseKeyByMacAddr(
+ PADAPTER Adapter,
+ pu1Byte paraMacAddr
+);
+
+RT_STATUS
+Sec_SelAkmFromAuthMode(
+ IN PADAPTER pAdapter,
+ IN RT_AUTH_MODE AuthMode,
+ IN CONTENT_PKT_TYPE contentType,
+ IN PVOID pInfoBuf,
+ IN u4Byte InfoBufLen,
+ OUT PAKM_SUITE_TYPE pAKM
+ );
+
+RT_STATUS
+Sec_MapAKMSuiteToOUIType(
+ IN AKM_SUITE_TYPE AKMSuite,
+ OUT pu1Byte pOUI,
+ OUT pu1Byte pOUIType
+ );
+
+RT_STATUS
+Sec_MapOUITypeToAKMSuite(
+ IN pu1Byte pOUI,
+ IN pu1Byte pOUIType,
+ IN RT_SECURITY_LEVEL secLevl,
+ OUT PAKM_SUITE_TYPE pAKMSuite
+ );
+
+RT_STATUS
+Sec_MapCipherSuiteToOUIType(
+ IN RT_ENC_ALG cipherSuite,
+ IN RT_SECURITY_LEVEL secLevl,
+ OUT pu1Byte pOUI,
+ OUT pu1Byte pOUIType
+ );
+
+RT_STATUS
+Sec_MapOUITypeToCipherSuite(
+ IN pu1Byte pOUI,
+ IN pu1Byte pOUIType,
+ IN RT_SECURITY_LEVEL secLevl,
+ OUT PRT_ENC_ALG pCipherSuite
+ );
+
+RT_ENC_ALG_DEP
+Sec_MapNewCipherToDepCipherAlg(
+ IN RT_ENC_ALG newCipherSuite
+ );
+
+u1Byte
+SecGetTxKeyIdx(
+ PADAPTER Adapter,
+ pu1Byte pMacAddr
+);
+
+u1Byte
+SecGetRxKeyIdx(
+ PADAPTER Adapter,
+ pu1Byte pDestAddr,
+ u1Byte IVKeyIdx
+);
+
+#define GET_WEP_IV_INITVECTOR(__pWepIv) LE_BITS_TO_4BYTE(__pWepIv, 0, 24)
+#define SET_WEP_IV_INITVECTOR(__pWepIv, _val) SET_BITS_TO_LE_4BYTE(__pWepIv, 0, 24, _val)
+
+#define GET_WEP_IV_KEYID(__pWepIv) ( (u1Byte)LE_BITS_TO_4BYTE(__pWepIv, 30, 2) )
+#define SET_WEP_IV_KEYID(__pWepIv, _val) SET_BITS_TO_LE_4BYTE(__pWepIv, 30, 2, _val)
+
+VOID SecCalculateMIC(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecSWTKIPEncryption(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecSWWEPEncryption(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecSWAESEncryption(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecSWCKIPEncryption(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecSoftwareEncryption(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+RT_SEC_STATUS
+SecSoftwareDecryption(
+ PADAPTER Adapter,
+ PRT_RFD pRfd
+);
+
+VOID SecCalculateTKIPMIC(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID SecCalculateCKIPMIC(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+RT_SEC_STATUS
+SecRxCheckIV(
+ IN PADAPTER Adapter,
+ IN PRT_RFD pRfd
+ );
+
+typedef enum{
+ RSNIE_TYPE_WPA = 1,
+ RSNIE_TYPE_WPA2 = 2
+}RSNIE_TYPE;
+
+//typedef enum {
+// ERROR_BUFFER_TOO_SMALL = -1,
+// ERROR_INVALID_PARA = -2,
+// ERROR_INVALID_RSNIE = -3,
+// ERROR_INVALID_MULTICASTCIPHER = -4,
+// ERROR_INVALID_UNICASTCIPHER = -5,
+// ERROR_INVALID_AUTHKEYMANAGE = -6,
+// ERROR_UNSUPPORTED_RSNEVERSION = -7,
+//} RSNIE_ERROR;
+
+#define RSN_STRERROR_BUFFER_TOO_SMALL "WPA Info Element : Input Buffer too small"
+#define RSN_STRERROR_INVALID_PARAMETER "WPA Info Element : Invalid RSN Parameter"
+#define RSN_STRERROR_INVALID_RSNIE "WPA Info Element : Invalid RSNIE"
+#define RSN_STRERROR_INVALID_MULTICASTCIPHER "WPA Info Element : Invalid MulticastCipher"
+#define RSN_STRERROR_UNSUPPORTED_RSNEVERSION "WPA Info Element : Unsupported RSN Version"
+
+#define RSN_ELEMENT_ID 0xDD
+#define RSN_VER1 0x01
+#define WPA_VER1 0x01
+#define DOT11_MAX_CIPHER_ALGORITHMS 0x0a
+
+//
+// For pairwise cipher suite and
+// Authentication and Key Management Suite List in RSN IE.
+//
+typedef struct _DOT11_RSN_IE_SUITE{
+ u1Byte OUI[3];
+ u1Byte Type;
+}DOT11_RSN_IE_SUITE;
+
+// Minimum length of RSN IE:
+// Version(2) + Group Cipher OUI/Type (4) + Pairwise Cipher Cnt (2) + Pairwise Cipher Suite * 1 (4) + AKM Cnt (2) + AKM * 1 (4) + RSN Capability (2)
+#define RSN_IE_MIN_LEN 20
+
+#define GET_RSNIE_SUITE_COUNT(__pPtr) ReadEF2Byte(__pPtr)
+#define SET_RSNIE_SUITE_COUNT(__pPtr, __Value) WriteEF2Byte(__pPtr, __Value)
+#define GET_RSNIE_SUITE_PTR(__pPtr, __Idx) (((DOT11_RSN_IE_SUITE *)((pu1Byte)(__pPtr) + 2)) + (__Idx))
+
+//
+// For pairwise cipher suite and
+// Authentication and Key Management Suite List in RSN IE.
+//
+#define GET_RSN_CAP_PREAUTH(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 0, 1)
+#define SET_RSN_CAP_PREAUTH(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 0, 1, __Value)
+#define GET_RSN_CAP_NO_PAIRWISE(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 1, 1)
+#define SET_RSN_CAP_NO_PAIRWISE(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 1, 1, __Value)
+#define GET_RSN_CAP_PTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 2, 2)
+#define SET_RSN_CAP_PTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 2, 2, __Value)
+#define GET_RSN_CAP_GTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 4, 2)
+#define SET_RSN_CAP_GTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 4, 2, __Value)
+#define GET_RSN_CAP_PEERKEY_ENABLED(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 9, 1)
+#define SET_RSN_CAP_PEERKEY_ENABLED(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 9, 1, __Value)
+#define GET_RSN_CAP_MFP_CAPABLE(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 7, 1)
+#define SET_RSN_CAP_MFP_CAPABLE(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 7, 1, __Value)
+#define GET_RSN_CAP_MFP_REQUIRED(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 6, 1)
+#define SET_RSN_CAP_MFP_REQUIRED(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 6, 1, __Value)
+
+
+//2 // Note:
+//2 // The RSN setting macros shall be set sequentially to make sure that each offset/count is correct.
+// RSN IE format with bytes count:
+// | Version (2) | Group Ciher Suite (4) | Pairwise Cipher Suite Cnt (2) | Pairwise Cipher Suite List (4 * m) | AKM Suite Cnt (2) | AKM Suite List (4 * n) | RSN Cap (2) | PMK-ID (16 * s) |
+#define GET_RSN_IE_VERSION(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart))
+#define SET_RSN_IE_VERSION(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart), _Value)
+
+#define GET_RSN_IE_GROUP_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 2)
+#define SET_RSN_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 2), _OUI, _Type)
+
+#define GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 6)
+#define SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 6, _Value)
+
+#define GET_RSN_IE_PAIRWISE_CIPHER_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 8 + ((_Idx) * 4))
+#define ADD_RSN_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \
+{ \
+ SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4), _OUI, _Type); \
+ SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) + 1); \
+}
+
+#define GET_RSN_IE_AKM_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4)
+#define SET_RSN_IE_AKM_SUITE_CNT(_pStart, _Value) \
+ WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4, _Value)
+
+#define GET_RSN_IE_AKM_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 10 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + ((_Idx) * 4))
+#define ADD_RSN_IE_AKM_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \
+{ \
+ SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart) + 10 + \
+ (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + \
+ (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4), \
+ _OUI, _Type); \
+ SET_RSN_IE_AKM_SUITE_CNT(_pStart, GET_RSN_IE_AKM_SUITE_CNT(_pStart) + 1); \
+}
+
+
+#define GET_RSN_IE_CAP_PTR(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 10 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4))
+
+#define GET_RSN_IE_CAP_PREAUTH(_pStart) GET_RSN_CAP_PREAUTH(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_PREAUTH(_pStart, __Value) SET_RSN_CAP_PREAUTH(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_NO_PAIRWISE(_pStart) GET_RSN_CAP_NO_PAIRWISE(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_NO_PAIRWISE(_pStart, __Value) SET_RSN_CAP_NO_PAIRWISE(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart) GET_RSN_CAP_PTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart, __Value) SET_RSN_CAP_PTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart) GET_RSN_CAP_GTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart, __Value) SET_RSN_CAP_GTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_PEERKEY_ENABLED(_pStart) GET_RSN_CAP_PEERKEY_ENABLED(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_PEERKEY_ENABLED(_pStart, __Value) SET_RSN_CAP_PEERKEY_ENABLED(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_MFP_CAPABLE(_pStart) GET_RSN_CAP_MFP_CAPABLE(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_MFP_CAPABLE(_pStart, __Value) SET_RSN_CAP_MFP_CAPABLE(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_RSN_IE_CAP_MFP_REQUIRED(_pStart) GET_RSN_CAP_MFP_REQUIRED(GET_RSN_IE_CAP_PTR(_pStart))
+#define SET_RSN_IE_CAP_MFP_REQUIRED(_pStart, __Value) SET_RSN_CAP_MFP_REQUIRED(GET_RSN_IE_CAP_PTR(_pStart), __Value)
+
+
+#define GET_RSN_IE_PMKID_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4))
+#define SET_RSN_IE_PMKID_CNT(_pStart, _Value) \
+ WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4), _Value)
+
+#define GET_RSN_IE_PMKID_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4) + ((_Idx) * 16))
+#define ADD_RSN_IE_PMKID(_pStart, _pPMKID) \
+{ \
+ PlatformMoveMemory(GET_RSN_IE_PMKID_LIST(_pStart, GET_RSN_IE_PMKID_CNT(_pStart)), _pPMKID, PMKID_LEN); \
+ SET_RSN_IE_PMKID_CNT(_pStart, GET_RSN_IE_PMKID_CNT(_pStart) + 1); \
+}
+
+#define GET_RSN_IE_GROUP_MGNT_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_PMKID_CNT(_pStart) * 16))
+#define SET_RSN_IE_GROUP_MGNT_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(GET_RSN_IE_GROUP_MGNT_CIPHER_SUITE(_pStart), _OUI, _Type)
+
+
+// Note:
+//2 // The WPA setting macros shall be set sequentially to make sure that each offset/count is correct.
+// WPA IE format with bytes count:
+// |OUI/Type (4) | Version (2) | Group Ciher Suite (4) | Pairwise Cipher Suite Cnt (2) | Pairwise Cipher Suite List (4 * m) | AKM Suite Cnt (2) | AKM Suite List (4 * n) | Cap (2)
+
+#define WPA_IE_MIN_LEN 24
+
+
+#define SET_WPA_IE_OUI_AND_TYPE(_pStart) SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart), WPA_OUI, WPAIE_OUI_TYPE)
+
+#define GET_WPA_IE_VERSION(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 4)
+#define SET_WPA_IE_VERSION(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 4, _Value)
+
+#define GET_WPA_IE_GROUP_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 6)
+#define SET_WPA_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 6), _OUI, _Type)
+
+#define GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 10)
+#define SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 10, _Value)
+
+#define GET_WPA_IE_PAIRWISE_CIPHER_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 12 + ((_Idx) * 4))
+#define ADD_WPA_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \
+{ \
+ SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4), _OUI, _Type); \
+ SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) + 1); \
+}
+
+#define GET_WPA_IE_AKM_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4)
+#define SET_WPA_IE_AKM_SUITE_CNT(_pStart, _Value) \
+ WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4, _Value)
+
+#define GET_WPA_IE_AKM_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + ((_Idx) * 4))
+#define ADD_WPA_IE_AKM_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \
+{ \
+ SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart) + 14 + \
+ (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + \
+ (GET_WPA_IE_AKM_SUITE_CNT(_pStart) * 4), \
+ _OUI, _Type); \
+ SET_WPA_IE_AKM_SUITE_CNT(_pStart, GET_WPA_IE_AKM_SUITE_CNT(_pStart) + 1); \
+}
+
+#define GET_WPA_IE_CAP_PTR(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_WPA_IE_AKM_SUITE_CNT(_pStart) * 4))
+
+#define GET_WPA_CAP_PTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 2, 2)
+#define SET_WPA_CAP_PTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 2, 2, __Value)
+#define GET_WPA_CAP_GTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 4, 2)
+#define SET_WPA_CAP_GTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 4, 2, __Value)
+
+#define GET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart) GET_WPA_CAP_PTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart))
+#define SET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart, __Value) SET_WPA_CAP_PTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart), __Value)
+
+#define GET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart) GET_WPA_CAP_GTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart))
+#define SET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart, __Value) SET_WPA_CAP_GTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart), __Value)
+
+
+// Reference: 802.11i D10.0 Table23, Authentication and Key Management Suite Selectors, page33.
+typedef enum{
+ DOT11_AuthKeyType_None = 0,
+ DOT11_AuthKeyType_RSN = 1, // 802.1x.
+ DOT11_AuthKeyType_RSNPSK = 2, // Pre-Shared Key.
+ DOT11_AuthKeyType_FT_OVER_1X = 3, // FT authentication negotiated over IEEE 802.1X
+ DOT11_AuthKeyType_FT_OVER_PSK = 4, // FT authentication using PSK
+ DOT11_AuthKeyType_1X_SHA256 = 5, // Authentication negotiated over IEEE 802.1X or using PMKSA caching with SHA256 Key Derivation
+ DOT11_AuthKeyType_PSK_SHA256 = 6, // PSK with SHA256 Key Derivation
+ DOT11_AuthKeyType_TPK = 7, // 802.11z TDLS Peer Key Handshake
+ DOT11_AuthKeyType_SAE_SHA256 = 8, // SAE Authentication with SHA-256 or using PMKSA caching with SHA-256 key derivation
+ DOT11_AuthKeyType_FT_OVER_SAE_SHA256 = 9, // FT authentication over SAE with SHA-256
+} DOT11_AuthKey_TYPE;
+
+// AKM OUI type with OUI 0x00 0F AC
+#define RSN_AKM_SUITE_OUI_TYPE_RSN_1X 1 // 802.1x.
+#define RSN_AKM_SUITE_OUI_TYPE_RSN_PSK 2 // Pre-Shared Key.
+#define RSN_AKM_SUITE_OUI_TYPE_FT_1X 3 // FT authentication negotiated over IEEE 802.1X
+#define RSN_AKM_SUITE_OUI_TYPE_FT_PSK 4 // FT authentication using PSK
+#define RSN_AKM_SUITE_OUI_TYPE_1X_SHA256 5 // Authentication negotiated over IEEE 802.1X or using PMKSA caching with SHA256 Key Derivation
+#define RSN_AKM_SUITE_OUI_TYPE_PSK_SHA256 6 // PSK with SHA256 Key Derivation
+#define RSN_AKM_SUITE_OUI_TYPE_TPK 7 // 802.11z TDLS Peer Key Handshake
+#define RSN_AKM_SUITE_OUI_TYPE_SAE_SHA256 8 // SAE Authentication with SHA-256 or using PMKSA caching with SHA-256 key derivation
+#define RSN_AKM_SUITE_OUI_TYPE_FT_SAE_SHA256 9 // FT authentication over SAE with SHA-256
+
+// RSN Cipher suite OUI type with OUI 0x00 0F AC
+#define RSN_CIPHER_SUITE_OUI_TYPE_USE_GROUP_CIPHER 0 // Use group cipher suite
+#define RSN_CIPHER_SUITE_OUI_TYPE_WEP40 1 // WEP-40
+#define RSN_CIPHER_SUITE_OUI_TYPE_TKIP 2 // TKIP
+#define RSN_CIPHER_SUITE_OUI_TYPE_RESERVED 3 // Reserved
+#define RSN_CIPHER_SUITE_OUI_TYPE_CCMP 4 // CCMP �V default pairwise cipher suite and default group cipher suite for data frames in an RSNA
+#define RSN_CIPHER_SUITE_OUI_TYPE_WEP104 5 // WEP-104
+#define RSN_CIPHER_SUITE_OUI_TYPE_BIP 6 // BIP�Xdefault group management cipher suite in an RSNA with management frame protection enabled
+#define RSN_CIPHER_SUITE_OUI_TYPE_GRP_ADDR_DISALLOWED 7 // Group addressed traffic not allowed
+
+// WPA Cipher suite OUI type with OUI 0x00 0F AC
+#define WPA_CIPHER_SUITE_OUI_TYPE_NONE 0 // None
+#define WPA_CIPHER_SUITE_OUI_TYPE_WEP40 1 // WEP-40
+#define WPA_CIPHER_SUITE_OUI_TYPE_TKIP 2 // TKIP
+#define WPA_CIPHER_SUITE_OUI_TYPE_WRAP 3 // WRAP
+#define WPA_CIPHER_SUITE_OUI_TYPE_CCMP 4 // CCMP �V default pairwise cipher suite and default group cipher suite for data frames in an RSNA
+#define WPA_CIPHER_SUITE_OUI_TYPE_WEP104 5 // WEP-104
+
+
+//2004/06/29, kcwu TKIP_MIC implement in TKIP_MIC.c
+u4Byte
+SecMICGetUINT32(
+ pu1Byte p
+ );
+
+VOID
+SecMICPutUINT32(
+ pu1Byte p,
+ u4Byte val
+);
+
+VOID
+SecMICClear(
+ MicData *micdata
+);
+
+VOID
+SecMICSetKey(
+ MicData *micdata,
+ pu1Byte key
+);
+
+VOID
+SecMICAppendByte(
+ MicData *micdata,
+ u1Byte b
+);
+
+VOID
+SecMICAppend(
+ MicData *micdata,
+ pu1Byte src,
+ s4Byte nBytes
+);
+
+VOID
+SecMICGetMIC(
+ MicData *micdata,
+ pu1Byte dst
+);
+//end MIC
+
+//2004/09/15, kcwu
+//u4Byte *AES_SetKey(const u4Byte in_key[], const u4Byte key_len, u4Byte e_key[]);
+pu4Byte
+AES_SetKey(
+ const u4Byte in_key[],
+ const u4Byte key_len,
+ u4Byte e_key[]
+);
+
+void AES_WRAP(PADAPTER Adapter,
+ u1Byte* plain, int plain_len,
+ u1Byte * iv, int iv_len,
+ u1Byte * kek, int kek_len,
+ u1Byte *cipher, u2Byte *cipher_len
+);
+
+
+
+void AES_UnWRAP(PADAPTER Adapter,
+ u1Byte * cipher, int cipher_len,
+ u1Byte * kek, int kek_len,
+ u1Byte * plain);
+
+
+void TestAES_WRAP(PADAPTER Adapter);
+//Add for CKIP , by CCW
+
+//----------------------------------------------------------------------------
+//CKIP.c
+//----------------------------------------------------------------------------
+void
+CKIP_TEST(
+ ADAPTER * Adapter
+ );
+
+int
+DecodeCKIP(
+ ADAPTER * Adapter,
+ UCHAR *pkt,
+ int pktlen,
+ UCHAR *key,
+ int mickeyid
+ );
+
+int
+EncodeCKIP(
+ ADAPTER * Adapter,
+ UCHAR *pkt,
+ int pktlen,
+ UCHAR *hdr,
+ UCHAR *key,
+ int keylen,
+ int mickeyid
+ );
+
+int
+ckip_miccalc(
+ ADAPTER * Adapter,
+ UCHAR *CK,
+ UCHAR *pDA,
+ UCHAR *pSA,
+ UCHAR *payload,
+ int payloadlen,
+ UCHAR *calcmic,
+ int mickeyid
+ );
+
+int
+ckip_encrypt(
+ UCHAR *CK,
+ UCHAR *iv,
+ UCHAR *ecr,
+ int ecrlen
+ );
+
+void
+AES_Encrypt(
+ const ULONG in_blk[4],
+ ULONG out_blk[4],
+ ULONG e_key[]
+ );
+
+
+BOOLEAN
+SecInsertDenyBssidList(
+ PRT_SECURITY_T pSec,
+ u1Byte BssidToDeny[6],
+ u8Byte DenyStartTime
+);
+
+BOOLEAN
+SecIsInDenyBssidList(
+ PRT_SECURITY_T pSec,
+ u1Byte BssidToCheck[6]
+);
+
+BOOLEAN
+SecFillHeader(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+
+BOOLEAN
+SecIsEAPOLPacket(
+ IN PADAPTER Adapter,
+ IN POCTET_STRING pPduOS
+);
+
+BOOLEAN
+SecIsEAPOLKEYPacket(
+ IN PADAPTER Adapter,
+ IN POCTET_STRING pPduOS
+ );
+
+VOID
+SecSetPMKID(
+ IN PADAPTER Adapter,
+ IN PN5_802_11_PMKID pPMKid
+);
+
+
+int
+SecIsInPMKIDList(
+ IN PADAPTER Adapter,
+ IN pu1Byte bssid
+);
+
+
+VOID
+SecCatPMKID(
+ IN PADAPTER Adapter,
+ IN pu1Byte CurAPbssid,
+ IN PRT_WLAN_BSS pBssDesc
+);
+
+
+BOOLEAN
+SecDropForKeyAbsent(
+ PADAPTER Adapter,
+ PRT_TCB pTcb
+);
+
+VOID
+SecSetSwEncryptionDecryption(
+ PADAPTER Adapter,
+ BOOLEAN bSWTxEncrypt,
+ BOOLEAN bSWRxDecrypt
+);
+
+BOOLEAN
+SecIsTxKeyInstalled(
+ IN PADAPTER pAdapter,
+ IN pu1Byte pRA
+);
+
+void
+Supplicant_AES_UnWRAP(
+ PADAPTER Adapter,
+ u1Byte * cipher,
+ int cipher_len,
+ u1Byte * kek,
+ int kek_len,
+ u1Byte * plain
+);
+
+RT_SEC_STATUS
+SecSWMFPDecryption(
+ IN PADAPTER pAdapter,
+ IN PRT_RFD pRfd
+ );
+
+RT_SEC_STATUS
+SecRxDescryption(
+ IN PADAPTER pAdapter,
+ IN PRT_RFD pRfd
+ );
+
+void
+SecAppenMMIE(
+ IN PADAPTER pAdapter,
+ OUT POCTET_STRING posFrame
+ );
+
+BOOLEAN
+SecStaGetANoseForS5(
+ IN PADAPTER Adapter,
+ IN POCTET_STRING pPduOS
+ );
+
+BOOLEAN
+SecStaGenPMKForS5(
+ IN PADAPTER Adapter
+ );
+
+RT_STATUS
+OnSAQueryReq(
+ IN PADAPTER pAdapter,
+ IN PRT_RFD pRfd,
+ IN POCTET_STRING posMpdu
+ );
+
+RT_STATUS
+OnSAQueryRsp(
+ IN PADAPTER pAdapter,
+ IN PRT_RFD pRfd,
+ IN POCTET_STRING posMpdu
+ );
+
+BOOLEAN
+SecFillProtectTxMgntFrameHeader(
+ IN PADAPTER pAdapter,
+ IN PRT_TCB pTcb
+ );
+
+VOID
+SAQueryTimerCallback(
+ IN PRT_TIMER pTimer
+ );
+
+//
+// ---------------------------------------------------------------
+// 2011/03/04 MH Move all new CAN search metho to here forcommon binary .
+// We need to reorganize the locaton in he future.
+//
+
+VOID
+SecUpdateSWGroupKeyInfo(
+ IN PADAPTER Adapter,
+ IN u4Byte KeyIndex,
+ IN u4Byte KeyLength,
+ IN pu1Byte KeyMaterial
+ );
+
+#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1)
+#define IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT() TRUE
+
+VOID
+SEC_AsocEntry_ResetEntry(
+ IN PADAPTER Adapter,
+ IN PRT_WLAN_STA pEntry
+ );
+
+#else //#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1)
+#define IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT() FALSE
+#define SEC_AsocEntry_ResetEntry(_Adapter, _pEntry)
+
+#endif //#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1)
+
+
+//
+// 2011/03/04 MH Move all new CAN search metho to here forcommon binary .
+// We need to reorganize the locaton in he future.
+// ---------------------------------------------------------------
+//
+
+//#define HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW 1
+
+
+#endif // #ifndef __INC_SECURITYGEN_H