178ee8d1cSJulian Grajkowski /* SPDX-License-Identifier: BSD-3-Clause */
278ee8d1cSJulian Grajkowski /* Copyright(c) 2007-2022 Intel Corporation */
378ee8d1cSJulian Grajkowski 
478ee8d1cSJulian Grajkowski /**
578ee8d1cSJulian Grajkowski  ***************************************************************************
678ee8d1cSJulian Grajkowski  * @file lac_sym.h
778ee8d1cSJulian Grajkowski  *
878ee8d1cSJulian Grajkowski  * @defgroup LacSym    Symmetric
978ee8d1cSJulian Grajkowski  *
1078ee8d1cSJulian Grajkowski  * @ingroup Lac
1178ee8d1cSJulian Grajkowski  *
1278ee8d1cSJulian Grajkowski  * Symmetric component includes cipher, Hash, chained cipher & hash,
1378ee8d1cSJulian Grajkowski  * authenticated encryption and key generation.
1478ee8d1cSJulian Grajkowski  *
1578ee8d1cSJulian Grajkowski  * @lld_start
1678ee8d1cSJulian Grajkowski  * @lld_overview
1778ee8d1cSJulian Grajkowski  *
1878ee8d1cSJulian Grajkowski  * The symmetric component demuliplexes the following crypto operations to
1978ee8d1cSJulian Grajkowski  * the appropriate sub-components: cipher, hash, algorithm chaining and
2078ee8d1cSJulian Grajkowski  * authentication encryption. It is a common layer between the above
2178ee8d1cSJulian Grajkowski  * mentioned components where common resources are allocated and paramater
2278ee8d1cSJulian Grajkowski  * checks are done. The operation specific resource allocation and parameter
2378ee8d1cSJulian Grajkowski  * checks are done in the sub-component itself.
2478ee8d1cSJulian Grajkowski  *
2578ee8d1cSJulian Grajkowski  * The symmetric component demultiplexes the session register/deregister
2678ee8d1cSJulian Grajkowski  * and perform functions to the appropriate subcomponents.
2778ee8d1cSJulian Grajkowski  *
2878ee8d1cSJulian Grajkowski  * @lld_dependencies
2978ee8d1cSJulian Grajkowski  * - \ref LacSymPartial "Partial Packet Code":  This code manages the partial
3078ee8d1cSJulian Grajkowski  *    packet state for a session.
3178ee8d1cSJulian Grajkowski  * - \ref LacBufferDesc  "Common Buffer Code" : This code traverses a buffer
3278ee8d1cSJulian Grajkowski  *   chain to ensure it is valid.
3378ee8d1cSJulian Grajkowski  * - \ref LacSymStats "Statistics": Manages statistics for symmetric
3478ee8d1cSJulian Grajkowski  * - \ref LacSymQat "Symmetric QAT": The symmetric qat component is
3578ee8d1cSJulian Grajkowski  *   initialiased by the symmetric component.
3678ee8d1cSJulian Grajkowski  * - \ref LacCipher "Cipher" : demultiplex cipher opertions to this component.
3778ee8d1cSJulian Grajkowski  * - \ref LacHash "Hash" : demultiplex hash opertions to this component.
3878ee8d1cSJulian Grajkowski  *   to this component.
3978ee8d1cSJulian Grajkowski  * - \ref LacAlgChain "Algorithm Chaining": The algorithm chaining component
4078ee8d1cSJulian Grajkowski  * - OSAL : Memory allocation, Mutex's, atomics
4178ee8d1cSJulian Grajkowski  *
4278ee8d1cSJulian Grajkowski  * @lld_initialisation
4378ee8d1cSJulian Grajkowski  * This component is initialied during the LAC initialisation sequence. It
4478ee8d1cSJulian Grajkowski  * initialises the session table, statistics, symmetric QAT, initialises the
4578ee8d1cSJulian Grajkowski  * hash definitions lookup table, the hash alg supported lookup table and
4678ee8d1cSJulian Grajkowski  * registers a callback function with the symmetric response handler to process
4778ee8d1cSJulian Grajkowski  * response messages for Cipher, Hash and Algorithm-Chaining requests.
4878ee8d1cSJulian Grajkowski  *
4978ee8d1cSJulian Grajkowski  * @lld_module_algorithms
5078ee8d1cSJulian Grajkowski  *
5178ee8d1cSJulian Grajkowski  * @lld_process_context
5278ee8d1cSJulian Grajkowski  * Refer to \ref LacHash "Hash" and \ref LacCipher "Cipher" for sequence
5378ee8d1cSJulian Grajkowski  * diagrams from the symmetric component through the sub components.
5478ee8d1cSJulian Grajkowski  *
5578ee8d1cSJulian Grajkowski  * @lld_end
5678ee8d1cSJulian Grajkowski  *
5778ee8d1cSJulian Grajkowski  ***************************************************************************/
5878ee8d1cSJulian Grajkowski 
5978ee8d1cSJulian Grajkowski /***************************************************************************/
6078ee8d1cSJulian Grajkowski 
6178ee8d1cSJulian Grajkowski #ifndef LAC_SYM_H
6278ee8d1cSJulian Grajkowski #define LAC_SYM_H
6378ee8d1cSJulian Grajkowski 
6478ee8d1cSJulian Grajkowski #include "cpa.h"
6578ee8d1cSJulian Grajkowski #include "cpa_cy_sym.h"
6678ee8d1cSJulian Grajkowski #include "cpa_cy_sym_dp.h"
6778ee8d1cSJulian Grajkowski #include "lac_common.h"
6878ee8d1cSJulian Grajkowski #include "lac_mem_pools.h"
6978ee8d1cSJulian Grajkowski #include "lac_sym_cipher_defs.h"
7078ee8d1cSJulian Grajkowski #include "icp_qat_fw_la.h"
7178ee8d1cSJulian Grajkowski 
7278ee8d1cSJulian Grajkowski #define LAC_SYM_KEY_TLS_PREFIX_SIZE 128
7378ee8d1cSJulian Grajkowski /**< Hash Prefix size in bytes for TLS (128 = MAX = SHA2 (384, 512)*/
7478ee8d1cSJulian Grajkowski 
7578ee8d1cSJulian Grajkowski #define LAC_SYM_OPTIMISED_CD_SIZE 64
7678ee8d1cSJulian Grajkowski /**< The size of the optimised content desc in DRAM*/
7778ee8d1cSJulian Grajkowski 
7878ee8d1cSJulian Grajkowski #define LAC_SYM_KEY_MAX_HASH_STATE_BUFFER (LAC_SYM_KEY_TLS_PREFIX_SIZE * 2)
7978ee8d1cSJulian Grajkowski /**< hash state prefix buffer structure that holds the maximum sized secret */
8078ee8d1cSJulian Grajkowski 
8178ee8d1cSJulian Grajkowski #define LAC_SYM_HASH_BUFFER_LEN 64
8278ee8d1cSJulian Grajkowski /**< Buffer length to hold 16 byte MD5 key and 20 byte SHA1 key */
8378ee8d1cSJulian Grajkowski 
8478ee8d1cSJulian Grajkowski /* The ARC4 key will not be stored in the content descriptor so we only need to
8578ee8d1cSJulian Grajkowski  * reserve enough space for the next biggest cipher setup block.
8678ee8d1cSJulian Grajkowski  * Kasumi needs to store 2 keys and to have the size of 2 blocks for fw*/
8778ee8d1cSJulian Grajkowski #define LAC_SYM_QAT_MAX_CIPHER_SETUP_BLK_SZ                                    \
8878ee8d1cSJulian Grajkowski 	(sizeof(icp_qat_hw_cipher_config_t) + 2 * ICP_QAT_HW_KASUMI_KEY_SZ +   \
8978ee8d1cSJulian Grajkowski 	 2 * ICP_QAT_HW_KASUMI_BLK_SZ)
9078ee8d1cSJulian Grajkowski /**< @ingroup LacSymQat
9178ee8d1cSJulian Grajkowski  * Maximum size for the cipher setup block of the content descriptor */
9278ee8d1cSJulian Grajkowski 
9378ee8d1cSJulian Grajkowski #define LAC_SYM_QAT_MAX_HASH_SETUP_BLK_SZ sizeof(icp_qat_hw_auth_algo_blk_t)
9478ee8d1cSJulian Grajkowski /**< @ingroup LacSymQat
9578ee8d1cSJulian Grajkowski  * Maximum size for the hash setup block of the content descriptor */
9678ee8d1cSJulian Grajkowski 
9778ee8d1cSJulian Grajkowski #define LAC_SYM_QAT_CONTENT_DESC_MAX_SIZE                                      \
9878ee8d1cSJulian Grajkowski 	LAC_ALIGN_POW2_ROUNDUP(LAC_SYM_QAT_MAX_CIPHER_SETUP_BLK_SZ +           \
9978ee8d1cSJulian Grajkowski 				   LAC_SYM_QAT_MAX_HASH_SETUP_BLK_SZ,          \
10078ee8d1cSJulian Grajkowski 			       (1 << LAC_64BYTE_ALIGNMENT_SHIFT))
10178ee8d1cSJulian Grajkowski /**< @ingroup LacSymQat
10278ee8d1cSJulian Grajkowski  *  Maximum size of content descriptor. This is incremented to the next multiple
10378ee8d1cSJulian Grajkowski  * of 64 so that it can be 64 byte aligned */
10478ee8d1cSJulian Grajkowski 
10578ee8d1cSJulian Grajkowski #define LAC_SYM_QAT_API_ALIGN_COOKIE_OFFSET                                    \
10678ee8d1cSJulian Grajkowski 	(offsetof(CpaCySymDpOpData, instanceHandle))
10778ee8d1cSJulian Grajkowski /**< @ingroup LacSymQat
10878ee8d1cSJulian Grajkowski  * Size which needs to be reserved before the instanceHandle field of
10978ee8d1cSJulian Grajkowski  * lac_sym_bulk_cookie_s to align it to the correspondent instanceHandle
11078ee8d1cSJulian Grajkowski  * in CpaCySymDpOpData */
11178ee8d1cSJulian Grajkowski 
11278ee8d1cSJulian Grajkowski #define LAC_SIZE_OF_CACHE_HDR_IN_LW 6
11378ee8d1cSJulian Grajkowski /**< Size of Header part of reqCache/shramReqCache */
11478ee8d1cSJulian Grajkowski 
11578ee8d1cSJulian Grajkowski #define LAC_SIZE_OF_CACHE_MID_IN_LW 2
11678ee8d1cSJulian Grajkowski /**< Size of Mid part (LW14/15) of reqCache/shramReqCache */
11778ee8d1cSJulian Grajkowski 
11878ee8d1cSJulian Grajkowski #define LAC_SIZE_OF_CACHE_FTR_IN_LW 6
11978ee8d1cSJulian Grajkowski /**< Size of Footer part of reqCache/shramReqCache */
12078ee8d1cSJulian Grajkowski 
12178ee8d1cSJulian Grajkowski #define LAC_SIZE_OF_CACHE_TO_CLEAR_IN_LW 20
12278ee8d1cSJulian Grajkowski /**< Size of dummy reqCache/shramReqCache to clear */
12378ee8d1cSJulian Grajkowski 
12478ee8d1cSJulian Grajkowski #define LAC_START_OF_CACHE_MID_IN_LW 14
12578ee8d1cSJulian Grajkowski /**< Starting LW of reqCache/shramReqCache Mid */
12678ee8d1cSJulian Grajkowski 
12778ee8d1cSJulian Grajkowski #define LAC_START_OF_CACHE_FTR_IN_LW 26
12878ee8d1cSJulian Grajkowski /**< Starting LW of reqCache/shramReqCache Footer */
12978ee8d1cSJulian Grajkowski 
13078ee8d1cSJulian Grajkowski /**
13178ee8d1cSJulian Grajkowski  *******************************************************************************
13278ee8d1cSJulian Grajkowski  * @ingroup LacSym
13378ee8d1cSJulian Grajkowski  *      Symmetric cookie
13478ee8d1cSJulian Grajkowski  *
13578ee8d1cSJulian Grajkowski  * @description
13678ee8d1cSJulian Grajkowski  *      This cookie stores information for a particular symmetric perform op.
13778ee8d1cSJulian Grajkowski  *      This includes the request params, re-aligned Cipher IV, the request
13878ee8d1cSJulian Grajkowski  *      message sent to the QAT engine, and various user-supplied parameters
13978ee8d1cSJulian Grajkowski  *      for the operation which will be needed in our callback function.
14078ee8d1cSJulian Grajkowski  *      A pointer to this cookie is stored in the opaque data field of the QAT
14178ee8d1cSJulian Grajkowski  *      message so that it can be accessed in the asynchronous callback.
14278ee8d1cSJulian Grajkowski  *      Cookies for multiple operations on a given session can be linked
14378ee8d1cSJulian Grajkowski  *      together to allow queuing of requests using the pNext field.
14478ee8d1cSJulian Grajkowski  *
14578ee8d1cSJulian Grajkowski  *      The parameters are placed in order to match the CpaCySymDpOpData
14678ee8d1cSJulian Grajkowski  *structure
14778ee8d1cSJulian Grajkowski  *****************************************************************************/
14878ee8d1cSJulian Grajkowski typedef struct lac_sym_bulk_cookie_s {
14978ee8d1cSJulian Grajkowski 
15078ee8d1cSJulian Grajkowski 	/* CpaCySymDpOpData struct so need to keep this here for correct
15178ee8d1cSJulian Grajkowski 	 * alignment*/
15278ee8d1cSJulian Grajkowski 	Cpa8U reserved[LAC_SYM_QAT_API_ALIGN_COOKIE_OFFSET];
15378ee8d1cSJulian Grajkowski 	/** NOTE: Field must be correctly aligned in memory for access by QAT
15478ee8d1cSJulian Grajkowski 	 * engine
15578ee8d1cSJulian Grajkowski 	 */
15678ee8d1cSJulian Grajkowski 	CpaInstanceHandle instanceHandle;
15778ee8d1cSJulian Grajkowski 	/**< Instance handle for the operation */
15878ee8d1cSJulian Grajkowski 	CpaCySymSessionCtx sessionCtx;
15978ee8d1cSJulian Grajkowski 	/**< Session context */
16078ee8d1cSJulian Grajkowski 	void *pCallbackTag;
16178ee8d1cSJulian Grajkowski 	/**< correlator supplied by the client */
16278ee8d1cSJulian Grajkowski 	icp_qat_fw_la_bulk_req_t qatMsg;
16378ee8d1cSJulian Grajkowski 	/**< QAT request message */
16478ee8d1cSJulian Grajkowski 	const CpaCySymOpData *pOpData;
16578ee8d1cSJulian Grajkowski 	/**< pointer to the op data structure that the user supplied in the
16678ee8d1cSJulian Grajkowski 	 * perform
16778ee8d1cSJulian Grajkowski 	 * operation. The op data is modified in the process callback function
16878ee8d1cSJulian Grajkowski 	 * and the pointer is returned to the user in their callback function */
16978ee8d1cSJulian Grajkowski 	CpaBoolean updateSessionIvOnSend;
17078ee8d1cSJulian Grajkowski 	/**< Boolean flag to indicate if the session cipher IV buffer should be
17178ee8d1cSJulian Grajkowski 	 * updated prior to sending the request */
17278ee8d1cSJulian Grajkowski 	CpaBoolean updateUserIvOnRecieve;
17378ee8d1cSJulian Grajkowski 	/**< Boolean flag to indicate if the user's cipher IV buffer should be
17478ee8d1cSJulian Grajkowski 	 * updated after receiving the response from the QAT */
17578ee8d1cSJulian Grajkowski 	CpaBoolean updateKeySizeOnRecieve;
17678ee8d1cSJulian Grajkowski /**< Boolean flag to indicate if the cipher key size should be
17778ee8d1cSJulian Grajkowski  * updated after receiving the response from the QAT */
17878ee8d1cSJulian Grajkowski 	CpaBufferList *pDstBuffer;
17978ee8d1cSJulian Grajkowski 	/**< Pointer to destination buffer to hold the data output */
18078ee8d1cSJulian Grajkowski 	struct lac_sym_bulk_cookie_s *pNext;
18178ee8d1cSJulian Grajkowski 	/**< Pointer to next node in linked list (if request is queued) */
18278ee8d1cSJulian Grajkowski } lac_sym_bulk_cookie_t;
18378ee8d1cSJulian Grajkowski 
18478ee8d1cSJulian Grajkowski /**
18578ee8d1cSJulian Grajkowski *******************************************************************************
18678ee8d1cSJulian Grajkowski * @ingroup LacSymKey
18778ee8d1cSJulian Grajkowski *      symmetric Key cookie
18878ee8d1cSJulian Grajkowski * @description
18978ee8d1cSJulian Grajkowski *      This cookie stores information for a particular keygen perform op.
19078ee8d1cSJulian Grajkowski *      This includes a hash content descriptor, request params, hash state
19178ee8d1cSJulian Grajkowski *      buffer, and various user-supplied parameters for the operation which
19278ee8d1cSJulian Grajkowski *      will be needed in our callback function.
19378ee8d1cSJulian Grajkowski *      A pointer to this cookie is stored in the opaque data field of the QAT
19478ee8d1cSJulian Grajkowski *      message so that it can be accessed in the asynchronous callback.
19578ee8d1cSJulian Grajkowski *****************************************************************************/
19678ee8d1cSJulian Grajkowski typedef struct lac_sym_key_cookie_s {
19778ee8d1cSJulian Grajkowski 	CpaInstanceHandle instanceHandle;
19878ee8d1cSJulian Grajkowski 	/**< QAT device id supplied by the client */
19978ee8d1cSJulian Grajkowski 	void *pCallbackTag;
20078ee8d1cSJulian Grajkowski 	/**< Mechanism used. TLS, SSL or MGF */
20178ee8d1cSJulian Grajkowski 	Cpa8U contentDesc[LAC_SYM_QAT_MAX_HASH_SETUP_BLK_SZ];
20278ee8d1cSJulian Grajkowski 	/**< Content descriptor.
20378ee8d1cSJulian Grajkowski 	 **< NOTE: Field must be correctly aligned in memory for access by QAT
20478ee8d1cSJulian Grajkowski 	 * engine */
20578ee8d1cSJulian Grajkowski 	union {
20678ee8d1cSJulian Grajkowski 		icp_qat_fw_la_ssl_key_material_input_t sslKeyInput;
20778ee8d1cSJulian Grajkowski 		/**< SSL key material input structure */
20878ee8d1cSJulian Grajkowski 		icp_qat_fw_la_tls_key_material_input_t tlsKeyInput;
20978ee8d1cSJulian Grajkowski 		/**< TLS key material input structure */
21078ee8d1cSJulian Grajkowski 		icp_qat_fw_la_hkdf_key_material_input_t tlsHKDFKeyInput;
21178ee8d1cSJulian Grajkowski 		/**< TLS HHKDF key material input structure */
21278ee8d1cSJulian Grajkowski 	} u;
21378ee8d1cSJulian Grajkowski 	/**< NOTE: Field must be correctly aligned in memory for access by QAT
21478ee8d1cSJulian Grajkowski 	 * engine */
21578ee8d1cSJulian Grajkowski 	Cpa8U hashStateBuffer[LAC_SYM_KEY_MAX_HASH_STATE_BUFFER];
21678ee8d1cSJulian Grajkowski 	/**< hash state prefix buffer
21778ee8d1cSJulian Grajkowski 	 * NOTE: Field must be correctly aligned in memory for access by QAT
21878ee8d1cSJulian Grajkowski 	 * engine
21978ee8d1cSJulian Grajkowski 	 */
22078ee8d1cSJulian Grajkowski 	CpaCyGenFlatBufCbFunc pKeyGenCb;
22178ee8d1cSJulian Grajkowski 	/**< callback function supplied by the client */
22278ee8d1cSJulian Grajkowski 	void *pKeyGenOpData;
22378ee8d1cSJulian Grajkowski 	/**< pointer to the (SSL/TLS) or MGF op data structure that the user
22478ee8d1cSJulian Grajkowski 	 * supplied in the perform operation */
22578ee8d1cSJulian Grajkowski 	CpaFlatBuffer *pKeyGenOutputData;
22678ee8d1cSJulian Grajkowski 	/**< Output data pointer supplied by the client */
22778ee8d1cSJulian Grajkowski 	Cpa8U hashKeyBuffer[LAC_SYM_HASH_BUFFER_LEN];
22878ee8d1cSJulian Grajkowski 	/**< 36 byte buffer to store MD5 key and SHA1 key */
22978ee8d1cSJulian Grajkowski } lac_sym_key_cookie_t;
23078ee8d1cSJulian Grajkowski 
23178ee8d1cSJulian Grajkowski /**
23278ee8d1cSJulian Grajkowski *******************************************************************************
23378ee8d1cSJulian Grajkowski * @ingroup LacSymNrbg
23478ee8d1cSJulian Grajkowski *      symmetric NRBG cookie
23578ee8d1cSJulian Grajkowski * @description
23678ee8d1cSJulian Grajkowski *      This cookie stores information for a particular NRBG operation.
23778ee8d1cSJulian Grajkowski *      This includes various user-supplied parameters for the operation which
23878ee8d1cSJulian Grajkowski *      will be needed in our callback function.
23978ee8d1cSJulian Grajkowski *      A pointer to this cookie is stored in the opaque data field of the QAT
24078ee8d1cSJulian Grajkowski *      message so that it can be accessed in the asynchronous callback.
24178ee8d1cSJulian Grajkowski *****************************************************************************/
24278ee8d1cSJulian Grajkowski typedef struct lac_sym_nrbg_cookie_s {
24378ee8d1cSJulian Grajkowski 	CpaInstanceHandle instanceHandle;
24478ee8d1cSJulian Grajkowski 	/**< QAT device id supplied by the client */
24578ee8d1cSJulian Grajkowski 	void *pCallbackTag;
24678ee8d1cSJulian Grajkowski 	/**< Opaque data supplied by the client */
24778ee8d1cSJulian Grajkowski 	icp_qat_fw_la_trng_test_result_t trngHTResult;
24878ee8d1cSJulian Grajkowski 	/**< TRNG health test result
24978ee8d1cSJulian Grajkowski 	 **< NOTE: Field must be correctly aligned in memory for access by QAT
25078ee8d1cSJulian Grajkowski 	 * engine */
25178ee8d1cSJulian Grajkowski 	icp_qat_fw_la_trng_req_t trngReq;
25278ee8d1cSJulian Grajkowski 	/**< TRNG request message */
25378ee8d1cSJulian Grajkowski 	CpaCyGenFlatBufCbFunc pCb;
25478ee8d1cSJulian Grajkowski 	/**< Callback function supplied by the client */
25578ee8d1cSJulian Grajkowski 	void *pOpData;
25678ee8d1cSJulian Grajkowski 	/**< Op data pointer supplied by the client */
25778ee8d1cSJulian Grajkowski 	CpaFlatBuffer *pOutputData;
25878ee8d1cSJulian Grajkowski 	/**< Output data pointer supplied by the client */
25978ee8d1cSJulian Grajkowski } lac_sym_nrbg_cookie_t;
26078ee8d1cSJulian Grajkowski 
26178ee8d1cSJulian Grajkowski /**
26278ee8d1cSJulian Grajkowski *******************************************************************************
26378ee8d1cSJulian Grajkowski * @ingroup LacSym
26478ee8d1cSJulian Grajkowski *      symmetric cookie
26578ee8d1cSJulian Grajkowski * @description
26678ee8d1cSJulian Grajkowski *      used to determine the amount of memory to allocate for the symmetric
26778ee8d1cSJulian Grajkowski *      cookie pool. As symmetric, random and key generation shared the same
26878ee8d1cSJulian Grajkowski *      pool
26978ee8d1cSJulian Grajkowski *****************************************************************************/
27078ee8d1cSJulian Grajkowski typedef struct lac_sym_cookie_s {
27178ee8d1cSJulian Grajkowski 	union {
27278ee8d1cSJulian Grajkowski 		lac_sym_bulk_cookie_t bulkCookie;
27378ee8d1cSJulian Grajkowski 		/**< symmetric bulk cookie */
27478ee8d1cSJulian Grajkowski 		lac_sym_key_cookie_t keyCookie;
27578ee8d1cSJulian Grajkowski 		/**< symmetric key cookie */
27678ee8d1cSJulian Grajkowski 		lac_sym_nrbg_cookie_t nrbgCookie;
27778ee8d1cSJulian Grajkowski 		/**< symmetric NRBG cookie */
27878ee8d1cSJulian Grajkowski 	} u;
27978ee8d1cSJulian Grajkowski 	Cpa64U keyContentDescPhyAddr;
28078ee8d1cSJulian Grajkowski 	Cpa64U keyHashStateBufferPhyAddr;
28178ee8d1cSJulian Grajkowski 	Cpa64U keySslKeyInputPhyAddr;
28278ee8d1cSJulian Grajkowski 	Cpa64U keyTlsKeyInputPhyAddr;
28378ee8d1cSJulian Grajkowski } lac_sym_cookie_t;
28478ee8d1cSJulian Grajkowski 
28578ee8d1cSJulian Grajkowski typedef struct icp_qat_la_auth_req_params_s {
28678ee8d1cSJulian Grajkowski 	/** equivalent of LW26 of icp_qat_fw_la_auth_req_params_s */
28778ee8d1cSJulian Grajkowski 	union {
28878ee8d1cSJulian Grajkowski 		uint8_t inner_prefix_sz;
28978ee8d1cSJulian Grajkowski 		/**< Size in bytes of the inner prefix data */
29078ee8d1cSJulian Grajkowski 
29178ee8d1cSJulian Grajkowski 		uint8_t aad_sz;
29278ee8d1cSJulian Grajkowski 		/**< Size in bytes of padded AAD data to prefix to the packet
29378ee8d1cSJulian Grajkowski 		 * for CCM
29478ee8d1cSJulian Grajkowski 		 *  or GCM processing */
29578ee8d1cSJulian Grajkowski 	} u2;
29678ee8d1cSJulian Grajkowski 
29778ee8d1cSJulian Grajkowski 	uint8_t resrvd1;
29878ee8d1cSJulian Grajkowski 	/**< reserved */
29978ee8d1cSJulian Grajkowski 
30078ee8d1cSJulian Grajkowski 	uint8_t hash_state_sz;
30178ee8d1cSJulian Grajkowski 	/**< Number of quad words of inner and outer hash prefix data to process
30278ee8d1cSJulian Grajkowski 	 * Maximum size is 240 */
30378ee8d1cSJulian Grajkowski 
30478ee8d1cSJulian Grajkowski 	uint8_t auth_res_sz;
30578ee8d1cSJulian Grajkowski 	/**< Size in bytes of the authentication result */
30678ee8d1cSJulian Grajkowski } icp_qat_la_auth_req_params_t;
30778ee8d1cSJulian Grajkowski 
30878ee8d1cSJulian Grajkowski /* Header (LW's 0 - 5) of struct icp_qat_fw_la_bulk_req_s */
30978ee8d1cSJulian Grajkowski typedef struct icp_qat_la_bulk_req_hdr_s {
31078ee8d1cSJulian Grajkowski 	/**< LWs 0-1 */
31178ee8d1cSJulian Grajkowski 	icp_qat_fw_comn_req_hdr_t comn_hdr;
31278ee8d1cSJulian Grajkowski 	/**< Common request header - for Service Command Id,
31378ee8d1cSJulian Grajkowski 	 * use service-specific Crypto Command Id.
31478ee8d1cSJulian Grajkowski 	 * Service Specific Flags - use Symmetric Crypto Command Flags
31578ee8d1cSJulian Grajkowski 	 * (all of cipher, auth, SSL3, TLS and MGF,
31678ee8d1cSJulian Grajkowski 	 * excluding TRNG - field unused) */
31778ee8d1cSJulian Grajkowski 
31878ee8d1cSJulian Grajkowski 	/**< LWs 2-5 */
31978ee8d1cSJulian Grajkowski 	icp_qat_fw_comn_req_hdr_cd_pars_t cd_pars;
32078ee8d1cSJulian Grajkowski 	/**< Common Request content descriptor field which points either to a
32178ee8d1cSJulian Grajkowski 	 * content descriptor
32278ee8d1cSJulian Grajkowski 	 * parameter block or contains the service-specific data itself. */
32378ee8d1cSJulian Grajkowski } icp_qat_la_bulk_req_hdr_t;
32478ee8d1cSJulian Grajkowski 
32578ee8d1cSJulian Grajkowski /** Footer (LW's 26 - 31) of struct icp_qat_fw_la_bulk_req_s */
32678ee8d1cSJulian Grajkowski typedef struct icp_qat_la_bulk_req_ftr_s {
32778ee8d1cSJulian Grajkowski 	/**< LW 0 - equivalent to LW26 of icp_qat_fw_la_bulk_req_t */
32878ee8d1cSJulian Grajkowski 	icp_qat_la_auth_req_params_t serv_specif_rqpars;
32978ee8d1cSJulian Grajkowski 	/**< Common request service-specific parameter field */
33078ee8d1cSJulian Grajkowski 
33178ee8d1cSJulian Grajkowski 	/**< LW's 1-5, equivalent to LWs 27-31 of icp_qat_fw_la_bulk_req_s */
33278ee8d1cSJulian Grajkowski 	icp_qat_fw_comn_req_cd_ctrl_t cd_ctrl;
33378ee8d1cSJulian Grajkowski 	/**< Common request content descriptor control block -
33478ee8d1cSJulian Grajkowski 	 * this field is service-specific */
33578ee8d1cSJulian Grajkowski } icp_qat_la_bulk_req_ftr_t;
33678ee8d1cSJulian Grajkowski 
33778ee8d1cSJulian Grajkowski /**
33878ee8d1cSJulian Grajkowski  ***
33978ee8d1cSJulian Grajkowski  *******************************************************************************
34078ee8d1cSJulian Grajkowski  * @ingroup LacSym
34178ee8d1cSJulian Grajkowski  *      Compile time check of lac_sym_bulk_cookie_t
34278ee8d1cSJulian Grajkowski  *
34378ee8d1cSJulian Grajkowski  * @description
34478ee8d1cSJulian Grajkowski  *      Performs a compile time check of lac_sym_bulk_cookie_t to ensure IA
34578ee8d1cSJulian Grajkowski  *      assumptions are valid.
34678ee8d1cSJulian Grajkowski  *
34778ee8d1cSJulian Grajkowski  *****************************************************************************/
34878ee8d1cSJulian Grajkowski void LacSym_CompileTimeAssertions(void);
34978ee8d1cSJulian Grajkowski 
35078ee8d1cSJulian Grajkowski void LacDp_WriteRingMsgFull(CpaCySymDpOpData *pRequest,
35178ee8d1cSJulian Grajkowski 			    icp_qat_fw_la_bulk_req_t *pCurrentQatMsg);
35278ee8d1cSJulian Grajkowski void LacDp_WriteRingMsgOpt(CpaCySymDpOpData *pRequest,
35378ee8d1cSJulian Grajkowski 			   icp_qat_fw_la_bulk_req_t *pCurrentQatMsg);
35478ee8d1cSJulian Grajkowski 
35578ee8d1cSJulian Grajkowski #endif /* LAC_SYM_H */
356