1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 /* $FreeBSD$ */
4
5 /**
6 *****************************************************************************
7 * @file lac_sym_qat_hash.h
8 *
9 * @defgroup LacSymQatHash Hash QAT
10 *
11 * @ingroup LacSymQat
12 *
13 * interfaces for populating qat structures for a hash operation
14 *
15 *****************************************************************************/
16
17 /*****************************************************************************/
18
19 #ifndef LAC_SYM_QAT_HASH_H
20 #define LAC_SYM_QAT_HASH_H
21
22 /*
23 ******************************************************************************
24 * Include public/global header files
25 ******************************************************************************
26 */
27
28 #include "cpa.h"
29 #include "cpa_cy_sym.h"
30 #include "icp_qat_fw_la.h"
31 #include "icp_qat_hw.h"
32
33 /*
34 *******************************************************************************
35 * Include private header files
36 *******************************************************************************
37 */
38 #include "lac_common.h"
39
40 /**
41 ******************************************************************************
42 * @ingroup LacSymQatHash
43 * hash precomputes
44 *
45 * @description
46 * This structure contains infomation on the hash precomputes
47 *
48 *****************************************************************************/
49 typedef struct lac_sym_qat_hash_precompute_info_s {
50 Cpa8U *pState1;
51 /**< state1 pointer */
52 Cpa32U state1Size;
53 /**< state1 size */
54 Cpa8U *pState2;
55 /**< state2 pointer */
56 Cpa32U state2Size;
57 /**< state2 size */
58 } lac_sym_qat_hash_precompute_info_t;
59
60 /**
61 ******************************************************************************
62 * @ingroup LacSymQatHash
63 * hash state prefix buffer info
64 *
65 * @description
66 * This structure contains infomation on the hash state prefix aad buffer
67 *
68 *****************************************************************************/
69 typedef struct lac_sym_qat_hash_state_buffer_info_s {
70 Cpa64U pDataPhys;
71 /**< Physical pointer to the hash state prefix buffer */
72 Cpa8U *pData;
73 /**< Virtual pointer to the hash state prefix buffer */
74 Cpa8U stateStorageSzQuadWords;
75 /**< hash state storage size in quad words */
76 Cpa8U prefixAadSzQuadWords;
77 /**< inner prefix/aad and outer prefix size in quad words */
78 } lac_sym_qat_hash_state_buffer_info_t;
79
80 /**
81 ******************************************************************************
82 * @ingroup LacSymQatHash
83 * Init the hash specific part of the content descriptor.
84 *
85 * @description
86 * This function populates the hash specific fields of the control block
87 * and the hardware setup block for a digest session. This function sets
88 * the size param to hold the size of the hash setup block.
89 *
90 * In the case of hash only, the content descriptor will contain just a
91 * hash control block and hash setup block. In the case of chaining it
92 * will contain the hash control block and setup block along with the
93 * control block and setup blocks of additional services.
94 *
95 * Note: The memory for the content descriptor MUST be allocated prior to
96 * calling this function. The memory for the hash control block and hash
97 * setup block MUST be set to 0 prior to calling this function.
98 *
99 * @image html contentDescriptor.png "Content Descriptor"
100 *
101 * @param[in] pMsg Pointer to req Parameter Footer
102 *
103 * @param[in] pHashSetupData Pointer to the hash setup data as
104 * defined in the LAC API.
105 *
106 * @param[in] pHwBlockBase Pointer to the base of the hardware
107 * setup block
108 *
109 * @param[in] hashBlkOffsetInHwBlock Offset in quad-words from the base of
110 * the hardware setup block where the
111 * hash block will start. This offset
112 * is stored in the control block. It
113 * is used to figure out where to write
114 * that hash setup block.
115 *
116 * @param[in] nextSlice SliceID for next control block
117 * entry This value is known only by
118 * the calling component
119 *
120 * @param[in] qatHashMode QAT hash mode
121 *
122 * @param[in] useSymConstantsTable Indicate if Shared-SRAM constants table
123 * is used for this session. If TRUE, the
124 * h/w setup block is NOT populated
125 *
126 * @param[in] useOptimisedContentDesc Indicate if optimised content desc
127 * is used for this session.
128 *
129 * @param[in] useStatefulSha3ContentDesc
130 * Indicate if stateful SHA3 content desc
131 * is used for this session.
132 *
133 * @param[in] pPrecompute For auth mode, this is the pointer
134 * to the precompute data. Otherwise this
135 * should be set to NULL
136 *
137 * @param[out] pHashBlkSizeInBytes size in bytes of hash setup block
138 *
139 * @return void
140 *
141 *****************************************************************************/
142 void
143 LacSymQat_HashContentDescInit(icp_qat_la_bulk_req_ftr_t *pMsg,
144 CpaInstanceHandle instanceHandle,
145 const CpaCySymHashSetupData *pHashSetupData,
146 void *pHwBlockBase,
147 Cpa32U hashBlkOffsetInHwBlock,
148 icp_qat_fw_slice_t nextSlice,
149 icp_qat_hw_auth_mode_t qatHashMode,
150 CpaBoolean useSymConstantsTable,
151 CpaBoolean useOptimisedContentDesc,
152 CpaBoolean useStatefulSha3ContentDesc,
153 lac_sym_qat_hash_precompute_info_t *pPrecompute,
154 Cpa32U *pHashBlkSizeInBytes);
155
156 /**
157 ******************************************************************************
158 * @ingroup LacSymQatHash
159 * Calculate the size of the hash state prefix aad buffer
160 *
161 * @description
162 * This function inspects the hash control block and based on the values
163 * in the fields, it calculates the size of the hash state prefix aad
164 * buffer.
165 *
166 * A partial packet processing request is possible at any stage during a
167 * hash session. In this case, there will always be space for the hash
168 * state storage field of the hash state prefix buffer. When there is
169 * AAD data just the inner prefix AAD data field is used.
170 *
171 * @param[in] pMsg Pointer to the Request Message
172 *
173 * @param[out] pHashStateBuf Pointer to hash state prefix buffer info
174 * structure.
175 *
176 * @return None
177 *
178 *****************************************************************************/
179 void LacSymQat_HashStatePrefixAadBufferSizeGet(
180 icp_qat_la_bulk_req_ftr_t *pMsg,
181 lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf);
182
183 /**
184 ******************************************************************************
185 * @ingroup LacSymQatHash
186 * Populate the fields of the hash state prefix buffer
187 *
188 * @description
189 * This function populates the inner prefix/aad fields and/or the outer
190 * prefix field of the hash state prefix buffer.
191 *
192 * @param[in] pHashStateBuf Pointer to hash state prefix buffer info
193 * structure.
194 *
195 * @param[in] pMsg Pointer to the Request Message
196 *
197 * @param[in] pInnerPrefixAad Pointer to the Inner Prefix or Aad data
198 * This is NULL where if the data size is 0
199 *
200 * @param[in] innerPrefixSize Size of inner prefix/aad data in bytes
201 *
202 * @param[in] pOuterPrefix Pointer to the Outer Prefix data. This is
203 * NULL where the data size is 0.
204 *
205 * @param[in] outerPrefixSize Size of the outer prefix data in bytes
206 *
207 * @return void
208 *
209 *****************************************************************************/
210 void LacSymQat_HashStatePrefixAadBufferPopulate(
211 lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf,
212 icp_qat_la_bulk_req_ftr_t *pMsg,
213 Cpa8U *pInnerPrefixAad,
214 Cpa8U innerPrefixSize,
215 Cpa8U *pOuterPrefix,
216 Cpa8U outerPrefixSize);
217
218 /**
219 ******************************************************************************
220 * @ingroup LacSymQatHash
221 * Populate the hash request params structure
222 *
223 * @description
224 * This function is passed a pointer to the 128B Request block.
225 * (This memory must be allocated prior to calling this function). It
226 * populates the fields of this block using the parameters as described
227 * below. It is also expected that this structure has been set to 0
228 * prior to calling this function.
229 *
230 *
231 * @param[in] pReq Pointer to 128B request block.
232 *
233 * @param[in] authOffsetInBytes start offset of data that the digest is to
234 * be computed on.
235 *
236 * @param[in] authLenInBytes Length of data digest calculated on
237 *
238 * @param[in] pService Pointer to service data
239 *
240 * @param[in] pHashStateBuf Pointer to hash state buffer info. This
241 * structure contains the pointers and sizes.
242 * If there is no hash state prefix buffer
243 * required, this parameter can be set to NULL
244 *
245 * @param[in] qatPacketType Packet type using QAT macros. The hash
246 * state buffer pointer and state size will be
247 * different depending on the packet type
248 *
249 * @param[in] hashResultSize Size of the final hash result in bytes.
250 *
251 * @param[in] digestVerify Indicates if verify is enabled or not
252 *
253 * @param[in] pAuthResult Virtual pointer to digest
254 *
255 * @return CPA_STATUS_SUCCESS or CPA_STATUS_FAIL
256 *
257 *****************************************************************************/
258 CpaStatus LacSymQat_HashRequestParamsPopulate(
259 icp_qat_fw_la_bulk_req_t *pReq,
260 Cpa32U authOffsetInBytes,
261 Cpa32U authLenInBytes,
262 sal_service_t *pService,
263 lac_sym_qat_hash_state_buffer_info_t *pHashStateBuf,
264 Cpa32U qatPacketType,
265 Cpa32U hashResultSize,
266 CpaBoolean digestVerify,
267 Cpa8U *pAuthResult,
268 CpaCySymHashAlgorithm alg,
269 void *data);
270
271 /**
272 ******************************************************************************
273 * @ingroup LacSymQatHash
274 *
275 *
276 * @description
277 * This fn returns the QAT values for hash algorithm and nested fields
278 *
279 *
280 * @param[in] pInstance Pointer to service instance.
281 *
282 * @param[in] qatHashMode value for hash mode on the fw qat
283 *interface.
284 *
285 * @param[in] apiHashMode value for hash mode on the QA API.
286 *
287 * @param[in] apiHashAlgorithm value for hash algorithm on the QA API.
288 *
289 * @param[out] pQatAlgorithm Pointer to return fw qat value for
290 *algorithm.
291 *
292 * @param[out] pQatNested Pointer to return fw qat value for nested.
293 *
294 *
295 * @return
296 * none
297 *
298 *****************************************************************************/
299 void LacSymQat_HashGetCfgData(CpaInstanceHandle pInstance,
300 icp_qat_hw_auth_mode_t qatHashMode,
301 CpaCySymHashMode apiHashMode,
302 CpaCySymHashAlgorithm apiHashAlgorithm,
303 icp_qat_hw_auth_algo_t *pQatAlgorithm,
304 CpaBoolean *pQatNested);
305
306 void LacSymQat_HashSetupReqParamsMetaData(
307 icp_qat_la_bulk_req_ftr_t *pMsg,
308 CpaInstanceHandle instanceHandle,
309 const CpaCySymHashSetupData *pHashSetupData,
310 CpaBoolean hashStateBuffer,
311 icp_qat_hw_auth_mode_t qatHashMode,
312 CpaBoolean digestVerify);
313
314 #endif /* LAC_SYM_QAT_HASH_H */
Cache object: 1f5fd6198bd81895562dddc64888508f
|