• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */