xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/mvl88w8977/mlan/esa/keyMgmtSta_rom.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /** @file keyMgntsta_rom.h
2  *
3  *  @brief This file contains key management function for sta
4  *
5  * Copyright (C) 2014-2017, Marvell International Ltd.
6  *
7  * This software file (the "File") is distributed by Marvell International
8  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
9  * (the "License").  You may use, redistribute and/or modify this File in
10  * accordance with the terms and conditions of the License, a copy of which
11  * is available by writing to the Free Software Foundation, Inc.,
12  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
13  * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
14  *
15  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
17  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
18  * this warranty disclaimer.
19  */
20 
21 /******************************************************
22 Change log:
23     03/07/2014: Initial version
24 ******************************************************/
25 #ifndef _KEY_MGMT_STA_ROM_H_
26 #define _KEY_MGMT_STA_ROM_H_
27 
28 #include "keyCommonDef.h"
29 #include "KeyApiStaDefs.h"
30 #include "IEEE_types.h"
31 #include "keyApiStaTypes.h"
32 //#include "keyMgmtStaHostTypes.h"
33 #include "authenticator.h"
34 #include "keyMgmtApStaCommon.h"
35 
36 /* Timer ID passed back to the caller when starting a timer. */
37 typedef UINT32 MicroTimerId_t;
38 
39 /* Callback function registered when starting a timer */
40 typedef void (*MicroTimerCallback_t) (MicroTimerId_t, UINT32);
41 #define PMKID_LEN 16
42 
43 extern void updateApReplayCounter(phostsa_private priv,
44 				  keyMgmtInfoSta_t *pKeyMgmtStaInfo,
45 				  UINT8 *pRxReplayCount);
46 
47 extern KDE_t *parseKeyKDE(phostsa_private priv,
48 			  IEEEtypes_InfoElementHdr_t *pIe);
49 
50 extern void supplicantGenerateSha1Pmkid(phostsa_private priv, UINT8 *pPMK,
51 					IEEEtypes_MacAddr_t *pBssid,
52 					IEEEtypes_MacAddr_t *pSta,
53 					UINT8 *pPMKID);
54 
55 extern void FillKeyMaterialStruct_internal(phostsa_private priv,
56 					   key_MgtMaterial_t *p_keyMgtData,
57 					   UINT16 key_len, UINT8 isPairwise,
58 					   KeyData_t *pKey);
59 
60 extern BOOLEAN (*supplicantSetAssocRsn_internal_hook) (RSNConfig_t *pRsnConfig,
61 						       SecurityParams_t
62 						       *pSecurityParams,
63 						       SecurityMode_t wpaType,
64 						       Cipher_t *pMcstCipher,
65 						       Cipher_t *pUcstCipher,
66 						       AkmSuite_t *pAkm,
67 						       IEEEtypes_RSNCapability_t
68 						       *pRsnCap,
69 						       Cipher_t
70 						       *pGrpMgmtCipher);
71 
72 extern void supplicantSetAssocRsn_internal(phostsa_private priv,
73 					   RSNConfig_t *pRsnConfig,
74 					   SecurityParams_t *pSecurityParams,
75 					   SecurityMode_t wpaType,
76 					   Cipher_t *pMcstCipher,
77 					   Cipher_t *pUcstCipher,
78 					   AkmSuite_t *pAkm,
79 					   IEEEtypes_RSNCapability_t *pRsnCap,
80 					   Cipher_t *pGrpMgmtCipher);
81 #if 0
82 extern BOOLEAN (*keyMgmtFormatWpaRsnIe_internal_hook) (RSNConfig_t *pRsnConfig,
83 						       UINT8 *pos,
84 						       IEEEtypes_MacAddr_t
85 						       *pBssid,
86 						       IEEEtypes_MacAddr_t
87 						       *pStaAddr, UINT8 *pPmkid,
88 						       BOOLEAN addPmkid,
89 						       UINT16 *ptr_val);
90 #endif
91 extern UINT16 keyMgmtFormatWpaRsnIe_internal(phostsa_private priv,
92 					     RSNConfig_t *pRsnConfig,
93 					     UINT8 *pos,
94 					     IEEEtypes_MacAddr_t *pBssid,
95 					     IEEEtypes_MacAddr_t *pStaAddr,
96 					     UINT8 *pPmkid, BOOLEAN addPmkid);
97 #if 0
98 extern BOOLEAN (*install_wpa_none_keys_internal_hook) (key_MgtMaterial_t
99 						       *p_keyMgtData,
100 						       UINT8 *pPMK, UINT8 type,
101 						       UINT8 unicast);
102 #endif
103 extern void install_wpa_none_keys_internal(phostsa_private priv,
104 					   key_MgtMaterial_t *p_keyMgtData,
105 					   UINT8 *pPMK, UINT8 type,
106 					   UINT8 unicast);
107 #if 0
108 extern BOOLEAN (*keyMgmtGetKeySize_internal_hook) (RSNConfig_t *pRsnConfig,
109 						   UINT8 isPairwise,
110 						   UINT16 *ptr_val);
111 #endif
112 extern UINT16 keyMgmtGetKeySize_internal(RSNConfig_t *pRsnConfig,
113 					 UINT8 isPairwise);
114 extern BOOLEAN supplicantAkmIsWpaWpa2(phostsa_private priv, AkmSuite_t *pAkm);
115 extern BOOLEAN supplicantAkmIsWpaWpa2Psk(phostsa_private priv,
116 					 AkmSuite_t *pAkm);
117 extern BOOLEAN supplicantAkmUsesKdf(phostsa_private priv, AkmSuite_t *pAkm);
118 #if 0
119 extern
120 BOOLEAN (*parseKeyKDE_DataType_hook) (UINT8 *pData,
121 				      SINT32 dataLen,
122 				      IEEEtypes_KDEDataType_e KDEDataType,
123 				      UINT32 *ptr_val);
124 #endif
125 extern KDE_t *parseKeyKDE_DataType(phostsa_private priv, UINT8 *pData,
126 				   SINT32 dataLen,
127 				   IEEEtypes_KDEDataType_e KDEDataType);
128 #if 0
129 extern BOOLEAN (*parseKeyDataGTK_hook) (UINT8 *pKey,
130 					UINT16 len,
131 					KeyData_t *pGRKey, UINT32 *ptr_val);
132 #endif
133 extern KDE_t *parseKeyDataGTK(phostsa_private priv, UINT8 *pKey, UINT16 len,
134 			      KeyData_t *pGRKey);
135 
136 extern BOOLEAN IsEAPOL_MICValid(phostsa_private priv, EAPOL_KeyMsg_t *pKeyMsg,
137 				UINT8 *pMICKey);
138 #if 0
139 extern BOOLEAN (*KeyMgmtSta_ApplyKEK_hook) (EAPOL_KeyMsg_t *pKeyMsg,
140 					    KeyData_t *pGRKey,
141 					    UINT8 *EAPOL_Encr_Key);
142 #endif
143 extern void KeyMgmtSta_ApplyKEK(phostsa_private priv, EAPOL_KeyMsg_t *pKeyMsg,
144 				KeyData_t *pGRKey, UINT8 *EAPOL_Encr_Key);
145 #if 0
146 extern
147 BOOLEAN (*KeyMgmtSta_IsRxEAPOLValid_hook) (keyMgmtInfoSta_t *pKeyMgmtInfoSta,
148 					   EAPOL_KeyMsg_t *pKeyMsg,
149 					   BOOLEAN *ptr_val);
150 #endif
151 extern BOOLEAN KeyMgmtSta_IsRxEAPOLValid(phostsa_private priv,
152 					 keyMgmtInfoSta_t *pKeyMgmtInfoSta,
153 					 EAPOL_KeyMsg_t *pKeyMsg);
154 extern void KeyMgmtSta_PrepareEAPOLFrame(phostsa_private priv,
155 					 EAPOL_KeyMsg_Tx_t *pTxEapol,
156 					 EAPOL_KeyMsg_t *pRxEapol, t_u8 *da,
157 					 t_u8 *sa, UINT8 *pSNonce);
158 extern UINT16 KeyMgmtSta_PopulateEAPOLLengthMic(phostsa_private priv,
159 						EAPOL_KeyMsg_Tx_t *pTxEapol,
160 						UINT8 *pEAPOLMICKey,
161 						UINT8 eapolProtocolVersion,
162 						UINT8 forceKeyDescVersion);
163 extern
164 void KeyMgmtSta_PrepareEAPOLMicErrFrame(phostsa_private priv,
165 					EAPOL_KeyMsg_Tx_t *pTxEapol,
166 					BOOLEAN isUnicast,
167 					IEEEtypes_MacAddr_t *da,
168 					IEEEtypes_MacAddr_t *sa,
169 					keyMgmtInfoSta_t *pKeyMgmtInfoSta);
170 
171 extern BOOLEAN supplicantAkmWpa2Ft(phostsa_private priv, AkmSuite_t *pAkm);
172 
173 extern BOOLEAN supplicantAkmUsesSha256Pmkid(phostsa_private priv,
174 					    AkmSuite_t *pAkm);
175 
176 extern void supplicantGenerateSha256Pmkid(phostsa_private priv, UINT8 *pPMK,
177 					  IEEEtypes_MacAddr_t *pBssid,
178 					  IEEEtypes_MacAddr_t *pSta,
179 					  UINT8 *pPMKID);
180 
181 extern BOOLEAN supplicantGetPmkid(phostsa_private priv,
182 				  IEEEtypes_MacAddr_t *pBssid,
183 				  IEEEtypes_MacAddr_t *pStaAddr,
184 				  AkmSuite_t *pAkm, UINT8 *pPMKID);
185 
186 extern void KeyMgmt_DerivePTK(phostsa_private priv, UINT8 *pAddr1,
187 			      UINT8 *pAddr2,
188 			      UINT8 *pNonce1,
189 			      UINT8 *pNonce2,
190 			      UINT8 *pPTK, UINT8 *pPMK, BOOLEAN use_kdf);
191 
192 extern void SetEAPOLKeyDescTypeVersion(EAPOL_KeyMsg_Tx_t *pTxEapol,
193 				       BOOLEAN isWPA2,
194 				       BOOLEAN isKDF, BOOLEAN nonTKIP);
195 
196 extern void KeyMgmtResetCounter(keyMgmtInfoSta_t *pKeyMgmtInfo);
197 
198 extern void keyMgmtSta_StartSession_internal(phostsa_private priv,
199 					     keyMgmtInfoSta_t *pKeyMgmtInfoSta,
200 					     //MicroTimerCallback_t callback,
201 					     UINT32 expiry, UINT8 flags);
202 
203 extern void KeyMgmtSta_handleMICDeauthTimer(keyMgmtInfoSta_t *pKeyMgmtInfoSta,
204 					    MicroTimerCallback_t callback,
205 					    UINT32 expiry, UINT8 flags);
206 
207 extern void KeyMgmtSta_handleMICErr(MIC_Fail_State_e state,
208 				    keyMgmtInfoSta_t *pKeyMgmtInfoSta,
209 				    MicroTimerCallback_t callback, UINT8 flags);
210 
211 extern void DeauthDelayTimerExp_Sta(t_void *context);
212 extern void keyMgmtStaRsnSecuredTimeoutHandler(t_void *context);
213 extern void keyMgmtSendDeauth2Peer(phostsa_private priv, UINT16 reason);
214 extern void supplicantGenerateRand(hostsa_private *priv, UINT8 *dataOut,
215 				   UINT32 length);
216 
217 extern EAPOL_KeyMsg_t *GetKeyMsgNonceFromEAPOL(phostsa_private priv,
218 					       mlan_buffer *pmbuf,
219 					       keyMgmtInfoSta_t
220 					       *pKeyMgmtInfoSta);
221 
222 extern EAPOL_KeyMsg_t *ProcessRxEAPOL_PwkMsg3(phostsa_private priv,
223 					      mlan_buffer *pmbuf,
224 					      keyMgmtInfoSta_t
225 					      *pKeyMgmtInfoSta);
226 
227 extern EAPOL_KeyMsg_t *ProcessRxEAPOL_GrpMsg1(phostsa_private priv,
228 					      mlan_buffer *pmbuf,
229 					      keyMgmtInfoSta_t
230 					      *pKeyMgmtInfoSta);
231 
232 extern void KeyMgmtSta_InitSession(phostsa_private priv,
233 				   keyMgmtInfoSta_t *pKeyMgmtInfoSta);
234 
235 extern void supplicantParseMcstCipher(phostsa_private priv,
236 				      Cipher_t *pMcstCipherOut,
237 				      UINT8 *pGrpKeyCipher);
238 
239 extern void supplicantParseUcstCipher(phostsa_private priv,
240 				      Cipher_t *pUcstCipherOut, UINT8 pwsKeyCnt,
241 				      UINT8 *pPwsKeyCipherList);
242 
243 #endif
244