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