1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name 20*5113495bSYour Name /** 21*5113495bSYour Name * DOC: Public definitions for crypto service 22*5113495bSYour Name */ 23*5113495bSYour Name 24*5113495bSYour Name #ifndef _WLAN_CRYPTO_GLOBAL_DEF_H_ 25*5113495bSYour Name #define _WLAN_CRYPTO_GLOBAL_DEF_H_ 26*5113495bSYour Name 27*5113495bSYour Name #include <wlan_cmn.h> 28*5113495bSYour Name #ifdef WLAN_CRYPTO_SUPPORT_FILS 29*5113495bSYour Name #include "wlan_crypto_fils_def.h" 30*5113495bSYour Name #endif 31*5113495bSYour Name #include <wlan_objmgr_cmn.h> 32*5113495bSYour Name #include <wlan_cmn_ieee80211.h> 33*5113495bSYour Name 34*5113495bSYour Name #define WLAN_CRYPTO_TID_SIZE (17) 35*5113495bSYour Name #define WLAN_CRYPTO_RSC_SIZE (16) 36*5113495bSYour Name #define WLAN_CRYPTO_KEYBUF_SIZE (32) 37*5113495bSYour Name #define WLAN_CRYPTO_MICBUF_SIZE (16) 38*5113495bSYour Name #define WLAN_CRYPTO_MIC_LEN (8) 39*5113495bSYour Name #define WLAN_CRYPTO_IV_SIZE (16) 40*5113495bSYour Name #define WLAN_CRYPTO_MIC256_LEN (16) 41*5113495bSYour Name #define WLAN_CRYPTO_TXMIC_OFFSET (0) 42*5113495bSYour Name #define WLAN_CRYPTO_RXMIC_OFFSET (WLAN_CRYPTO_TXMIC_OFFSET + \ 43*5113495bSYour Name WLAN_CRYPTO_MIC_LEN) 44*5113495bSYour Name #define WLAN_CRYPTO_WAPI_IV_SIZE (16) 45*5113495bSYour Name #define WLAN_CRYPTO_CRC_LEN (4) 46*5113495bSYour Name #define WLAN_CRYPTO_IV_LEN (3) 47*5113495bSYour Name #define WLAN_CRYPTO_KEYID_LEN (1) 48*5113495bSYour Name #define WLAN_CRYPTO_EXT_IV_LEN (4) 49*5113495bSYour Name #define WLAN_CRYPTO_EXT_IV_BIT (0x20) 50*5113495bSYour Name #define WLAN_CRYPTO_KEYIX_NONE ((uint16_t)-1) 51*5113495bSYour Name #define WLAN_CRYPTO_MAXKEYIDX (4) 52*5113495bSYour Name #define WLAN_CRYPTO_MAXIGTKKEYIDX (2) 53*5113495bSYour Name #define WLAN_CRYPTO_MAXBIGTKKEYIDX (2) 54*5113495bSYour Name #ifndef WLAN_CRYPTO_MAX_VLANKEYIX 55*5113495bSYour Name #define WLAN_CRYPTO_MAX_VLANKEYIX WLAN_CRYPTO_MAXKEYIDX 56*5113495bSYour Name #endif 57*5113495bSYour Name #define WLAN_CRYPTO_MAX_PMKID (16) 58*5113495bSYour Name #define WLAN_CRYPTO_TOTAL_KEYIDX (WLAN_CRYPTO_MAXKEYIDX + \ 59*5113495bSYour Name WLAN_CRYPTO_MAXIGTKKEYIDX + \ 60*5113495bSYour Name WLAN_CRYPTO_MAXBIGTKKEYIDX) 61*5113495bSYour Name /* 40 bit wep key len */ 62*5113495bSYour Name #define WLAN_CRYPTO_KEY_WEP40_LEN (5) 63*5113495bSYour Name /* 104 bit wep key len */ 64*5113495bSYour Name #define WLAN_CRYPTO_KEY_WEP104_LEN (13) 65*5113495bSYour Name /* 128 bit wep key len */ 66*5113495bSYour Name #define WLAN_CRYPTO_KEY_WEP128_LEN (16) 67*5113495bSYour Name 68*5113495bSYour Name #define WLAN_CRYPTO_KEY_TKIP_LEN (32) 69*5113495bSYour Name #define WLAN_CRYPTO_KEY_CCMP_LEN (16) 70*5113495bSYour Name #define WLAN_CRYPTO_KEY_CCMP_256_LEN (32) 71*5113495bSYour Name #define WLAN_CRYPTO_KEY_GCMP_LEN (16) 72*5113495bSYour Name #define WLAN_CRYPTO_KEY_GCMP_256_LEN (32) 73*5113495bSYour Name #define WLAN_CRYPTO_KEY_WAPI_LEN (32) 74*5113495bSYour Name #define WLAN_CRYPTO_KEY_GMAC_LEN (16) 75*5113495bSYour Name #define WLAN_CRYPTO_KEY_GMAC_256_LEN (32) 76*5113495bSYour Name #define WLAN_CRYPTO_WPI_SMS4_IVLEN (16) 77*5113495bSYour Name #define WLAN_CRYPTO_WPI_SMS4_KIDLEN (1) 78*5113495bSYour Name #define WLAN_CRYPTO_WPI_SMS4_PADLEN (1) 79*5113495bSYour Name #define WLAN_CRYPTO_WPI_SMS4_MICLEN (16) 80*5113495bSYour Name 81*5113495bSYour Name /* FILS definitions */ 82*5113495bSYour Name #define WLAN_CRYPTO_FILS_OPTIONAL_DATA_LEN 3 83*5113495bSYour Name #define WLAN_CRYPTO_FILS_RIK_LABEL "Re-authentication Integrity Key@ietf.org" 84*5113495bSYour Name 85*5113495bSYour Name /* key used for xmit */ 86*5113495bSYour Name #define WLAN_CRYPTO_KEY_XMIT (0x01) 87*5113495bSYour Name /* key used for recv */ 88*5113495bSYour Name #define WLAN_CRYPTO_KEY_RECV (0x02) 89*5113495bSYour Name /* key used for WPA group operation */ 90*5113495bSYour Name #define WLAN_CRYPTO_KEY_GROUP (0x04) 91*5113495bSYour Name /* key also used for management frames */ 92*5113495bSYour Name #define WLAN_CRYPTO_KEY_MFP (0x08) 93*5113495bSYour Name /* host-based encryption */ 94*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWENCRYPT (0x10) 95*5113495bSYour Name /* host-based enmic */ 96*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWENMIC (0x20) 97*5113495bSYour Name /* do not remove unless OS commands us to do so */ 98*5113495bSYour Name #define WLAN_CRYPTO_KEY_PERSISTENT (0x40) 99*5113495bSYour Name /* per STA default key */ 100*5113495bSYour Name #define WLAN_CRYPTO_KEY_DEFAULT (0x80) 101*5113495bSYour Name /* host-based decryption */ 102*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWDECRYPT (0x100) 103*5113495bSYour Name /* host-based demic */ 104*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWDEMIC (0x200) 105*5113495bSYour Name /* get pn from fw for key */ 106*5113495bSYour Name #define WLAN_CRYPTO_KEY_GET_PN (0x400) 107*5113495bSYour Name 108*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWCRYPT (WLAN_CRYPTO_KEY_SWENCRYPT \ 109*5113495bSYour Name | WLAN_CRYPTO_KEY_SWDECRYPT) 110*5113495bSYour Name 111*5113495bSYour Name #define WLAN_CRYPTO_KEY_SWMIC (WLAN_CRYPTO_KEY_SWENMIC \ 112*5113495bSYour Name | WLAN_CRYPTO_KEY_SWDEMIC) 113*5113495bSYour Name 114*5113495bSYour Name #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) 115*5113495bSYour Name #define WLAN_AKM_SUITE_FT_8021X 0x000FAC03 116*5113495bSYour Name #define WLAN_AKM_SUITE_FT_PSK 0x000FAC04 117*5113495bSYour Name #endif 118*5113495bSYour Name 119*5113495bSYour Name /* Maximum lifetime for a PMKID entry - 12 Hrs */ 120*5113495bSYour Name #define WLAN_CRYPTO_MAX_PMKID_LIFETIME 43200 121*5113495bSYour Name #define WLAN_CRYPTO_MAX_PMKID_LIFETIME_THRESHOLD 100 122*5113495bSYour Name 123*5113495bSYour Name /* 124*5113495bSYour Name * Cipher types 125*5113495bSYour Name */ 126*5113495bSYour Name typedef enum wlan_crypto_cipher_type { 127*5113495bSYour Name WLAN_CRYPTO_CIPHER_WEP = 0, 128*5113495bSYour Name WLAN_CRYPTO_CIPHER_TKIP = 1, 129*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_OCB = 2, 130*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_CCM = 3, 131*5113495bSYour Name WLAN_CRYPTO_CIPHER_WAPI_SMS4 = 4, 132*5113495bSYour Name WLAN_CRYPTO_CIPHER_CKIP = 5, 133*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_CMAC = 6, 134*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_CCM_256 = 7, 135*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_CMAC_256 = 8, 136*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_GCM = 9, 137*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_GCM_256 = 10, 138*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_GMAC = 11, 139*5113495bSYour Name WLAN_CRYPTO_CIPHER_AES_GMAC_256 = 12, 140*5113495bSYour Name WLAN_CRYPTO_CIPHER_WAPI_GCM4 = 13, 141*5113495bSYour Name WLAN_CRYPTO_CIPHER_FILS_AEAD = 14, 142*5113495bSYour Name WLAN_CRYPTO_CIPHER_WEP_40 = 15, 143*5113495bSYour Name WLAN_CRYPTO_CIPHER_WEP_104 = 16, 144*5113495bSYour Name WLAN_CRYPTO_CIPHER_NONE = 17, 145*5113495bSYour Name WLAN_CRYPTO_CIPHER_MAX = (WLAN_CRYPTO_CIPHER_NONE + 1), 146*5113495bSYour Name WLAN_CRYPTO_CIPHER_INVALID, 147*5113495bSYour Name } wlan_crypto_cipher_type; 148*5113495bSYour Name 149*5113495bSYour Name /* Auth types */ 150*5113495bSYour Name typedef enum wlan_crypto_auth_mode { 151*5113495bSYour Name WLAN_CRYPTO_AUTH_NONE = 0, 152*5113495bSYour Name WLAN_CRYPTO_AUTH_OPEN = 1, 153*5113495bSYour Name WLAN_CRYPTO_AUTH_SHARED = 2, 154*5113495bSYour Name WLAN_CRYPTO_AUTH_8021X = 3, 155*5113495bSYour Name WLAN_CRYPTO_AUTH_AUTO = 4, 156*5113495bSYour Name WLAN_CRYPTO_AUTH_WPA = 5, 157*5113495bSYour Name WLAN_CRYPTO_AUTH_RSNA = 6, 158*5113495bSYour Name WLAN_CRYPTO_AUTH_CCKM = 7, 159*5113495bSYour Name WLAN_CRYPTO_AUTH_WAPI = 8, 160*5113495bSYour Name WLAN_CRYPTO_AUTH_SAE = 9, 161*5113495bSYour Name WLAN_CRYPTO_AUTH_FILS_SK = 10, 162*5113495bSYour Name /** Keep WLAN_CRYPTO_AUTH_MAX at the end. */ 163*5113495bSYour Name WLAN_CRYPTO_AUTH_MAX, 164*5113495bSYour Name } wlan_crypto_auth_mode; 165*5113495bSYour Name 166*5113495bSYour Name /* crypto capabilities */ 167*5113495bSYour Name typedef enum wlan_crypto_cap { 168*5113495bSYour Name WLAN_CRYPTO_CAP_PRIVACY = 0, 169*5113495bSYour Name WLAN_CRYPTO_CAP_WPA1 = 1, 170*5113495bSYour Name WLAN_CRYPTO_CAP_WPA2 = 2, 171*5113495bSYour Name WLAN_CRYPTO_CAP_WPA = 3, 172*5113495bSYour Name WLAN_CRYPTO_CAP_AES = 4, 173*5113495bSYour Name WLAN_CRYPTO_CAP_WEP = 5, 174*5113495bSYour Name WLAN_CRYPTO_CAP_CKIP = 6, 175*5113495bSYour Name WLAN_CRYPTO_CAP_TKIP_MIC = 7, 176*5113495bSYour Name WLAN_CRYPTO_CAP_CCM256 = 8, 177*5113495bSYour Name WLAN_CRYPTO_CAP_GCM = 9, 178*5113495bSYour Name WLAN_CRYPTO_CAP_GCM_256 = 10, 179*5113495bSYour Name WLAN_CRYPTO_CAP_WAPI_SMS4 = 11, 180*5113495bSYour Name WLAN_CRYPTO_CAP_WAPI_GCM4 = 12, 181*5113495bSYour Name WLAN_CRYPTO_CAP_KEY_MGMT_OFFLOAD = 13, 182*5113495bSYour Name WLAN_CRYPTO_CAP_PMF_OFFLOAD = 14, 183*5113495bSYour Name WLAN_CRYPTO_CAP_PN_TID_BASED = 15, 184*5113495bSYour Name WLAN_CRYPTO_CAP_FILS_AEAD = 16, 185*5113495bSYour Name } wlan_crypto_cap; 186*5113495bSYour Name 187*5113495bSYour Name typedef enum wlan_crypto_rsn_cap { 188*5113495bSYour Name WLAN_CRYPTO_RSN_CAP_PREAUTH = 0x01, 189*5113495bSYour Name WLAN_CRYPTO_RSN_CAP_MFP_ENABLED = 0x80, 190*5113495bSYour Name WLAN_CRYPTO_RSN_CAP_MFP_REQUIRED = 0x40, 191*5113495bSYour Name WLAN_CRYPTO_RSN_CAP_OCV_SUPPORTED = 0x4000, 192*5113495bSYour Name } wlan_crypto_rsn_cap; 193*5113495bSYour Name 194*5113495bSYour Name /** 195*5113495bSYour Name * enum wlan_crypto_rsnx_cap - RSNXE capabilities 196*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_PROTECTED_TWT: Protected TWT 197*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_SAE_H2E: SAE Hash to Element 198*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_SAE_PK: SAE PK 199*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_SECURE_LTF: Secure LTF 200*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_SECURE_RTT: Secure RTT 201*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_URNM_MFPR_X20: Unassociated Range 202*5113495bSYour Name * Negotiation and Measurement MFP Required Exempt 20MHz 203*5113495bSYour Name * @WLAN_CRYPTO_RSNX_CAP_URNM_MFPR: Unassociated Range 204*5113495bSYour Name * Negotiation and Measurement MFP Required 205*5113495bSYour Name * 206*5113495bSYour Name * Definition: (IEEE Std 802.11-2020, 9.4.2.241, Table 9-780) 207*5113495bSYour Name * The Extended RSN Capabilities field, except its first 4 bits, is a 208*5113495bSYour Name * bit field indicating the extended RSN capabilities being advertised 209*5113495bSYour Name * by the STA transmitting the element. The length of the Extended 210*5113495bSYour Name * RSN Capabilities field is a variable n, in octets, as indicated by 211*5113495bSYour Name * the first 4 bits in the field. 212*5113495bSYour Name */ 213*5113495bSYour Name enum wlan_crypto_rsnx_cap { 214*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_PROTECTED_TWT = 0x10, 215*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_SAE_H2E = 0x20, 216*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_SAE_PK = 0x40, 217*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_SECURE_LTF = 0x100, 218*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_SECURE_RTT = 0x200, 219*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_URNM_MFPR_X20 = 0x400, 220*5113495bSYour Name WLAN_CRYPTO_RSNX_CAP_URNM_MFPR = 0x8000, 221*5113495bSYour Name }; 222*5113495bSYour Name 223*5113495bSYour Name /** 224*5113495bSYour Name * enum wlan_crypto_vdev_11az_security_capab - 11az related vdev 225*5113495bSYour Name * security capabilities 226*5113495bSYour Name * @WLAN_CRYPTO_RSNX_URNM_MFPR: URNM MFP required bit from RSNXE 227*5113495bSYour Name * @WLAN_CRYPTO_RSN_MFPC: MFP capable bit from RSN IE 228*5113495bSYour Name * @WLAN_CRYPTO_RSN_MFPR: MFP required bit from RSN IE 229*5113495bSYour Name * @WLAN_CRYPTO_RSNX_URNM_MFPR_X20: URNM_MFPR_X20 bit from RSNXE 230*5113495bSYour Name * @WLAN_CRYPTO_RSNX_RSTA_EXTCAP_I2R_LMR_FB: I2R LMR FB Policy from 231*5113495bSYour Name * Extended Capabilities 232*5113495bSYour Name */ 233*5113495bSYour Name enum wlan_crypto_vdev_11az_security_capab { 234*5113495bSYour Name WLAN_CRYPTO_RSNX_URNM_MFPR, 235*5113495bSYour Name WLAN_CRYPTO_RSN_MFPC, 236*5113495bSYour Name WLAN_CRYPTO_RSN_MFPR, 237*5113495bSYour Name WLAN_CRYPTO_RSNX_URNM_MFPR_X20, 238*5113495bSYour Name WLAN_CRYPTO_RSNX_RSTA_EXTCAP_I2R_LMR_FB, 239*5113495bSYour Name }; 240*5113495bSYour Name 241*5113495bSYour Name /** 242*5113495bSYour Name * enum wlan_crypto_vdev_pasn_caps - PASN peer related vdev 243*5113495bSYour Name * crypto parameters 244*5113495bSYour Name * @WLAN_CRYPTO_URNM_MFPR: URNM MFP required in RSNXE 245*5113495bSYour Name * @WLAN_CRYPTO_MFPC: MFP capable bit from RSN IE 246*5113495bSYour Name * @WLAN_CRYPTO_MFPR: MFP required from RSNIE 247*5113495bSYour Name */ 248*5113495bSYour Name enum wlan_crypto_vdev_pasn_caps { 249*5113495bSYour Name WLAN_CRYPTO_URNM_MFPR = BIT(0), 250*5113495bSYour Name WLAN_CRYPTO_MFPC = BIT(1), 251*5113495bSYour Name WLAN_CRYPTO_MFPR = BIT(2), 252*5113495bSYour Name }; 253*5113495bSYour Name 254*5113495bSYour Name typedef enum wlan_crypto_key_mgmt { 255*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_IEEE8021X = 0, 256*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_PSK = 1, 257*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_NONE = 2, 258*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_IEEE8021X_NO_WPA = 3, 259*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_WPA_NONE = 4, 260*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X = 5, 261*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_PSK = 6, 262*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SHA256 = 7, 263*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_PSK_SHA256 = 8, 264*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_WPS = 9, 265*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_SAE = 10, 266*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_SAE = 11, 267*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_WAPI_PSK = 12, 268*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_WAPI_CERT = 13, 269*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_CCKM = 14, 270*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_OSEN = 15, 271*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B = 16, 272*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192 = 17, 273*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FILS_SHA256 = 18, 274*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FILS_SHA384 = 19, 275*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA256 = 20, 276*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA384 = 21, 277*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_OWE = 22, 278*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_DPP = 23, 279*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384 = 24, 280*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_PSK_SHA384 = 25, 281*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_PSK_SHA384 = 26, 282*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_SAE_EXT_KEY = 27, 283*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_FT_SAE_EXT_KEY = 28, 284*5113495bSYour Name /** Keep WLAN_CRYPTO_KEY_MGMT_MAX at the end. */ 285*5113495bSYour Name WLAN_CRYPTO_KEY_MGMT_MAX, 286*5113495bSYour Name } wlan_crypto_key_mgmt; 287*5113495bSYour Name 288*5113495bSYour Name enum wlan_crypto_key_type { 289*5113495bSYour Name WLAN_CRYPTO_KEY_TYPE_UNICAST, 290*5113495bSYour Name WLAN_CRYPTO_KEY_TYPE_GROUP, 291*5113495bSYour Name }; 292*5113495bSYour Name 293*5113495bSYour Name #define IS_WEP_CIPHER(_c) ((_c == WLAN_CRYPTO_CIPHER_WEP) || \ 294*5113495bSYour Name (_c == WLAN_CRYPTO_CIPHER_WEP_40) || \ 295*5113495bSYour Name (_c == WLAN_CRYPTO_CIPHER_WEP_104)) 296*5113495bSYour Name 297*5113495bSYour Name #define DEFAULT_KEYMGMT_6G_MASK 0xFFFFFFFF 298*5113495bSYour Name 299*5113495bSYour Name /* AKM wlan_crypto_key_mgmt 1, 6, 8, 25 and 26 are not allowed. */ 300*5113495bSYour Name #define ALLOWED_KEYMGMT_6G_MASK 0x19FFFEBD 301*5113495bSYour Name 302*5113495bSYour Name /* 303*5113495bSYour Name * enum fils_erp_cryptosuite: this enum defines the cryptosuites used 304*5113495bSYour Name * to calculate auth tag and auth tag length as defined by RFC 6696 5.3.1 305*5113495bSYour Name * @HMAC_SHA256_64: sha256 with auth tag len as 64 bits 306*5113495bSYour Name * @HMAC_SHA256_128: sha256 with auth tag len as 128 bits 307*5113495bSYour Name * @HMAC_SHA256_256: sha256 with auth tag len as 256 bits 308*5113495bSYour Name */ 309*5113495bSYour Name enum fils_erp_cryptosuite { 310*5113495bSYour Name INVALID_CRYPTO = 0, /* reserved */ 311*5113495bSYour Name HMAC_SHA256_64, 312*5113495bSYour Name HMAC_SHA256_128, 313*5113495bSYour Name HMAC_SHA256_256, 314*5113495bSYour Name }; 315*5113495bSYour Name 316*5113495bSYour Name /* 317*5113495bSYour Name * enum wlan_crypto_oem_eht_mlo_config - ENUM for different OEM configurable 318*5113495bSYour Name * crypto params to allow EHT/MLO in WPA2/WPA3 security. 319*5113495bSYour Name * 320*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT: Allows connecting to WPA2 with PMF 321*5113495bSYour Name * capability set to false in EHT only mode. If the AP is MLO, the connection 322*5113495bSYour Name * will still be in EHT without MLO. 323*5113495bSYour Name * 324*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO: Allows connecting to WPA2 with PMF 325*5113495bSYour Name * capability set to false in MLO mode. 326*5113495bSYour Name * -If set along with WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT, 327*5113495bSYour Name * this mode supersedes. 328*5113495bSYour Name * 329*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT_MFPC_SET: Allows connecting to WPA2 330*5113495bSYour Name * with PMF capability set to true in EHT only mode. If the AP is MLO, 331*5113495bSYour Name * the connection will still be in EHT without MLO. 332*5113495bSYour Name * 333*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO_MFPC_SET: Allows connecting to WPA2 with PMF 334*5113495bSYour Name * capability set to true in MLO mode. 335*5113495bSYour Name * -If set along with WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT_MFPC_SET, 336*5113495bSYour Name * this mode supersedes. 337*5113495bSYour Name * 338*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_NON_MLO_EHT_HnP: Connect to non-MLO/MLO 339*5113495bSYour Name * WPA3-SAE without support for H2E (or no RSNXE IE in beacon) in non-MLO EHT. 340*5113495bSYour Name * This bit results in connecting to both H2E and HnP APs in EHT only mode. 341*5113495bSYour Name * 342*5113495bSYour Name * @WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_MLO_HnP: Connect to MLO WPA3-SAE without 343*5113495bSYour Name * support for H2E (or no RSNXE IE in beacon) in MLO. 344*5113495bSYour Name * This bit result in connecting to both H2E and HnP APs in MLO mode. 345*5113495bSYour Name * -If set along with WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_NON_MLO_EHT_HnP, 346*5113495bSYour Name * this mode supersedes. 347*5113495bSYour Name */ 348*5113495bSYour Name enum wlan_crypto_oem_eht_mlo_config { 349*5113495bSYour Name WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT = BIT(0), 350*5113495bSYour Name WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO = BIT(1), 351*5113495bSYour Name WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT_MFPC_SET = BIT(2), 352*5113495bSYour Name WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO_MFPC_SET = BIT(3), 353*5113495bSYour Name /* Bits 4-15 are reserved for future WPA2 security configs */ 354*5113495bSYour Name 355*5113495bSYour Name WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_NON_MLO_EHT_HnP = BIT(16), 356*5113495bSYour Name WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_MLO_HnP = BIT(17), 357*5113495bSYour Name /* Bits 18-31 are reserved for future WPA3 security configs */ 358*5113495bSYour Name }; 359*5113495bSYour Name 360*5113495bSYour Name #define WLAN_CRYPTO_WPA2_OEM_EHT_CFG_NO_PMF_ALLOWED(_cfg) \ 361*5113495bSYour Name ((_cfg) & WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT || \ 362*5113495bSYour Name (_cfg) & WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO) 363*5113495bSYour Name 364*5113495bSYour Name #define WLAN_CRYPTO_WPA2_OEM_EHT_CFG_PMF_ALLOWED(_cfg) \ 365*5113495bSYour Name ((_cfg) & WLAN_HOST_CRYPTO_WPA2_ALLOW_NON_MLO_EHT_MFPC_SET || \ 366*5113495bSYour Name (_cfg) & WLAN_HOST_CRYPTO_WPA2_ALLOW_MLO_MFPC_SET) 367*5113495bSYour Name 368*5113495bSYour Name #define WLAN_CRYPTO_WPA3_SAE_OEM_EHT_CFG_IS_STRICT_H2E(_cfg) \ 369*5113495bSYour Name (((_cfg) & WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_NON_MLO_EHT_HnP || \ 370*5113495bSYour Name (_cfg) & WLAN_HOST_CRYPTO_WPA3_SAE_ALLOW_MLO_HnP) == 0) 371*5113495bSYour Name 372*5113495bSYour Name /** 373*5113495bSYour Name * struct mobility_domain_params - structure containing 374*5113495bSYour Name * mobility domain info 375*5113495bSYour Name * @mdie_present: mobility domain present or not 376*5113495bSYour Name * @mobility_domain: mobility domain 377*5113495bSYour Name */ 378*5113495bSYour Name struct mobility_domain_params { 379*5113495bSYour Name uint8_t mdie_present; 380*5113495bSYour Name uint16_t mobility_domain; 381*5113495bSYour Name }; 382*5113495bSYour Name 383*5113495bSYour Name /** 384*5113495bSYour Name * struct wlan_crypto_pmksa - structure of crypto to contain pmkid 385*5113495bSYour Name * @bssid: bssid for which pmkid is saved 386*5113495bSYour Name * @pmkid: pmkid info 387*5113495bSYour Name * @pmk: pmk info 388*5113495bSYour Name * @pmk_len: pmk len 389*5113495bSYour Name * @ssid_len: ssid length 390*5113495bSYour Name * @ssid: ssid information 391*5113495bSYour Name * @cache_id: cache id 392*5113495bSYour Name * @pmk_lifetime: Duration in seconds for which the pmk is valid 393*5113495bSYour Name * @pmk_lifetime_threshold: Percentage of pmk lifetime within which 394*5113495bSYour Name * full authentication is expected to avoid disconnection. 395*5113495bSYour Name * @pmk_entry_ts: System timestamp at which the PMK entry was created. 396*5113495bSYour Name * @single_pmk_supported: SAE single pmk supported BSS 397*5113495bSYour Name * @mdid: structure to contain mobility domain parameters 398*5113495bSYour Name */ 399*5113495bSYour Name struct wlan_crypto_pmksa { 400*5113495bSYour Name struct qdf_mac_addr bssid; 401*5113495bSYour Name uint8_t pmkid[PMKID_LEN]; 402*5113495bSYour Name uint8_t pmk[MAX_PMK_LEN]; 403*5113495bSYour Name uint8_t pmk_len; 404*5113495bSYour Name uint8_t ssid_len; 405*5113495bSYour Name uint8_t ssid[WLAN_SSID_MAX_LEN]; 406*5113495bSYour Name uint8_t cache_id[WLAN_CACHE_ID_LEN]; 407*5113495bSYour Name uint32_t pmk_lifetime; 408*5113495bSYour Name uint8_t pmk_lifetime_threshold; 409*5113495bSYour Name qdf_time_t pmk_entry_ts; 410*5113495bSYour Name #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD) 411*5113495bSYour Name bool single_pmk_supported; 412*5113495bSYour Name #endif 413*5113495bSYour Name struct mobility_domain_params mdid; 414*5113495bSYour Name }; 415*5113495bSYour Name 416*5113495bSYour Name #ifdef WLAN_ADAPTIVE_11R 417*5113495bSYour Name /** 418*5113495bSYour Name * struct key_mgmt_list - structure to store AKM(s) present in RSN IE of 419*5113495bSYour Name * Beacon/Probe response 420*5113495bSYour Name * @key_mgmt: AKM(s) present in RSN IE of Beacon/Probe response 421*5113495bSYour Name */ 422*5113495bSYour Name struct key_mgmt_list { 423*5113495bSYour Name uint32_t key_mgmt; 424*5113495bSYour Name }; 425*5113495bSYour Name #endif 426*5113495bSYour Name 427*5113495bSYour Name /** 428*5113495bSYour Name * struct wlan_crypto_params - holds crypto params 429*5113495bSYour Name * @authmodeset: authentication mode 430*5113495bSYour Name * @ucastcipherset: unicast ciphers 431*5113495bSYour Name * @mcastcipherset: multicast cipher 432*5113495bSYour Name * @mgmtcipherset: mgmt cipher 433*5113495bSYour Name * @cipher_caps: cipher capability 434*5113495bSYour Name * @key_mgmt: key mgmt 435*5113495bSYour Name * @pmksa: pmksa 436*5113495bSYour Name * @rsn_caps: rsn_capability 437*5113495bSYour Name * @rsnx_caps: rsnx capability 438*5113495bSYour Name * @akm_list: order of AKM present in RSN IE of Beacon/Probe response 439*5113495bSYour Name * 440*5113495bSYour Name * This structure holds crypto params for peer or vdev 441*5113495bSYour Name */ 442*5113495bSYour Name struct wlan_crypto_params { 443*5113495bSYour Name uint32_t authmodeset; 444*5113495bSYour Name uint32_t ucastcipherset; 445*5113495bSYour Name uint32_t mcastcipherset; 446*5113495bSYour Name uint32_t mgmtcipherset; 447*5113495bSYour Name uint32_t cipher_caps; 448*5113495bSYour Name uint32_t key_mgmt; 449*5113495bSYour Name struct wlan_crypto_pmksa *pmksa[WLAN_CRYPTO_MAX_PMKID]; 450*5113495bSYour Name uint16_t rsn_caps; 451*5113495bSYour Name uint32_t rsnx_caps; 452*5113495bSYour Name #ifdef WLAN_ADAPTIVE_11R 453*5113495bSYour Name struct key_mgmt_list akm_list[WLAN_CRYPTO_KEY_MGMT_MAX]; 454*5113495bSYour Name #endif 455*5113495bSYour Name }; 456*5113495bSYour Name 457*5113495bSYour Name /** 458*5113495bSYour Name * struct wlan_crypto_ltf_keyseed_data - LTF keyseed parameters 459*5113495bSYour Name * @vdev_id: Vdev id 460*5113495bSYour Name * @peer_mac_addr: Peer mac address 461*5113495bSYour Name * @src_mac_addr: Source mac address 462*5113495bSYour Name * @rsn_authmode: Cipher suite 463*5113495bSYour Name * @key_seed: Secure LTF key seed 464*5113495bSYour Name * @key_seed_len: Key seed length 465*5113495bSYour Name */ 466*5113495bSYour Name struct wlan_crypto_ltf_keyseed_data { 467*5113495bSYour Name uint8_t vdev_id; 468*5113495bSYour Name struct qdf_mac_addr peer_mac_addr; 469*5113495bSYour Name struct qdf_mac_addr src_mac_addr; 470*5113495bSYour Name uint8_t rsn_authmode; 471*5113495bSYour Name uint8_t key_seed[WLAN_MAX_SECURE_LTF_KEYSEED_LEN]; 472*5113495bSYour Name uint16_t key_seed_len; 473*5113495bSYour Name }; 474*5113495bSYour Name 475*5113495bSYour Name typedef enum wlan_crypto_param_type { 476*5113495bSYour Name WLAN_CRYPTO_PARAM_AUTH_MODE, 477*5113495bSYour Name WLAN_CRYPTO_PARAM_UCAST_CIPHER, 478*5113495bSYour Name WLAN_CRYPTO_PARAM_MCAST_CIPHER, 479*5113495bSYour Name WLAN_CRYPTO_PARAM_MGMT_CIPHER, 480*5113495bSYour Name WLAN_CRYPTO_PARAM_CIPHER_CAP, 481*5113495bSYour Name WLAN_CRYPTO_PARAM_RSN_CAP, 482*5113495bSYour Name WLAN_CRYPTO_PARAM_RSNX_CAP, 483*5113495bSYour Name WLAN_CRYPTO_PARAM_KEY_MGMT, 484*5113495bSYour Name WLAN_CRYPTO_PARAM_PMKSA, 485*5113495bSYour Name } wlan_crypto_param_type; 486*5113495bSYour Name 487*5113495bSYour Name /** 488*5113495bSYour Name * struct wlan_crypto_key - key structure 489*5113495bSYour Name * @keylen: length of the key 490*5113495bSYour Name * @valid: is key valid or not 491*5113495bSYour Name * @flags: key flags 492*5113495bSYour Name * @keyix: key id 493*5113495bSYour Name * @cipher_type: cipher type being used for this key 494*5113495bSYour Name * @key_type: unicast or broadcast key 495*5113495bSYour Name * @macaddr: MAC address of the peer 496*5113495bSYour Name * @src_addr: Source mac address associated with the key 497*5113495bSYour Name * @cipher_table: table which stores cipher related info 498*5113495bSYour Name * @private: private pointer to save cipher context 499*5113495bSYour Name * @keylock: spin lock 500*5113495bSYour Name * @recviv: WAPI key receive sequence counter 501*5113495bSYour Name * @txiv: WAPI key transmit sequence counter 502*5113495bSYour Name * @keytsc: key transmit sequence counter 503*5113495bSYour Name * @keyrsc: key receive sequence counter 504*5113495bSYour Name * @keyrsc_suspect: key receive sequence counter under 505*5113495bSYour Name * suspect when pN jump is detected 506*5113495bSYour Name * @keyglobal: key receive global sequence counter used with suspect 507*5113495bSYour Name * @keyval: key value buffer 508*5113495bSYour Name * 509*5113495bSYour Name * This key structure to key related details. 510*5113495bSYour Name */ 511*5113495bSYour Name struct wlan_crypto_key { 512*5113495bSYour Name uint8_t keylen; 513*5113495bSYour Name bool valid; 514*5113495bSYour Name uint16_t flags; 515*5113495bSYour Name uint16_t keyix; 516*5113495bSYour Name enum wlan_crypto_cipher_type cipher_type; 517*5113495bSYour Name enum wlan_crypto_key_type key_type; 518*5113495bSYour Name uint8_t macaddr[QDF_MAC_ADDR_SIZE]; 519*5113495bSYour Name struct qdf_mac_addr src_addr; 520*5113495bSYour Name void *cipher_table; 521*5113495bSYour Name void *private; 522*5113495bSYour Name qdf_spinlock_t keylock; 523*5113495bSYour Name uint8_t recviv[WLAN_CRYPTO_WAPI_IV_SIZE]; 524*5113495bSYour Name uint8_t txiv[WLAN_CRYPTO_WAPI_IV_SIZE]; 525*5113495bSYour Name uint64_t keytsc; 526*5113495bSYour Name uint64_t keyrsc[WLAN_CRYPTO_TID_SIZE]; 527*5113495bSYour Name uint64_t keyrsc_suspect[WLAN_CRYPTO_TID_SIZE]; 528*5113495bSYour Name uint64_t keyglobal; 529*5113495bSYour Name uint8_t keyval[WLAN_CRYPTO_KEYBUF_SIZE 530*5113495bSYour Name + WLAN_CRYPTO_MICBUF_SIZE]; 531*5113495bSYour Name #define txmic (keyval + WLAN_CRYPTO_KEYBUF_SIZE \ 532*5113495bSYour Name + WLAN_CRYPTO_TXMIC_OFFSET) 533*5113495bSYour Name #define rxmic (keyval + WLAN_CRYPTO_KEYBUF_SIZE \ 534*5113495bSYour Name + WLAN_CRYPTO_RXMIC_OFFSET) 535*5113495bSYour Name }; 536*5113495bSYour Name 537*5113495bSYour Name /** 538*5113495bSYour Name * struct wlan_crypto_keys - crypto keys structure 539*5113495bSYour Name * @key: key buffers for this peer 540*5113495bSYour Name * @igtk_key: igtk key buffer for this peer 541*5113495bSYour Name * @bigtk_key: bigtk key buffer for this peer 542*5113495bSYour Name * @ltf_key_seed: LTF Key Seed buffer 543*5113495bSYour Name * @igtk_key_type: igtk key type 544*5113495bSYour Name * @def_tx_keyid: default key used for this peer 545*5113495bSYour Name * @def_igtk_tx_keyid: default igtk key used for this peer 546*5113495bSYour Name * @def_bigtk_tx_keyid: default bigtk key used for this peer 547*5113495bSYour Name */ 548*5113495bSYour Name struct wlan_crypto_keys { 549*5113495bSYour Name struct wlan_crypto_key *key[WLAN_CRYPTO_MAX_VLANKEYIX]; 550*5113495bSYour Name struct wlan_crypto_key *igtk_key[WLAN_CRYPTO_MAXIGTKKEYIDX]; 551*5113495bSYour Name struct wlan_crypto_key *bigtk_key[WLAN_CRYPTO_MAXBIGTKKEYIDX]; 552*5113495bSYour Name struct wlan_crypto_ltf_keyseed_data ltf_key_seed; 553*5113495bSYour Name enum wlan_crypto_cipher_type igtk_key_type; 554*5113495bSYour Name uint8_t def_tx_keyid; 555*5113495bSYour Name uint8_t def_igtk_tx_keyid; 556*5113495bSYour Name uint8_t def_bigtk_tx_keyid; 557*5113495bSYour Name }; 558*5113495bSYour Name 559*5113495bSYour Name union crypto_align_mac_addr { 560*5113495bSYour Name uint8_t raw[QDF_MAC_ADDR_SIZE]; 561*5113495bSYour Name struct { 562*5113495bSYour Name uint16_t bytes_ab; 563*5113495bSYour Name uint16_t bytes_cd; 564*5113495bSYour Name uint16_t bytes_ef; 565*5113495bSYour Name } align2; 566*5113495bSYour Name struct { 567*5113495bSYour Name uint32_t bytes_abcd; 568*5113495bSYour Name uint16_t bytes_ef; 569*5113495bSYour Name } align4; 570*5113495bSYour Name struct __packed { 571*5113495bSYour Name uint16_t bytes_ab; 572*5113495bSYour Name uint32_t bytes_cdef; 573*5113495bSYour Name } align4_2; 574*5113495bSYour Name }; 575*5113495bSYour Name 576*5113495bSYour Name /** 577*5113495bSYour Name * struct wlan_crypto_key_entry - crypto key entry structure 578*5113495bSYour Name * @mac_addr: mac addr 579*5113495bSYour Name * @is_active: active key entry 580*5113495bSYour Name * @link_id: link id 581*5113495bSYour Name * @vdev_id: vdev id 582*5113495bSYour Name * @keys: crypto keys 583*5113495bSYour Name * @hash_list_elem: hash list element 584*5113495bSYour Name */ 585*5113495bSYour Name struct wlan_crypto_key_entry { 586*5113495bSYour Name union crypto_align_mac_addr mac_addr; 587*5113495bSYour Name bool is_active; 588*5113495bSYour Name uint8_t link_id; 589*5113495bSYour Name uint8_t vdev_id; 590*5113495bSYour Name struct wlan_crypto_keys keys; 591*5113495bSYour Name 592*5113495bSYour Name TAILQ_ENTRY(wlan_crypto_key_entry) hash_list_elem; 593*5113495bSYour Name }; 594*5113495bSYour Name 595*5113495bSYour Name /** 596*5113495bSYour Name * struct wlan_crypto_req_key - key request structure 597*5113495bSYour Name * @type: key/cipher type 598*5113495bSYour Name * @pad: padding member 599*5113495bSYour Name * @keyix: key index 600*5113495bSYour Name * @keylen: length of the key value 601*5113495bSYour Name * @flags: key flags 602*5113495bSYour Name * @macaddr: macaddr of the key 603*5113495bSYour Name * @keyrsc: key receive sequence counter 604*5113495bSYour Name * @keytsc: key transmit sequence counter 605*5113495bSYour Name * @keydata: key value 606*5113495bSYour Name * @txiv: wapi key tx iv 607*5113495bSYour Name * @recviv: wapi key rx iv 608*5113495bSYour Name * @filsaad: FILS AEAD data 609*5113495bSYour Name * 610*5113495bSYour Name * Key request structure used for setkey, getkey or delkey 611*5113495bSYour Name */ 612*5113495bSYour Name struct wlan_crypto_req_key { 613*5113495bSYour Name uint8_t type; 614*5113495bSYour Name uint8_t pad; 615*5113495bSYour Name uint16_t keyix; 616*5113495bSYour Name uint8_t keylen; 617*5113495bSYour Name uint16_t flags; 618*5113495bSYour Name uint8_t macaddr[QDF_MAC_ADDR_SIZE]; 619*5113495bSYour Name uint64_t keyrsc; 620*5113495bSYour Name uint64_t keytsc; 621*5113495bSYour Name uint8_t keydata[WLAN_CRYPTO_KEYBUF_SIZE + WLAN_CRYPTO_MICBUF_SIZE]; 622*5113495bSYour Name uint8_t txiv[WLAN_CRYPTO_WAPI_IV_SIZE]; 623*5113495bSYour Name uint8_t recviv[WLAN_CRYPTO_WAPI_IV_SIZE]; 624*5113495bSYour Name #ifdef WLAN_CRYPTO_SUPPORT_FILS 625*5113495bSYour Name struct wlan_crypto_fils_aad_key filsaad; 626*5113495bSYour Name #endif 627*5113495bSYour Name }; 628*5113495bSYour Name 629*5113495bSYour Name /** 630*5113495bSYour Name * struct wlan_lmac_if_crypto_tx_ops - structure of crypto function 631*5113495bSYour Name * pointers 632*5113495bSYour Name * @allockey: function pointer to alloc key in hw 633*5113495bSYour Name * @setkey: function pointer to setkey in hw 634*5113495bSYour Name * @delkey: function pointer to delkey in hw 635*5113495bSYour Name * @defaultkey: function pointer to set default key 636*5113495bSYour Name * @set_key: converged function pointer to set key in hw 637*5113495bSYour Name * @getpn: function pointer to get current pn value of peer 638*5113495bSYour Name * @set_ltf_keyseed: Set LTF keyseed 639*5113495bSYour Name * @set_vdev_param: Set the vdev crypto parameter 640*5113495bSYour Name * @register_events: function pointer to register wmi event handler 641*5113495bSYour Name * @deregister_events: function pointer to deregister wmi event handler 642*5113495bSYour Name */ 643*5113495bSYour Name struct wlan_lmac_if_crypto_tx_ops { 644*5113495bSYour Name QDF_STATUS (*allockey)(struct wlan_objmgr_vdev *vdev, 645*5113495bSYour Name struct wlan_crypto_key *key, 646*5113495bSYour Name uint8_t *macaddr, uint32_t key_type); 647*5113495bSYour Name QDF_STATUS (*setkey)(struct wlan_objmgr_vdev *vdev, 648*5113495bSYour Name struct wlan_crypto_key *key, 649*5113495bSYour Name uint8_t *macaddr, uint32_t key_type); 650*5113495bSYour Name QDF_STATUS (*delkey)(struct wlan_objmgr_vdev *vdev, 651*5113495bSYour Name struct wlan_crypto_key *key, 652*5113495bSYour Name uint8_t *macaddr, uint32_t key_type); 653*5113495bSYour Name QDF_STATUS (*defaultkey)(struct wlan_objmgr_vdev *vdev, 654*5113495bSYour Name uint8_t keyix, uint8_t *macaddr); 655*5113495bSYour Name QDF_STATUS (*set_key)(struct wlan_objmgr_vdev *vdev, 656*5113495bSYour Name struct wlan_crypto_key *key, 657*5113495bSYour Name enum wlan_crypto_key_type key_type); 658*5113495bSYour Name QDF_STATUS(*getpn)(struct wlan_objmgr_vdev *vdev, 659*5113495bSYour Name uint8_t *macaddr, uint8_t keyix, uint32_t key_type); 660*5113495bSYour Name QDF_STATUS (*set_ltf_keyseed)(struct wlan_objmgr_psoc *psoc, 661*5113495bSYour Name struct wlan_crypto_ltf_keyseed_data *ks); 662*5113495bSYour Name QDF_STATUS (*set_vdev_param)(struct wlan_objmgr_psoc *psoc, 663*5113495bSYour Name uint32_t vdev_id, uint32_t param_id, 664*5113495bSYour Name uint32_t param_value); 665*5113495bSYour Name QDF_STATUS (*register_events)(struct wlan_objmgr_psoc *psoc); 666*5113495bSYour Name QDF_STATUS (*deregister_events)(struct wlan_objmgr_psoc *psoc); 667*5113495bSYour Name }; 668*5113495bSYour Name 669*5113495bSYour Name /** 670*5113495bSYour Name * struct wlan_lmac_if_crypto_rx_ops - structure of crypto rx function 671*5113495bSYour Name * pointers 672*5113495bSYour Name * @crypto_encap: function pointer to encap tx frame 673*5113495bSYour Name * @crypto_decap: function pointer to decap rx frame in hw 674*5113495bSYour Name * @crypto_enmic: function pointer to enmic tx frame 675*5113495bSYour Name * @crypto_demic: function pointer to demic rx frame 676*5113495bSYour Name * @set_peer_wep_keys: function pointer to set WEP keys 677*5113495bSYour Name * @get_rxpn: function pointer to get current Rx pn value of peer 678*5113495bSYour Name */ 679*5113495bSYour Name 680*5113495bSYour Name struct wlan_lmac_if_crypto_rx_ops { 681*5113495bSYour Name QDF_STATUS(*crypto_encap)(struct wlan_objmgr_vdev *vdev, 682*5113495bSYour Name qdf_nbuf_t wbuf, uint8_t *macaddr, 683*5113495bSYour Name uint8_t encapdone); 684*5113495bSYour Name QDF_STATUS(*crypto_decap)(struct wlan_objmgr_vdev *vdev, 685*5113495bSYour Name qdf_nbuf_t wbuf, uint8_t *macaddr, 686*5113495bSYour Name uint8_t tid); 687*5113495bSYour Name QDF_STATUS(*crypto_enmic)(struct wlan_objmgr_vdev *vdev, 688*5113495bSYour Name qdf_nbuf_t wbuf, uint8_t *macaddr, 689*5113495bSYour Name uint8_t encapdone); 690*5113495bSYour Name QDF_STATUS(*crypto_demic)(struct wlan_objmgr_vdev *vdev, 691*5113495bSYour Name qdf_nbuf_t wbuf, uint8_t *macaddr, 692*5113495bSYour Name uint8_t tid, uint8_t keyid); 693*5113495bSYour Name QDF_STATUS(*set_peer_wep_keys)(struct wlan_objmgr_vdev *vdev, 694*5113495bSYour Name struct wlan_objmgr_peer *peer); 695*5113495bSYour Name QDF_STATUS (*get_rxpn)(struct wlan_objmgr_vdev *vdev, 696*5113495bSYour Name uint8_t *macaddr, uint16_t keyix); 697*5113495bSYour Name }; 698*5113495bSYour Name 699*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_ENCAP(crypto_rx_ops) \ 700*5113495bSYour Name (crypto_rx_ops->crypto_encap) 701*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_DECAP(crypto_rx_ops) \ 702*5113495bSYour Name (crypto_rx_ops->crypto_decap) 703*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_ENMIC(crypto_rx_ops) \ 704*5113495bSYour Name (crypto_rx_ops->crypto_enmic) 705*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_DEMIC(crypto_rx_ops) \ 706*5113495bSYour Name (crypto_rx_ops->crypto_demic) 707*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_SET_PEER_WEP_KEYS(crypto_rx_ops) \ 708*5113495bSYour Name (crypto_rx_ops->set_peer_wep_keys) 709*5113495bSYour Name #define WLAN_CRYPTO_RX_OPS_GET_RXPN(crypto_rx_ops) \ 710*5113495bSYour Name ((crypto_rx_ops)->get_rxpn) 711*5113495bSYour Name 712*5113495bSYour Name #define WLAN_CRYPTO_IS_WPA_WPA2(akm) \ 713*5113495bSYour Name (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X) || \ 714*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK) || \ 715*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X) || \ 716*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_PSK) || \ 717*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SHA256) || \ 718*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK_SHA256) || \ 719*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WPS) || \ 720*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WAPI_PSK) || \ 721*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_WAPI_CERT) || \ 722*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_CCKM) || \ 723*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_OSEN) || \ 724*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B) || \ 725*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA256) || \ 726*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA384) || \ 727*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA256) || \ 728*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA384) || \ 729*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_PSK_SHA384) || \ 730*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK_SHA384)) 731*5113495bSYour Name 732*5113495bSYour Name #define WLAN_CRYPTO_IS_WPA2(akm) \ 733*5113495bSYour Name (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK) || \ 734*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_PSK) || \ 735*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK_SHA256) || \ 736*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_PSK_SHA384) || \ 737*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_PSK_SHA384)) 738*5113495bSYour Name 739*5113495bSYour Name #define WLAN_CRYPTO_IS_WPA3(akm) \ 740*5113495bSYour Name (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE) || \ 741*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_SAE) || \ 742*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192) || \ 743*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_OWE) || \ 744*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_DPP) || \ 745*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384) || \ 746*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE_EXT_KEY) || \ 747*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_SAE_EXT_KEY)) 748*5113495bSYour Name 749*5113495bSYour Name #define WLAN_CRYPTO_IS_AKM_ENTERPRISE(akm) \ 750*5113495bSYour Name (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X) || \ 751*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SHA256) || \ 752*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B) || \ 753*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X) || \ 754*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_IEEE8021X_SHA384) || \ 755*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_IEEE8021X_SUITE_B_192) || \ 756*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA256) || \ 757*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FILS_SHA384) || \ 758*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA256) || \ 759*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_FILS_SHA384)) 760*5113495bSYour Name 761*5113495bSYour Name #define WLAN_CRYPTO_IS_AKM_SAE(akm) \ 762*5113495bSYour Name (QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE) || \ 763*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_SAE) || \ 764*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_SAE_EXT_KEY) || \ 765*5113495bSYour Name QDF_HAS_PARAM(akm, WLAN_CRYPTO_KEY_MGMT_FT_SAE_EXT_KEY)) 766*5113495bSYour Name #endif /* end of _WLAN_CRYPTO_GLOBAL_DEF_H_ */ 767