xref: /wlan-driver/qca-wifi-host-cmn/umac/cmn_services/crypto/inc/wlan_crypto_global_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc) !
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-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 APIs for crypto service
22*5113495bSYour Name  */
23*5113495bSYour Name #ifndef _WLAN_CRYPTO_GLOBAL_API_H_
24*5113495bSYour Name #define _WLAN_CRYPTO_GLOBAL_API_H_
25*5113495bSYour Name 
26*5113495bSYour Name #include "wlan_crypto_global_def.h"
27*5113495bSYour Name #include <qdf_crypto.h>
28*5113495bSYour Name 
29*5113495bSYour Name /**
30*5113495bSYour Name  * is_valid_keyix() - is key index valid
31*5113495bSYour Name  * @keyix: Key index
32*5113495bSYour Name  *
33*5113495bSYour Name  * Return: true or false
34*5113495bSYour Name  */
35*5113495bSYour Name bool is_valid_keyix(uint16_t keyix);
36*5113495bSYour Name 
37*5113495bSYour Name /**
38*5113495bSYour Name  * is_igtk() - is given key index for IGTK
39*5113495bSYour Name  * @keyix: Key index
40*5113495bSYour Name  *
41*5113495bSYour Name  * Return: true or false
42*5113495bSYour Name  */
43*5113495bSYour Name bool is_igtk(uint16_t keyix);
44*5113495bSYour Name 
45*5113495bSYour Name /**
46*5113495bSYour Name  * is_bigtk() - Is given key index for BIGTK
47*5113495bSYour Name  * @keyix: Key index
48*5113495bSYour Name  *
49*5113495bSYour Name  * Return: true or false
50*5113495bSYour Name  */
51*5113495bSYour Name bool is_bigtk(uint16_t keyix);
52*5113495bSYour Name 
53*5113495bSYour Name /**
54*5113495bSYour Name  * is_gtk() - Is given key index for GTK
55*5113495bSYour Name  * @keyix: Key index
56*5113495bSYour Name  *
57*5113495bSYour Name  * Return: true or false
58*5113495bSYour Name  */
59*5113495bSYour Name bool is_gtk(uint16_t keyix);
60*5113495bSYour Name 
61*5113495bSYour Name /**
62*5113495bSYour Name  * wlan_crypto_set_vdev_param() - called by ucfg to set crypto param
63*5113495bSYour Name  * @vdev: vdev
64*5113495bSYour Name  * @param: param to be set.
65*5113495bSYour Name  * @value: value
66*5113495bSYour Name  *
67*5113495bSYour Name  * This function gets called from ucfg to set param
68*5113495bSYour Name  *
69*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
70*5113495bSYour Name  */
71*5113495bSYour Name QDF_STATUS wlan_crypto_set_vdev_param(struct wlan_objmgr_vdev *vdev,
72*5113495bSYour Name 					wlan_crypto_param_type param,
73*5113495bSYour Name 					uint32_t value);
74*5113495bSYour Name 
75*5113495bSYour Name /**
76*5113495bSYour Name  * wlan_crypto_set_peer_param() - called by ucfg to set crypto param
77*5113495bSYour Name  *
78*5113495bSYour Name  * @peer: peer
79*5113495bSYour Name  * @param: param to be set.
80*5113495bSYour Name  * @value: value
81*5113495bSYour Name  *
82*5113495bSYour Name  * This function gets called from ucfg to set param
83*5113495bSYour Name  *
84*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
85*5113495bSYour Name  */
86*5113495bSYour Name QDF_STATUS wlan_crypto_set_peer_param(struct wlan_objmgr_peer *peer,
87*5113495bSYour Name 						wlan_crypto_param_type param,
88*5113495bSYour Name 						uint32_t value);
89*5113495bSYour Name 
90*5113495bSYour Name /**
91*5113495bSYour Name  * wlan_crypto_get_param() - called by ucfg to get crypto param
92*5113495bSYour Name  * @vdev: vdev
93*5113495bSYour Name  * @param: param to be get.
94*5113495bSYour Name  *
95*5113495bSYour Name  * This function gets called from ucfg to get param
96*5113495bSYour Name  *
97*5113495bSYour Name  * Return: value or -1 for failure
98*5113495bSYour Name  */
99*5113495bSYour Name int32_t wlan_crypto_get_param(struct wlan_objmgr_vdev *vdev,
100*5113495bSYour Name 					wlan_crypto_param_type param);
101*5113495bSYour Name 
102*5113495bSYour Name /**
103*5113495bSYour Name  * wlan_crypto_get_peer_param() - called by ucfg to get crypto peer param
104*5113495bSYour Name  * @peer: peer
105*5113495bSYour Name  * @param: param to be get.
106*5113495bSYour Name  *
107*5113495bSYour Name  * This function gets called from ucfg to get peer param
108*5113495bSYour Name  *
109*5113495bSYour Name  * Return: value or -1 for failure
110*5113495bSYour Name  */
111*5113495bSYour Name int32_t wlan_crypto_get_peer_param(struct wlan_objmgr_peer *peer,
112*5113495bSYour Name 					wlan_crypto_param_type param);
113*5113495bSYour Name 
114*5113495bSYour Name /**
115*5113495bSYour Name  * wlan_crypto_is_htallowed() - called by ucfg to check if HT rates is allowed
116*5113495bSYour Name  * @vdev: Vdev
117*5113495bSYour Name  * @peer: Peer
118*5113495bSYour Name  *
119*5113495bSYour Name  * This function is called to check if HT rates is allowed
120*5113495bSYour Name  *
121*5113495bSYour Name  * Return: 0 for not allowed and +ve for allowed
122*5113495bSYour Name  */
123*5113495bSYour Name uint8_t wlan_crypto_is_htallowed(struct wlan_objmgr_vdev *vdev,
124*5113495bSYour Name 				 struct wlan_objmgr_peer *peer);
125*5113495bSYour Name 
126*5113495bSYour Name /**
127*5113495bSYour Name  * wlan_crypto_setkey() - called by ucfg to setkey
128*5113495bSYour Name  * @vdev: vdev
129*5113495bSYour Name  * @req_key: req_key with cipher type, key macaddress
130*5113495bSYour Name  *
131*5113495bSYour Name  * This function gets called from ucfg to sey key
132*5113495bSYour Name  *
133*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
134*5113495bSYour Name  */
135*5113495bSYour Name QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
136*5113495bSYour Name 					struct wlan_crypto_req_key *req_key);
137*5113495bSYour Name 
138*5113495bSYour Name /**
139*5113495bSYour Name  * wlan_crypto_getkey() - called by ucfg to get key
140*5113495bSYour Name  * @vdev: vdev
141*5113495bSYour Name  * @req_key: key value will be copied in this req_key
142*5113495bSYour Name  * @mac_addr: mac address of the peer for unicast key
143*5113495bSYour Name  *            or broadcast address if group key is requested.
144*5113495bSYour Name  *
145*5113495bSYour Name  * This function gets called from ucfg to get key
146*5113495bSYour Name  *
147*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
148*5113495bSYour Name  */
149*5113495bSYour Name QDF_STATUS wlan_crypto_getkey(struct wlan_objmgr_vdev *vdev,
150*5113495bSYour Name 					struct wlan_crypto_req_key *req_key,
151*5113495bSYour Name 					uint8_t *mac_addr);
152*5113495bSYour Name 
153*5113495bSYour Name /**
154*5113495bSYour Name  * wlan_crypto_delkey() - called by ucfg to delete key
155*5113495bSYour Name  * @vdev: vdev
156*5113495bSYour Name  * @macaddr: mac address of the peer for unicast key
157*5113495bSYour Name  *           or broadcast address if group key is deleted.
158*5113495bSYour Name  * @key_idx: key index to be deleted
159*5113495bSYour Name  *
160*5113495bSYour Name  * This function gets called from ucfg to delete key
161*5113495bSYour Name  *
162*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
163*5113495bSYour Name  */
164*5113495bSYour Name QDF_STATUS wlan_crypto_delkey(struct wlan_objmgr_vdev *vdev,
165*5113495bSYour Name 					uint8_t *macaddr,
166*5113495bSYour Name 					uint8_t key_idx);
167*5113495bSYour Name 
168*5113495bSYour Name /**
169*5113495bSYour Name  * wlan_crypto_default_key() - called by ucfg to set default tx key
170*5113495bSYour Name  * @vdev: vdev
171*5113495bSYour Name  * @macaddr: mac address of the peer for unicast key
172*5113495bSYour Name  *           or broadcast address if group key need to made default.
173*5113495bSYour Name  * @key_idx: key index to be made as default key
174*5113495bSYour Name  * @unicast: is key was unicast or group key.
175*5113495bSYour Name  *
176*5113495bSYour Name  * This function gets called from ucfg to set default key
177*5113495bSYour Name  *
178*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
179*5113495bSYour Name  */
180*5113495bSYour Name QDF_STATUS wlan_crypto_default_key(struct wlan_objmgr_vdev *vdev,
181*5113495bSYour Name 					uint8_t *macaddr,
182*5113495bSYour Name 					uint8_t key_idx,
183*5113495bSYour Name 					bool unicast);
184*5113495bSYour Name 
185*5113495bSYour Name /**
186*5113495bSYour Name  * wlan_crypto_encap() - called by mgmt for encap the frame based on cipher
187*5113495bSYour Name  * @vdev: vdev
188*5113495bSYour Name  * @wbuf: wbuf
189*5113495bSYour Name  * @macaddr: macaddr
190*5113495bSYour Name  * @encapdone: is encapdone already or not.
191*5113495bSYour Name  *
192*5113495bSYour Name  * This function gets called from mgmt txrx to encap frame.
193*5113495bSYour Name  *
194*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
195*5113495bSYour Name  */
196*5113495bSYour Name QDF_STATUS wlan_crypto_encap(struct wlan_objmgr_vdev *vdev,
197*5113495bSYour Name 					qdf_nbuf_t wbuf,
198*5113495bSYour Name 					uint8_t *macaddr,
199*5113495bSYour Name 					uint8_t encapdone);
200*5113495bSYour Name 
201*5113495bSYour Name /**
202*5113495bSYour Name  * wlan_crypto_decap() - called by mgmt for decap the frame based on cipher
203*5113495bSYour Name  * @vdev: vdev
204*5113495bSYour Name  * @wbuf: wbuf
205*5113495bSYour Name  * @macaddr: macaddr
206*5113495bSYour Name  * @tid: tid of the packet.
207*5113495bSYour Name  *
208*5113495bSYour Name  * This function gets called from mgmt txrx to decap frame.
209*5113495bSYour Name  *
210*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
211*5113495bSYour Name  */
212*5113495bSYour Name QDF_STATUS wlan_crypto_decap(struct wlan_objmgr_vdev *vdev,
213*5113495bSYour Name 					qdf_nbuf_t wbuf,
214*5113495bSYour Name 					uint8_t *macaddr,
215*5113495bSYour Name 					uint8_t tid);
216*5113495bSYour Name 
217*5113495bSYour Name /**
218*5113495bSYour Name  * wlan_crypto_enmic() - called by mgmt for adding mic in frame based on cipher
219*5113495bSYour Name  * @vdev: vdev
220*5113495bSYour Name  * @wbuf: wbuf
221*5113495bSYour Name  * @macaddr: macaddr
222*5113495bSYour Name  * @encapdone: is encapdone already or not.
223*5113495bSYour Name  *
224*5113495bSYour Name  * This function gets called from mgmt txrx to adding mic to the frame.
225*5113495bSYour Name  *
226*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
227*5113495bSYour Name  */
228*5113495bSYour Name QDF_STATUS wlan_crypto_enmic(struct wlan_objmgr_vdev *vdev,
229*5113495bSYour Name 					qdf_nbuf_t wbuf,
230*5113495bSYour Name 					uint8_t *macaddr,
231*5113495bSYour Name 					uint8_t encapdone);
232*5113495bSYour Name 
233*5113495bSYour Name /**
234*5113495bSYour Name  * wlan_crypto_demic() - called by mgmt for remove and check mic for
235*5113495bSYour Name  *                                    the frame based on cipher
236*5113495bSYour Name  * @vdev: vdev
237*5113495bSYour Name  * @wbuf: wbuf
238*5113495bSYour Name  * @macaddr: macaddr
239*5113495bSYour Name  * @tid: tid of the frame
240*5113495bSYour Name  * @keyid: keyid in the received frame
241*5113495bSYour Name  *
242*5113495bSYour Name  * This function gets called from mgmt txrx to decap frame.
243*5113495bSYour Name  *
244*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
245*5113495bSYour Name  */
246*5113495bSYour Name QDF_STATUS wlan_crypto_demic(struct wlan_objmgr_vdev *vdev,
247*5113495bSYour Name 			     qdf_nbuf_t wbuf,
248*5113495bSYour Name 			     uint8_t *macaddr,
249*5113495bSYour Name 			     uint8_t tid,
250*5113495bSYour Name 			     uint8_t keyid);
251*5113495bSYour Name 
252*5113495bSYour Name /**
253*5113495bSYour Name  * wlan_crypto_vdev_is_pmf_enabled() - called to check is pmf enabled in vdev
254*5113495bSYour Name  * @vdev: vdev
255*5113495bSYour Name  *
256*5113495bSYour Name  * This function gets called to check is pmf enabled or not in vdev.
257*5113495bSYour Name  *
258*5113495bSYour Name  * Return: true or false
259*5113495bSYour Name  */
260*5113495bSYour Name bool wlan_crypto_vdev_is_pmf_enabled(struct wlan_objmgr_vdev *vdev);
261*5113495bSYour Name 
262*5113495bSYour Name /**
263*5113495bSYour Name  * wlan_crypto_vdev_is_pmf_required() - called to check is pmf required in vdev
264*5113495bSYour Name  * @vdev: vdev
265*5113495bSYour Name  *
266*5113495bSYour Name  * This function gets called to check is pmf required or not in vdev.
267*5113495bSYour Name  *
268*5113495bSYour Name  * Return: true or false
269*5113495bSYour Name  */
270*5113495bSYour Name bool wlan_crypto_vdev_is_pmf_required(struct wlan_objmgr_vdev *vdev);
271*5113495bSYour Name 
272*5113495bSYour Name /**
273*5113495bSYour Name  * wlan_crypto_is_pmf_enabled() - called by mgmt txrx to check is pmf enabled
274*5113495bSYour Name  * @vdev: vdev
275*5113495bSYour Name  * @peer: peer
276*5113495bSYour Name  *
277*5113495bSYour Name  * This function gets called by mgmt txrx to check is pmf enabled or not.
278*5113495bSYour Name  *
279*5113495bSYour Name  * Return: true or false
280*5113495bSYour Name  */
281*5113495bSYour Name bool wlan_crypto_is_pmf_enabled(struct wlan_objmgr_vdev *vdev,
282*5113495bSYour Name 					struct wlan_objmgr_peer *peer);
283*5113495bSYour Name 
284*5113495bSYour Name /**
285*5113495bSYour Name  * wlan_crypto_is_key_valid() - called by mgmt txrx to check if key is valid
286*5113495bSYour Name  * @vdev: vdev
287*5113495bSYour Name  * @peer: peer
288*5113495bSYour Name  * @keyidx : key index
289*5113495bSYour Name  *
290*5113495bSYour Name  * This function gets called by mgmt txrx to check if key is valid
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: true or false
293*5113495bSYour Name  */
294*5113495bSYour Name bool wlan_crypto_is_key_valid(struct wlan_objmgr_vdev *vdev,
295*5113495bSYour Name 			      struct wlan_objmgr_peer *peer,
296*5113495bSYour Name 			      uint16_t keyidx);
297*5113495bSYour Name 
298*5113495bSYour Name /**
299*5113495bSYour Name  * wlan_crypto_add_mmie() - called by mgmt txrx to add mmie in frame
300*5113495bSYour Name  * @vdev: vdev
301*5113495bSYour Name  * @frm:  frame starting pointer
302*5113495bSYour Name  * @len: length of the frame
303*5113495bSYour Name  *
304*5113495bSYour Name  * This function gets called by mgmt txrx to add mmie in frame
305*5113495bSYour Name  *
306*5113495bSYour Name  * Return: end of frame or NULL in case failure
307*5113495bSYour Name  */
308*5113495bSYour Name uint8_t *wlan_crypto_add_mmie(struct wlan_objmgr_vdev *vdev,
309*5113495bSYour Name 					uint8_t *frm,
310*5113495bSYour Name 					uint32_t len);
311*5113495bSYour Name 
312*5113495bSYour Name /**
313*5113495bSYour Name  * wlan_crypto_is_mmie_valid() - called by mgmt txrx to check mmie of the frame
314*5113495bSYour Name  * @vdev: vdev
315*5113495bSYour Name  * @frm:  frame starting pointer
316*5113495bSYour Name  * @efrm: end of frame pointer
317*5113495bSYour Name  *
318*5113495bSYour Name  * This function gets called by mgmt txrx to check mmie of the frame
319*5113495bSYour Name  *
320*5113495bSYour Name  * Return: true or false
321*5113495bSYour Name  */
322*5113495bSYour Name bool wlan_crypto_is_mmie_valid(struct wlan_objmgr_vdev *vdev,
323*5113495bSYour Name 					uint8_t *frm,
324*5113495bSYour Name 					uint8_t *efrm);
325*5113495bSYour Name 
326*5113495bSYour Name /**
327*5113495bSYour Name  * wlan_crypto_wpaie_check() - called by mlme to check the wpaie
328*5113495bSYour Name  * @crypto_params: crypto params
329*5113495bSYour Name  * @frm: ie buffer
330*5113495bSYour Name  *
331*5113495bSYour Name  * This function gets called by mlme to check the contents of wpa is
332*5113495bSYour Name  * matching with given crypto params
333*5113495bSYour Name  *
334*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
335*5113495bSYour Name  */
336*5113495bSYour Name QDF_STATUS wlan_crypto_wpaie_check(struct wlan_crypto_params *crypto_params,
337*5113495bSYour Name 				   const uint8_t *frm);
338*5113495bSYour Name 
339*5113495bSYour Name /**
340*5113495bSYour Name  * wlan_crypto_rsnie_check() - called by mlme to check the rsnie
341*5113495bSYour Name  * @crypto_params: crypto params
342*5113495bSYour Name  * @frm: ie buffer
343*5113495bSYour Name  *
344*5113495bSYour Name  * This function gets called by mlme to check the contents of rsn is
345*5113495bSYour Name  * matching with given crypto params
346*5113495bSYour Name  *
347*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
348*5113495bSYour Name  */
349*5113495bSYour Name QDF_STATUS wlan_crypto_rsnie_check(struct wlan_crypto_params *crypto_params,
350*5113495bSYour Name 				   const uint8_t *frm);
351*5113495bSYour Name 
352*5113495bSYour Name /**
353*5113495bSYour Name  * wlan_crypto_rsnxie_check() - called by mlme to parse rsnx capabilities
354*5113495bSYour Name  * @crypto_params: crypto params
355*5113495bSYour Name  * @rsnxe: rsnx ie buffer
356*5113495bSYour Name  *
357*5113495bSYour Name  * This function gets called by mlme to extract rsnx capabilities
358*5113495bSYour Name  *
359*5113495bSYour Name  * Return: None
360*5113495bSYour Name  */
361*5113495bSYour Name void wlan_crypto_rsnxie_check(struct wlan_crypto_params *crypto_params,
362*5113495bSYour Name 			      const uint8_t *rsnxe);
363*5113495bSYour Name 
364*5113495bSYour Name /**
365*5113495bSYour Name  * wlan_crypto_build_wpaie() - called by mlme to build wpaie
366*5113495bSYour Name  * @vdev: vdev
367*5113495bSYour Name  * @iebuf: ie buffer
368*5113495bSYour Name  *
369*5113495bSYour Name  * This function gets called by mlme to build wpaie from given vdev
370*5113495bSYour Name  *
371*5113495bSYour Name  * Return: end of buffer
372*5113495bSYour Name  */
373*5113495bSYour Name uint8_t *wlan_crypto_build_wpaie(struct wlan_objmgr_vdev *vdev,
374*5113495bSYour Name 					uint8_t *iebuf);
375*5113495bSYour Name 
376*5113495bSYour Name /**
377*5113495bSYour Name  * wlan_crypto_build_rsnie_with_pmksa() - called by mlme to build rsnie
378*5113495bSYour Name  * @vdev: vdev
379*5113495bSYour Name  * @iebuf: ie buffer
380*5113495bSYour Name  * @pmksa: pmksa struct
381*5113495bSYour Name  *
382*5113495bSYour Name  * This function gets called by mlme to build rsnie from given vdev
383*5113495bSYour Name  *
384*5113495bSYour Name  * Return: end of buffer
385*5113495bSYour Name  */
386*5113495bSYour Name uint8_t *wlan_crypto_build_rsnie_with_pmksa(struct wlan_objmgr_vdev *vdev,
387*5113495bSYour Name 					    uint8_t *iebuf,
388*5113495bSYour Name 					    struct wlan_crypto_pmksa *pmksa);
389*5113495bSYour Name 
390*5113495bSYour Name /**
391*5113495bSYour Name  * wlan_crypto_build_rsnie() - called by mlme to build rsnie
392*5113495bSYour Name  * @vdev: vdev
393*5113495bSYour Name  * @iebuf: ie buffer
394*5113495bSYour Name  * @bssid: bssid mac address to add pmkid in rsnie
395*5113495bSYour Name  *
396*5113495bSYour Name  * This function gets called by mlme to build rsnie from given vdev
397*5113495bSYour Name  *
398*5113495bSYour Name  * Return: end of buffer
399*5113495bSYour Name  */
400*5113495bSYour Name uint8_t *wlan_crypto_build_rsnie(struct wlan_objmgr_vdev *vdev,
401*5113495bSYour Name 					uint8_t *iebuf,
402*5113495bSYour Name 					struct qdf_mac_addr *bssid);
403*5113495bSYour Name 
404*5113495bSYour Name /**
405*5113495bSYour Name  * wlan_crypto_wapiie_check() - called by mlme to check the wapiie
406*5113495bSYour Name  * @crypto_params: crypto params
407*5113495bSYour Name  * @frm: ie buffer
408*5113495bSYour Name  *
409*5113495bSYour Name  * This function gets called by mlme to check the contents of wapi is
410*5113495bSYour Name  * matching with given crypto params
411*5113495bSYour Name  *
412*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
413*5113495bSYour Name  */
414*5113495bSYour Name QDF_STATUS wlan_crypto_wapiie_check(struct wlan_crypto_params *crypto_params,
415*5113495bSYour Name 				    const uint8_t *frm);
416*5113495bSYour Name 
417*5113495bSYour Name /**
418*5113495bSYour Name  * wlan_crypto_build_wapiie() - called by mlme to build wapi ie
419*5113495bSYour Name  * @vdev: vdev
420*5113495bSYour Name  * @iebuf: ie buffer
421*5113495bSYour Name  *
422*5113495bSYour Name  * This function gets called by mlme to build wapi ie from given vdev
423*5113495bSYour Name  *
424*5113495bSYour Name  * Return: end of buffer
425*5113495bSYour Name  */
426*5113495bSYour Name uint8_t *wlan_crypto_build_wapiie(struct wlan_objmgr_vdev *vdev,
427*5113495bSYour Name 					uint8_t *iebuf);
428*5113495bSYour Name 
429*5113495bSYour Name /**
430*5113495bSYour Name  * wlan_crypto_rsn_info() - check is given params matching with vdev params.
431*5113495bSYour Name  * @vdev: vdev
432*5113495bSYour Name  * @crypto_params: crypto params
433*5113495bSYour Name  *
434*5113495bSYour Name  * This function gets called by mlme to check is given params matching with
435*5113495bSYour Name  * vdev params.
436*5113495bSYour Name  *
437*5113495bSYour Name  * Return: true success or false for failure.
438*5113495bSYour Name  */
439*5113495bSYour Name bool wlan_crypto_rsn_info(struct wlan_objmgr_vdev *vdev,
440*5113495bSYour Name 				struct wlan_crypto_params *crypto_params);
441*5113495bSYour Name 
442*5113495bSYour Name /**
443*5113495bSYour Name  * wlan_crypto_pn_check() - called by data patch for PN check
444*5113495bSYour Name  * @vdev: vdev
445*5113495bSYour Name  * @wbuf: wbuf
446*5113495bSYour Name  *
447*5113495bSYour Name  * This function gets called by data patch for PN check
448*5113495bSYour Name  *
449*5113495bSYour Name  * Return: QDF_STATUS
450*5113495bSYour Name  */
451*5113495bSYour Name QDF_STATUS wlan_crypto_pn_check(struct wlan_objmgr_vdev *vdev,
452*5113495bSYour Name 					qdf_nbuf_t wbuf);
453*5113495bSYour Name 
454*5113495bSYour Name /**
455*5113495bSYour Name  * wlan_crypto_vdev_get_crypto_params() - called by mlme to get crypto params
456*5113495bSYour Name  * @vdev:vdev
457*5113495bSYour Name  *
458*5113495bSYour Name  * This function gets called by mlme to get crypto params
459*5113495bSYour Name  *
460*5113495bSYour Name  * Return: wlan_crypto_params or NULL in case of failure
461*5113495bSYour Name  */
462*5113495bSYour Name struct wlan_crypto_params *wlan_crypto_vdev_get_crypto_params(
463*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev);
464*5113495bSYour Name 
465*5113495bSYour Name /**
466*5113495bSYour Name  * wlan_crypto_peer_get_crypto_params() - called by mlme to get crypto params
467*5113495bSYour Name  * @peer:peer
468*5113495bSYour Name  *
469*5113495bSYour Name  * This function gets called by mlme to get crypto params
470*5113495bSYour Name  *
471*5113495bSYour Name  * Return: wlan_crypto_params or NULL in case of failure
472*5113495bSYour Name  */
473*5113495bSYour Name struct wlan_crypto_params *wlan_crypto_peer_get_crypto_params(
474*5113495bSYour Name 						struct wlan_objmgr_peer *peer);
475*5113495bSYour Name 
476*5113495bSYour Name /**
477*5113495bSYour Name  * wlan_crypto_set_peer_wep_keys() - set wep keys into peer entries
478*5113495bSYour Name  * @vdev:vdev
479*5113495bSYour Name  * @peer:peer
480*5113495bSYour Name  *
481*5113495bSYour Name  * This function gets called by mlme, when auth frame is received.
482*5113495bSYour Name  * this helps in setting wep keys into peer data structure.
483*5113495bSYour Name  *
484*5113495bSYour Name  * Return: QDF_STATUS
485*5113495bSYour Name  */
486*5113495bSYour Name QDF_STATUS wlan_crypto_set_peer_wep_keys(struct wlan_objmgr_vdev *vdev,
487*5113495bSYour Name 					struct wlan_objmgr_peer *peer);
488*5113495bSYour Name 
489*5113495bSYour Name /**
490*5113495bSYour Name  * wlan_crypto_register_crypto_rx_ops() - set crypto_rx_ops
491*5113495bSYour Name  * @crypto_rx_ops: crypto_rx_ops
492*5113495bSYour Name  *
493*5113495bSYour Name  * This function gets called by object manager to register crypto rx ops.
494*5113495bSYour Name  *
495*5113495bSYour Name  * Return: QDF_STATUS
496*5113495bSYour Name  */
497*5113495bSYour Name QDF_STATUS wlan_crypto_register_crypto_rx_ops(
498*5113495bSYour Name 			struct wlan_lmac_if_crypto_rx_ops *crypto_rx_ops);
499*5113495bSYour Name 
500*5113495bSYour Name /**
501*5113495bSYour Name  * wlan_crypto_get_crypto_rx_ops() - get crypto_rx_ops from psoc
502*5113495bSYour Name  * @psoc: psoc
503*5113495bSYour Name  *
504*5113495bSYour Name  * This function gets called by umac to get the crypto_rx_ops
505*5113495bSYour Name  *
506*5113495bSYour Name  * Return: crypto_rx_ops
507*5113495bSYour Name  */
508*5113495bSYour Name struct wlan_lmac_if_crypto_rx_ops *wlan_crypto_get_crypto_rx_ops(
509*5113495bSYour Name 			struct wlan_objmgr_psoc *psoc);
510*5113495bSYour Name 
511*5113495bSYour Name /**
512*5113495bSYour Name  * wlan_crypto_vdev_has_auth_mode() - check authmode for vdev
513*5113495bSYour Name  * @vdev: vdev
514*5113495bSYour Name  * @authmode: authmode value to be checked
515*5113495bSYour Name  *
516*5113495bSYour Name  * This function checks if authmode passed is set in vdev or not
517*5113495bSYour Name  *
518*5113495bSYour Name  * Return: true or false
519*5113495bSYour Name  */
520*5113495bSYour Name bool wlan_crypto_vdev_has_auth_mode(struct wlan_objmgr_vdev *vdev,
521*5113495bSYour Name 					wlan_crypto_auth_mode authmode);
522*5113495bSYour Name 
523*5113495bSYour Name /**
524*5113495bSYour Name  * wlan_crypto_peer_has_auth_mode() - check authmode for peer
525*5113495bSYour Name  * @peer: peer
526*5113495bSYour Name  * @authvalue: authvalue to be checked
527*5113495bSYour Name  *
528*5113495bSYour Name  * This function check is authvalue passed is set in peer or not
529*5113495bSYour Name  *
530*5113495bSYour Name  * Return: true or false
531*5113495bSYour Name  */
532*5113495bSYour Name bool wlan_crypto_peer_has_auth_mode(struct wlan_objmgr_peer *peer,
533*5113495bSYour Name 					wlan_crypto_auth_mode authvalue);
534*5113495bSYour Name 
535*5113495bSYour Name /**
536*5113495bSYour Name  * wlan_crypto_vdev_has_ucastcipher() - check ucastcipher for vdev
537*5113495bSYour Name  * @vdev: vdev
538*5113495bSYour Name  * @ucastcipher: ucastcipher to be checked
539*5113495bSYour Name  *
540*5113495bSYour Name  * This function check is ucastcipher passed is set in vdev or not
541*5113495bSYour Name  *
542*5113495bSYour Name  * Return: true or false
543*5113495bSYour Name  */
544*5113495bSYour Name bool wlan_crypto_vdev_has_ucastcipher(struct wlan_objmgr_vdev *vdev,
545*5113495bSYour Name 					wlan_crypto_cipher_type ucastcipher);
546*5113495bSYour Name 
547*5113495bSYour Name /**
548*5113495bSYour Name  * wlan_crypto_peer_has_ucastcipher() - check ucastcipher for peer
549*5113495bSYour Name  * @peer: peer
550*5113495bSYour Name  * @ucastcipher: ucastcipher to be checked
551*5113495bSYour Name  *
552*5113495bSYour Name  * This function check is ucastcipher passed is set in peer or not
553*5113495bSYour Name  *
554*5113495bSYour Name  * Return: true or false
555*5113495bSYour Name  */
556*5113495bSYour Name bool wlan_crypto_peer_has_ucastcipher(struct wlan_objmgr_peer *peer,
557*5113495bSYour Name 					wlan_crypto_cipher_type ucastcipher);
558*5113495bSYour Name 
559*5113495bSYour Name 
560*5113495bSYour Name /**
561*5113495bSYour Name  * wlan_crypto_vdev_has_mcastcipher() - check mcastcipher for vdev
562*5113495bSYour Name  * @vdev: vdev
563*5113495bSYour Name  * @mcastcipher: mcastcipher to be checked
564*5113495bSYour Name  *
565*5113495bSYour Name  * This function check is mcastcipher passed is set in vdev or not
566*5113495bSYour Name  *
567*5113495bSYour Name  * Return: true or false
568*5113495bSYour Name  */
569*5113495bSYour Name bool wlan_crypto_vdev_has_mcastcipher(struct wlan_objmgr_vdev *vdev,
570*5113495bSYour Name 					wlan_crypto_cipher_type mcastcipher);
571*5113495bSYour Name 
572*5113495bSYour Name /**
573*5113495bSYour Name  * wlan_crypto_peer_has_mcastcipher() - check mcastcipher for peer
574*5113495bSYour Name  * @peer: peer
575*5113495bSYour Name  * @mcastcipher: mcastcipher to be checked
576*5113495bSYour Name  *
577*5113495bSYour Name  * This function check is mcastcipher passed is set in peer or not
578*5113495bSYour Name  *
579*5113495bSYour Name  * Return: true or false
580*5113495bSYour Name  */
581*5113495bSYour Name bool wlan_crypto_peer_has_mcastcipher(struct wlan_objmgr_peer *peer,
582*5113495bSYour Name 					wlan_crypto_cipher_type mcastcipher);
583*5113495bSYour Name 
584*5113495bSYour Name /**
585*5113495bSYour Name  * wlan_crypto_vdev_has_mgmtcipher() - check mgmtcipher for vdev
586*5113495bSYour Name  * @vdev: vdev
587*5113495bSYour Name  * @mgmtcipher: mgmtcipher to be checked
588*5113495bSYour Name  *
589*5113495bSYour Name  * This function checks any one of mgmtciphers are supported by vdev or not.
590*5113495bSYour Name  *
591*5113495bSYour Name  * Return: true or false
592*5113495bSYour Name  */
593*5113495bSYour Name bool wlan_crypto_vdev_has_mgmtcipher(struct wlan_objmgr_vdev *vdev,
594*5113495bSYour Name 				     uint32_t mgmtcipher);
595*5113495bSYour Name 
596*5113495bSYour Name /**
597*5113495bSYour Name  * wlan_crypto_peer_has_mgmtcipher() - check mgmtcipher for peer
598*5113495bSYour Name  * @peer: peer
599*5113495bSYour Name  * @mgmtcipher: mgmtcipher to be checked
600*5113495bSYour Name  *
601*5113495bSYour Name  * This function checks any one of mgmtciphers are supported by peer or not.
602*5113495bSYour Name  *
603*5113495bSYour Name  * Return: true or false
604*5113495bSYour Name  */
605*5113495bSYour Name bool wlan_crypto_peer_has_mgmtcipher(struct wlan_objmgr_peer *peer,
606*5113495bSYour Name 				     uint32_t mgmtcipher);
607*5113495bSYour Name 
608*5113495bSYour Name /**
609*5113495bSYour Name  * wlan_crypto_get_key_type() - get keytype
610*5113495bSYour Name  * @key: key
611*5113495bSYour Name  *
612*5113495bSYour Name  * This function gets keytype from key
613*5113495bSYour Name  *
614*5113495bSYour Name  * Return: keytype
615*5113495bSYour Name  */
616*5113495bSYour Name wlan_crypto_cipher_type wlan_crypto_get_key_type(struct wlan_crypto_key *key);
617*5113495bSYour Name 
618*5113495bSYour Name /**
619*5113495bSYour Name  * wlan_crypto_vdev_getkey() - get key from vdev
620*5113495bSYour Name  * @vdev: vdev
621*5113495bSYour Name  * @keyix: keyix
622*5113495bSYour Name  *
623*5113495bSYour Name  * This function gets key from vdev
624*5113495bSYour Name  *
625*5113495bSYour Name  * Return: key or NULL
626*5113495bSYour Name  */
627*5113495bSYour Name struct wlan_crypto_key *wlan_crypto_vdev_getkey(struct wlan_objmgr_vdev *vdev,
628*5113495bSYour Name 						uint16_t keyix);
629*5113495bSYour Name 
630*5113495bSYour Name /**
631*5113495bSYour Name  * wlan_crypto_peer_getkey() - get key from peer
632*5113495bSYour Name  * @peer: peer
633*5113495bSYour Name  * @keyix: keyix
634*5113495bSYour Name  *
635*5113495bSYour Name  * This function gets key from peer
636*5113495bSYour Name  *
637*5113495bSYour Name  * Return: key or NULL
638*5113495bSYour Name  */
639*5113495bSYour Name struct wlan_crypto_key *wlan_crypto_peer_getkey(struct wlan_objmgr_peer *peer,
640*5113495bSYour Name 						uint16_t keyix);
641*5113495bSYour Name 
642*5113495bSYour Name /**
643*5113495bSYour Name  * wlan_crypto_get_peer_fils_aead() - Get peer fils aead set flag
644*5113495bSYour Name  * @peer: Peer object
645*5113495bSYour Name  *
646*5113495bSYour Name  * This function returns the peer fils aead set flag value.
647*5113495bSYour Name  *
648*5113495bSYour Name  * Return: 1 for enabled, 0 for disabled
649*5113495bSYour Name  */
650*5113495bSYour Name uint8_t wlan_crypto_get_peer_fils_aead(struct wlan_objmgr_peer *peer);
651*5113495bSYour Name 
652*5113495bSYour Name /**
653*5113495bSYour Name  * wlan_crypto_set_peer_fils_aead() - Set peer fils aead set flag
654*5113495bSYour Name  * @peer: Peer object
655*5113495bSYour Name  * @value: Value to set the flag
656*5113495bSYour Name  *
657*5113495bSYour Name  * This function set the peer fils aead set flag once FILS AUTH received.
658*5113495bSYour Name  *
659*5113495bSYour Name  * Return: None
660*5113495bSYour Name  */
661*5113495bSYour Name void wlan_crypto_set_peer_fils_aead(
662*5113495bSYour Name 			struct wlan_objmgr_peer *peer, uint8_t value);
663*5113495bSYour Name 
664*5113495bSYour Name /**
665*5113495bSYour Name  * wlan_crypto_get_key_header() - get header length
666*5113495bSYour Name  * @key: key
667*5113495bSYour Name  *
668*5113495bSYour Name  * This function gets header length based on keytype
669*5113495bSYour Name  *
670*5113495bSYour Name  * Return: header length
671*5113495bSYour Name  */
672*5113495bSYour Name uint8_t wlan_crypto_get_key_header(struct wlan_crypto_key *key);
673*5113495bSYour Name 
674*5113495bSYour Name /**
675*5113495bSYour Name  * wlan_crypto_get_key_trailer() - get cipher trailer length
676*5113495bSYour Name  * @key: key
677*5113495bSYour Name  *
678*5113495bSYour Name  * This function gets cipher trailer length based on keytype
679*5113495bSYour Name  *
680*5113495bSYour Name  * Return: cipher trailer length
681*5113495bSYour Name  */
682*5113495bSYour Name uint8_t wlan_crypto_get_key_trailer(struct wlan_crypto_key *key);
683*5113495bSYour Name 
684*5113495bSYour Name /**
685*5113495bSYour Name  * wlan_crypto_get_key_miclen() - get cipher miclen length
686*5113495bSYour Name  * @key: key
687*5113495bSYour Name  *
688*5113495bSYour Name  * This function gets cipher miclen length based on keytype
689*5113495bSYour Name  *
690*5113495bSYour Name  * Return: cipher miclen length
691*5113495bSYour Name  */
692*5113495bSYour Name uint8_t wlan_crypto_get_key_miclen(struct wlan_crypto_key *key);
693*5113495bSYour Name 
694*5113495bSYour Name /**
695*5113495bSYour Name  * wlan_crypto_get_keyid() - get keyid from frame
696*5113495bSYour Name  * @data: frame
697*5113495bSYour Name  * @hdrlen: 802.11 header length
698*5113495bSYour Name  *
699*5113495bSYour Name  * This function parse frame and returns keyid
700*5113495bSYour Name  *
701*5113495bSYour Name  * Return: keyid
702*5113495bSYour Name  */
703*5113495bSYour Name uint16_t wlan_crypto_get_keyid(uint8_t *data, int hdrlen);
704*5113495bSYour Name 
705*5113495bSYour Name /**
706*5113495bSYour Name  * wlan_crypto_restore_keys() - restore crypto keys in hw keycache
707*5113495bSYour Name  * @vdev: vdev
708*5113495bSYour Name  *
709*5113495bSYour Name  * This function restores keys in hw keycache
710*5113495bSYour Name  *
711*5113495bSYour Name  * Return: void
712*5113495bSYour Name  */
713*5113495bSYour Name void wlan_crypto_restore_keys(struct wlan_objmgr_vdev *vdev);
714*5113495bSYour Name 
715*5113495bSYour Name /**
716*5113495bSYour Name  * wlan_crypto_check_rsn_match() - called by ucfg to check for RSN match
717*5113495bSYour Name  * @psoc: psoc pointer
718*5113495bSYour Name  * @vdev_id: vdev id
719*5113495bSYour Name  * @ie_ptr: pointer to IEs
720*5113495bSYour Name  * @ie_len: IE length
721*5113495bSYour Name  * @peer_crypto_params: return peer crypto parameters
722*5113495bSYour Name  *
723*5113495bSYour Name  * This function gets called from ucfg to check RSN match.
724*5113495bSYour Name  *
725*5113495bSYour Name  * Return: true or false
726*5113495bSYour Name  */
727*5113495bSYour Name bool wlan_crypto_check_rsn_match(struct wlan_objmgr_psoc *psoc,
728*5113495bSYour Name 				 uint8_t vdev_id, uint8_t *ie_ptr,
729*5113495bSYour Name 				 uint16_t ie_len, struct wlan_crypto_params *
730*5113495bSYour Name 				 peer_crypto_params);
731*5113495bSYour Name 
732*5113495bSYour Name /**
733*5113495bSYour Name  * wlan_crypto_check_wpa_match() - called by ucfg to check for WPA match
734*5113495bSYour Name  * @psoc: psoc pointer
735*5113495bSYour Name  * @vdev_id: vdev id
736*5113495bSYour Name  * @ie_ptr: pointer to IEs
737*5113495bSYour Name  * @ie_len: IE length
738*5113495bSYour Name  * @peer_crypto_params: return peer crypto parameters
739*5113495bSYour Name  *
740*5113495bSYour Name  * This function gets called from ucfg to check WPA match.
741*5113495bSYour Name  *
742*5113495bSYour Name  * Return: true or false
743*5113495bSYour Name  */
744*5113495bSYour Name bool wlan_crypto_check_wpa_match(struct wlan_objmgr_psoc *psoc,
745*5113495bSYour Name 				 uint8_t vdev_id, uint8_t *ie_ptr,
746*5113495bSYour Name 				 uint16_t ie_len, struct wlan_crypto_params *
747*5113495bSYour Name 				 peer_crypto_params);
748*5113495bSYour Name 
749*5113495bSYour Name /**
750*5113495bSYour Name  * wlan_crypto_parse_rsnxe_ie() - parse RSNXE IE
751*5113495bSYour Name  * @rsnxe_ie: RSNXE IE pointer
752*5113495bSYour Name  * @cap_len: pointer to hold len of ext capability
753*5113495bSYour Name  *
754*5113495bSYour Name  * Return: pointer to RSNXE capability or NULL
755*5113495bSYour Name  */
756*5113495bSYour Name const uint8_t *
757*5113495bSYour Name wlan_crypto_parse_rsnxe_ie(const uint8_t *rsnxe_ie, uint8_t *cap_len);
758*5113495bSYour Name 
759*5113495bSYour Name /**
760*5113495bSYour Name  * wlan_get_crypto_params_from_wapi_ie() - Function to get crypto params
761*5113495bSYour Name  * from wapi ie
762*5113495bSYour Name  * @crypto_params: return crypto parameters
763*5113495bSYour Name  * @ie_ptr: pointer to IEs
764*5113495bSYour Name  * @ie_len: IE length
765*5113495bSYour Name  *
766*5113495bSYour Name  * This function is used to get the crypto parameters from wapi ie
767*5113495bSYour Name  *
768*5113495bSYour Name  * Context: Any context.
769*5113495bSYour Name  * Return: QDF_STATUS
770*5113495bSYour Name  */
771*5113495bSYour Name #ifdef FEATURE_WLAN_WAPI
772*5113495bSYour Name QDF_STATUS
773*5113495bSYour Name wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params *crypto_params,
774*5113495bSYour Name 				    const uint8_t *ie_ptr, uint16_t ie_len);
775*5113495bSYour Name 
776*5113495bSYour Name #else
777*5113495bSYour Name static inline QDF_STATUS
wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params * crypto_params,const uint8_t * ie_ptr,uint16_t ie_len)778*5113495bSYour Name wlan_get_crypto_params_from_wapi_ie(struct wlan_crypto_params *crypto_params,
779*5113495bSYour Name 				    const uint8_t *ie_ptr, uint16_t ie_len)
780*5113495bSYour Name {
781*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
782*5113495bSYour Name }
783*5113495bSYour Name #endif
784*5113495bSYour Name 
785*5113495bSYour Name /**
786*5113495bSYour Name  * wlan_get_crypto_params_from_wpa_ie() - Function to get crypto params
787*5113495bSYour Name  * from wpa ie
788*5113495bSYour Name  * @crypto_params: return crypto parameters
789*5113495bSYour Name  * @ie_ptr: pointer to IEs
790*5113495bSYour Name  * @ie_len: IE length
791*5113495bSYour Name  *
792*5113495bSYour Name  * This function is used to get the crypto parameters from wpa ie
793*5113495bSYour Name  *
794*5113495bSYour Name  * Context: Any context.
795*5113495bSYour Name  * Return: QDF_STATUS
796*5113495bSYour Name  */
797*5113495bSYour Name QDF_STATUS
798*5113495bSYour Name wlan_get_crypto_params_from_wpa_ie(struct wlan_crypto_params *crypto_params,
799*5113495bSYour Name 				   const uint8_t *ie_ptr, uint16_t ie_len);
800*5113495bSYour Name 
801*5113495bSYour Name /**
802*5113495bSYour Name  * wlan_get_crypto_params_from_rsn_ie() - Function to get crypto params
803*5113495bSYour Name  * from rsn ie
804*5113495bSYour Name  * @crypto_params: return crypto parameters
805*5113495bSYour Name  * @ie_ptr: pointer to IEs
806*5113495bSYour Name  * @ie_len: IE length
807*5113495bSYour Name  *
808*5113495bSYour Name  * This function is used to get the crypto parameters from rsn ie
809*5113495bSYour Name  *
810*5113495bSYour Name  * Context: Any context.
811*5113495bSYour Name  * Return: QDF_STATUS
812*5113495bSYour Name  */
813*5113495bSYour Name QDF_STATUS
814*5113495bSYour Name wlan_get_crypto_params_from_rsn_ie(struct wlan_crypto_params *crypto_params,
815*5113495bSYour Name 				   const uint8_t *ie_ptr, uint16_t ie_len);
816*5113495bSYour Name 
817*5113495bSYour Name /**
818*5113495bSYour Name  * wlan_set_vdev_crypto_prarams_from_ie() - Sets vdev crypto params from IE info
819*5113495bSYour Name  * @vdev: vdev pointer
820*5113495bSYour Name  * @ie_ptr: pointer to IE
821*5113495bSYour Name  * @ie_len: IE length
822*5113495bSYour Name  *
823*5113495bSYour Name  * This function gets called from ucfg to set crypto params from IE data.
824*5113495bSYour Name  *
825*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS or error code
826*5113495bSYour Name  */
827*5113495bSYour Name QDF_STATUS wlan_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev,
828*5113495bSYour Name 						uint8_t *ie_ptr,
829*5113495bSYour Name 						uint16_t ie_len);
830*5113495bSYour Name #ifdef WLAN_CRYPTO_GCM_OS_DERIVATIVE
wlan_crypto_aes_gmac(const uint8_t * key,size_t key_len,uint8_t * iv,size_t iv_len,const uint8_t * aad,size_t aad_len,uint8_t * tag)831*5113495bSYour Name static inline int wlan_crypto_aes_gmac(const uint8_t *key, size_t key_len,
832*5113495bSYour Name 				       uint8_t *iv, size_t iv_len,
833*5113495bSYour Name 				       const uint8_t *aad, size_t aad_len,
834*5113495bSYour Name 				       uint8_t *tag)
835*5113495bSYour Name {
836*5113495bSYour Name 	return qdf_crypto_aes_gmac(key, key_len, iv, aad,
837*5113495bSYour Name 				   aad + AAD_LEN,
838*5113495bSYour Name 				   aad_len - AAD_LEN -
839*5113495bSYour Name 				   IEEE80211_MMIE_GMAC_MICLEN,
840*5113495bSYour Name 				   tag);
841*5113495bSYour Name }
842*5113495bSYour Name #endif
843*5113495bSYour Name #ifdef WLAN_CRYPTO_OMAC1_OS_DERIVATIVE
omac1_aes_128(const uint8_t * key,const uint8_t * data,size_t data_len,uint8_t * mac)844*5113495bSYour Name static inline int omac1_aes_128(const uint8_t *key, const uint8_t *data,
845*5113495bSYour Name 				size_t data_len, uint8_t *mac)
846*5113495bSYour Name {
847*5113495bSYour Name 	return qdf_crypto_aes_128_cmac(key, data, data_len, mac);
848*5113495bSYour Name }
849*5113495bSYour Name 
omac1_aes_256(const uint8_t * key,const uint8_t * data,size_t data_len,uint8_t * mac)850*5113495bSYour Name static inline int omac1_aes_256(const uint8_t *key, const uint8_t *data,
851*5113495bSYour Name 				size_t data_len, uint8_t *mac)
852*5113495bSYour Name {
853*5113495bSYour Name 	return 0;
854*5113495bSYour Name }
855*5113495bSYour Name #endif
856*5113495bSYour Name 
857*5113495bSYour Name /**
858*5113495bSYour Name  * ucfg_crypto_set_key_req() - Set key request to UCFG
859*5113495bSYour Name  * @vdev: vdev object
860*5113495bSYour Name  * @req: key request information
861*5113495bSYour Name  * @key_type: indicates the type of key to be set, unicast or group key
862*5113495bSYour Name  *
863*5113495bSYour Name  * Return: None
864*5113495bSYour Name  */
865*5113495bSYour Name QDF_STATUS ucfg_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
866*5113495bSYour Name 				   struct wlan_crypto_key *req,
867*5113495bSYour Name 				   enum wlan_crypto_key_type key_type);
868*5113495bSYour Name 
869*5113495bSYour Name /**
870*5113495bSYour Name  * wlan_crypto_get_default_key_idx() - Get the default key index
871*5113495bSYour Name  * @vdev: vdev object
872*5113495bSYour Name  * @igtk: denotes if the request is for igtk key type or not
873*5113495bSYour Name  *
874*5113495bSYour Name  * Return: Index of the requested key
875*5113495bSYour Name  */
876*5113495bSYour Name int8_t wlan_crypto_get_default_key_idx(struct wlan_objmgr_vdev *vdev,
877*5113495bSYour Name 				       bool igtk);
878*5113495bSYour Name 
879*5113495bSYour Name /**
880*5113495bSYour Name  * wlan_crypto_get_cipher() - Get the cipher type for the vdev
881*5113495bSYour Name  * @vdev: vdev object
882*5113495bSYour Name  * @pairwise: denotes if the request is for pairwise cipher or not
883*5113495bSYour Name  * @key_index: Index of the key whose cipher type has to be returned
884*5113495bSYour Name  *
885*5113495bSYour Name  * Return: enum wlan_crypto_cipher_type
886*5113495bSYour Name  */
887*5113495bSYour Name enum wlan_crypto_cipher_type
888*5113495bSYour Name wlan_crypto_get_cipher(struct wlan_objmgr_vdev *vdev,
889*5113495bSYour Name 		       bool pairwise, uint8_t key_index);
890*5113495bSYour Name 
891*5113495bSYour Name /**
892*5113495bSYour Name  * wlan_crypto_get_secure_akm_available() - Search the AKM bitmap to
893*5113495bSYour Name  * find the most secure AKM.
894*5113495bSYour Name  * @akm: Bitmap of available AKMs.
895*5113495bSYour Name  *
896*5113495bSYour Name  * Search in the decreasing order of AKM security and return the
897*5113495bSYour Name  * first matching AKM available in @akm bitmap.
898*5113495bSYour Name  *
899*5113495bSYour Name  * Return: enum wlan_crypto_key_mgmt
900*5113495bSYour Name  */
901*5113495bSYour Name wlan_crypto_key_mgmt wlan_crypto_get_secure_akm_available(uint32_t akm);
902*5113495bSYour Name #ifdef CRYPTO_SET_KEY_CONVERGED
903*5113495bSYour Name /**
904*5113495bSYour Name  * wlan_crypto_update_set_key_peer() - Update the peer for set key
905*5113495bSYour Name  * @vdev: vdev object
906*5113495bSYour Name  * @pairwise: denotes if the request is for pairwise cipher or not
907*5113495bSYour Name  * @key_index: Index of the key whose peer has to be set
908*5113495bSYour Name  * @peer_mac: MAC address of the peer
909*5113495bSYour Name  *
910*5113495bSYour Name  * Return: None
911*5113495bSYour Name  */
912*5113495bSYour Name void wlan_crypto_update_set_key_peer(struct wlan_objmgr_vdev *vdev,
913*5113495bSYour Name 				     bool pairwise, uint8_t key_index,
914*5113495bSYour Name 				     struct qdf_mac_addr *peer_mac);
915*5113495bSYour Name 
916*5113495bSYour Name /**
917*5113495bSYour Name  * wlan_crypto_validate_key_params() - validates key parameters
918*5113495bSYour Name  * @cipher: cipher type
919*5113495bSYour Name  * @key_index: the index of the key
920*5113495bSYour Name  * @key_len: key length
921*5113495bSYour Name  * @seq_len: sequence counter length
922*5113495bSYour Name  *
923*5113495bSYour Name  * Return: QDF_STATUS
924*5113495bSYour Name  */
925*5113495bSYour Name QDF_STATUS wlan_crypto_validate_key_params(enum wlan_crypto_cipher_type cipher,
926*5113495bSYour Name 					   uint8_t key_index, uint8_t key_len,
927*5113495bSYour Name 					   uint8_t seq_len);
928*5113495bSYour Name /**
929*5113495bSYour Name  * wlan_crypto_save_ml_sta_key - Allocate memory for ml sta key
930*5113495bSYour Name  * @psoc: psoc handler
931*5113495bSYour Name  * @key_index: key index
932*5113495bSYour Name  * @crypto_key: crypto key
933*5113495bSYour Name  * @link_addr: link addr
934*5113495bSYour Name  * @link_id: link id
935*5113495bSYour Name  *
936*5113495bSYour Name  * Return: zero on success
937*5113495bSYour Name  */
938*5113495bSYour Name QDF_STATUS
939*5113495bSYour Name wlan_crypto_save_ml_sta_key(struct wlan_objmgr_psoc *psoc,
940*5113495bSYour Name 			    uint8_t key_index,
941*5113495bSYour Name 			    struct wlan_crypto_key *crypto_key,
942*5113495bSYour Name 			    struct qdf_mac_addr *link_addr, uint8_t link_id);
943*5113495bSYour Name 
944*5113495bSYour Name /**
945*5113495bSYour Name  * wlan_crypto_save_key() - Allocate memory for storing key
946*5113495bSYour Name  * @vdev: vdev object
947*5113495bSYour Name  * @key_index: the index of the key that needs to be allocated
948*5113495bSYour Name  * @crypto_key: Pointer to crypto key
949*5113495bSYour Name  *
950*5113495bSYour Name  * Return: QDF_STATUS
951*5113495bSYour Name  */
952*5113495bSYour Name QDF_STATUS wlan_crypto_save_key(struct wlan_objmgr_vdev *vdev,
953*5113495bSYour Name 				uint8_t key_index,
954*5113495bSYour Name 				struct wlan_crypto_key *crypto_key);
955*5113495bSYour Name 
956*5113495bSYour Name /**
957*5113495bSYour Name  * wlan_crypto_get_ml_sta_link_key() - Get the stored key info
958*5113495bSYour Name  *						by link id
959*5113495bSYour Name  * @psoc: psoc handler
960*5113495bSYour Name  * @key_index: key index
961*5113495bSYour Name  * @link_addr: link address
962*5113495bSYour Name  * @link_id: link id
963*5113495bSYour Name  */
964*5113495bSYour Name struct wlan_crypto_key *wlan_crypto_get_ml_sta_link_key(
965*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
966*5113495bSYour Name 				uint8_t key_index,
967*5113495bSYour Name 				struct qdf_mac_addr *link_addr,
968*5113495bSYour Name 				uint8_t link_id);
969*5113495bSYour Name /**
970*5113495bSYour Name  * wlan_crypto_get_key() - Get the stored key information
971*5113495bSYour Name  * @vdev: vdev object
972*5113495bSYour Name  * @key_index: the index of the key that needs to be retrieved
973*5113495bSYour Name  *
974*5113495bSYour Name  * Return: Key material
975*5113495bSYour Name  */
976*5113495bSYour Name struct wlan_crypto_key *wlan_crypto_get_key(struct wlan_objmgr_vdev *vdev,
977*5113495bSYour Name 					    uint8_t key_index);
978*5113495bSYour Name 
979*5113495bSYour Name /**
980*5113495bSYour Name  * wlan_crypto_set_key_req() - Set key request
981*5113495bSYour Name  * @vdev: vdev object
982*5113495bSYour Name  * @req: key request information
983*5113495bSYour Name  * @key_type: indicates the type of key to be set, unicast or group key
984*5113495bSYour Name  *
985*5113495bSYour Name  * Return: QDF status
986*5113495bSYour Name  */
987*5113495bSYour Name QDF_STATUS wlan_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
988*5113495bSYour Name 				   struct wlan_crypto_key *req,
989*5113495bSYour Name 				   enum wlan_crypto_key_type key_type);
990*5113495bSYour Name 
991*5113495bSYour Name /**
992*5113495bSYour Name  * wlan_crypto_free_key() - Free the given key
993*5113495bSYour Name  * @crypto_key: pointer to the key
994*5113495bSYour Name  *
995*5113495bSYour Name  * This function frees keys stored in vdev crypto object.
996*5113495bSYour Name  *
997*5113495bSYour Name  * Return: None
998*5113495bSYour Name  */
999*5113495bSYour Name void wlan_crypto_free_key(struct wlan_crypto_keys *crypto_key);
1000*5113495bSYour Name 
1001*5113495bSYour Name /**
1002*5113495bSYour Name  * wlan_crypto_free_vdev_key() - Free keys for vdev
1003*5113495bSYour Name  * @vdev: vdev object
1004*5113495bSYour Name  *
1005*5113495bSYour Name  * This function frees keys stored in vdev crypto object.
1006*5113495bSYour Name  *
1007*5113495bSYour Name  * Return: None
1008*5113495bSYour Name  */
1009*5113495bSYour Name void wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev *vdev);
1010*5113495bSYour Name 
1011*5113495bSYour Name /**
1012*5113495bSYour Name  * wlan_crypto_reset_vdev_params() - Reset params for vdev
1013*5113495bSYour Name  * @vdev: vdev object
1014*5113495bSYour Name  *
1015*5113495bSYour Name  * This function reset params stored in vdev crypto object.
1016*5113495bSYour Name  *
1017*5113495bSYour Name  * Return: None
1018*5113495bSYour Name  */
1019*5113495bSYour Name void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev);
1020*5113495bSYour Name #else
wlan_crypto_update_set_key_peer(struct wlan_objmgr_vdev * vdev,bool pairwise,uint8_t key_index,struct qdf_mac_addr * peer_mac)1021*5113495bSYour Name static inline void wlan_crypto_update_set_key_peer(
1022*5113495bSYour Name 						struct wlan_objmgr_vdev *vdev,
1023*5113495bSYour Name 						bool pairwise,
1024*5113495bSYour Name 						uint8_t key_index,
1025*5113495bSYour Name 						struct qdf_mac_addr *peer_mac)
1026*5113495bSYour Name {
1027*5113495bSYour Name }
1028*5113495bSYour Name 
1029*5113495bSYour Name static inline QDF_STATUS
wlan_crypto_save_key(struct wlan_objmgr_vdev * vdev,uint8_t key_index,struct wlan_crypto_key * crypto_key)1030*5113495bSYour Name wlan_crypto_save_key(struct wlan_objmgr_vdev *vdev, uint8_t key_index,
1031*5113495bSYour Name 		     struct wlan_crypto_key *crypto_key)
1032*5113495bSYour Name {
1033*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1034*5113495bSYour Name }
1035*5113495bSYour Name 
1036*5113495bSYour Name static inline struct wlan_crypto_key *
wlan_crypto_get_key(struct wlan_objmgr_vdev * vdev,uint8_t key_index)1037*5113495bSYour Name wlan_crypto_get_key(struct wlan_objmgr_vdev *vdev, uint8_t key_index)
1038*5113495bSYour Name {
1039*5113495bSYour Name 	return NULL;
1040*5113495bSYour Name }
1041*5113495bSYour Name 
1042*5113495bSYour Name static inline
wlan_crypto_set_key_req(struct wlan_objmgr_vdev * vdev,struct wlan_crypto_key * req,enum wlan_crypto_key_type key_type)1043*5113495bSYour Name QDF_STATUS wlan_crypto_set_key_req(struct wlan_objmgr_vdev *vdev,
1044*5113495bSYour Name 				   struct wlan_crypto_key *req,
1045*5113495bSYour Name 				   enum wlan_crypto_key_type key_type)
1046*5113495bSYour Name {
1047*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1048*5113495bSYour Name }
1049*5113495bSYour Name 
wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev * vdev)1050*5113495bSYour Name static inline void wlan_crypto_free_vdev_key(struct wlan_objmgr_vdev *vdev)
1051*5113495bSYour Name {
1052*5113495bSYour Name }
1053*5113495bSYour Name 
wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev * vdev)1054*5113495bSYour Name static inline void wlan_crypto_reset_vdev_params(struct wlan_objmgr_vdev *vdev)
1055*5113495bSYour Name {
1056*5113495bSYour Name }
1057*5113495bSYour Name #endif /* CRYPTO_SET_KEY_CONVERGED */
1058*5113495bSYour Name 
1059*5113495bSYour Name /**
1060*5113495bSYour Name  * wlan_crypto_vdev_set_param() - Send vdev set param to firmware.
1061*5113495bSYour Name  * @psoc: Pointer to PSOC object
1062*5113495bSYour Name  * @vdev_id: vdev id
1063*5113495bSYour Name  * @param_id: Param id
1064*5113495bSYour Name  * @param_value: Param value
1065*5113495bSYour Name  *
1066*5113495bSYour Name  * Return: QDF_STATUS
1067*5113495bSYour Name  */
1068*5113495bSYour Name QDF_STATUS
1069*5113495bSYour Name wlan_crypto_vdev_set_param(struct wlan_objmgr_psoc *psoc, uint32_t vdev_id,
1070*5113495bSYour Name 			   uint32_t param_id, uint32_t param_value);
1071*5113495bSYour Name 
1072*5113495bSYour Name /**
1073*5113495bSYour Name  * wlan_crypto_get_peer_pmksa() - called to get pmksa based on pmksa parameter
1074*5113495bSYour Name  * @vdev: vdev
1075*5113495bSYour Name  * @pmksa: bssid
1076*5113495bSYour Name  *
1077*5113495bSYour Name  * This function is to get pmksa based on pmksa parameter
1078*5113495bSYour Name  *
1079*5113495bSYour Name  * Return: wlan_crypto_pmksa when match found else NULL.
1080*5113495bSYour Name  */
1081*5113495bSYour Name struct wlan_crypto_pmksa *
1082*5113495bSYour Name wlan_crypto_get_peer_pmksa(struct wlan_objmgr_vdev *vdev,
1083*5113495bSYour Name 			   struct wlan_crypto_pmksa *pmksa);
1084*5113495bSYour Name 
1085*5113495bSYour Name /**
1086*5113495bSYour Name  * wlan_crypto_get_pmksa() - called to get pmksa of bssid passed.
1087*5113495bSYour Name  * @vdev: vdev
1088*5113495bSYour Name  * @bssid: bssid
1089*5113495bSYour Name  *
1090*5113495bSYour Name  * This function gets called from to get pmksa for the bssid.
1091*5113495bSYour Name  *
1092*5113495bSYour Name  * Return: wlan_crypto_pmksa when match found else NULL.
1093*5113495bSYour Name  */
1094*5113495bSYour Name struct wlan_crypto_pmksa *
1095*5113495bSYour Name wlan_crypto_get_pmksa(struct wlan_objmgr_vdev *vdev,
1096*5113495bSYour Name 		      struct qdf_mac_addr *bssid);
1097*5113495bSYour Name 
1098*5113495bSYour Name /**
1099*5113495bSYour Name  * wlan_crypto_get_fils_pmksa() - Get the PMKSA for FILS
1100*5113495bSYour Name  * SSID, if the SSID and cache id matches
1101*5113495bSYour Name  * @vdev:     Pointer with VDEV object
1102*5113495bSYour Name  * @cache_id: Cache id
1103*5113495bSYour Name  * @ssid:     Pointer to ssid
1104*5113495bSYour Name  * @ssid_len: SSID length
1105*5113495bSYour Name  *
1106*5113495bSYour Name  * Return: PMKSA entry if the cache id and SSID matches
1107*5113495bSYour Name  */
1108*5113495bSYour Name struct wlan_crypto_pmksa *
1109*5113495bSYour Name wlan_crypto_get_fils_pmksa(struct wlan_objmgr_vdev *vdev,
1110*5113495bSYour Name 			   uint8_t *cache_id, uint8_t *ssid,
1111*5113495bSYour Name 			   uint8_t ssid_len);
1112*5113495bSYour Name 
1113*5113495bSYour Name /**
1114*5113495bSYour Name  * wlan_crypto_pmksa_flush() - called to flush saved pmksa
1115*5113495bSYour Name  * @crypto_params: crypto_params
1116*5113495bSYour Name  *
1117*5113495bSYour Name  * This function flush saved pmksa from crypto params.
1118*5113495bSYour Name  *
1119*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
1120*5113495bSYour Name  */
1121*5113495bSYour Name QDF_STATUS wlan_crypto_pmksa_flush(struct wlan_crypto_params *crypto_params);
1122*5113495bSYour Name 
1123*5113495bSYour Name /**
1124*5113495bSYour Name  * wlan_crypto_set_del_pmksa() - called by ucfg to set/delete PMKSA
1125*5113495bSYour Name  * @vdev: vdev
1126*5113495bSYour Name  * @pmksa: pmksa to be set/del.
1127*5113495bSYour Name  * @set: set(set=1) or del(set=0) pmksa from the list.
1128*5113495bSYour Name  *
1129*5113495bSYour Name  * This function gets called from ucfg to set or del pmksa.
1130*5113495bSYour Name  * when given pmksa is NULL and set is 0, it is for flush all entries.
1131*5113495bSYour Name  *
1132*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
1133*5113495bSYour Name  */
1134*5113495bSYour Name QDF_STATUS wlan_crypto_set_del_pmksa(struct wlan_objmgr_vdev *vdev,
1135*5113495bSYour Name 				     struct wlan_crypto_pmksa *pmksa,
1136*5113495bSYour Name 				     bool set);
1137*5113495bSYour Name 
1138*5113495bSYour Name /**
1139*5113495bSYour Name  * wlan_crypto_update_pmk_cache_ft() - Updates the mobility domain information
1140*5113495bSYour Name  * for a BSSID in the PMKSA Cache table.
1141*5113495bSYour Name  * @vdev: vdev
1142*5113495bSYour Name  * @pmksa: pmksa to be updated.
1143*5113495bSYour Name  *
1144*5113495bSYour Name  * This function gets called from ucfg to update pmksa with mdid.
1145*5113495bSYour Name  * And flush the matching mdid entries.
1146*5113495bSYour Name  *
1147*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - in case of success
1148*5113495bSYour Name  */
1149*5113495bSYour Name QDF_STATUS wlan_crypto_update_pmk_cache_ft(struct wlan_objmgr_vdev *vdev,
1150*5113495bSYour Name 					   struct wlan_crypto_pmksa *pmksa);
1151*5113495bSYour Name 
1152*5113495bSYour Name #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
1153*5113495bSYour Name /**
1154*5113495bSYour Name  * wlan_crypto_selective_clear_sae_single_pmk_entries() - Clear the PMK entries
1155*5113495bSYour Name  * for BSS which have the single PMK flag set other than the current connected
1156*5113495bSYour Name  * AP
1157*5113495bSYour Name  * @vdev:       Vdev
1158*5113495bSYour Name  * @conn_bssid: Connected bssid
1159*5113495bSYour Name  */
1160*5113495bSYour Name void
1161*5113495bSYour Name wlan_crypto_selective_clear_sae_single_pmk_entries(
1162*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid);
1163*5113495bSYour Name 
1164*5113495bSYour Name /**
1165*5113495bSYour Name  * wlan_crypto_set_sae_single_pmk_bss_cap() - Set the peer SAE single pmk
1166*5113495bSYour Name  * feature supported status
1167*5113495bSYour Name  * @vdev: Vdev
1168*5113495bSYour Name  * @bssid: BSSID for which the flag is to be set
1169*5113495bSYour Name  * @single_pmk_capable_bss: Flag to indicate Sae single pmk supported BSSID or
1170*5113495bSYour Name  * not
1171*5113495bSYour Name  */
1172*5113495bSYour Name void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
1173*5113495bSYour Name 					    struct qdf_mac_addr *bssid,
1174*5113495bSYour Name 					    bool single_pmk_capable_bss);
1175*5113495bSYour Name 
1176*5113495bSYour Name /**
1177*5113495bSYour Name  * wlan_crypto_set_sae_single_pmk_info() - Set the peer SAE single pmk info
1178*5113495bSYour Name  * @vdev: Vdev
1179*5113495bSYour Name  * @roam_sync_pmksa: pmk info for roamed AP
1180*5113495bSYour Name  */
1181*5113495bSYour Name void
1182*5113495bSYour Name wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
1183*5113495bSYour Name 				    struct wlan_crypto_pmksa *roam_sync_pmksa);
1184*5113495bSYour Name 
1185*5113495bSYour Name #else
1186*5113495bSYour Name static inline void
wlan_crypto_selective_clear_sae_single_pmk_entries(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * conn_bssid)1187*5113495bSYour Name wlan_crypto_selective_clear_sae_single_pmk_entries(
1188*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev, struct qdf_mac_addr *conn_bssid)
1189*5113495bSYour Name {
1190*5113495bSYour Name }
1191*5113495bSYour Name 
1192*5113495bSYour Name static inline
wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bssid,bool single_pmk_capable_bss)1193*5113495bSYour Name void wlan_crypto_set_sae_single_pmk_bss_cap(struct wlan_objmgr_vdev *vdev,
1194*5113495bSYour Name 					    struct qdf_mac_addr *bssid,
1195*5113495bSYour Name 					    bool single_pmk_capable_bss)
1196*5113495bSYour Name {
1197*5113495bSYour Name }
1198*5113495bSYour Name 
1199*5113495bSYour Name static inline void
wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev * vdev,struct wlan_crypto_pmksa * roam_sync_pmksa)1200*5113495bSYour Name wlan_crypto_set_sae_single_pmk_info(struct wlan_objmgr_vdev *vdev,
1201*5113495bSYour Name 				    struct wlan_crypto_pmksa *roam_sync_pmksa)
1202*5113495bSYour Name {
1203*5113495bSYour Name }
1204*5113495bSYour Name #endif
1205*5113495bSYour Name 
1206*5113495bSYour Name #if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
1207*5113495bSYour Name QDF_STATUS
1208*5113495bSYour Name wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc *psoc,
1209*5113495bSYour Name 			    struct wlan_crypto_ltf_keyseed_data *data);
1210*5113495bSYour Name #else
1211*5113495bSYour Name static inline QDF_STATUS
wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc * psoc,struct wlan_crypto_ltf_keyseed_data * data)1212*5113495bSYour Name wlan_crypto_set_ltf_keyseed(struct wlan_objmgr_psoc *psoc,
1213*5113495bSYour Name 			    struct wlan_crypto_ltf_keyseed_data *data)
1214*5113495bSYour Name {
1215*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1216*5113495bSYour Name }
1217*5113495bSYour Name #endif
1218*5113495bSYour Name 
1219*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
1220*5113495bSYour Name /**
1221*5113495bSYour Name  * wlan_crypto_create_fils_rik() - This API create rik using rrk coming from
1222*5113495bSYour Name  * supplicant.
1223*5113495bSYour Name  * @rrk: input rrk
1224*5113495bSYour Name  * @rrk_len: rrk length
1225*5113495bSYour Name  * @rik: Created rik
1226*5113495bSYour Name  * @rik_len: rik length to be filled
1227*5113495bSYour Name  *
1228*5113495bSYour Name  * rIK = KDF (K, S), where
1229*5113495bSYour Name  * K = rRK and
1230*5113495bSYour Name  * S = rIK Label + "\0" + cryptosuite + length
1231*5113495bSYour Name  * The rIK Label is the 8-bit ASCII string:
1232*5113495bSYour Name  * Re-authentication Integrity Key@ietf.org
1233*5113495bSYour Name  *
1234*5113495bSYour Name  * Return: QDF_STATUS
1235*5113495bSYour Name  */
1236*5113495bSYour Name QDF_STATUS wlan_crypto_create_fils_rik(uint8_t *rrk, uint8_t rrk_len,
1237*5113495bSYour Name 				       uint8_t *rik, uint32_t *rik_len);
1238*5113495bSYour Name /**
1239*5113495bSYour Name  * wlan_crypto_aquire_lock() - Acquire the crypto lock before crypto set/get
1240*5113495bSYour Name  */
1241*5113495bSYour Name void wlan_crypto_aquire_lock(void);
1242*5113495bSYour Name 
1243*5113495bSYour Name /**
1244*5113495bSYour Name  * wlan_crypto_release_lock() - Release the crypto lock after crypto set/get
1245*5113495bSYour Name  */
1246*5113495bSYour Name void wlan_crypto_release_lock(void);
1247*5113495bSYour Name #endif /* WLAN_FEATURE_FILS_SK */
1248*5113495bSYour Name 
1249*5113495bSYour Name /**
1250*5113495bSYour Name  * crypto_flush_entries - This API will flush crypto keys
1251*5113495bSYour Name  * @psoc: psoc handler
1252*5113495bSYour Name  *
1253*5113495bSYour Name  * Return: None
1254*5113495bSYour Name  */
1255*5113495bSYour Name void crypto_flush_entries(struct wlan_objmgr_psoc *psoc);
1256*5113495bSYour Name 
1257*5113495bSYour Name /**
1258*5113495bSYour Name  * ucfg_crypto_flush_entries - wrapper API for "crypto_flush_entries"
1259*5113495bSYour Name  * @psoc: psoc handler
1260*5113495bSYour Name  *
1261*5113495bSYour Name  * Return: None
1262*5113495bSYour Name  */
1263*5113495bSYour Name void ucfg_crypto_flush_entries(struct wlan_objmgr_psoc *psoc);
1264*5113495bSYour Name 
1265*5113495bSYour Name /**
1266*5113495bSYour Name  * ucfg_crypto_free_key_by_link_id - free key by link id
1267*5113495bSYour Name  * @psoc: psoc handler
1268*5113495bSYour Name  * @link_addr: link address
1269*5113495bSYour Name  * @link_id: link id
1270*5113495bSYour Name  *
1271*5113495bSYour Name  * Return: None
1272*5113495bSYour Name  */
1273*5113495bSYour Name void ucfg_crypto_free_key_by_link_id(struct wlan_objmgr_psoc *psoc,
1274*5113495bSYour Name 				     struct qdf_mac_addr *link_addr,
1275*5113495bSYour Name 				     uint8_t link_id);
1276*5113495bSYour Name #endif /* end of _WLAN_CRYPTO_GLOBAL_API_H_ */
1277