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