1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright(c) 2007-2022 Intel Corporation */
3 
4 /**
5  *****************************************************************************
6  * @file lac_sym_qat_hash_defs_lookup.h
7  *
8  * @defgroup LacSymQatHashDefsLookup  Hash Defs Lookup
9  *
10  * @ingroup  LacSymQatHash
11  *
12  * API to be used for the hash defs lookup table.
13  *
14  *****************************************************************************/
15 
16 #ifndef LAC_SYM_QAT_HASH_DEFS_LOOKUP_P_H
17 #define LAC_SYM_QAT_HASH_DEFS_LOOKUP_P_H
18 
19 #include "cpa.h"
20 #include "cpa_cy_sym.h"
21 
22 /**
23 ******************************************************************************
24 * @ingroup LacSymQatHashDefsLookup
25 *      Finishing Hash algorithm
26 * @description
27 *      This define points to the last available hash algorithm
28 * @NOTE: If a new algorithm is added to the api, this #define
29 * MUST be updated to being the last hash algorithm in the struct
30 * CpaCySymHashAlgorithm in the file cpa_cy_sym.h
31 *****************************************************************************/
32 #define CPA_CY_HASH_ALG_END CPA_CY_SYM_HASH_SM3
33 
34 /***************************************************************************/
35 
36 /**
37 ******************************************************************************
38 * @ingroup LacSymQatHashDefsLookup
39 *      hash algorithm specific structure
40 * @description
41 *      This structure contain constants specific to an algorithm.
42 *****************************************************************************/
43 typedef struct lac_sym_qat_hash_alg_info_s {
44 	Cpa32U digestLength; /**< Digest length in bytes */
45 	Cpa32U blockLength;  /**< Block length in bytes */
46 	Cpa8U *initState;    /**< Initialiser state for hash algorithm */
47 	Cpa32U stateSize;    /**< size of above state in bytes */
48 } lac_sym_qat_hash_alg_info_t;
49 
50 /**
51 ******************************************************************************
52 * @ingroup LacSymQatHashDefsLookup
53 *      hash qat specific structure
54 * @description
55 *      This structure contain constants as defined by the QAT for an
56 *      algorithm.
57 *****************************************************************************/
58 typedef struct lac_sym_qat_hash_qat_info_s {
59 	Cpa32U algoEnc;      /**< QAT Algorithm encoding */
60 	Cpa32U authCounter;  /**< Counter value for Auth */
61 	Cpa32U state1Length; /**< QAT state1 length in bytes */
62 	Cpa32U state2Length; /**< QAT state2 length in bytes */
63 } lac_sym_qat_hash_qat_info_t;
64 
65 /**
66 ******************************************************************************
67 * @ingroup LacSymQatHashDefsLookup
68 *      hash defs structure
69 * @description
70 *      This type contains pointers to the hash algorithm structure and
71 *      to the hash qat specific structure
72 *****************************************************************************/
73 typedef struct lac_sym_qat_hash_defs_s {
74 	lac_sym_qat_hash_alg_info_t *algInfo;
75 	/**< pointer to hash info structure */
76 	lac_sym_qat_hash_qat_info_t *qatInfo;
77 	/**< pointer to hash QAT info structure */
78 } lac_sym_qat_hash_defs_t;
79 
80 /**
81 *******************************************************************************
82 * @ingroup LacSymQatHashDefsLookup
83 *      initialise the hash lookup table
84 *
85 * @description
86 *      This function initialises the digest lookup table.
87 *
88 * @note
89 *      This function does not have a corresponding shutdown function.
90 *
91 * @return CPA_STATUS_SUCCESS   Operation successful
92 * @return CPA_STATUS_RESOURCE  Allocating of hash lookup table failed
93 *
94 *****************************************************************************/
95 CpaStatus LacSymQat_HashLookupInit(CpaInstanceHandle instanceHandle);
96 
97 /**
98 *******************************************************************************
99 * @ingroup LacSymQatHashDefsLookup
100 *      get hash algorithm specific structure from lookup table
101 *
102 * @description
103 *      This function looks up the hash lookup array for a structure
104 *      containing data specific to a hash algorithm. The hashAlgorithm enum
105 *      value MUST be in the correct range prior to calling this function.
106 *
107 * @param[in]  hashAlgorithm     Hash Algorithm
108 * @param[out] ppHashAlgInfo     Hash Alg Info structure
109 *
110 * @return None
111 *
112 *****************************************************************************/
113 void LacSymQat_HashAlgLookupGet(CpaInstanceHandle instanceHandle,
114 				CpaCySymHashAlgorithm hashAlgorithm,
115 				lac_sym_qat_hash_alg_info_t **ppHashAlgInfo);
116 
117 /**
118 *******************************************************************************
119 * @ingroup LacSymQatHashDefsLookup
120 *      get hash defintions from lookup table.
121 *
122 * @description
123 *      This function looks up the hash lookup array for a structure
124 *      containing data specific to a hash algorithm. This includes both
125 *      algorithm specific info and qat specific infro. The hashAlgorithm enum
126 *      value MUST be in the correct range prior to calling this function.
127 *
128 * @param[in]  hashAlgorithm     Hash Algorithm
129 * @param[out] ppHashDefsInfo    Hash Defs structure
130 *
131 * @return void
132 *
133 *****************************************************************************/
134 void LacSymQat_HashDefsLookupGet(CpaInstanceHandle instanceHandle,
135 				 CpaCySymHashAlgorithm hashAlgorithm,
136 				 lac_sym_qat_hash_defs_t **ppHashDefsInfo);
137 
138 #endif /* LAC_SYM_QAT_HASH_DEFS_LOOKUP_P_H */
139