1/* SPDX-License-Identifier: BSD-3-Clause */
2/* Copyright(c) 2007-2022 Intel Corporation */
3
4/**
5 ***************************************************************************
6 * @file lac_sym_hash_defs.h
7 *
8 * @defgroup LacHashDefs Hash Definitions
9 *
10 * @ingroup  LacHash
11 *
12 * Constants for hash algorithms
13 *
14 ***************************************************************************/
15
16#ifndef LAC_SYM_HASH_DEFS_H
17#define LAC_SYM_HASH_DEFS_H
18
19/* Constant for MD5 algorithm  */
20#define LAC_HASH_MD5_BLOCK_SIZE 64
21/**< @ingroup LacHashDefs
22 * MD5 block size in bytes */
23#define LAC_HASH_MD5_DIGEST_SIZE 16
24/**< @ingroup LacHashDefs
25 * MD5 digest length in bytes */
26#define LAC_HASH_MD5_STATE_SIZE 16
27/**< @ingroup LacHashDefs
28 * MD5 state size */
29
30/* Constants for SHA1 algorithm  */
31#define LAC_HASH_SHA1_BLOCK_SIZE 64
32/**< @ingroup LacHashDefs
33 * SHA1 Block size in bytes */
34#define LAC_HASH_SHA1_DIGEST_SIZE 20
35/**< @ingroup LacHashDefs
36 *  SHA1 digest length in bytes */
37#define LAC_HASH_SHA1_STATE_SIZE 20
38/**< @ingroup LacHashDefs
39 *  SHA1 state size */
40
41/* Constants for SHA224 algorithm  */
42#define LAC_HASH_SHA224_BLOCK_SIZE 64
43/**< @ingroup LacHashDefs
44 *  SHA224 block size in bytes */
45#define LAC_HASH_SHA224_DIGEST_SIZE 28
46/**< @ingroup LacHashDefs
47 *  SHA224 digest length in bytes */
48#define LAC_HASH_SHA224_STATE_SIZE 32
49/**< @ingroup LacHashDefs
50 * SHA224 state size */
51
52/* Constants for SHA256 algorithm  */
53#define LAC_HASH_SHA256_BLOCK_SIZE 64
54/**< @ingroup LacHashDefs
55 *  SHA256 block size in bytes */
56#define LAC_HASH_SHA256_DIGEST_SIZE 32
57/**< @ingroup LacHashDefs
58 *  SHA256 digest length */
59#define LAC_HASH_SHA256_STATE_SIZE 32
60/**< @ingroup LacHashDefs
61 *  SHA256 state size */
62
63/* Constants for SHA384 algorithm  */
64#define LAC_HASH_SHA384_BLOCK_SIZE 128
65/**< @ingroup LacHashDefs
66 *  SHA384 block size in bytes */
67#define LAC_HASH_SHA384_DIGEST_SIZE 48
68/**< @ingroup LacHashDefs
69 *  SHA384 digest length in bytes */
70#define LAC_HASH_SHA384_STATE_SIZE 64
71/**< @ingroup LacHashDefs
72 *  SHA384 state size */
73
74/* Constants for SHA512 algorithm  */
75#define LAC_HASH_SHA512_BLOCK_SIZE 128
76/**< @ingroup LacHashDefs
77 *  SHA512 block size in bytes */
78#define LAC_HASH_SHA512_DIGEST_SIZE 64
79/**< @ingroup LacHashDefs
80 *  SHA512 digest length in bytes */
81#define LAC_HASH_SHA512_STATE_SIZE 64
82/**< @ingroup LacHashDefs
83 *  SHA512 state size */
84
85/* Constants for SHA3_224 algorithm  */
86#define LAC_HASH_SHA3_224_BLOCK_SIZE 144
87/**< @ingroup LacHashDefs
88 *  SHA3_224 block size in bytes */
89#define LAC_HASH_SHA3_224_DIGEST_SIZE 28
90/**< @ingroup LacHashDefs
91 *  SHA3_224 digest length in bytes */
92#define LAC_HASH_SHA3_224_STATE_SIZE 28
93/**< @ingroup LacHashDefs
94 *  SHA3_224 state size */
95
96/* Constants for SHA3_256 algorithm  */
97#define LAC_HASH_SHA3_256_BLOCK_SIZE 136
98/**< @ingroup LacHashDefs
99 *  SHA3_256 block size in bytes */
100#define LAC_HASH_SHA3_256_DIGEST_SIZE 32
101/**< @ingroup LacHashDefs
102 *  SHA3_256 digest length in bytes */
103#define LAC_HASH_SHA3_256_STATE_SIZE 32
104/**< @ingroup LacHashDefs
105 *  SHA3_256 state size */
106
107/* Constants for SHA3_384 algorithm  */
108#define LAC_HASH_SHA3_384_BLOCK_SIZE 104
109/**< @ingroup LacHashDefs
110 *  SHA3_384 block size in bytes */
111#define LAC_HASH_SHA3_384_DIGEST_SIZE 48
112/**< @ingroup LacHashDefs
113 *  SHA3_384 digest length in bytes */
114#define LAC_HASH_SHA3_384_STATE_SIZE 48
115/**< @ingroup LacHashDefs
116 *  SHA3_384 state size */
117
118/* Constants for SHA3_512 algorithm  */
119#define LAC_HASH_SHA3_512_BLOCK_SIZE 72
120/**< @ingroup LacHashDefs
121 *  SHA3_512 block size in bytes */
122#define LAC_HASH_SHA3_512_DIGEST_SIZE 64
123/**< @ingroup LacHashDefs
124 *  SHA3_512 digest length in bytes */
125#define LAC_HASH_SHA3_512_STATE_SIZE 64
126/**< @ingroup LacHashDefs
127 *  SHA3_512 state size */
128
129#define LAC_HASH_SHA3_STATEFUL_STATE_SIZE 200
130
131/* Constants for SM3 algorithm  */
132#define LAC_HASH_SM3_BLOCK_SIZE 64
133/**< @ingroup LacHashDefs
134 *  SM3 block size in bytes */
135#define LAC_HASH_SM3_DIGEST_SIZE 32
136/**< @ingroup LacHashDefs
137 *  SM3 digest length */
138#define LAC_HASH_SM3_STATE_SIZE 32
139/**< @ingroup LacHashDefs
140 *  SM3 state size */
141
142/* Constants for POLY algorithm  */
143#define LAC_HASH_POLY_BLOCK_SIZE 64
144/**< @ingroup LacHashDefs
145 *  POLY block size in bytes */
146#define LAC_HASH_POLY_DIGEST_SIZE 16
147/**< @ingroup LacHashDefs
148 *  POLY digest length */
149#define LAC_HASH_POLY_STATE_SIZE 0
150/**< @ingroup LacHashDefs
151 *  POLY state size */
152
153/* Constants for XCBC precompute algorithm  */
154#define LAC_HASH_XCBC_PRECOMP_KEY_NUM 3
155/**< @ingroup LacHashDefs
156 *  The Pre-compute operation involves deriving 3 128-bit
157 *  keys (K1, K2 and K3) */
158
159/* Constants for XCBC MAC algorithm  */
160#define LAC_HASH_XCBC_MAC_BLOCK_SIZE 16
161/**< @ingroup LacHashDefs
162 *  XCBC_MAC block size in bytes */
163#define LAC_HASH_XCBC_MAC_128_DIGEST_SIZE 16
164/**< @ingroup LacHashDefs
165 *  XCBC_MAC_PRF_128 digest length in bytes */
166
167/* Constants for AES CMAC algorithm  */
168#define LAC_HASH_CMAC_BLOCK_SIZE 16
169/**< @ingroup LacHashDefs
170 *  AES CMAC block size in bytes */
171#define LAC_HASH_CMAC_128_DIGEST_SIZE 16
172/**< @ingroup LacHashDefs
173 *  AES CMAC digest length in bytes */
174
175/* constants for AES CCM */
176#define LAC_HASH_AES_CCM_BLOCK_SIZE 16
177/**< @ingroup LacHashDefs
178 *  block size for CBC-MAC part of CCM */
179#define LAC_HASH_AES_CCM_DIGEST_SIZE 16
180/**< @ingroup LacHashDefs
181 *  untruncated size of authentication field */
182
183/* constants for AES GCM */
184#define LAC_HASH_AES_GCM_BLOCK_SIZE 16
185/**< @ingroup LacHashDefs
186 *  block size for Galois Hash 128 part of CCM */
187#define LAC_HASH_AES_GCM_DIGEST_SIZE 16
188/**< @ingroup LacHashDefs
189 *  untruncated size of authentication field */
190
191/* constants for KASUMI F9 */
192#define LAC_HASH_KASUMI_F9_BLOCK_SIZE 8
193/**< @ingroup LacHashDefs
194 *  KASUMI_F9 block size in bytes */
195#define LAC_HASH_KASUMI_F9_DIGEST_SIZE 4
196/**< @ingroup LacHashDefs
197 *  KASUMI_F9 digest size in bytes */
198
199/* constants for SNOW3G UIA2 */
200#define LAC_HASH_SNOW3G_UIA2_BLOCK_SIZE 8
201/**< @ingroup LacHashDefs
202 *  SNOW3G UIA2 block size in bytes */
203#define LAC_HASH_SNOW3G_UIA2_DIGEST_SIZE 4
204/**< @ingroup LacHashDefs
205 *  SNOW3G UIA2 digest size in bytes */
206
207/* constants for AES CBC MAC */
208#define LAC_HASH_AES_CBC_MAC_BLOCK_SIZE 16
209/**< @ingroup LacHashDefs
210 *  AES CBC MAC block size in bytes */
211#define LAC_HASH_AES_CBC_MAC_DIGEST_SIZE 16
212/**< @ingroup LacHashDefs
213 *  AES CBC MAC digest size in bytes */
214
215#define LAC_HASH_ZUC_EIA3_BLOCK_SIZE 4
216/**< @ingroup LacHashDefs
217 *  ZUC EIA3 block size in bytes */
218#define LAC_HASH_ZUC_EIA3_DIGEST_SIZE 4
219/**< @ingroup LacHashDefs
220 *  ZUC EIA3 digest size in bytes */
221
222/* constants for AES GCM ICV allowed sizes */
223#define LAC_HASH_AES_GCM_ICV_SIZE_8 8
224#define LAC_HASH_AES_GCM_ICV_SIZE_12 12
225#define LAC_HASH_AES_GCM_ICV_SIZE_16 16
226
227/* constants for AES CCM ICV allowed sizes */
228#define LAC_HASH_AES_CCM_ICV_SIZE_MIN 4
229#define LAC_HASH_AES_CCM_ICV_SIZE_MAX 16
230
231/* constants for authentication algorithms */
232#define LAC_HASH_IPAD_BYTE 0x36
233/**< @ingroup LacHashDefs
234 *  Ipad Byte */
235#define LAC_HASH_OPAD_BYTE 0x5c
236/**< @ingroup LacHashDefs
237 *  Opad Byte */
238
239#define LAC_HASH_IPAD_4_BYTES 0x36363636
240/**< @ingroup LacHashDefs
241 *  Ipad for 4 Bytes */
242#define LAC_HASH_OPAD_4_BYTES 0x5c5c5c5c
243/**< @ingroup LacHashDefs
244 *  Opad for 4 Bytes */
245
246/* Key Modifier (KM) value used in Kasumi algorithm in F9 mode to XOR
247 * Integrity Key (IK) */
248#define LAC_HASH_KASUMI_F9_KEY_MODIFIER_4_BYTES 0xAAAAAAAA
249/**< @ingroup LacHashDefs
250 *  Kasumi F9 Key Modifier for 4 bytes */
251
252#define LAC_SYM_QAT_HASH_IV_REQ_MAX_SIZE_QW 2
253/**< @ingroup LacSymQatHash
254 * Maximum size of IV embedded in the request.
255 * This is set to 2, namely 4 LONGWORDS. */
256
257#define LAC_SYM_QAT_HASH_STATE1_MAX_SIZE_BYTES LAC_HASH_SHA512_BLOCK_SIZE
258/**< @ingroup LacSymQatHash
259 * Maximum size of state1 in the hash setup block of the content descriptor.
260 * This is set to the block size of SHA512. */
261
262#define LAC_SYM_QAT_HASH_STATE2_MAX_SIZE_BYTES LAC_HASH_SHA512_BLOCK_SIZE
263/**< @ingroup LacSymQatHash
264 * Maximum size of state2 in the hash setup block of the content descriptor.
265 * This is set to the block size of SHA512. */
266
267#define LAC_MAX_INNER_OUTER_PREFIX_SIZE_BYTES 255
268/**< Maximum size of the inner and outer prefix for nested hashing operations.
269 * This is got from the maximum size supported by the accelerator which stores
270 * the size in an 8bit field */
271
272#define LAC_MAX_HASH_STATE_STORAGE_SIZE                                        \
273	(sizeof(icp_qat_hw_auth_counter_t) + LAC_HASH_SHA3_STATEFUL_STATE_SIZE)
274/**< Maximum size of the hash state storage section of the hash state prefix
275 * buffer */
276
277#define LAC_MAX_HASH_STATE_BUFFER_SIZE_BYTES                                   \
278	LAC_MAX_HASH_STATE_STORAGE_SIZE +                                      \
279	    (LAC_ALIGN_POW2_ROUNDUP(LAC_MAX_INNER_OUTER_PREFIX_SIZE_BYTES,     \
280				    LAC_QUAD_WORD_IN_BYTES) *                  \
281	     2)
282/**< Maximum size of the hash state prefix buffer will be for nested hash when
283 * there is the maximum sized inner prefix and outer prefix */
284
285#define LAC_MAX_AAD_SIZE_BYTES 256
286/**< Maximum size of AAD in bytes */
287
288#define IS_HMAC_ALG(algorithm)                                                 \
289	((algorithm == CPA_CY_SYM_HASH_MD5) ||                                 \
290	 (algorithm == CPA_CY_SYM_HASH_SHA1) ||                                \
291	 (algorithm == CPA_CY_SYM_HASH_SHA224) ||                              \
292	 (algorithm == CPA_CY_SYM_HASH_SHA256) ||                              \
293	 (algorithm == CPA_CY_SYM_HASH_SHA384) ||                              \
294	 (algorithm == CPA_CY_SYM_HASH_SHA512) ||                              \
295	 (algorithm == CPA_CY_SYM_HASH_SM3)) ||                                \
296	    (LAC_HASH_IS_SHA3(algorithm))
297/**< @ingroup LacSymQatHash
298 * Macro to detect if the hash algorithm is a HMAC algorithm */
299
300#define IS_HASH_MODE_1(qatHashMode) (ICP_QAT_HW_AUTH_MODE1 == qatHashMode)
301/**< @ingroup LacSymQatHash
302 * Macro to detect is qat hash mode is set to 1 (precompute mode)
303 * only used with algorithms in hash mode CPA_CY_SYM_HASH_MODE_AUTH */
304
305#define IS_HASH_MODE_2(qatHashMode) (ICP_QAT_HW_AUTH_MODE2 == qatHashMode)
306/**< @ingroup LacSymQatHash
307 * Macro to detect is qat hash mode is set to 2. This is used for TLS and
308 * mode 2 HMAC (no preompute mode) */
309
310#define IS_HASH_MODE_2_AUTH(qatHashMode, hashMode)                             \
311	((IS_HASH_MODE_2(qatHashMode)) &&                                      \
312	 (CPA_CY_SYM_HASH_MODE_AUTH == hashMode))
313/**< @ingroup LacSymQatHash
314 * Macro to check for qat hash mode is set to 2 and the hash mode is
315 * Auth. This applies to HMAC algorithms (no pre compute). This is used
316 * to differntiate between TLS and HMAC */
317
318#define IS_HASH_MODE_2_NESTED(qatHashMode, hashMode)                           \
319	((IS_HASH_MODE_2(qatHashMode)) &&                                      \
320	 (CPA_CY_SYM_HASH_MODE_NESTED == hashMode))
321/**< @ingroup LacSymQatHash
322 * Macro to check for qat hash mode is set to 2 and the LAC hash mode is
323 * Nested. This applies to TLS. This is used to differentiate between
324 * TLS and HMAC */
325
326#define LAC_HASH_IS_SHA3(algo)                                                 \
327	((algo == CPA_CY_SYM_HASH_SHA3_224) ||                                 \
328	 (algo == CPA_CY_SYM_HASH_SHA3_256) ||                                 \
329	 (algo == CPA_CY_SYM_HASH_SHA3_384) ||                                 \
330	 (algo == CPA_CY_SYM_HASH_SHA3_512))
331/**< @ingroup LacSymQatHash
332 * Macro to check if the hash algorithm is SHA3 */
333
334#endif /* LAC_SYM_HASH_DEFS_H */
335