1 /***************************************************************************
2 *
3 * <COPYRIGHT_TAG>
4 *
5 ***************************************************************************/
6
7 /**
8 *****************************************************************************
9 * @file lac_sym_hash.h
10 *
11 * @defgroup LacHash Hash
12 *
13 * @ingroup LacSym
14 *
15 * API functions of the Hash component
16 *
17 * @lld_start
18 * @lld_overview
19 * There is a single \ref cpaCySym "Symmetric LAC API" for hash, cipher,
20 * auth encryption and algorithm chaining. This API is implemented by the
21 * \ref LacSym "Symmetric" module. It demultiplexes calls to this API into
22 * their basic operation and does some common parameter checking and deals
23 * with accesses to the session table.
24 *
25 * The hash component supports hashing in 3 modes. PLAIN, AUTH and NESTED.
26 * Plain mode is used to provide data integrity while auth mode is used to
27 * provide integrity as well as its authenticity. Nested mode is inteded
28 * for use by non standard HMAC like algorithms such as for the SSL master
29 * key secret. Partial packets is supported for both plain and auth modes.
30 * In-place and out-of-place processing is supported for all modes. The
31 * verify operation is supported for PLAIN and AUTH modes only.
32 *
33 * The hash component is responsible for implementing the hash specific
34 * functionality for initialising a session and for a perform operation.
35 * Statistics are maintained in the symmetric \ref CpaCySymStats64 "stats"
36 * structure. This module has been seperated out into two. The hash QAT module
37 * deals entirely with QAT data structures. The hash module itself has minimal
38 * exposure to the QAT data structures.
39 *
40 * @lld_dependencies
41 * - \ref LacCommon
42 * - \ref LacSymQat "Symmetric QAT": Hash uses the lookup table provided by
43 * this module to validate user input. Hash also uses this module to build
44 * the hash QAT request message, request param structure, populate the
45 * content descriptor, allocate and populate the hash state prefix buffer.
46 * Hash also registers its function to process the QAT response with this
47 * module.
48 * - OSAL : For memory functions, atomics and locking
49 *
50 * @lld_module_algorithms
51 * <b>a. HMAC Precomputes</b>\n
52 * HMAC algorithm is specified as follows:
53 * \f$ HMAC(msg) = hash((key \oplus opad) \parallel
54 * hash((key \oplus ipad) \parallel msg ))\f$.
55 * The key is fixed per session, and is padded up to the block size of the
56 * algorithm if necessary and xored with the ipad/opad. The following portion
57 * of the operation can be precomputed: \f$ hash(key \oplus ipad) \f$ as the
58 * output of this intermediate hash will be the same for every perform
59 * operation. This intermediate state is the intermediate state of a partial
60 * partial packet. It is used as the initialiser state to \f$ hash(msg) \f$.
61 * The same applies to \f$ hash(key \oplus ipad) \f$. There is a saving in
62 * the data path by the length of time it takes to do two hashes on a block
63 * size of data. Note: a partial packet operation generates an intermediate
64 * state. The final operation on a partial packet or when a full packet is
65 * used applies padding and gives the final hash result. Esentially for the
66 * inner hash, a partial packet final is issued on the data, using the
67 * precomputed intermediate state and returns the digest.
68 *
69 * For the HMAC precomputes, \ref LacSymHash_HmacPreCompute(), there are two
70 * hash operations done using a internal content descriptor to configure the
71 * QAT. A first partial packet is specified as the packet type for the
72 * pre-computes as we need the state that uses the initialiser constants
73 * specific to the algorithm. The resulting output is copied from the hash
74 * state prefix buffer into the QAT content descriptor for the session being
75 * initialised. The state is used each perform operation as the initialiser
76 * to the algorithm
77 *
78 * <b>b. AES XCBC Precomputes</b>\n
79 * A similar technique to HMAC will be used to generate the precomputes for
80 * AES XCBC. In this case a cipher operation will be used to generate the
81 * precomputed result. The Pre-compute operation involves deriving 3 128-bit
82 * keys (K1, K2 and K3) from the 128-bit secret key K.
83 *
84 * - K1 = 0x01010101010101010101010101010101 encrypted with Key K
85 * - K2 = 0x02020202020202020202020202020202 encrypted with Key K
86 * - K3 = 0x03030303030303030303030303030303 encrypted with Key K
87 *
88 * A content descriptor is created with the cipher algorithm set to AES
89 * in ECB mode and with the keysize set to 128 bits. The 3 constants, 16 bytes
90 * each, are copied into the src buffer and an in-place cipher operation is
91 * performed on the 48 bytes. ECB mode does not maintain the state, therefore
92 * the 3 keys can be encrypted in one perform. The encrypted result is used by
93 * the state2 field in the hash setup block of the content descriptor.
94 *
95 * The precompute operations use a different lac command ID and thus have a
96 * different route in the response path to the symmetric code. In this
97 * precompute callback function the output of the precompute operation is
98 * copied into the content descriptor for the session being registered.
99 *
100 * <b>c. AES CCM Precomputes</b>\n
101 * The precomputes for AES CCM are trivial, i.e. there is no need to perform
102 * a cipher or a digest operation. Instead, the key is stored directly in
103 * the state2 field.
104 *
105 * <b>d. AES GCM Precomputes</b>\n
106 * As with AES XCBC precomputes, a cipher operation will be used to generate
107 * the precomputed result for AES GCM. In this case the Galois Hash
108 * Multiplier (H) must be derived and stored in the state2 field. H is
109 * derived by encrypting a 16-byte block of zeroes with the
110 * cipher/authentication key, using AES in ECB mode.
111 *
112 * <b>Key size for Auth algorithms</b>\n
113 * <i>Min Size</i>\n
114 * RFC 2104 states "The key for HMAC can be of any length. However, less than
115 * L bytes is strongly discouraged as it would decrease the security strength
116 * of the function."
117 *
118 * FIPS 198a states "The size of the key, K, shall be equal to or greater than
119 * L/2, where L is the size of the hash function output."
120 *
121 * RFC 4434 states "If the key has fewer than 128 bits, lengthen it to exactly
122 * 128 bits by padding it on the right with zero bits.
123 *
124 * A key length of 0 upwards is accepted. It is up to the client to pass in a
125 * key that complies with the standard they wish to support.
126 *
127 * <i>Max Size</i>\n
128 * RFC 2104 section 2 states : "Applications that use keys longer than B bytes
129 * will first hash the key using H and then use the resultant L byte string
130 * as the actual key to HMAC
131 *
132 * RFC 4434 section 2 states:
133 * "If the key is 129 bits or longer, shorten it to exactly 128 bits
134 * by performing the steps in AES-XCBC-PRF-128 (that is, the
135 * algorithm described in this document). In that re-application of
136 * this algorithm, the key is 128 zero bits; the message is the
137 * too-long current key."
138 *
139 * We push this up to the client. They need to do the hash operation through
140 * the LAC API if the key is greater than the block size of the algorithm. This
141 * will reduce the key size to the digest size of the algorithm.
142 *
143 * RFC 3566 section 4 states:
144 * AES-XCBC-MAC-96 is a secret key algorithm. For use with either ESP or
145 * AH a fixed key length of 128-bits MUST be supported. Key lengths
146 * other than 128-bits MUST NOT be supported (i.e., only 128-bit keys are
147 * to be used by AES-XCBC-MAC-96).
148 *
149 * In this case it is up to the client to provide a key that complies with
150 * the standards. i.e. exactly 128 bits in size.
151 *
152 *
153 * <b>HMAC-MD5-96 and HMAC-SHA1-96</b>\n
154 * HMAC-MD5-96 and HMAC-SHA1-96 are defined as requirements by Look Aside
155 * IPsec. The differences between HMAC-SHA1 and HMAC-SHA1-96 are that the
156 * digest produced is truncated and there are strict requirements on the
157 * size of the key that is used.
158 *
159 * They are supported in LAC by HMAC-MD5 and HMAC-SHA1. The field
160 * \ref CpaCySymHashSetupData::digestResultLenInBytes in the LAC API in
161 * bytes needs to be set to 12 bytes. There are also requirements regarding
162 * the keysize. It is up to the client to ensure the key size meets the
163 * requirements of the standards they are using.
164 *
165 * RFC 2403: HMAC-MD5-96 Key lengths other than 128-bits MUST NOT be supported.
166 * HMAC-MD5-96 produces a 128-bit authenticator value. For use with either
167 * ESP or AH, a truncated value using the first 96 bits MUST be supported.
168 *
169 * RFC2404: HMAC-SHA1-96 Key lengths other than 160- bits MUST NOT be supported
170 * HMAC-SHA-1-96 produces a 160-bit authenticator value. For use with either
171 * ESP or AH, a truncated value using the first 96 bits MUST be supported.
172 *
173 * <b>Out of place operations</b>
174 * When verify is disabled, the digest will be written to the destination
175 * buffer. When verify is enabled, the digest calculated is compared to the
176 * digest stored in the source buffer.
177 *
178 * <b>Partial Packets</b>
179 * Partial packets are handled in the \ref LacSym "Symmetric" component for
180 * the request. The hash callback function handles the update of the state
181 * in the callback.
182 *
183 *
184 * @lld_process_context
185 *
186 * Session Register Sequence Diagram: For hash modes plain and nested.
187 * \msc
188 * APP [label="Application"], SYM [label="Symmetric LAC"],
189 * Achain [label="Alg chain"], Hash, SQAT [label="Symmetric QAT"];
190 *
191 * APP=>SYM [ label = "cpaCySymInitSession(cbFunc)",
192 * URL="\ref cpaCySymInitSession()"] ;
193 * SYM=>SYM [ label = "LacSymSession_ParamCheck()",
194 * URL="\ref LacSymSession_ParamCheck()"];
195 * SYM=>Achain [ label = "LacAlgChain_SessionInit()",
196 * URL="\ref LacAlgChain_SessionInit()"];
197 * Achain=>Hash [ label = "LacHash_HashContextCheck()",
198 * URL="\ref LacHash_HashContextCheck()"];
199 * Achain<<Hash [ label="return"];
200 * Achain=>SQAT [ label = "LacSymQat_HashContentDescInit()",
201 * URL="\ref LacSymQat_HashContentDescInit()"];
202 * Achain<<SQAT [ label="return"];
203 * Achain=>Hash [ label = "LacHash_StatePrefixAadBufferInit()",
204 * URL="\ref LacHash_StatePrefixAadBufferInit()"];
205 * Hash=>SQAT [ label = "LacSymQat_HashStatePrefixAadBufferSizeGet()",
206 * URL="\ref LacSymQat_HashStatePrefixAadBufferSizeGet()"];
207 * Hash<<SQAT [ label="return"];
208 * Hash=>SQAT [ label = "LacSymQat_HashStatePrefixAadBufferPopulate()",
209 * URL="\ref LacSymQat_HashStatePrefixAadBufferPopulate()"];
210 * Hash<<SQAT [ label="return"];
211 * Achain<<Hash [ label="return"];
212 * SYM<<Achain [ label = "status" ];
213 * SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
214 * APP<<SYM [label = "status"];
215 * \endmsc
216 *
217 * Perform Sequence Diagram: For all 3 modes, full packets and in-place.
218 * \msc
219 * APP [label="Application"], SYM [label="Symmetric LAC"],
220 * Achain [label="Alg chain"], Hash, SQAT [label="Symmetric QAT"],
221 * QATCOMMS [label="QAT Comms"];
222 *
223 * APP=>SYM [ label = "cpaCySymPerformOp()",
224 * URL="\ref cpaCySymPerformOp()"] ;
225 * SYM=>SYM [ label = "LacSymPerform_BufferParamCheck()",
226 * URL="\ref LacSymPerform_BufferParamCheck()"];
227 * SYM=>Achain [ label = "LacAlgChain_Perform()",
228 * URL="\ref LacAlgChain_Perform()"];
229 * Achain=>Achain [ label = "Lac_MemPoolEntryAlloc()",
230 * URL="\ref Lac_MemPoolEntryAlloc()"];
231 * Achain=>SQAT [ label = "LacSymQat_packetTypeGet()",
232 * URL="\ref LacSymQat_packetTypeGet()"];
233 * Achain<<SQAT [ label="return"];
234 * Achain=>Achain [ label = "LacBuffDesc_BufferListTotalSizeGet()",
235 * URL="\ref LacBuffDesc_BufferListTotalSizeGet()"];
236 * Achain=>Hash [ label = "LacHash_PerformParamCheck()",
237 * URL = "\ref LacHash_PerformParamCheck()"];
238 * Achain<<Hash [ label="status"];
239 * Achain=>SQAT [ label = "LacSymQat_HashRequestParamsPopulate()",
240 * URL="\ref LacSymQat_HashRequestParamsPopulate()"];
241 * Achain<<SQAT [ label="return"];
242 * Achain<<SQAT [ label="cmdFlags"];
243 *
244 * Achain=>Achain [ label = "LacBuffDesc_BufferListDescWrite()",
245 * URL="\ref LacBuffDesc_BufferListDescWrite()"];
246 * Achain=>SQAT [ label = "SalQatMsg_CmnMsgAndReqParamsPopulate()",
247 * URL="\ref SalQatMsg_CmnMsgAndReqParamsPopulate()"];
248 * Achain<<SQAT [ label="return"];
249 * Achain=>SYM [ label = "LacSymQueue_RequestSend()",
250 * URL="\ref LacSymQueue_RequestSend()"];
251 * SYM=>QATCOMMS [ label = "QatComms_MsgSend()",
252 * URL="\ref QatComms_MsgSend()"];
253 * SYM<<QATCOMMS [ label="status"];
254 * Achain<<SYM [ label="status"];
255 * SYM<<Achain [ label="status"];
256 * SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
257 * APP<<SYM [label = "status"];
258 * ... [label = "QAT processing the request and generates response.
259 * Callback in Bottom Half Context"];
260 * ...;
261 * QATCOMMS=>QATCOMMS [label ="QatComms_ResponseMsgHandler()",
262 * URL="\ref QatComms_ResponseMsgHandler()"];
263 * QATCOMMS=>SQAT [label ="LacSymQat_SymRespHandler()",
264 * URL="\ref LacSymQat_SymRespHandler()"];
265 * SQAT=>SYM [label="LacSymCb_ProcessCallback()",
266 * URL="\ref LacSymCb_ProcessCallback()"];
267 * SYM=>SYM [label = "LacSymCb_ProcessCallbackInternal()",
268 * URL="\ref LacSymCb_ProcessCallbackInternal()"];
269 * SYM=>SYM [label = "Lac_MemPoolEntryFree()",
270 * URL="\ref Lac_MemPoolEntryFree()"];
271 * SYM=>SYM [label = "LAC_SYM_STAT_INC", URL="\ref LAC_SYM_STAT_INC"];
272 * SYM=>APP [label="cbFunc"];
273 * APP>>SYM [label="return"];
274 * SYM>>SQAT [label="return"];
275 * SQAT>>QATCOMMS [label="return"];
276 * \endmsc
277 *
278 * @lld_end
279 *
280 *****************************************************************************/
281
282 /*****************************************************************************/
283
284 #ifndef LAC_SYM_HASH_H
285 #define LAC_SYM_HASH_H
286
287 /*
288 ******************************************************************************
289 * Include public/global header files
290 ******************************************************************************
291 */
292
293 #include "cpa.h"
294 #include "cpa_cy_sym.h"
295
296 /*
297 *******************************************************************************
298 * Include private header files
299 *******************************************************************************
300 */
301
302 #include "lac_session.h"
303 #include "lac_buffer_desc.h"
304
305 /**
306 *****************************************************************************
307 * @ingroup LacHash
308 * Definition of callback function.
309 *
310 * @description
311 * This is the callback function prototype. The callback function is
312 * invoked when a hash precompute operation completes.
313 *
314 * @param[in] pCallbackTag Opaque value provided by user while making
315 * individual function call.
316 *
317 * @retval
318 * None
319 *****************************************************************************/
320 typedef void (*lac_hash_precompute_done_cb_t)(void *pCallbackTag);
321
322 /*
323 * WARNING: There are no checks done on the parameters of the functions in
324 * this file. The expected values of the parameters are documented and it is
325 * up to the caller to provide valid values.
326 */
327
328 /**
329 *******************************************************************************
330 * @ingroup LacHash
331 * validate the hash context
332 *
333 * @description
334 * The client populates the hash context in the session context structure
335 * This is passed as parameter to the session register API function and
336 * needs to be validated.
337 *
338 * @param[in] pHashSetupData pointer to hash context structure
339 *
340 * @retval CPA_STATUS_SUCCESS Success
341 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter
342 *
343 *****************************************************************************/
344 CpaStatus LacHash_HashContextCheck(CpaInstanceHandle instanceHandle,
345 const CpaCySymHashSetupData *pHashSetupData);
346
347 /**
348 ******************************************************************************
349 * @ingroup LacHash
350 * Populate the hash pre-compute data.
351 *
352 * @description
353 * This function populates the state1 and state2 fields with the hash
354 * pre-computes. This is only done for authentication. The state1
355 * and state2 pointers must be set to point to the correct locations
356 * in the content descriptor where the precompute result(s) will be
357 * written, before this function is called.
358 *
359 * @param[in] instanceHandle Instance Handle
360 * @param[in] pSessionSetup pointer to session setup data
361 * @param[in] callbackFn Callback function which is invoked when
362 * the precompute operation is completed
363 * @param[in] pCallbackTag Opaque data which is passed back to the user
364 * as a parameter in the callback function
365 * @param[out] pWorkingBuffer Pointer to working buffer, sufficient memory
366 * must be allocated by the caller for this.
367 * Assumption that this is 8 byte aligned.
368 * @param[out] pState1 pointer to State 1 in content descriptor
369 * @param[out] pState2 pointer to State 2 in content descriptor
370 *
371 * @retval CPA_STATUS_SUCCESS Success
372 * @retval CPA_STATUS_RETRY Retry the operation.
373 * @retval CPA_STATUS_RESOURCE Error Allocating memory
374 * @retval CPA_STATUS_FAIL Operation Failed
375 *
376 *****************************************************************************/
377 CpaStatus LacHash_PrecomputeDataCreate(const CpaInstanceHandle instanceHandle,
378 CpaCySymSessionSetupData *pSessionSetup,
379 lac_hash_precompute_done_cb_t callbackFn,
380 void *pCallbackTag,
381 Cpa8U *pWorkingBuffer,
382 Cpa8U *pState1,
383 Cpa8U *pState2);
384
385 /**
386 ******************************************************************************
387 * @ingroup LacHash
388 * populate the hash state prefix aad buffer.
389 *
390 * @description
391 * This function populates the hash state prefix aad buffer. This function
392 * is not called for CCM/GCM operations as the AAD data varies per request
393 * and is stored in the cookie as opposed to the session descriptor.
394 *
395 * @param[in] pHashSetupData pointer to hash setup structure
396 * @param[in] pHashControlBlock pointer to hash control block
397 * @param[in] qatHashMode QAT Mode for hash
398 * @param[in] pHashStateBuffer pointer to hash state prefix aad buffer
399 * @param[in] pHashStateBufferInfo Pointer to hash state prefix buffer info
400 *
401 * @retval CPA_STATUS_SUCCESS Success
402 * @retval CPA_STATUS_FAIL Operation Failed
403 *
404 *****************************************************************************/
405 CpaStatus LacHash_StatePrefixAadBufferInit(
406 sal_service_t *pService,
407 const CpaCySymHashSetupData *pHashSetupData,
408 icp_qat_la_bulk_req_ftr_t *pHashControlBlock,
409 icp_qat_hw_auth_mode_t qatHashMode,
410 Cpa8U *pHashStateBuffer,
411 lac_sym_qat_hash_state_buffer_info_t *pHashStateBufferInfo);
412
413 /**
414 *******************************************************************************
415 * @ingroup LacHash
416 * Check parameters for a hash perform operation
417 *
418 * @description
419 * This function checks the parameters for a hash perform operation.
420 *
421 * @param[in] pSessionDesc Pointer to session descriptor.
422 * @param[in] pOpData Pointer to request parameters.
423 * @param[in] srcPktSize Total size of the Buffer List
424 * @param[in] pVerifyResult Pointer to user flag
425 *
426 * @retval CPA_STATUS_SUCCESS Success
427 * @retval CPA_STATUS_INVALID_PARAM Invalid Parameter
428 *
429 *****************************************************************************/
430 CpaStatus LacHash_PerformParamCheck(CpaInstanceHandle instanceHandle,
431 lac_session_desc_t *pSessionDesc,
432 const CpaCySymOpData *pOpData,
433 Cpa64U srcPktSize,
434 const CpaBoolean *pVerifyResult);
435
436 /**
437 *******************************************************************************
438 * @ingroup LacHash
439 * Perform hash precompute operation for HMAC
440 *
441 * @description
442 * This function sends 2 requests to the CPM for the hmac precompute
443 * operations. The results of the ipad and opad state calculation
444 * is copied into pState1 and pState2 (e.g. these may be the state1 and
445 * state2 buffers in a hash content descriptor) and when
446 * the final operation has completed the condition passed as a param to
447 * this function is set to true.
448 *
449 * This function performs the XORing of the IPAD and OPAD constants to
450 * the key (which was padded to the block size of the algorithm)
451 *
452 * @param[in] instanceHandle Instance Handle
453 * @param[in] hashAlgorithm Hash Algorithm
454 * @param[in] authKeyLenInBytes Length of Auth Key
455 * @param[in] pAuthKey Pointer to Auth Key
456 * @param[out] pWorkingMemory Pointer to working memory that is carved
457 * up and used in the pre-compute operations.
458 * Assumption that this is 8 byte aligned.
459 * @param[out] pState1 Pointer to State 1 in content descriptor
460 * @param[out] pState2 Pointer to State 2 in content descriptor
461 * @param[in] callbackFn Callback function which is invoked when
462 * the precompute operation is completed
463 * @param[in] pCallbackTag Opaque data which is passed back to the user
464 * as a parameter in the callback function
465 *
466 * @retval CPA_STATUS_SUCCESS Success
467 * @retval CPA_STATUS_RETRY Retry the operation.
468 * @retval CPA_STATUS_FAIL Operation Failed
469 *
470 *****************************************************************************/
471 CpaStatus LacSymHash_HmacPreComputes(CpaInstanceHandle instanceHandle,
472 CpaCySymHashAlgorithm hashAlgorithm,
473 Cpa32U authKeyLenInBytes,
474 Cpa8U *pAuthKey,
475 Cpa8U *pWorkingMemory,
476 Cpa8U *pState1,
477 Cpa8U *pState2,
478 lac_hash_precompute_done_cb_t callbackFn,
479 void *pCallbackTag);
480
481 /**
482 *******************************************************************************
483 * @ingroup LacHash
484 * Perform hash precompute operation for XCBC MAC and GCM
485 *
486 * @description
487 * This function sends 1 request to the CPM for the precompute operation
488 * based on an AES ECB cipher. The results of the calculation is copied
489 * into pState (this may be a pointer to the State 2 buffer in a Hash
490 * content descriptor) and when the operation has completed the condition
491 * passed as a param to this function is set to true.
492 *
493 * @param[in] instanceHandle Instance Handle
494 * @param[in] hashAlgorithm Hash Algorithm
495 * @param[in] authKeyLenInBytes Length of Auth Key
496 * @param[in] pAuthKey Auth Key
497 * @param[out] pWorkingMemory Pointer to working memory that is carved
498 * up and used in the pre-compute operations.
499 * Assumption that this is 8 byte aligned.
500 * @param[out] pState Pointer to output state
501 * @param[in] callbackFn Callback function which is invoked when
502 * the precompute operation is completed
503 * @param[in] pCallbackTag Opaque data which is passed back to the user
504 * as a parameter in the callback function
505
506 *
507 * @retval CPA_STATUS_SUCCESS Success
508 * @retval CPA_STATUS_RETRY Retry the operation.
509 * @retval CPA_STATUS_FAIL Operation Failed
510 *
511 *****************************************************************************/
512 CpaStatus LacSymHash_AesECBPreCompute(CpaInstanceHandle instanceHandle,
513 CpaCySymHashAlgorithm hashAlgorithm,
514 Cpa32U authKeyLenInBytes,
515 Cpa8U *pAuthKey,
516 Cpa8U *pWorkingMemory,
517 Cpa8U *pState,
518 lac_hash_precompute_done_cb_t callbackFn,
519 void *pCallbackTag);
520
521 /**
522 *******************************************************************************
523 * @ingroup LacHash
524 * initialise data structures for the hash precompute operations
525 *
526 * @description
527 * This function registers the precompute callback handler function, which
528 * is different to the default one used by symmetric. Content descriptors
529 * are preallocted for the hmac precomputes as they are constant for these
530 * operations.
531 *
532 * @retval CPA_STATUS_SUCCESS Success
533 * @retval CPA_STATUS_RESOURCE Error allocating memory
534 *
535 *****************************************************************************/
536 CpaStatus LacSymHash_HmacPrecompInit(CpaInstanceHandle instanceHandle);
537
538 /**
539 *******************************************************************************
540 * @ingroup LacHash
541 * free resources allocated for the precompute operations
542 *
543 * @description
544 * free up the memory allocated on init time for the content descriptors
545 * that were allocated for the HMAC precompute operations.
546 *
547 * @return none
548 *
549 *****************************************************************************/
550 void LacSymHash_HmacPrecompShutdown(CpaInstanceHandle instanceHandle);
551
552 void LacSync_GenBufListVerifyCb(void *pCallbackTag,
553 CpaStatus status,
554 CpaCySymOp operationType,
555 void *pOpData,
556 CpaBufferList *pDstBuffer,
557 CpaBoolean opResult);
558
559 #endif /* LAC_SYM_HASH_H */
Cache object: 3f668c4fa71fa9f6130e3494eede7a35
|