1
0
mirror of https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git synced 2025-10-19 17:11:09 +02:00
This commit is contained in:
Chen Minqiang
2016-10-10 02:54:43 +08:00
committed by Harshavardhana
parent c962f7a88d
commit 00aedbde5c
408 changed files with 192446 additions and 81116 deletions

View File

@@ -1,7 +1,7 @@
/******************************************************************************
*
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
@@ -29,9 +29,13 @@
#define _WEP104_ 0x5
#define _WEP_WPA_MIXED_ 0x07 // WEP + WPA
#define _SMS4_ 0x06
#ifdef CONFIG_IEEE80211W
#define _BIP_ 0x8
#endif //CONFIG_IEEE80211W
#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_))
const char *security_type_str(u8 value);
#define _WPA_IE_ID_ 0xdd
#define _WPA2_IE_ID_ 0x30
@@ -39,6 +43,10 @@
#define AES_BLOCK_SIZE 16
#define AES_PRIV_SIZE (4 * 44)
#define RTW_KEK_LEN 16
#define RTW_KCK_LEN 16
#define RTW_REPLAY_CTR_LEN 8
typedef enum {
ENCRYP_PROTOCOL_OPENSYS, //open system
ENCRYP_PROTOCOL_WEP, //WEP
@@ -46,7 +54,7 @@ typedef enum {
ENCRYP_PROTOCOL_WPA2, //WPA2
ENCRYP_PROTOCOL_WAPI, //WAPI: Not support in this version
ENCRYP_PROTOCOL_MAX
}ENCRYP_PROTOCOL_E;
} ENCRYP_PROTOCOL_E;
#ifndef Ndis802_11AuthModeWPA2
@@ -57,48 +65,47 @@ typedef enum {
#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2)
#endif
union pn48 {
union pn48 {
u64 val;
#ifdef CONFIG_LITTLE_ENDIAN
struct {
u8 TSC0;
u8 TSC1;
u8 TSC2;
u8 TSC3;
u8 TSC4;
u8 TSC5;
u8 TSC6;
u8 TSC7;
} _byte_;
struct {
u8 TSC0;
u8 TSC1;
u8 TSC2;
u8 TSC3;
u8 TSC4;
u8 TSC5;
u8 TSC6;
u8 TSC7;
} _byte_;
#elif defined(CONFIG_BIG_ENDIAN)
struct {
u8 TSC7;
u8 TSC6;
u8 TSC5;
u8 TSC4;
u8 TSC3;
u8 TSC2;
u8 TSC1;
u8 TSC0;
} _byte_;
struct {
u8 TSC7;
u8 TSC6;
u8 TSC5;
u8 TSC4;
u8 TSC3;
u8 TSC2;
u8 TSC1;
u8 TSC0;
} _byte_;
#endif
};
union Keytype {
u8 skey[16];
u32 lkey[4];
u8 skey[16];
u32 lkey[4];
};
typedef struct _RT_PMKID_LIST
{
typedef struct _RT_PMKID_LIST {
u8 bUsed;
u8 Bssid[6];
u8 PMKID[16];
@@ -108,49 +115,60 @@ typedef struct _RT_PMKID_LIST
} RT_PMKID_LIST, *PRT_PMKID_LIST;
struct security_priv
{
u32 dot11AuthAlgrthm; // 802.11 auth, could be open, shared, 8021x and authswitch
struct security_priv {
u32 dot11AuthAlgrthm; // 802.11 auth, could be open, shared, 8021x and authswitch
u32 dot11PrivacyAlgrthm; // This specify the privacy for shared auth. algorithm.
/* WEP */
u32 dot11PrivacyKeyIndex; // this is only valid for legendary wep, 0~3 for key id. (tx key index)
union Keytype dot11DefKey[4]; // this is only valid for def. key
union Keytype dot11DefKey[4]; // this is only valid for def. key
u32 dot11DefKeylen[4];
u8 key_mask; /* use to restore wep key after hal_init */
u32 dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key
u32 dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key
u32 dot118021XGrpKeyid; // key id used for Grp Key ( tx key index)
union Keytype dot118021XGrpKey[4]; // 802.1x Group Key, for inx0 and inx1
union Keytype dot118021XGrpKey[4]; // 802.1x Group Key, for inx0 and inx1
union Keytype dot118021XGrptxmickey[4];
union Keytype dot118021XGrprxmickey[4];
union pn48 dot11Grptxpn; // PN48 used for Grp Key xmit.
union pn48 dot11Grprxpn; // PN48 used for Grp Key recv.
#ifdef CONFIG_IEEE80211W
u32 dot11wBIPKeyid; // key id used for BIP Key ( tx key index)
union Keytype dot11wBIPKey[6]; // BIP Key, for index4 and index5
union pn48 dot11wBIPtxpn; // PN48 used for Grp Key xmit.
union pn48 dot11wBIPrxpn; // PN48 used for Grp Key recv.
#endif //CONFIG_IEEE80211W
#ifdef CONFIG_AP_MODE
//extend security capabilities for AP_MODE
//extend security capabilities for AP_MODE
unsigned int dot8021xalg;//0:disable, 1:psk, 2:802.1x
unsigned int wpa_psk;//0:disable, bit(0): WPA, bit(1):WPA2
unsigned int wpa_group_cipher;
unsigned int wpa2_group_cipher;
unsigned int wpa_pairwise_cipher;
unsigned int wpa2_pairwise_cipher;
unsigned int wpa2_pairwise_cipher;
#endif
u8 wps_ie[MAX_WPS_IE_LEN];//added in assoc req
int wps_ie_len;
u8 binstallGrpkey;
#ifdef CONFIG_GTK_OL
u8 binstallKCK_KEK;
#endif //CONFIG_GTK_OL
#ifdef CONFIG_IEEE80211W
u8 binstallBIPkey;
#endif //CONFIG_IEEE80211W
u8 busetkipkey;
//_timer tkip_timer;
u8 bcheck_grpkey;
u8 bgrpkey_handshake;
//u8 packet_cnt;//unused, removed
s32 sw_encrypt;//from registry_priv
s32 sw_decrypt;//from registry_priv
s32 hw_decrypted;//if the rx packets is hw_decrypted==_FALSE, it means the hw has not been ready.
@@ -173,7 +191,7 @@ struct security_priv
//for tkip countermeasure
u32 last_mic_err_time;
u32 last_mic_err_time;
u8 btkip_countermeasure;
u8 btkip_wait_report;
u32 btkip_countermeasure_time;
@@ -189,6 +207,30 @@ struct security_priv
//u8 szCapability[256]; // For WPA2-PSK using zero-config, by Annie, 2005-09-20.
u8 bWepDefaultKeyIdxSet;
#define DBG_SW_SEC_CNT
#ifdef DBG_SW_SEC_CNT
u64 wep_sw_enc_cnt_bc;
u64 wep_sw_enc_cnt_mc;
u64 wep_sw_enc_cnt_uc;
u64 wep_sw_dec_cnt_bc;
u64 wep_sw_dec_cnt_mc;
u64 wep_sw_dec_cnt_uc;
u64 tkip_sw_enc_cnt_bc;
u64 tkip_sw_enc_cnt_mc;
u64 tkip_sw_enc_cnt_uc;
u64 tkip_sw_dec_cnt_bc;
u64 tkip_sw_dec_cnt_mc;
u64 tkip_sw_dec_cnt_uc;
u64 aes_sw_enc_cnt_bc;
u64 aes_sw_enc_cnt_mc;
u64 aes_sw_enc_cnt_uc;
u64 aes_sw_dec_cnt_bc;
u64 aes_sw_dec_cnt_mc;
u64 aes_sw_dec_cnt_uc;
#endif /* DBG_SW_SEC_CNT */
};
struct sha256_state {
@@ -218,6 +260,7 @@ do{\
}\
}while(0)
#define _AES_IV_LEN_ 8
#define SET_ICE_IV_LEN( iv_len, icv_len, encrypt)\
do{\
@@ -262,8 +305,7 @@ do{\
#define ROL32( A, n ) ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) )
#define ROR32( A, n ) ROL32( (A), 32-(n) )
struct mic_data
{
struct mic_data {
u32 K0, K1; // Key
u32 L, R; // Current state
u32 M; // Message accumulator (single word)
@@ -353,7 +395,7 @@ static inline u32 rotr(u32 val, int bits)
(a)[6] = (u8) (((u64) (val)) >> 8); \
(a)[7] = (u8) (((u64) (val)) & 0xff); \
} while (0)
/* ===== start - public domain SHA256 implementation ===== */
/* This is based on SHA256 implementation in LibTomCrypt that was released into
@@ -382,7 +424,7 @@ static const unsigned long K[64] = {
( ((((unsigned long) (x) & 0xFFFFFFFFUL) >> (unsigned long) ((y) & 31)) | \
((unsigned long) (x) << (unsigned long) (32 - ((y) & 31)))) & 0xFFFFFFFFUL)
#define Ch(x,y,z) (z ^ (x & (y ^ z)))
#define Maj(x,y,z) (((x | y) & z) | (x & y))
#define Maj(x,y,z) (((x | y) & z) | (x & y))
#define S(x, n) RORc((x), (n))
#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n))
#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22))
@@ -392,19 +434,21 @@ static const unsigned long K[64] = {
#ifndef MIN
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#endif
#ifdef CONFIG_IEEE80211W
int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac);
#endif //CONFIG_IEEE80211W
void rtw_secmicsetkey(struct mic_data *pmicdata, u8 * key );
void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b );
void rtw_secmicappend(struct mic_data *pmicdata, u8 * src, u32 nBytes );
void rtw_secgetmic(struct mic_data *pmicdata, u8 * dst );
void rtw_seccalctkipmic(
u8 * key,
u8 *header,
u8 *data,
u32 data_len,
u8 *Miccode,
u8 priority);
u8 * key,
u8 *header,
u8 *data,
u32 data_len,
u8 *Miccode,
u8 priority);
u32 rtw_aes_encrypt(_adapter *padapter, u8 *pxmitframe);
u32 rtw_tkip_encrypt(_adapter *padapter, u8 *pxmitframe);
@@ -413,17 +457,22 @@ void rtw_wep_encrypt(_adapter *padapter, u8 *pxmitframe);
u32 rtw_aes_decrypt(_adapter *padapter, u8 *precvframe);
u32 rtw_tkip_decrypt(_adapter *padapter, u8 *precvframe);
void rtw_wep_decrypt(_adapter *padapter, u8 *precvframe);
#ifdef CONFIG_IEEE80211W
u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe);
#endif //CONFIG_IEEE80211W
#ifdef CONFIG_TDLS
void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta);
int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie,
u8 *mic);
int tdls_verify_mic(u8 *kck, u8 trans_seq,
u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
void wpa_tdls_generate_tpk(_adapter *padapter, PVOID sta);
int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie,
u8 *mic);
int tdls_verify_mic(u8 *kck, u8 trans_seq,
u8 *lnkid, u8 *rsnie, u8 *timeoutie, u8 *ftie);
#endif //CONFIG_TDLS
void rtw_use_tkipkey_handler(RTW_TIMER_HDL_ARGS);
void rtw_sec_restore_wep_key(_adapter *adapter);
u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller);
#endif //__RTL871X_SECURITY_H_