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