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