API参考
载入中...
搜索中...
未找到
crypt_eal_implprovider.h
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
21
22#ifndef CRYPT_EAL_IMPLPROVIDER_H
23#define CRYPT_EAL_IMPLPROVIDER_H
24
25#include <stdint.h>
26#include "bsl_params.h"
27#include "crypt_types.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif // __cplusplus
32
33#define CRYPT_EAL_FUNC_END {0, NULL}
34#define CRYPT_EAL_ALGINFO_END {0, NULL, NULL}
35
36typedef struct {
37 int32_t algId; // implemented algorithm id, such as aes128cbc, rsa sign
38 const CRYPT_EAL_Func *implFunc; // implemented algorithm callback
39 const char *attr; // implemented algorithm attribute
41
42typedef void (CRYPT_EAL_CvtVoid)(void);
43
44/* capFuncs */
45#define CRYPT_EAL_CAP_GETENTROPY 1 // Callback definition CRYPT_EAL_GetEntropyCb, in crypt_types.h
46#define CRYPT_EAL_CAP_CLEANENTROPY 2 // Callback definition CRYPT_EAL_CleanEntropyCb
47#define CRYPT_EAL_CAP_GETNONCE 3 // Callback definition CRYPT_EAL_GetNonceCb
48#define CRYPT_EAL_CAP_CLEANNONCE 4 // Callback definition CRYPT_EAL_CleanNonceCb
49
50/* get information from mgrCtx, such as entropy source context */
51#define CRYPT_EAL_CAP_MGRCTXCTRL 5
52/* load dynamic library functions */
53#define BSL_SAL_CAP_LOAD_LIB 6
54#define BSL_SAL_CAP_GET_FUNC_ADDR 7
55#define BSL_SAL_CAP_UNLOAD_LIB 8
56
57typedef int32_t (*CRYPT_EAL_ProvMgrCtrlCb)(void *mgrCtx, int32_t cmd, void *val, uint32_t valLen);
58
59typedef enum {
60 CRYPT_EAL_MGR_GETSEEDCTX,
61 CRYPT_EAL_MGR_GETLIBCTX,
62} CRYPT_EAL_PROVMGRCTRL;
63
64/* outFuncs */
65#define CRYPT_EAL_PROVCB_FREE 1
66#define CRYPT_EAL_PROVCB_QUERY 2
67#define CRYPT_EAL_PROVCB_CTRL 3
68#define CRYPT_EAL_PROVCB_GETCAPS 4
69
70
71typedef void (*CRYPT_EAL_ProvFreeCb)(void *provCtx);
72
73#define CRYPT_EAL_OPERAID_SYMMCIPHER 1
74#define CRYPT_EAL_OPERAID_KEYMGMT 2
75#define CRYPT_EAL_OPERAID_SIGN 3
76#define CRYPT_EAL_OPERAID_ASYMCIPHER 4
77#define CRYPT_EAL_OPERAID_KEYEXCH 5
78#define CRYPT_EAL_OPERAID_KEM 6
79#define CRYPT_EAL_OPERAID_HASH 7
80#define CRYPT_EAL_OPERAID_MAC 8
81#define CRYPT_EAL_OPERAID_KDF 9
82#define CRYPT_EAL_OPERAID_RAND 10
83#define CRYPT_EAL_OPERAID_DECODER 11
84#define CRYPT_EAL_OPERAID_SELFTEST 12
85
86typedef int32_t (*CRYPT_EAL_ProvQueryCb)(void *provCtx, int32_t operaId, CRYPT_EAL_AlgInfo **algInfos);
87/* Used for obtaining provider information through the eal layer interface */
88typedef int32_t (*CRYPT_EAL_ProvCtrlCb)(void *provCtx, int32_t cmd, void *val, uint32_t valLen);
89
90#define CRYPT_EAL_GET_GROUP_CAP 1
91#define CRYPT_EAL_GET_SIGALG_CAP 2
92
102typedef int32_t (*CRYPT_EAL_ProcessFuncCb)(const BSL_Param *params, void *args);
103
104/* Used for obtaining the capabilities of provider through the eal layer interface */
105typedef int32_t (*CRYPT_EAL_ProvGetCapsCb)(void *provCtx, int32_t cmd, CRYPT_EAL_ProcessFuncCb cb, void *args);
106
120typedef int32_t (*CRYPT_EAL_ImplProviderInit)(CRYPT_EAL_ProvMgrCtx *mgrCtx, BSL_Param *param,
121 CRYPT_EAL_Func *capFuncs, CRYPT_EAL_Func **outFuncs, void **provCtx);
122
123// CRYPT_EAL_OPERAID_SYMMCIPHER
124#define CRYPT_EAL_IMPLCIPHER_NEWCTX 1
125#define CRYPT_EAL_IMPLCIPHER_INITCTX 2
126#define CRYPT_EAL_IMPLCIPHER_UPDATE 3
127#define CRYPT_EAL_IMPLCIPHER_FINAL 4
128#define CRYPT_EAL_IMPLCIPHER_DEINITCTX 5
129#define CRYPT_EAL_IMPLCIPHER_CTRL 6
130#define CRYPT_EAL_IMPLCIPHER_FREECTX 7
131#define CRYPT_EAL_IMPLCIPHER_DUPCTX 8
132
133typedef void *(*CRYPT_EAL_ImplCipherNewCtx)(void *provCtx, int32_t algId);
134typedef int32_t (*CRYPT_EAL_ImplCipherInitCtx)(void *ctx, const uint8_t *key, uint32_t keyLen,
135 const uint8_t *iv, uint32_t ivLen, BSL_Param *param, bool enc);
136typedef int32_t (*CRYPT_EAL_ImplCipherUpdate)(void *ctx, const uint8_t *in, uint32_t inLen,
137 uint8_t *out, uint32_t *outLen);
138typedef int32_t (*CRYPT_EAL_ImplCipherFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
139typedef int32_t (*CRYPT_EAL_ImplCipherDeinitCtx)(void *ctx);
140typedef int32_t (*CRYPT_EAL_ImplCipherCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
141typedef void (*CRYPT_EAL_ImplCipherFreeCtx)(void *ctx);
142typedef void *(*CRYPT_EAL_ImplCipherDupCtx)(const void *ctx);
143
144// CRYPT_EAL_OPERAID_KEYMGMT
145#define CRYPT_EAL_IMPLPKEYMGMT_NEWCTX 1
146#define CRYPT_EAL_IMPLPKEYMGMT_SETPARAM 2
147#define CRYPT_EAL_IMPLPKEYMGMT_GETPARAM 3
148#define CRYPT_EAL_IMPLPKEYMGMT_GENKEY 4
149#define CRYPT_EAL_IMPLPKEYMGMT_SETPRV 5
150#define CRYPT_EAL_IMPLPKEYMGMT_SETPUB 6
151#define CRYPT_EAL_IMPLPKEYMGMT_GETPRV 7
152#define CRYPT_EAL_IMPLPKEYMGMT_GETPUB 8
153#define CRYPT_EAL_IMPLPKEYMGMT_DUPCTX 9
154#define CRYPT_EAL_IMPLPKEYMGMT_CHECK 10
155#define CRYPT_EAL_IMPLPKEYMGMT_COMPARE 11
156#define CRYPT_EAL_IMPLPKEYMGMT_CTRL 12
157#define CRYPT_EAL_IMPLPKEYMGMT_FREECTX 13
158#define CRYPT_EAL_IMPLPKEYMGMT_COPYPARAM 14
159#define CRYPT_EAL_IMPLPKEYMGMT_IMPORT 15
160#define CRYPT_EAL_IMPLPKEYMGMT_EXPORT 16
161
162typedef void *(*CRYPT_EAL_ImplPkeyMgmtNewCtx)(void *provCtx, int32_t algId);
163typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetParam)(void *ctx, const BSL_Param *param);
164typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetParam)(void *ctx, BSL_Param *param);
165typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGenKey)(void *ctx);
166typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetPrv)(void *ctx, const BSL_Param *param);
167typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetPub)(void *ctx, const BSL_Param *param);
168typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetPrv)(const void *ctx, BSL_Param *param);
169typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetPub)(const void *ctx, BSL_Param *param);
170typedef void *(*CRYPT_EAL_ImplPkeyMgmtDupCtx)(const void *ctx);
171typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCheck)(uint32_t checkType, const void *ctx1, const void *ctx2);
172typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCompare)(const void *ctx1, const void *ctx2);
173typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
174typedef void (*CRYPT_EAL_ImplPkeyMgmtFreeCtx)(void *ctx);
175typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtImport)(void *ctx, const BSL_Param *param);
176typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtExport)(const void *ctx, BSL_Param *param);
177
178// CRYPT_EAL_OPERAID_SIGN
179#define CRYPT_EAL_IMPLPKEYSIGN_SIGN 1
180#define CRYPT_EAL_IMPLPKEYSIGN_SIGNDATA 2
181#define CRYPT_EAL_IMPLPKEYSIGN_VERIFY 3
182#define CRYPT_EAL_IMPLPKEYSIGN_VERIFYDATA 4
183#define CRYPT_EAL_IMPLPKEYSIGN_RECOVER 5
184#define CRYPT_EAL_IMPLPKEYSIGN_BLIND 6
185#define CRYPT_EAL_IMPLPKEYSIGN_UNBLIND 7
186
187typedef int32_t (*CRYPT_EAL_ImplPkeySign)(void *ctx, int32_t mdAlgId, const uint8_t *data, uint32_t dataLen,
188 uint8_t *sign, uint32_t *signLen);
189typedef int32_t (*CRYPT_EAL_ImplPkeySignData)(void *ctx, const uint8_t *data, uint32_t dataLen,
190 uint8_t *sign, uint32_t *signLen);
191typedef int32_t (*CRYPT_EAL_ImplPkeyVerify)(const void *ctx, int32_t mdAlgId, const uint8_t *data, uint32_t dataLen,
192 uint8_t *sign, uint32_t signLen);
193typedef int32_t (*CRYPT_EAL_ImplPkeyVerifyData)(const void *ctx, const uint8_t *data, uint32_t dataLen,
194 uint8_t *sign, uint32_t signLen);
195typedef int32_t (*CRYPT_EAL_ImplPkeyRecover)(const void *ctx, uint8_t *sign, uint32_t signLen,
196 uint8_t *data, uint32_t *dataLen);
197typedef int32_t (*CRYPT_EAL_ImplPkeyBlind)(void *ctx, int32_t mdAlgId, const uint8_t *input, uint32_t inputLen,
198 uint8_t *out, uint32_t *outLen);
199typedef int32_t (*CRYPT_EAL_ImplPkeyUnBlind)(const void *ctx, const uint8_t *input, uint32_t inputLen,
200 uint8_t *out, uint32_t *outLen);
201
202// CRYPT_EAL_OPERAID_ASYMCIPHER
203#define CRYPT_EAL_IMPLPKEYCIPHER_ENCRYPT 1
204#define CRYPT_EAL_IMPLPKEYCIPHER_DECRYPT 2
205#define CRYPT_EAL_IMPLPKEYCIPHER_HEADD 3
206#define CRYPT_EAL_IMPLPKEYCIPHER_HEMUL 4
207
208typedef int32_t (*CRYPT_EAL_ImplPkeyEncrypt)(void *ctx, const uint8_t *data, uint32_t dataLen,
209 uint8_t *out, uint32_t *outLen);
210typedef int32_t (*CRYPT_EAL_ImplPkeyDecrypt)(void *ctx, const uint8_t *data, uint32_t dataLen,
211 uint8_t *out, uint32_t *outLen);
212typedef int32_t (*CRYPT_EAL_ImplPkeyHEAdd)(const void *ctx, const BSL_Param *input, uint8_t *out, uint32_t *outLen);
213typedef int32_t (*CRYPT_EAL_ImplPkeyHEMul)(const void *ctx, const BSL_Param *input, uint8_t *out, uint32_t *outLen);
214
215// CRYPT_EAL_OPERAID_KEYEXCH
216#define CRYPT_EAL_IMPLPKEYEXCH_EXCH 1
217typedef int32_t (*CRYPT_EAL_ImplPkeyExch)(const void *ctx, const void *pubCtx, uint8_t *out, uint32_t *outLen);
218
219// CRYPT_EAL_OPERAID_KEM
220#define CRYPT_EAL_IMPLPKEYKEM_ENCAPSULATE_INIT 1
221#define CRYPT_EAL_IMPLPKEYKEM_DECAPSULATE_INIT 2
222#define CRYPT_EAL_IMPLPKEYKEM_ENCAPSULATE 3
223#define CRYPT_EAL_IMPLPKEYKEM_DECAPSULATE 4
224
225typedef int32_t (*CRYPT_EAL_ImplPkeyEncapsInit)(const void *ctx, BSL_Param *params);
226typedef int32_t (*CRYPT_EAL_ImplPkeyDecapsInit)(const void *ctx, BSL_Param *params);
227typedef int32_t (*CRYPT_EAL_ImplPkeyKemEncapsulate)(const void *ctx, uint8_t *cipher, uint32_t *cipherLen,
228 uint8_t *out, uint32_t *outLen);
229typedef int32_t (*CRYPT_EAL_ImplPkeyKemDecapsulate)(const void *ctx, uint8_t *data, uint32_t dataLen,
230 uint8_t *out, uint32_t *outLen);
231
232// CRYPT_EAL_OPERAID_HASH
233#define CRYPT_EAL_IMPLMD_NEWCTX 1
234#define CRYPT_EAL_IMPLMD_INITCTX 2
235#define CRYPT_EAL_IMPLMD_UPDATE 3
236#define CRYPT_EAL_IMPLMD_FINAL 4
237#define CRYPT_EAL_IMPLMD_DEINITCTX 5
238#define CRYPT_EAL_IMPLMD_DUPCTX 6
239#define CRYPT_EAL_IMPLMD_CTRL 7 // not support
240#define CRYPT_EAL_IMPLMD_FREECTX 8
241#define CRYPT_EAL_IMPLMD_SQUEEZE 9
242#define CRYPT_EAL_IMPLMD_COPYCTX 10
243#define CRYPT_EAL_IMPLMD_GETPARAM 11
244
245typedef void *(*CRYPT_EAL_ImplMdNewCtx)(void *provCtx, int32_t algId);
246typedef int32_t (*CRYPT_EAL_ImplMdInitCtx)(void *ctx, BSL_Param *param);
247typedef int32_t (*CRYPT_EAL_ImplMdUpdate)(void *ctx, const uint8_t *input, uint32_t len);
248typedef int32_t (*CRYPT_EAL_ImplMdFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
249typedef int32_t (*CRYPT_EAL_ImplMdDeInitCtx)(void *ctx);
250typedef void *(*CRYPT_EAL_ImplMdDupCtx)(const void *ctx);
251typedef int32_t (*CRYPT_EAL_ImplMdCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen); // not support
252typedef void (*CRYPT_EAL_ImplMdFreeCtx)(void *ctx);
253typedef int32_t (*CRYPT_EAL_ImplMdSqueeze)(void *ctx, uint8_t *out, uint32_t len);
254typedef int32_t (*CRYPT_EAL_ImplMdCopyCtx)(void *dst, const void *src);
255typedef int32_t (*CRYPT_EAL_ImplMdGetParam)(void *ctx, BSL_Param *param);
256
257// CRYPT_EAL_OPERAID_MAC
258#define CRYPT_EAL_IMPLMAC_NEWCTX 1
259#define CRYPT_EAL_IMPLMAC_INIT 2
260#define CRYPT_EAL_IMPLMAC_UPDATE 3
261#define CRYPT_EAL_IMPLMAC_FINAL 4
262#define CRYPT_EAL_IMPLMAC_DEINITCTX 5
263#define CRYPT_EAL_IMPLMAC_REINITCTX 6
264#define CRYPT_EAL_IMPLMAC_CTRL 7
265#define CRYPT_EAL_IMPLMAC_FREECTX 8
266#define CRYPT_EAL_IMPLMAC_SETPARAM 9
267#define CRYPT_EAL_IMPLMAC_DUPCTX 10
268
269typedef void *(*CRYPT_EAL_ImplMacNewCtx)(void *provCtx, int32_t algId);
270typedef int32_t (*CRYPT_EAL_ImplMacInit)(void *ctx, const uint8_t *key, uint32_t len, BSL_Param *param);
271typedef int32_t (*CRYPT_EAL_ImplMacUpdate)(void *ctx, const uint8_t *input, uint32_t len);
272typedef int32_t (*CRYPT_EAL_ImplMacFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
273typedef int32_t (*CRYPT_EAL_ImplMacDeInitCtx)(void *ctx);
274typedef int32_t (*CRYPT_EAL_ImplMacReInitCtx)(void *ctx);
275typedef int32_t (*CRYPT_EAL_ImplMacCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
276typedef void (*CRYPT_EAL_ImplMacFreeCtx)(void *ctx);
277typedef int32_t (*CRYPT_EAL_ImplMacSetParam)(void *ctx, const BSL_Param *param);
278typedef void *(*CRYPT_EAL_ImplMacDupCtx)(const void *ctx);
279
280// CRYPT_EAL_OPERAID_KDF
281#define CRYPT_EAL_IMPLKDF_NEWCTX 1
282#define CRYPT_EAL_IMPLKDF_SETPARAM 2
283#define CRYPT_EAL_IMPLKDF_DERIVE 3
284#define CRYPT_EAL_IMPLKDF_DEINITCTX 4
285#define CRYPT_EAL_IMPLKDF_CTRL 5 // not support
286#define CRYPT_EAL_IMPLKDF_FREECTX 6
287#define CRYPT_EAL_IMPLKDF_DUPCTX 7
288
289typedef void *(*CRYPT_EAL_ImplKdfNewCtx)(void *provCtx, int32_t algId);
290typedef int32_t (*CRYPT_EAL_ImplKdfSetParam)(void *ctx, BSL_Param *param);
291typedef int32_t (*CRYPT_EAL_ImplKdfDerive)(void *ctx, uint8_t *key, uint32_t keyLen);
292typedef int32_t (*CRYPT_EAL_ImplKdfDeInitCtx)(void *ctx);
293typedef int32_t (*CRYPT_EAL_ImplKdfCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen); // not support
294typedef void (*CRYPT_EAL_ImplKdfFreeCtx)(void *ctx);
295typedef void *(*CRYPT_EAL_ImplKdfDupCtx)(const void *ctx);
296
297// CRYPT_EAL_OPERAID_RAND
298#define CRYPT_EAL_IMPLRAND_DRBGNEWCTX 1
299#define CRYPT_EAL_IMPLRAND_DRBGINST 2
300#define CRYPT_EAL_IMPLRAND_DRBGUNINST 3
301#define CRYPT_EAL_IMPLRAND_DRBGGEN 4
302#define CRYPT_EAL_IMPLRAND_DRBGRESEED 5
303#define CRYPT_EAL_IMPLRAND_DRBGCTRL 6
304#define CRYPT_EAL_IMPLRAND_DRBGFREECTX 7
305
306typedef void *(*CRYPT_EAL_ImplRandDrbgNewCtx)(void *provCtx, int32_t algId, BSL_Param *param);
307typedef int32_t (*CRYPT_EAL_ImplRandDrbgInst)(void *ctx, const uint8_t *pers, uint32_t persLen, BSL_Param *param);
308typedef int32_t (*CRYPT_EAL_ImplRandDrbgUnInst)(void *ctx);
309typedef int32_t (*CRYPT_EAL_ImplRandDrbgGen)(void *ctx, uint8_t *out, uint32_t outLen, const uint8_t *adin,
310 uint32_t adinLen, BSL_Param *param);
311typedef int32_t (*CRYPT_EAL_ImplRandDrbgReSeed)(void *ctx, const uint8_t *addin, uint32_t addinLen, BSL_Param *param);
312typedef int32_t (*CRYPT_EAL_ImplRandDrbgCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
313typedef void (*CRYPT_EAL_ImplRandDrbgFreeCtx)(void *ctx);
314
315// CRYPT_EAL_OPERAID_DECODER
316#define CRYPT_DECODER_IMPL_NEWCTX 1
317#define CRYPT_DECODER_IMPL_SETPARAM 2
318#define CRYPT_DECODER_IMPL_GETPARAM 3
319#define CRYPT_DECODER_IMPL_DECODE 4
320#define CRYPT_DECODER_IMPL_FREEOUTDATA 5
321#define CRYPT_DECODER_IMPL_FREECTX 6
322
323typedef void *(*CRYPT_DECODER_IMPL_NewCtx)(void *provCtx);
324typedef int32_t (*CRYPT_DECODER_IMPL_SetParam)(void *ctx, const BSL_Param *param);
325typedef int32_t (*CRYPT_DECODER_IMPL_GetParam)(void *ctx, BSL_Param *param);
326typedef int32_t (*CRYPT_DECODER_IMPL_Decode)(void *ctx, const BSL_Param *inParam, BSL_Param **outParam);
327typedef void (*CRYPT_DECODER_IMPL_FreeOutData)(void *ctx, BSL_Param *outData);
328typedef void (*CRYPT_DECODER_IMPL_FreeCtx)(void *ctx);
329
330// CRYPT_EAL_OPERAID_SELFTEST
331#define CRYPT_EAL_IMPLSELFTEST_NEWCTX 1
332#define CRYPT_EAL_IMPLSELFTEST_GETVERSION 2
333#define CRYPT_EAL_IMPLSELFTEST_SELFTEST 3
334#define CRYPT_EAL_IMPLSELFTEST_FREECTX 4
335
336typedef void *(*CRYPT_EAL_ImplSelftestNewCtx)(void *provCtx);
337typedef const char *(*CRYPT_EAL_ImplSelftestGetVersion)(void *ctx);
338typedef int32_t (*CRYPT_EAL_ImplSelftestSelftest)(void *ctx, const BSL_Param *param);
339typedef void (*CRYPT_EAL_ImplSelftestFreeCtx)(void *ctx);
340
341#ifdef __cplusplus
342}
343#endif // __cplusplus
344
345#endif // CRYPT_EAL_IMPLPROVIDER_H
int32_t(* CRYPT_EAL_ImplProviderInit)(CRYPT_EAL_ProvMgrCtx *mgrCtx, BSL_Param *param, CRYPT_EAL_Func *capFuncs, CRYPT_EAL_Func **outFuncs, void **provCtx)
Provider initialization function prototype,
定义 crypt_eal_implprovider.h:120
定义 crypt_eal_implprovider.h:36
定义 crypt_types.h:952