1 /*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16 #include "hitls_build.h"
17 #ifdef HITLS_CRYPTO_PROVIDER
18
19 #include "crypt_eal_implprovider.h"
20 #include "crypt_md5.h"
21 #include "crypt_sha1.h"
22 #include "crypt_sha2.h"
23 #include "crypt_sha3.h"
24 #include "crypt_sm3.h"
25 #include "bsl_sal.h"
26 #include "crypt_errno.h"
27 #include "bsl_log_internal.h"
28 #include "bsl_err_internal.h"
29 #include "crypt_ealinit.h"
30
31 #define MD_DEINIT_FUNC(name) \
32 static int32_t CRYPT_##name##_DeinitWrapper(void *ctx) \
33 { \
34 CRYPT_##name##_Deinit(ctx); \
35 return CRYPT_SUCCESS; \
36 }
37
38 MD_DEINIT_FUNC(MD5)
MD_DEINIT_FUNC(SHA1)39 MD_DEINIT_FUNC(SHA1)
40 MD_DEINIT_FUNC(SHA2_224)
41 MD_DEINIT_FUNC(SHA2_256)
42 MD_DEINIT_FUNC(SHA2_384)
43 MD_DEINIT_FUNC(SHA2_512)
44 MD_DEINIT_FUNC(SHA3_224)
45 MD_DEINIT_FUNC(SHA3_256)
46 MD_DEINIT_FUNC(SHA3_384)
47 MD_DEINIT_FUNC(SHA3_512)
48 MD_DEINIT_FUNC(SHAKE128)
49 MD_DEINIT_FUNC(SHAKE256)
50 MD_DEINIT_FUNC(SM3)
51
52 static void *CRYPT_EAL_DefMdNewCtx(void *provCtx, int32_t algId)
53 {
54 (void) provCtx;
55 #ifdef HITLS_CRYPTO_ASM_CHECK
56 if (CRYPT_ASMCAP_Md(algId) != CRYPT_SUCCESS) {
57 BSL_ERR_PUSH_ERROR(CRYPT_EAL_ALG_ASM_NOT_SUPPORT);
58 return NULL;
59 }
60 #endif
61 switch (algId) {
62 #ifdef HITLS_CRYPTO_MD5
63 case CRYPT_MD_MD5:
64 return CRYPT_MD5_NewCtx();
65 #endif
66 #ifdef HITLS_CRYPTO_SHA1
67 case CRYPT_MD_SHA1:
68 return CRYPT_SHA1_NewCtx();
69 #endif
70 #ifdef HITLS_CRYPTO_SHA224
71 case CRYPT_MD_SHA224:
72 return CRYPT_SHA2_224_NewCtx();
73 #endif
74 #ifdef HITLS_CRYPTO_SHA256
75 case CRYPT_MD_SHA256:
76 return CRYPT_SHA2_256_NewCtx();
77 #endif
78 #ifdef HITLS_CRYPTO_SHA384
79 case CRYPT_MD_SHA384:
80 return CRYPT_SHA2_384_NewCtx();
81 #endif
82 #ifdef HITLS_CRYPTO_SHA512
83 case CRYPT_MD_SHA512:
84 return CRYPT_SHA2_512_NewCtx();
85 #endif
86 #ifdef HITLS_CRYPTO_SHA3
87 case CRYPT_MD_SHA3_224:
88 case CRYPT_MD_SHA3_256:
89 case CRYPT_MD_SHA3_384:
90 case CRYPT_MD_SHA3_512:
91 return CRYPT_SHA3_256_NewCtx();
92 case CRYPT_MD_SHAKE128:
93 case CRYPT_MD_SHAKE256:
94 return CRYPT_SHAKE256_NewCtx();
95 #endif
96 #ifdef HITLS_CRYPTO_SM3
97 case CRYPT_MD_SM3:
98 return CRYPT_SM3_NewCtx();
99 #endif
100 default:
101 BSL_ERR_PUSH_ERROR(CRYPT_PROVIDER_NOT_SUPPORT);
102 return NULL;
103 }
104 }
105
CRYPT_EAL_DefMdCtrl(void * ctx,int32_t cmd,void * val,uint32_t valLen)106 int32_t CRYPT_EAL_DefMdCtrl(void *ctx, int32_t cmd, void *val, uint32_t valLen)
107 {
108 (void) ctx;
109 (void) cmd;
110 (void) val;
111 (void) valLen;
112 BSL_ERR_PUSH_ERROR(CRYPT_NOT_SUPPORT);
113 return CRYPT_NOT_SUPPORT;
114 }
115
116 const CRYPT_EAL_Func g_defEalMdMd5[] = {
117 #ifdef HITLS_CRYPTO_MD5
118 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
119 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_MD5_Init},
120 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_MD5_Update},
121 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_MD5_Final},
122 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_MD5_DeinitWrapper},
123 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_MD5_DupCtx},
124 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
125 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_MD5_FreeCtx},
126 #endif
127 CRYPT_EAL_FUNC_END,
128 };
129
130 const CRYPT_EAL_Func g_defEalMdSha1[] = {
131 #ifdef HITLS_CRYPTO_SHA1
132 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
133 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA1_Init},
134 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA1_Update},
135 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA1_Final},
136 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA1_DeinitWrapper},
137 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA1_DupCtx},
138 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
139 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA1_FreeCtx},
140 #endif
141 CRYPT_EAL_FUNC_END,
142 };
143
144 const CRYPT_EAL_Func g_defEalMdSha224[] = {
145 #ifdef HITLS_CRYPTO_SHA224
146 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
147 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA2_224_Init},
148 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA2_224_Update},
149 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA2_224_Final},
150 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA2_224_DeinitWrapper},
151 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA2_224_DupCtx},
152 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
153 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA2_224_FreeCtx},
154 #endif
155 CRYPT_EAL_FUNC_END,
156 };
157
158 const CRYPT_EAL_Func g_defEalMdSha256[] = {
159 #ifdef HITLS_CRYPTO_SHA256
160 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
161 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA2_256_Init},
162 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA2_256_Update},
163 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA2_256_Final},
164 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA2_256_DeinitWrapper},
165 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA2_256_DupCtx},
166 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
167 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA2_256_FreeCtx},
168 #endif
169 CRYPT_EAL_FUNC_END,
170 };
171
172 const CRYPT_EAL_Func g_defEalMdSha384[] = {
173 #ifdef HITLS_CRYPTO_SHA384
174 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
175 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA2_384_Init},
176 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA2_384_Update},
177 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA2_384_Final},
178 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA2_384_DeinitWrapper},
179 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA2_384_DupCtx},
180 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
181 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA2_384_FreeCtx},
182 #endif
183 CRYPT_EAL_FUNC_END,
184 };
185
186 const CRYPT_EAL_Func g_defEalMdSha512[] = {
187 #ifdef HITLS_CRYPTO_SHA512
188 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
189 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA2_512_Init},
190 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA2_512_Update},
191 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA2_512_Final},
192 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA2_512_DeinitWrapper},
193 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA2_512_DupCtx},
194 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
195 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA2_512_FreeCtx},
196 #endif
197 CRYPT_EAL_FUNC_END,
198 };
199
200 const CRYPT_EAL_Func g_defEalMdSha3224[] = {
201 #ifdef HITLS_CRYPTO_SHA3
202 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
203 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA3_224_Init},
204 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA3_224_Update},
205 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA3_224_Final},
206 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA3_224_DeinitWrapper},
207 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA3_224_DupCtx},
208 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
209 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA3_224_FreeCtx},
210 #endif
211 CRYPT_EAL_FUNC_END,
212 };
213
214 const CRYPT_EAL_Func g_defEalMdSha3256[] = {
215 #ifdef HITLS_CRYPTO_SHA3
216 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
217 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA3_256_Init},
218 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA3_256_Update},
219 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA3_256_Final},
220 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA3_256_DeinitWrapper},
221 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA3_256_DupCtx},
222 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
223 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA3_256_FreeCtx},
224 #endif
225 CRYPT_EAL_FUNC_END,
226 };
227
228 const CRYPT_EAL_Func g_defEalMdSha3384[] = {
229 #ifdef HITLS_CRYPTO_SHA3
230 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
231 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA3_384_Init},
232 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA3_384_Update},
233 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA3_384_Final},
234 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA3_384_DeinitWrapper},
235 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA3_384_DupCtx},
236 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
237 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA3_384_FreeCtx},
238 #endif
239 CRYPT_EAL_FUNC_END,
240 };
241
242 const CRYPT_EAL_Func g_defEalMdSha3512[] = {
243 #ifdef HITLS_CRYPTO_SHA3
244 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
245 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHA3_512_Init},
246 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHA3_512_Update},
247 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHA3_512_Final},
248 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHA3_512_DeinitWrapper},
249 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHA3_512_DupCtx},
250 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
251 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHA3_512_FreeCtx},
252 #endif
253 CRYPT_EAL_FUNC_END,
254 };
255
256 const CRYPT_EAL_Func g_defEalMdShake128[] = {
257 #ifdef HITLS_CRYPTO_SHA3
258 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
259 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHAKE128_Init},
260 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHAKE128_Update},
261 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHAKE128_Final},
262 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHAKE128_DeinitWrapper},
263 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHAKE128_DupCtx},
264 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
265 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHAKE128_FreeCtx},
266 {CRYPT_EAL_IMPLMD_SQUEEZE, (CRYPT_EAL_ImplMdSqueeze)CRYPT_SHAKE128_Squeeze},
267 #endif
268 CRYPT_EAL_FUNC_END,
269 };
270
271 const CRYPT_EAL_Func g_defEalMdShake256[] = {
272 #ifdef HITLS_CRYPTO_SHA3
273 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
274 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SHAKE256_Init},
275 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SHAKE256_Update},
276 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SHAKE256_Final},
277 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SHAKE256_DeinitWrapper},
278 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SHAKE256_DupCtx},
279 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
280 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SHAKE256_FreeCtx},
281 {CRYPT_EAL_IMPLMD_SQUEEZE, (CRYPT_EAL_ImplMdSqueeze)CRYPT_SHAKE256_Squeeze},
282 #endif
283 CRYPT_EAL_FUNC_END,
284 };
285
286 const CRYPT_EAL_Func g_defEalMdSm3[] = {
287 #ifdef HITLS_CRYPTO_SM3
288 {CRYPT_EAL_IMPLMD_NEWCTX, (CRYPT_EAL_ImplMdNewCtx)CRYPT_EAL_DefMdNewCtx},
289 {CRYPT_EAL_IMPLMD_INITCTX, (CRYPT_EAL_ImplMdInitCtx)CRYPT_SM3_Init},
290 {CRYPT_EAL_IMPLMD_UPDATE, (CRYPT_EAL_ImplMdUpdate)CRYPT_SM3_Update},
291 {CRYPT_EAL_IMPLMD_FINAL, (CRYPT_EAL_ImplMdFinal)CRYPT_SM3_Final},
292 {CRYPT_EAL_IMPLMD_DEINITCTX, (CRYPT_EAL_ImplMdDeInitCtx)CRYPT_SM3_DeinitWrapper},
293 {CRYPT_EAL_IMPLMD_DUPCTX, (CRYPT_EAL_ImplMdDupCtx)CRYPT_SM3_DupCtx},
294 {CRYPT_EAL_IMPLMD_CTRL, (CRYPT_EAL_ImplMdCtrl)CRYPT_EAL_DefMdCtrl},
295 {CRYPT_EAL_IMPLMD_FREECTX, (CRYPT_EAL_ImplMdFreeCtx)CRYPT_SM3_FreeCtx},
296 #endif
297 CRYPT_EAL_FUNC_END,
298 };
299
300 #endif /* HITLS_CRYPTO_PROVIDER */