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