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
LacSymQat_HashLookupInit(CpaInstanceHandle instanceHandle)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
LacSymQat_HashAlgLookupGet(CpaInstanceHandle instanceHandle,CpaCySymHashAlgorithm hashAlgorithm,lac_sym_qat_hash_alg_info_t ** ppHashAlgInfo)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
LacSymQat_HashDefsLookupGet(CpaInstanceHandle instanceHandle,CpaCySymHashAlgorithm hashAlgorithm,lac_sym_qat_hash_defs_t ** ppHashDefsInfo)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