xref: /wlan-driver/qca-wifi-host-cmn/umac/cmn_services/crypto/inc/wlan_crypto_global_def.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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