cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rtl871x_security.h (5617B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/******************************************************************************
      3 *
      4 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
      5 *
      6 * Modifications for inclusion into the Linux staging tree are
      7 * Copyright(c) 2010 Larry Finger. All rights reserved.
      8 *
      9 * Contact information:
     10 * WLAN FAE <wlanfae@realtek.com>
     11 * Larry Finger <Larry.Finger@lwfinger.net>
     12 *
     13 ******************************************************************************/
     14#ifndef __RTL871X_SECURITY_H_
     15#define __RTL871X_SECURITY_H_
     16
     17#include "osdep_service.h"
     18#include "drv_types.h"
     19
     20#define _NO_PRIVACY_	0x0
     21#define _WEP40_		0x1
     22#define _TKIP_		0x2
     23#define _TKIP_WTMIC_	0x3
     24#define _AES_		0x4
     25#define _WEP104_	0x5
     26
     27#define _WPA_IE_ID_	0xdd
     28#define _WPA2_IE_ID_	0x30
     29
     30#ifndef Ndis802_11AuthModeWPA2
     31#define Ndis802_11AuthModeWPA2 (Ndis802_11AuthModeWPANone + 1)
     32#endif
     33
     34#ifndef Ndis802_11AuthModeWPA2PSK
     35#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2)
     36#endif
     37
     38union pn48 {
     39	u64 val;
     40#if defined(__BIG_ENDIAN)
     41	struct {
     42		u8 TSC7;
     43		u8 TSC6;
     44		u8 TSC5;
     45		u8 TSC4;
     46		u8 TSC3;
     47		u8 TSC2;
     48		u8 TSC1;
     49		u8 TSC0;
     50	} _byte_;
     51#else
     52	struct {
     53		u8 TSC0;
     54		u8 TSC1;
     55		u8 TSC2;
     56		u8 TSC3;
     57		u8 TSC4;
     58		u8 TSC5;
     59		u8 TSC6;
     60		u8 TSC7;
     61	} _byte_;
     62#endif
     63};
     64
     65union Keytype {
     66	u8 skey[16];
     67	u32 lkey[4];
     68};
     69
     70struct RT_PMKID_LIST {
     71	u8 bUsed;
     72	u8 Bssid[6];
     73	u8 PMKID[16];
     74	u8 SsidBuf[33];
     75	u8 *ssid_octet;
     76	u16 ssid_length;
     77};
     78
     79struct security_priv {
     80	u32 AuthAlgrthm;		/* 802.11 auth, could be open, shared,
     81					 * 8021x and authswitch
     82					 */
     83	u32 PrivacyAlgrthm;		/* This specify the privacy for shared
     84					 * auth. algorithm.
     85					 */
     86	u32 PrivacyKeyIndex;		/* this is only valid for legendary
     87					 * wep, 0~3 for key id.
     88					 */
     89	union Keytype DefKey[4];	/* this is only valid for def. key */
     90	u32 DefKeylen[4];
     91	u32 XGrpPrivacy;		/* This specify the privacy algthm.
     92					 * used for Grp key
     93					 */
     94	u32 XGrpKeyid;			/* key id used for Grp Key */
     95	union Keytype	XGrpKey[2];	/* 802.1x Group Key, for
     96					 * inx0 and inx1
     97					 */
     98	union Keytype	XGrptxmickey[2];
     99	union Keytype	XGrprxmickey[2];
    100	union pn48 Grptxpn;		/* PN48 used for Grp Key xmit. */
    101	union pn48 Grprxpn;		/* PN48 used for Grp Key recv. */
    102	u8 wps_hw_pbc_pressed;/*for hw pbc pressed*/
    103	u8 wps_phase;/*for wps*/
    104	u8 wps_ie[MAX_WPA_IE_LEN << 2];
    105	int wps_ie_len;
    106	u8	binstallGrpkey;
    107	u8	busetkipkey;
    108	struct timer_list tkip_timer;
    109	u8	bcheck_grpkey;
    110	u8	bgrpkey_handshake;
    111	s32	sw_encrypt;	/* from registry_priv */
    112	s32	sw_decrypt;	/* from registry_priv */
    113	s32	hw_decrypted;	/* if the rx packets is hw_decrypted==false,
    114				 * it means the hw has not been ready.
    115				 */
    116	u32 ndisauthtype;	/* keeps the auth_type & enc_status from upper
    117				 * layer ioctl(wpa_supplicant or wzc)
    118				 */
    119	u32 ndisencryptstatus;
    120	struct wlan_bssid_ex sec_bss;  /* for joinbss (h2c buffer) usage */
    121	struct NDIS_802_11_WEP ndiswep;
    122	u8 assoc_info[600];
    123	u8 szofcapability[256]; /* for wpa2 usage */
    124	u8 oidassociation[512]; /* for wpa/wpa2 usage */
    125	u8 authenticator_ie[256];  /* store ap security information element */
    126	u8 supplicant_ie[256];  /* store sta security information element */
    127	/* for tkip countermeasure */
    128	u32 last_mic_err_time;
    129	u8	btkip_countermeasure;
    130	u8	btkip_wait_report;
    131	u32 btkip_countermeasure_time;
    132	/*-------------------------------------------------------------------
    133	 * For WPA2 Pre-Authentication.
    134	 *------------------------------------------------------------------
    135	 **/
    136	struct RT_PMKID_LIST		PMKIDList[NUM_PMKID_CACHE];
    137	u8				PMKIDIndex;
    138};
    139
    140#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst) \
    141do { \
    142	switch (psecuritypriv->AuthAlgrthm) { \
    143	case 0: \
    144	case 1: \
    145	case 3: \
    146		encry_algo = (u8)psecuritypriv->PrivacyAlgrthm; \
    147		break; \
    148	case 2: \
    149		if (bmcst) \
    150			encry_algo = (u8)psecuritypriv->XGrpPrivacy; \
    151		else \
    152			encry_algo = (u8)psta->XPrivacy; \
    153		break; \
    154	} \
    155} while (0)
    156#define SET_ICE_IV_LEN(iv_len, icv_len, encrypt)\
    157do {\
    158	switch (encrypt) { \
    159	case _WEP40_: \
    160	case _WEP104_: \
    161		iv_len = 4; \
    162		icv_len = 4; \
    163		break; \
    164	case _TKIP_: \
    165		iv_len = 8; \
    166		icv_len = 4; \
    167		break; \
    168	case _AES_: \
    169		iv_len = 8; \
    170		icv_len = 8; \
    171		break; \
    172	default: \
    173		iv_len = 0; \
    174		icv_len = 0; \
    175		break; \
    176	} \
    177} while (0)
    178#define GET_TKIP_PN(iv, txpn) \
    179do {\
    180	txpn._byte_.TSC0 = iv[2];\
    181	txpn._byte_.TSC1 = iv[0];\
    182	txpn._byte_.TSC2 = iv[4];\
    183	txpn._byte_.TSC3 = iv[5];\
    184	txpn._byte_.TSC4 = iv[6];\
    185	txpn._byte_.TSC5 = iv[7];\
    186} while (0)
    187
    188#define ROL32(A, n) (((A) << (n)) | (((A) >> (32 - (n)))  & ((1UL << (n)) - 1)))
    189#define ROR32(A, n) ROL32((A), 32 - (n))
    190
    191struct mic_data {
    192	u32  K0, K1;         /* Key */
    193	u32  L, R;           /* Current state */
    194	u32  M;              /* Message accumulator (single word) */
    195	u32  nBytesInM;      /* # bytes in M */
    196};
    197
    198void seccalctkipmic(
    199	u8  *key,
    200	u8  *header,
    201	u8  *data,
    202	u32  data_len,
    203	u8  *Miccode,
    204	u8   priority);
    205
    206void r8712_secmicsetkey(struct mic_data *pmicdata, u8 *key);
    207void r8712_secmicappend(struct mic_data *pmicdata, u8 *src, u32 nBytes);
    208void r8712_secgetmic(struct mic_data *pmicdata, u8 *dst);
    209u32 r8712_aes_encrypt(struct _adapter *padapter, u8 *pxmitframe);
    210u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 *pxmitframe);
    211void r8712_wep_encrypt(struct _adapter *padapter, u8  *pxmitframe);
    212void r8712_aes_decrypt(struct _adapter *padapter, u8  *precvframe);
    213void r8712_tkip_decrypt(struct _adapter *padapter, u8  *precvframe);
    214void r8712_wep_decrypt(struct _adapter *padapter, u8  *precvframe);
    215void r8712_use_tkipkey_handler(struct timer_list *t);
    216
    217#endif	/*__RTL871X_SECURITY_H_ */
    218