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_qat_hash.h 778ee8d1cSJulian Grajkowski * 878ee8d1cSJulian Grajkowski * @defgroup LacSymQatHash Hash QAT 978ee8d1cSJulian Grajkowski * 1078ee8d1cSJulian Grajkowski * @ingroup LacSymQat 1178ee8d1cSJulian Grajkowski * 1278ee8d1cSJulian Grajkowski * interfaces for populating qat structures for a hash operation 1378ee8d1cSJulian Grajkowski * 1478ee8d1cSJulian Grajkowski *****************************************************************************/ 1578ee8d1cSJulian Grajkowski 1678ee8d1cSJulian Grajkowski /*****************************************************************************/ 1778ee8d1cSJulian Grajkowski 1878ee8d1cSJulian Grajkowski #ifndef LAC_SYM_QAT_HASH_H 1978ee8d1cSJulian Grajkowski #define LAC_SYM_QAT_HASH_H 2078ee8d1cSJulian Grajkowski 2178ee8d1cSJulian Grajkowski /* 2278ee8d1cSJulian Grajkowski ****************************************************************************** 2378ee8d1cSJulian Grajkowski * Include public/global header files 2478ee8d1cSJulian Grajkowski ****************************************************************************** 2578ee8d1cSJulian Grajkowski */ 2678ee8d1cSJulian Grajkowski 2778ee8d1cSJulian Grajkowski #include "cpa.h" 2878ee8d1cSJulian Grajkowski #include "cpa_cy_sym.h" 2978ee8d1cSJulian Grajkowski #include "icp_qat_fw_la.h" 3078ee8d1cSJulian Grajkowski #include "icp_qat_hw.h" 3178ee8d1cSJulian Grajkowski 3278ee8d1cSJulian Grajkowski /* 3378ee8d1cSJulian Grajkowski ******************************************************************************* 3478ee8d1cSJulian Grajkowski * Include private header files 3578ee8d1cSJulian Grajkowski ******************************************************************************* 3678ee8d1cSJulian Grajkowski */ 3778ee8d1cSJulian Grajkowski #include "lac_common.h" 3878ee8d1cSJulian Grajkowski 3978ee8d1cSJulian Grajkowski /** 4078ee8d1cSJulian Grajkowski ****************************************************************************** 4178ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 4278ee8d1cSJulian Grajkowski * hash precomputes 4378ee8d1cSJulian Grajkowski * 4478ee8d1cSJulian Grajkowski * @description 4578ee8d1cSJulian Grajkowski * This structure contains infomation on the hash precomputes 4678ee8d1cSJulian Grajkowski * 4778ee8d1cSJulian Grajkowski *****************************************************************************/ 4878ee8d1cSJulian Grajkowski typedef struct lac_sym_qat_hash_precompute_info_s { 4978ee8d1cSJulian Grajkowski Cpa8U *pState1; 5078ee8d1cSJulian Grajkowski /**< state1 pointer */ 5178ee8d1cSJulian Grajkowski Cpa32U state1Size; 5278ee8d1cSJulian Grajkowski /**< state1 size */ 5378ee8d1cSJulian Grajkowski Cpa8U *pState2; 5478ee8d1cSJulian Grajkowski /**< state2 pointer */ 5578ee8d1cSJulian Grajkowski Cpa32U state2Size; 5678ee8d1cSJulian Grajkowski /**< state2 size */ 5778ee8d1cSJulian Grajkowski } lac_sym_qat_hash_precompute_info_t; 5878ee8d1cSJulian Grajkowski 5978ee8d1cSJulian Grajkowski /** 6078ee8d1cSJulian Grajkowski ****************************************************************************** 6178ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 6278ee8d1cSJulian Grajkowski * hash state prefix buffer info 6378ee8d1cSJulian Grajkowski * 6478ee8d1cSJulian Grajkowski * @description 6578ee8d1cSJulian Grajkowski * This structure contains infomation on the hash state prefix aad buffer 6678ee8d1cSJulian Grajkowski * 6778ee8d1cSJulian Grajkowski *****************************************************************************/ 6878ee8d1cSJulian Grajkowski typedef struct lac_sym_qat_hash_state_buffer_info_s { 6978ee8d1cSJulian Grajkowski Cpa64U pDataPhys; 7078ee8d1cSJulian Grajkowski /**< Physical pointer to the hash state prefix buffer */ 7178ee8d1cSJulian Grajkowski Cpa8U *pData; 7278ee8d1cSJulian Grajkowski /**< Virtual pointer to the hash state prefix buffer */ 7378ee8d1cSJulian Grajkowski Cpa8U stateStorageSzQuadWords; 7478ee8d1cSJulian Grajkowski /**< hash state storage size in quad words */ 7578ee8d1cSJulian Grajkowski Cpa8U prefixAadSzQuadWords; 7678ee8d1cSJulian Grajkowski /**< inner prefix/aad and outer prefix size in quad words */ 7778ee8d1cSJulian Grajkowski } lac_sym_qat_hash_state_buffer_info_t; 7878ee8d1cSJulian Grajkowski 7978ee8d1cSJulian Grajkowski /** 8078ee8d1cSJulian Grajkowski ****************************************************************************** 8178ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 8278ee8d1cSJulian Grajkowski * Init the hash specific part of the content descriptor. 8378ee8d1cSJulian Grajkowski * 8478ee8d1cSJulian Grajkowski * @description 8578ee8d1cSJulian Grajkowski * This function populates the hash specific fields of the control block 8678ee8d1cSJulian Grajkowski * and the hardware setup block for a digest session. This function sets 8778ee8d1cSJulian Grajkowski * the size param to hold the size of the hash setup block. 8878ee8d1cSJulian Grajkowski * 8978ee8d1cSJulian Grajkowski * In the case of hash only, the content descriptor will contain just a 9078ee8d1cSJulian Grajkowski * hash control block and hash setup block. In the case of chaining it 9178ee8d1cSJulian Grajkowski * will contain the hash control block and setup block along with the 9278ee8d1cSJulian Grajkowski * control block and setup blocks of additional services. 9378ee8d1cSJulian Grajkowski * 9478ee8d1cSJulian Grajkowski * Note: The memory for the content descriptor MUST be allocated prior to 9578ee8d1cSJulian Grajkowski * calling this function. The memory for the hash control block and hash 9678ee8d1cSJulian Grajkowski * setup block MUST be set to 0 prior to calling this function. 9778ee8d1cSJulian Grajkowski * 9878ee8d1cSJulian Grajkowski * @image html contentDescriptor.png "Content Descriptor" 9978ee8d1cSJulian Grajkowski * 10078ee8d1cSJulian Grajkowski * @param[in] pMsg Pointer to req Parameter Footer 10178ee8d1cSJulian Grajkowski * 10278ee8d1cSJulian Grajkowski * @param[in] pHashSetupData Pointer to the hash setup data as 10378ee8d1cSJulian Grajkowski * defined in the LAC API. 10478ee8d1cSJulian Grajkowski * 10578ee8d1cSJulian Grajkowski * @param[in] pHwBlockBase Pointer to the base of the hardware 10678ee8d1cSJulian Grajkowski * setup block 10778ee8d1cSJulian Grajkowski * 10878ee8d1cSJulian Grajkowski * @param[in] hashBlkOffsetInHwBlock Offset in quad-words from the base of 10978ee8d1cSJulian Grajkowski * the hardware setup block where the 11078ee8d1cSJulian Grajkowski * hash block will start. This offset 11178ee8d1cSJulian Grajkowski * is stored in the control block. It 11278ee8d1cSJulian Grajkowski * is used to figure out where to write 11378ee8d1cSJulian Grajkowski * that hash setup block. 11478ee8d1cSJulian Grajkowski * 11578ee8d1cSJulian Grajkowski * @param[in] nextSlice SliceID for next control block 11678ee8d1cSJulian Grajkowski * entry This value is known only by 11778ee8d1cSJulian Grajkowski * the calling component 11878ee8d1cSJulian Grajkowski * 11978ee8d1cSJulian Grajkowski * @param[in] qatHashMode QAT hash mode 12078ee8d1cSJulian Grajkowski * 12178ee8d1cSJulian Grajkowski * @param[in] useSymConstantsTable Indicate if Shared-SRAM constants table 12278ee8d1cSJulian Grajkowski * is used for this session. If TRUE, the 12378ee8d1cSJulian Grajkowski * h/w setup block is NOT populated 12478ee8d1cSJulian Grajkowski * 12578ee8d1cSJulian Grajkowski * @param[in] useOptimisedContentDesc Indicate if optimised content desc 12678ee8d1cSJulian Grajkowski * is used for this session. 12778ee8d1cSJulian Grajkowski * 128a977168cSMichal Gulbicki * @param[in] useStatefulSha3ContentDesc 129a977168cSMichal Gulbicki * Indicate if stateful SHA3 content desc 130a977168cSMichal Gulbicki * is used for this session. 131a977168cSMichal Gulbicki * 13278ee8d1cSJulian Grajkowski * @param[in] pPrecompute For auth mode, this is the pointer 13378ee8d1cSJulian Grajkowski * to the precompute data. Otherwise this 13478ee8d1cSJulian Grajkowski * should be set to NULL 13578ee8d1cSJulian Grajkowski * 13678ee8d1cSJulian Grajkowski * @param[out] pHashBlkSizeInBytes size in bytes of hash setup block 13778ee8d1cSJulian Grajkowski * 13878ee8d1cSJulian Grajkowski * @return void 13978ee8d1cSJulian Grajkowski * 14078ee8d1cSJulian Grajkowski *****************************************************************************/ 14178ee8d1cSJulian Grajkowski void 14278ee8d1cSJulian Grajkowski LacSymQat_HashContentDescInit(icp_qat_la_bulk_req_ftr_t *pMsg, 14378ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle, 14478ee8d1cSJulian Grajkowski const CpaCySymHashSetupData *pHashSetupData, 14578ee8d1cSJulian Grajkowski void *pHwBlockBase, 14678ee8d1cSJulian Grajkowski Cpa32U hashBlkOffsetInHwBlock, 14778ee8d1cSJulian Grajkowski icp_qat_fw_slice_t nextSlice, 14878ee8d1cSJulian Grajkowski icp_qat_hw_auth_mode_t qatHashMode, 14978ee8d1cSJulian Grajkowski CpaBoolean useSymConstantsTable, 15078ee8d1cSJulian Grajkowski CpaBoolean useOptimisedContentDesc, 151a977168cSMichal Gulbicki CpaBoolean useStatefulSha3ContentDesc, 15278ee8d1cSJulian Grajkowski lac_sym_qat_hash_precompute_info_t *pPrecompute, 15378ee8d1cSJulian Grajkowski Cpa32U *pHashBlkSizeInBytes); 15478ee8d1cSJulian Grajkowski 15578ee8d1cSJulian Grajkowski /** 15678ee8d1cSJulian Grajkowski ****************************************************************************** 15778ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 15878ee8d1cSJulian Grajkowski * Calculate the size of the hash state prefix aad buffer 15978ee8d1cSJulian Grajkowski * 16078ee8d1cSJulian Grajkowski * @description 16178ee8d1cSJulian Grajkowski * This function inspects the hash control block and based on the values 16278ee8d1cSJulian Grajkowski * in the fields, it calculates the size of the hash state prefix aad 16378ee8d1cSJulian Grajkowski * buffer. 16478ee8d1cSJulian Grajkowski * 16578ee8d1cSJulian Grajkowski * A partial packet processing request is possible at any stage during a 16678ee8d1cSJulian Grajkowski * hash session. In this case, there will always be space for the hash 16778ee8d1cSJulian Grajkowski * state storage field of the hash state prefix buffer. When there is 16878ee8d1cSJulian Grajkowski * AAD data just the inner prefix AAD data field is used. 16978ee8d1cSJulian Grajkowski * 17078ee8d1cSJulian Grajkowski * @param[in] pMsg Pointer to the Request Message 17178ee8d1cSJulian Grajkowski * 17278ee8d1cSJulian Grajkowski * @param[out] pHashStateBuf Pointer to hash state prefix buffer info 17378ee8d1cSJulian Grajkowski * structure. 17478ee8d1cSJulian Grajkowski * 17578ee8d1cSJulian Grajkowski * @return None 17678ee8d1cSJulian Grajkowski * 17778ee8d1cSJulian Grajkowski *****************************************************************************/ 17878ee8d1cSJulian Grajkowski void LacSymQat_HashStatePrefixAadBufferSizeGet( 17978ee8d1cSJulian Grajkowski icp_qat_la_bulk_req_ftr_t *pMsg, 18078ee8d1cSJulian Grajkowski lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf); 18178ee8d1cSJulian Grajkowski 18278ee8d1cSJulian Grajkowski /** 18378ee8d1cSJulian Grajkowski ****************************************************************************** 18478ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 18578ee8d1cSJulian Grajkowski * Populate the fields of the hash state prefix buffer 18678ee8d1cSJulian Grajkowski * 18778ee8d1cSJulian Grajkowski * @description 18878ee8d1cSJulian Grajkowski * This function populates the inner prefix/aad fields and/or the outer 18978ee8d1cSJulian Grajkowski * prefix field of the hash state prefix buffer. 19078ee8d1cSJulian Grajkowski * 19178ee8d1cSJulian Grajkowski * @param[in] pHashStateBuf Pointer to hash state prefix buffer info 19278ee8d1cSJulian Grajkowski * structure. 19378ee8d1cSJulian Grajkowski * 19478ee8d1cSJulian Grajkowski * @param[in] pMsg Pointer to the Request Message 19578ee8d1cSJulian Grajkowski * 19678ee8d1cSJulian Grajkowski * @param[in] pInnerPrefixAad Pointer to the Inner Prefix or Aad data 19778ee8d1cSJulian Grajkowski * This is NULL where if the data size is 0 19878ee8d1cSJulian Grajkowski * 19978ee8d1cSJulian Grajkowski * @param[in] innerPrefixSize Size of inner prefix/aad data in bytes 20078ee8d1cSJulian Grajkowski * 20178ee8d1cSJulian Grajkowski * @param[in] pOuterPrefix Pointer to the Outer Prefix data. This is 20278ee8d1cSJulian Grajkowski * NULL where the data size is 0. 20378ee8d1cSJulian Grajkowski * 20478ee8d1cSJulian Grajkowski * @param[in] outerPrefixSize Size of the outer prefix data in bytes 20578ee8d1cSJulian Grajkowski * 20678ee8d1cSJulian Grajkowski * @return void 20778ee8d1cSJulian Grajkowski * 20878ee8d1cSJulian Grajkowski *****************************************************************************/ 20978ee8d1cSJulian Grajkowski void LacSymQat_HashStatePrefixAadBufferPopulate( 21078ee8d1cSJulian Grajkowski lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf, 21178ee8d1cSJulian Grajkowski icp_qat_la_bulk_req_ftr_t *pMsg, 21278ee8d1cSJulian Grajkowski Cpa8U *pInnerPrefixAad, 21378ee8d1cSJulian Grajkowski Cpa8U innerPrefixSize, 21478ee8d1cSJulian Grajkowski Cpa8U *pOuterPrefix, 21578ee8d1cSJulian Grajkowski Cpa8U outerPrefixSize); 21678ee8d1cSJulian Grajkowski 21778ee8d1cSJulian Grajkowski /** 21878ee8d1cSJulian Grajkowski ****************************************************************************** 21978ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 22078ee8d1cSJulian Grajkowski * Populate the hash request params structure 22178ee8d1cSJulian Grajkowski * 22278ee8d1cSJulian Grajkowski * @description 22378ee8d1cSJulian Grajkowski * This function is passed a pointer to the 128B Request block. 22478ee8d1cSJulian Grajkowski * (This memory must be allocated prior to calling this function). It 22578ee8d1cSJulian Grajkowski * populates the fields of this block using the parameters as described 22678ee8d1cSJulian Grajkowski * below. It is also expected that this structure has been set to 0 22778ee8d1cSJulian Grajkowski * prior to calling this function. 22878ee8d1cSJulian Grajkowski * 22978ee8d1cSJulian Grajkowski * 23078ee8d1cSJulian Grajkowski * @param[in] pReq Pointer to 128B request block. 23178ee8d1cSJulian Grajkowski * 23278ee8d1cSJulian Grajkowski * @param[in] authOffsetInBytes start offset of data that the digest is to 23378ee8d1cSJulian Grajkowski * be computed on. 23478ee8d1cSJulian Grajkowski * 23578ee8d1cSJulian Grajkowski * @param[in] authLenInBytes Length of data digest calculated on 23678ee8d1cSJulian Grajkowski * 23778ee8d1cSJulian Grajkowski * @param[in] pService Pointer to service data 23878ee8d1cSJulian Grajkowski * 23978ee8d1cSJulian Grajkowski * @param[in] pHashStateBuf Pointer to hash state buffer info. This 24078ee8d1cSJulian Grajkowski * structure contains the pointers and sizes. 24178ee8d1cSJulian Grajkowski * If there is no hash state prefix buffer 24278ee8d1cSJulian Grajkowski * required, this parameter can be set to NULL 24378ee8d1cSJulian Grajkowski * 24478ee8d1cSJulian Grajkowski * @param[in] qatPacketType Packet type using QAT macros. The hash 24578ee8d1cSJulian Grajkowski * state buffer pointer and state size will be 24678ee8d1cSJulian Grajkowski * different depending on the packet type 24778ee8d1cSJulian Grajkowski * 24878ee8d1cSJulian Grajkowski * @param[in] hashResultSize Size of the final hash result in bytes. 24978ee8d1cSJulian Grajkowski * 25078ee8d1cSJulian Grajkowski * @param[in] digestVerify Indicates if verify is enabled or not 25178ee8d1cSJulian Grajkowski * 25278ee8d1cSJulian Grajkowski * @param[in] pAuthResult Virtual pointer to digest 25378ee8d1cSJulian Grajkowski * 25478ee8d1cSJulian Grajkowski * @return CPA_STATUS_SUCCESS or CPA_STATUS_FAIL 25578ee8d1cSJulian Grajkowski * 25678ee8d1cSJulian Grajkowski *****************************************************************************/ 25778ee8d1cSJulian Grajkowski CpaStatus LacSymQat_HashRequestParamsPopulate( 25878ee8d1cSJulian Grajkowski icp_qat_fw_la_bulk_req_t *pReq, 25978ee8d1cSJulian Grajkowski Cpa32U authOffsetInBytes, 26078ee8d1cSJulian Grajkowski Cpa32U authLenInBytes, 26178ee8d1cSJulian Grajkowski sal_service_t *pService, 26278ee8d1cSJulian Grajkowski lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf, 26378ee8d1cSJulian Grajkowski Cpa32U qatPacketType, 26478ee8d1cSJulian Grajkowski Cpa32U hashResultSize, 26578ee8d1cSJulian Grajkowski CpaBoolean digestVerify, 26678ee8d1cSJulian Grajkowski Cpa8U *pAuthResult, 26778ee8d1cSJulian Grajkowski CpaCySymHashAlgorithm alg, 26878ee8d1cSJulian Grajkowski void *data); 26978ee8d1cSJulian Grajkowski 27078ee8d1cSJulian Grajkowski /** 27178ee8d1cSJulian Grajkowski ****************************************************************************** 27278ee8d1cSJulian Grajkowski * @ingroup LacSymQatHash 27378ee8d1cSJulian Grajkowski * 27478ee8d1cSJulian Grajkowski * 27578ee8d1cSJulian Grajkowski * @description 27678ee8d1cSJulian Grajkowski * This fn returns the QAT values for hash algorithm and nested fields 27778ee8d1cSJulian Grajkowski * 27878ee8d1cSJulian Grajkowski * 27978ee8d1cSJulian Grajkowski * @param[in] pInstance Pointer to service instance. 28078ee8d1cSJulian Grajkowski * 28178ee8d1cSJulian Grajkowski * @param[in] qatHashMode value for hash mode on the fw qat 28278ee8d1cSJulian Grajkowski *interface. 28378ee8d1cSJulian Grajkowski * 28478ee8d1cSJulian Grajkowski * @param[in] apiHashMode value for hash mode on the QA API. 28578ee8d1cSJulian Grajkowski * 28678ee8d1cSJulian Grajkowski * @param[in] apiHashAlgorithm value for hash algorithm on the QA API. 28778ee8d1cSJulian Grajkowski * 28878ee8d1cSJulian Grajkowski * @param[out] pQatAlgorithm Pointer to return fw qat value for 28978ee8d1cSJulian Grajkowski *algorithm. 29078ee8d1cSJulian Grajkowski * 29178ee8d1cSJulian Grajkowski * @param[out] pQatNested Pointer to return fw qat value for nested. 29278ee8d1cSJulian Grajkowski * 29378ee8d1cSJulian Grajkowski * 29478ee8d1cSJulian Grajkowski * @return 29578ee8d1cSJulian Grajkowski * none 29678ee8d1cSJulian Grajkowski * 29778ee8d1cSJulian Grajkowski *****************************************************************************/ 29878ee8d1cSJulian Grajkowski void LacSymQat_HashGetCfgData(CpaInstanceHandle pInstance, 29978ee8d1cSJulian Grajkowski icp_qat_hw_auth_mode_t qatHashMode, 30078ee8d1cSJulian Grajkowski CpaCySymHashMode apiHashMode, 30178ee8d1cSJulian Grajkowski CpaCySymHashAlgorithm apiHashAlgorithm, 30278ee8d1cSJulian Grajkowski icp_qat_hw_auth_algo_t *pQatAlgorithm, 30378ee8d1cSJulian Grajkowski CpaBoolean *pQatNested); 30478ee8d1cSJulian Grajkowski 30578ee8d1cSJulian Grajkowski void LacSymQat_HashSetupReqParamsMetaData( 30678ee8d1cSJulian Grajkowski icp_qat_la_bulk_req_ftr_t *pMsg, 30778ee8d1cSJulian Grajkowski CpaInstanceHandle instanceHandle, 30878ee8d1cSJulian Grajkowski const CpaCySymHashSetupData *pHashSetupData, 30978ee8d1cSJulian Grajkowski CpaBoolean hashStateBuffer, 31078ee8d1cSJulian Grajkowski icp_qat_hw_auth_mode_t qatHashMode, 31178ee8d1cSJulian Grajkowski CpaBoolean digestVerify); 31278ee8d1cSJulian Grajkowski 31378ee8d1cSJulian Grajkowski #endif /* LAC_SYM_QAT_HASH_H */ 314