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