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