1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4 
5 /**
6  ***************************************************************************
7  * @file lac_sym_qat_hash_defs_lookup.c      Hash Definitions Lookup
8  *
9  * @ingroup LacHashDefsLookup
10  ***************************************************************************/
11 
12 /*
13 *******************************************************************************
14 * Include public/global header files
15 *******************************************************************************
16 */
17 
18 #include "cpa.h"
19 
20 /*
21 *******************************************************************************
22 * Include private header files
23 *******************************************************************************
24 */
25 #include "lac_common.h"
26 #include "icp_accel_devices.h"
27 #include "icp_adf_debug.h"
28 #include "icp_adf_transport.h"
29 #include "lac_sym.h"
30 #include "icp_qat_fw_la.h"
31 #include "lac_sym_qat_hash_defs_lookup.h"
32 #include "lac_sal_types_crypto.h"
33 #include "lac_sym_hash_defs.h"
34 
35 /* state size for xcbc mac consists of 3 * 16 byte keys */
36 #define LAC_SYM_QAT_XCBC_STATE_SIZE ((LAC_HASH_XCBC_MAC_BLOCK_SIZE)*3)
37 
38 #define LAC_SYM_QAT_CMAC_STATE_SIZE ((LAC_HASH_CMAC_BLOCK_SIZE)*3)
39 
40 /* This type is used for the mapping between the hash algorithm and
41  * the corresponding hash definitions structure */
42 typedef struct lac_sym_qat_hash_def_map_s {
43 	CpaCySymHashAlgorithm hashAlgorithm;
44 	/* hash algorithm */
45 	lac_sym_qat_hash_defs_t hashDefs;
46 	/* hash defintions pointers */
47 } lac_sym_qat_hash_def_map_t;
48 
49 /*
50 *******************************************************************************
51 * Static Variables
52 *******************************************************************************
53 */
54 
55 /* initialisers as defined in FIPS and RFCS for digest operations */
56 
57 /* md5 16 bytes - Initialiser state can be found in RFC 1321*/
58 static Cpa8U md5InitialState[LAC_HASH_MD5_STATE_SIZE] = {
59 	0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
60 	0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
61 };
62 
63 /* SHA1 - 20 bytes - Initialiser state can be found in FIPS stds 180-2 */
64 static Cpa8U sha1InitialState[LAC_HASH_SHA1_STATE_SIZE] = {
65 	0x67, 0x45, 0x23, 0x01, 0xef, 0xcd, 0xab, 0x89, 0x98, 0xba,
66 	0xdc, 0xfe, 0x10, 0x32, 0x54, 0x76, 0xc3, 0xd2, 0xe1, 0xf0
67 };
68 
69 /* SHA 224 - 32 bytes - Initialiser state can be found in FIPS stds 180-2 */
70 static Cpa8U sha224InitialState[LAC_HASH_SHA224_STATE_SIZE] = {
71 	0xc1, 0x05, 0x9e, 0xd8, 0x36, 0x7c, 0xd5, 0x07, 0x30, 0x70, 0xdd,
72 	0x17, 0xf7, 0x0e, 0x59, 0x39, 0xff, 0xc0, 0x0b, 0x31, 0x68, 0x58,
73 	0x15, 0x11, 0x64, 0xf9, 0x8f, 0xa7, 0xbe, 0xfa, 0x4f, 0xa4
74 };
75 
76 /* SHA 256 - 32 bytes - Initialiser state can be found in FIPS stds 180-2 */
77 static Cpa8U sha256InitialState[LAC_HASH_SHA256_STATE_SIZE] = {
78 	0x6a, 0x09, 0xe6, 0x67, 0xbb, 0x67, 0xae, 0x85, 0x3c, 0x6e, 0xf3,
79 	0x72, 0xa5, 0x4f, 0xf5, 0x3a, 0x51, 0x0e, 0x52, 0x7f, 0x9b, 0x05,
80 	0x68, 0x8c, 0x1f, 0x83, 0xd9, 0xab, 0x5b, 0xe0, 0xcd, 0x19
81 };
82 
83 /* SHA 384 - 64 bytes - Initialiser state can be found in FIPS stds 180-2 */
84 static Cpa8U sha384InitialState[LAC_HASH_SHA384_STATE_SIZE] = {
85 	0xcb, 0xbb, 0x9d, 0x5d, 0xc1, 0x05, 0x9e, 0xd8, 0x62, 0x9a, 0x29,
86 	0x2a, 0x36, 0x7c, 0xd5, 0x07, 0x91, 0x59, 0x01, 0x5a, 0x30, 0x70,
87 	0xdd, 0x17, 0x15, 0x2f, 0xec, 0xd8, 0xf7, 0x0e, 0x59, 0x39, 0x67,
88 	0x33, 0x26, 0x67, 0xff, 0xc0, 0x0b, 0x31, 0x8e, 0xb4, 0x4a, 0x87,
89 	0x68, 0x58, 0x15, 0x11, 0xdb, 0x0c, 0x2e, 0x0d, 0x64, 0xf9, 0x8f,
90 	0xa7, 0x47, 0xb5, 0x48, 0x1d, 0xbe, 0xfa, 0x4f, 0xa4
91 };
92 
93 /* SHA 512 - 64 bytes - Initialiser state can be found in FIPS stds 180-2 */
94 static Cpa8U sha512InitialState[LAC_HASH_SHA512_STATE_SIZE] = {
95 	0x6a, 0x09, 0xe6, 0x67, 0xf3, 0xbc, 0xc9, 0x08, 0xbb, 0x67, 0xae,
96 	0x85, 0x84, 0xca, 0xa7, 0x3b, 0x3c, 0x6e, 0xf3, 0x72, 0xfe, 0x94,
97 	0xf8, 0x2b, 0xa5, 0x4f, 0xf5, 0x3a, 0x5f, 0x1d, 0x36, 0xf1, 0x51,
98 	0x0e, 0x52, 0x7f, 0xad, 0xe6, 0x82, 0xd1, 0x9b, 0x05, 0x68, 0x8c,
99 	0x2b, 0x3e, 0x6c, 0x1f, 0x1f, 0x83, 0xd9, 0xab, 0xfb, 0x41, 0xbd,
100 	0x6b, 0x5b, 0xe0, 0xcd, 0x19, 0x13, 0x7e, 0x21, 0x79
101 };
102 
103 /* SHA3 224 - 28 bytes  */
104 static Cpa8U sha3_224InitialState[LAC_HASH_SHA3_224_STATE_SIZE] = {
105 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
107 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
108 };
109 
110 /* SHA3 256 - 32 bytes  */
111 static Cpa8U sha3_256InitialState[LAC_HASH_SHA3_256_STATE_SIZE] = {
112 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
113 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
114 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
115 };
116 
117 /* SHA3 384 - 48 bytes  */
118 static Cpa8U sha3_384InitialState[LAC_HASH_SHA3_384_STATE_SIZE] = {
119 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
120 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
121 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
123 };
124 
125 /* SHA3 512 - 64 bytes  */
126 static Cpa8U sha3_512InitialState[LAC_HASH_SHA3_512_STATE_SIZE] = {
127 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
131 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
132 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
133 };
134 
135 /* SM3 - 32 bytes */
136 static Cpa8U sm3InitialState[LAC_HASH_SM3_STATE_SIZE] = {
137 	0x73, 0x80, 0x16, 0x6f, 0x49, 0x14, 0xb2, 0xb9, 0x17, 0x24, 0x42,
138 	0xd7, 0xda, 0x8a, 0x06, 0x00, 0xa9, 0x6f, 0x30, 0xbc, 0x16, 0x31,
139 	0x38, 0xaa, 0xe3, 0x8d, 0xee, 0x4d, 0xb0, 0xfb, 0x0e, 0x4e
140 };
141 
142 /* Constants used in generating K1, K2, K3 from a Key for AES_XCBC_MAC
143  * State defined in RFC 3566 */
144 static Cpa8U aesXcbcKeySeed[LAC_SYM_QAT_XCBC_STATE_SIZE] = {
145 	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
146 	0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
147 	0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03,
148 	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
149 };
150 
151 static Cpa8U aesCmacKeySeed[LAC_HASH_CMAC_BLOCK_SIZE] = {
152 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
154 };
155 
156 /* Hash Algorithm specific structure */
157 
158 static lac_sym_qat_hash_alg_info_t md5Info = { LAC_HASH_MD5_DIGEST_SIZE,
159 					       LAC_HASH_MD5_BLOCK_SIZE,
160 					       md5InitialState,
161 					       LAC_HASH_MD5_STATE_SIZE };
162 
163 static lac_sym_qat_hash_alg_info_t sha1Info = { LAC_HASH_SHA1_DIGEST_SIZE,
164 						LAC_HASH_SHA1_BLOCK_SIZE,
165 						sha1InitialState,
166 						LAC_HASH_SHA1_STATE_SIZE };
167 
168 static lac_sym_qat_hash_alg_info_t sha224Info = { LAC_HASH_SHA224_DIGEST_SIZE,
169 						  LAC_HASH_SHA224_BLOCK_SIZE,
170 						  sha224InitialState,
171 						  LAC_HASH_SHA224_STATE_SIZE };
172 
173 static lac_sym_qat_hash_alg_info_t sha256Info = { LAC_HASH_SHA256_DIGEST_SIZE,
174 						  LAC_HASH_SHA256_BLOCK_SIZE,
175 						  sha256InitialState,
176 						  LAC_HASH_SHA256_STATE_SIZE };
177 
178 static lac_sym_qat_hash_alg_info_t sha384Info = { LAC_HASH_SHA384_DIGEST_SIZE,
179 						  LAC_HASH_SHA384_BLOCK_SIZE,
180 						  sha384InitialState,
181 						  LAC_HASH_SHA384_STATE_SIZE };
182 
183 static lac_sym_qat_hash_alg_info_t sha512Info = { LAC_HASH_SHA512_DIGEST_SIZE,
184 						  LAC_HASH_SHA512_BLOCK_SIZE,
185 						  sha512InitialState,
186 						  LAC_HASH_SHA512_STATE_SIZE };
187 
188 static lac_sym_qat_hash_alg_info_t sha3_224Info = {
189 	LAC_HASH_SHA3_224_DIGEST_SIZE,
190 	LAC_HASH_SHA3_224_BLOCK_SIZE,
191 	sha3_224InitialState,
192 	LAC_HASH_SHA3_224_STATE_SIZE
193 };
194 
195 static lac_sym_qat_hash_alg_info_t sha3_256Info = {
196 	LAC_HASH_SHA3_256_DIGEST_SIZE,
197 	LAC_HASH_SHA3_256_BLOCK_SIZE,
198 	sha3_256InitialState,
199 	LAC_HASH_SHA3_256_STATE_SIZE
200 };
201 
202 static lac_sym_qat_hash_alg_info_t sha3_384Info = {
203 	LAC_HASH_SHA3_384_DIGEST_SIZE,
204 	LAC_HASH_SHA3_384_BLOCK_SIZE,
205 	sha3_384InitialState,
206 	LAC_HASH_SHA3_384_STATE_SIZE
207 };
208 
209 static lac_sym_qat_hash_alg_info_t sha3_512Info = {
210 	LAC_HASH_SHA3_512_DIGEST_SIZE,
211 	LAC_HASH_SHA3_512_BLOCK_SIZE,
212 	sha3_512InitialState,
213 	LAC_HASH_SHA3_512_STATE_SIZE
214 };
215 
216 static lac_sym_qat_hash_alg_info_t sm3Info = { LAC_HASH_SM3_DIGEST_SIZE,
217 					       LAC_HASH_SM3_BLOCK_SIZE,
218 					       sm3InitialState,
219 					       LAC_HASH_SM3_STATE_SIZE };
220 
221 static lac_sym_qat_hash_alg_info_t polyInfo = { LAC_HASH_POLY_DIGEST_SIZE,
222 						LAC_HASH_POLY_BLOCK_SIZE,
223 						NULL, /* intial state */
224 						LAC_HASH_POLY_STATE_SIZE };
225 
226 static lac_sym_qat_hash_alg_info_t xcbcMacInfo = {
227 	LAC_HASH_XCBC_MAC_128_DIGEST_SIZE,
228 	LAC_HASH_XCBC_MAC_BLOCK_SIZE,
229 	aesXcbcKeySeed,
230 	LAC_SYM_QAT_XCBC_STATE_SIZE
231 };
232 
233 static lac_sym_qat_hash_alg_info_t aesCmacInfo = {
234 	LAC_HASH_CMAC_128_DIGEST_SIZE,
235 	LAC_HASH_CMAC_BLOCK_SIZE,
236 	aesCmacKeySeed,
237 	LAC_SYM_QAT_CMAC_STATE_SIZE
238 };
239 
240 static lac_sym_qat_hash_alg_info_t aesCcmInfo = {
241 	LAC_HASH_AES_CCM_DIGEST_SIZE,
242 	LAC_HASH_AES_CCM_BLOCK_SIZE,
243 	NULL, /* intial state */
244 	0     /* state size */
245 };
246 
247 static lac_sym_qat_hash_alg_info_t aesGcmInfo = {
248 	LAC_HASH_AES_GCM_DIGEST_SIZE,
249 	LAC_HASH_AES_GCM_BLOCK_SIZE,
250 	NULL, /* initial state */
251 	0     /* state size */
252 };
253 
254 static lac_sym_qat_hash_alg_info_t kasumiF9Info = {
255 	LAC_HASH_KASUMI_F9_DIGEST_SIZE,
256 	LAC_HASH_KASUMI_F9_BLOCK_SIZE,
257 	NULL, /* initial state */
258 	0     /* state size */
259 };
260 
261 static lac_sym_qat_hash_alg_info_t snow3gUia2Info = {
262 	LAC_HASH_SNOW3G_UIA2_DIGEST_SIZE,
263 	LAC_HASH_SNOW3G_UIA2_BLOCK_SIZE,
264 	NULL, /* initial state */
265 	0     /* state size */
266 };
267 
268 static lac_sym_qat_hash_alg_info_t aesCbcMacInfo = {
269 	LAC_HASH_AES_CBC_MAC_DIGEST_SIZE,
270 	LAC_HASH_AES_CBC_MAC_BLOCK_SIZE,
271 	NULL,
272 	0
273 };
274 
275 static lac_sym_qat_hash_alg_info_t zucEia3Info = {
276 	LAC_HASH_ZUC_EIA3_DIGEST_SIZE,
277 	LAC_HASH_ZUC_EIA3_BLOCK_SIZE,
278 	NULL, /* initial state */
279 	0     /* state size */
280 };
281 /* Hash QAT specific structures */
282 
283 static lac_sym_qat_hash_qat_info_t md5Config = { ICP_QAT_HW_AUTH_ALGO_MD5,
284 						 LAC_HASH_MD5_BLOCK_SIZE,
285 						 ICP_QAT_HW_MD5_STATE1_SZ,
286 						 ICP_QAT_HW_MD5_STATE2_SZ };
287 
288 static lac_sym_qat_hash_qat_info_t sha1Config = { ICP_QAT_HW_AUTH_ALGO_SHA1,
289 						  LAC_HASH_SHA1_BLOCK_SIZE,
290 						  ICP_QAT_HW_SHA1_STATE1_SZ,
291 						  ICP_QAT_HW_SHA1_STATE2_SZ };
292 
293 static lac_sym_qat_hash_qat_info_t sha224Config = {
294 	ICP_QAT_HW_AUTH_ALGO_SHA224,
295 	LAC_HASH_SHA224_BLOCK_SIZE,
296 	ICP_QAT_HW_SHA224_STATE1_SZ,
297 	ICP_QAT_HW_SHA224_STATE2_SZ
298 };
299 
300 static lac_sym_qat_hash_qat_info_t sha256Config = {
301 	ICP_QAT_HW_AUTH_ALGO_SHA256,
302 	LAC_HASH_SHA256_BLOCK_SIZE,
303 	ICP_QAT_HW_SHA256_STATE1_SZ,
304 	ICP_QAT_HW_SHA256_STATE2_SZ
305 };
306 
307 static lac_sym_qat_hash_qat_info_t sha384Config = {
308 	ICP_QAT_HW_AUTH_ALGO_SHA384,
309 	LAC_HASH_SHA384_BLOCK_SIZE,
310 	ICP_QAT_HW_SHA384_STATE1_SZ,
311 	ICP_QAT_HW_SHA384_STATE2_SZ
312 };
313 
314 static lac_sym_qat_hash_qat_info_t sha512Config = {
315 	ICP_QAT_HW_AUTH_ALGO_SHA512,
316 	LAC_HASH_SHA512_BLOCK_SIZE,
317 	ICP_QAT_HW_SHA512_STATE1_SZ,
318 	ICP_QAT_HW_SHA512_STATE2_SZ
319 };
320 
321 static lac_sym_qat_hash_qat_info_t sha3_224Config = {
322 	ICP_QAT_HW_AUTH_ALGO_SHA3_224,
323 	LAC_HASH_SHA3_224_BLOCK_SIZE,
324 	ICP_QAT_HW_SHA3_224_STATE1_SZ,
325 	ICP_QAT_HW_SHA3_224_STATE2_SZ
326 };
327 
328 static lac_sym_qat_hash_qat_info_t sha3_256Config = {
329 	ICP_QAT_HW_AUTH_ALGO_SHA3_256,
330 	LAC_HASH_SHA3_256_BLOCK_SIZE,
331 	ICP_QAT_HW_SHA3_256_STATE1_SZ,
332 	ICP_QAT_HW_SHA3_256_STATE2_SZ
333 };
334 
335 static lac_sym_qat_hash_qat_info_t sha3_384Config = {
336 	ICP_QAT_HW_AUTH_ALGO_SHA3_384,
337 	LAC_HASH_SHA3_384_BLOCK_SIZE,
338 	ICP_QAT_HW_SHA3_384_STATE1_SZ,
339 	ICP_QAT_HW_SHA3_384_STATE2_SZ
340 };
341 
342 static lac_sym_qat_hash_qat_info_t sha3_512Config = {
343 	ICP_QAT_HW_AUTH_ALGO_SHA3_512,
344 	LAC_HASH_SHA3_512_BLOCK_SIZE,
345 	ICP_QAT_HW_SHA3_512_STATE1_SZ,
346 	ICP_QAT_HW_SHA3_512_STATE2_SZ
347 };
348 
349 static lac_sym_qat_hash_qat_info_t sm3Config = { ICP_QAT_HW_AUTH_ALGO_SM3,
350 						 LAC_HASH_SM3_BLOCK_SIZE,
351 						 ICP_QAT_HW_SM3_STATE1_SZ,
352 						 ICP_QAT_HW_SM3_STATE2_SZ };
353 
354 static lac_sym_qat_hash_qat_info_t polyConfig = { ICP_QAT_HW_AUTH_ALGO_POLY,
355 						  LAC_HASH_POLY_BLOCK_SIZE,
356 						  0,
357 						  0 };
358 
359 static lac_sym_qat_hash_qat_info_t xcbcMacConfig = {
360 	ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC,
361 	0,
362 	ICP_QAT_HW_AES_XCBC_MAC_STATE1_SZ,
363 	LAC_SYM_QAT_XCBC_STATE_SIZE
364 };
365 
366 static lac_sym_qat_hash_qat_info_t aesCmacConfig = {
367 	ICP_QAT_HW_AUTH_ALGO_AES_XCBC_MAC,
368 	0,
369 	ICP_QAT_HW_AES_XCBC_MAC_STATE1_SZ,
370 	LAC_SYM_QAT_CMAC_STATE_SIZE
371 };
372 
373 static lac_sym_qat_hash_qat_info_t aesCcmConfig = {
374 	ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC,
375 	0,
376 	ICP_QAT_HW_AES_CBC_MAC_STATE1_SZ,
377 	ICP_QAT_HW_AES_CBC_MAC_KEY_SZ + ICP_QAT_HW_AES_CCM_CBC_E_CTR0_SZ
378 };
379 
380 static lac_sym_qat_hash_qat_info_t aesGcmConfig = {
381 	ICP_QAT_HW_AUTH_ALGO_GALOIS_128,
382 	0,
383 	ICP_QAT_HW_GALOIS_128_STATE1_SZ,
384 	ICP_QAT_HW_GALOIS_H_SZ + ICP_QAT_HW_GALOIS_LEN_A_SZ +
385 	    ICP_QAT_HW_GALOIS_E_CTR0_SZ
386 };
387 
388 static lac_sym_qat_hash_qat_info_t kasumiF9Config = {
389 	ICP_QAT_HW_AUTH_ALGO_KASUMI_F9,
390 	0,
391 	ICP_QAT_HW_KASUMI_F9_STATE1_SZ,
392 	ICP_QAT_HW_KASUMI_F9_STATE2_SZ
393 };
394 
395 static lac_sym_qat_hash_qat_info_t snow3gUia2Config = {
396 	ICP_QAT_HW_AUTH_ALGO_SNOW_3G_UIA2,
397 	0,
398 	ICP_QAT_HW_SNOW_3G_UIA2_STATE1_SZ,
399 	ICP_QAT_HW_SNOW_3G_UIA2_STATE2_SZ
400 };
401 
402 static lac_sym_qat_hash_qat_info_t aesCbcMacConfig = {
403 	ICP_QAT_HW_AUTH_ALGO_AES_CBC_MAC,
404 	0,
405 	ICP_QAT_HW_AES_CBC_MAC_STATE1_SZ,
406 	ICP_QAT_HW_AES_CBC_MAC_STATE1_SZ + ICP_QAT_HW_AES_CBC_MAC_STATE1_SZ
407 };
408 
409 static lac_sym_qat_hash_qat_info_t zucEia3Config = {
410 	ICP_QAT_HW_AUTH_ALGO_ZUC_3G_128_EIA3,
411 	0,
412 	ICP_QAT_HW_ZUC_3G_EIA3_STATE1_SZ,
413 	ICP_QAT_HW_ZUC_3G_EIA3_STATE2_SZ
414 };
415 
416 /* Array of mappings between algorithm and info structure
417  * This array is used to populate the lookup table */
418 static lac_sym_qat_hash_def_map_t lacHashDefsMapping[] = {
419 	{ CPA_CY_SYM_HASH_MD5, { &md5Info, &md5Config } },
420 	{ CPA_CY_SYM_HASH_SHA1, { &sha1Info, &sha1Config } },
421 	{ CPA_CY_SYM_HASH_SHA224, { &sha224Info, &sha224Config } },
422 	{ CPA_CY_SYM_HASH_SHA256, { &sha256Info, &sha256Config } },
423 	{ CPA_CY_SYM_HASH_SHA384, { &sha384Info, &sha384Config } },
424 	{ CPA_CY_SYM_HASH_SHA512, { &sha512Info, &sha512Config } },
425 	{ CPA_CY_SYM_HASH_SHA3_224, { &sha3_224Info, &sha3_224Config } },
426 	{ CPA_CY_SYM_HASH_SHA3_256, { &sha3_256Info, &sha3_256Config } },
427 	{ CPA_CY_SYM_HASH_SHA3_384, { &sha3_384Info, &sha3_384Config } },
428 	{ CPA_CY_SYM_HASH_SHA3_512, { &sha3_512Info, &sha3_512Config } },
429 	{ CPA_CY_SYM_HASH_SM3, { &sm3Info, &sm3Config } },
430 	{ CPA_CY_SYM_HASH_POLY, { &polyInfo, &polyConfig } },
431 	{ CPA_CY_SYM_HASH_AES_XCBC, { &xcbcMacInfo, &xcbcMacConfig } },
432 	{ CPA_CY_SYM_HASH_AES_CMAC, { &aesCmacInfo, &aesCmacConfig } },
433 	{ CPA_CY_SYM_HASH_AES_CCM, { &aesCcmInfo, &aesCcmConfig } },
434 	{ CPA_CY_SYM_HASH_AES_GCM, { &aesGcmInfo, &aesGcmConfig } },
435 	{ CPA_CY_SYM_HASH_KASUMI_F9, { &kasumiF9Info, &kasumiF9Config } },
436 	{ CPA_CY_SYM_HASH_SNOW3G_UIA2, { &snow3gUia2Info, &snow3gUia2Config } },
437 	{ CPA_CY_SYM_HASH_AES_GMAC, { &aesGcmInfo, &aesGcmConfig } },
438 	{ CPA_CY_SYM_HASH_ZUC_EIA3, { &zucEia3Info, &zucEia3Config } },
439 	{ CPA_CY_SYM_HASH_AES_CBC_MAC, { &aesCbcMacInfo, &aesCbcMacConfig } }
440 };
441 
442 /*
443  * LacSymQat_HashLookupInit
444  */
445 CpaStatus
446 LacSymQat_HashLookupInit(CpaInstanceHandle instanceHandle)
447 {
448 	Cpa32U entry = 0;
449 	Cpa32U numEntries = 0;
450 	Cpa32U arraySize = 0;
451 	CpaStatus status = CPA_STATUS_SUCCESS;
452 	CpaCySymHashAlgorithm hashAlg = CPA_CY_SYM_HASH_NONE;
453 	sal_service_t *pService = (sal_service_t *)instanceHandle;
454 	lac_sym_qat_hash_defs_t **pLacHashLookupDefs;
455 
456 	arraySize =
457 	    (CPA_CY_HASH_ALG_END + 1) * sizeof(lac_sym_qat_hash_defs_t *);
458 	/* Size round up for performance */
459 	arraySize = LAC_ALIGN_POW2_ROUNDUP(arraySize, LAC_64BYTE_ALIGNMENT);
460 
461 	pLacHashLookupDefs = LAC_OS_MALLOC(arraySize);
462 	if (NULL == pLacHashLookupDefs) {
463 		return CPA_STATUS_RESOURCE;
464 	}
465 
466 	LAC_OS_BZERO(pLacHashLookupDefs, arraySize);
467 	numEntries =
468 	    sizeof(lacHashDefsMapping) / sizeof(lac_sym_qat_hash_def_map_t);
469 
470 	/* initialise the hash lookup definitions table so that the algorithm
471 	 * can be used to index into the table */
472 	for (entry = 0; entry < numEntries; entry++) {
473 		hashAlg = lacHashDefsMapping[entry].hashAlgorithm;
474 
475 		pLacHashLookupDefs[hashAlg] =
476 		    &(lacHashDefsMapping[entry].hashDefs);
477 	}
478 
479 	((sal_crypto_service_t *)pService)->pLacHashLookupDefs =
480 	    pLacHashLookupDefs;
481 
482 	return status;
483 }
484 
485 /*
486  * LacSymQat_HashAlgLookupGet
487  */
488 void
489 LacSymQat_HashAlgLookupGet(CpaInstanceHandle instanceHandle,
490 			   CpaCySymHashAlgorithm hashAlgorithm,
491 			   lac_sym_qat_hash_alg_info_t **ppHashAlgInfo)
492 {
493 	sal_service_t *pService = (sal_service_t *)instanceHandle;
494 	lac_sym_qat_hash_defs_t **pLacHashLookupDefs =
495 	    ((sal_crypto_service_t *)pService)->pLacHashLookupDefs;
496 
497 	*ppHashAlgInfo = pLacHashLookupDefs[hashAlgorithm]->algInfo;
498 }
499 
500 /*
501  * LacSymQat_HashDefsLookupGet
502  */
503 void
504 LacSymQat_HashDefsLookupGet(CpaInstanceHandle instanceHandle,
505 			    CpaCySymHashAlgorithm hashAlgorithm,
506 			    lac_sym_qat_hash_defs_t **ppHashDefsInfo)
507 {
508 	sal_service_t *pService = (sal_service_t *)instanceHandle;
509 	lac_sym_qat_hash_defs_t **pLacHashLookupDefs =
510 	    ((sal_crypto_service_t *)pService)->pLacHashLookupDefs;
511 
512 	*ppHashDefsInfo = pLacHashLookupDefs[hashAlgorithm];
513 }
514