• 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 /**
17  * @defgroup crypt_eal_provider
18  * @ingroup crypt
19  * @brief using during provider development
20  */
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 #include "crypt_eal_provider.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif // __cplusplus
33 
34 #define CRYPT_EAL_FUNC_END     {0, NULL}
35 #define CRYPT_EAL_ALGINFO_END  {0, NULL, NULL}
36 
37 typedef struct {
38     int32_t algId; // implemented algorithm id, such as aes128cbc, rsa sign
39     const CRYPT_EAL_Func *implFunc; // implemented algorithm callback
40     const char *attr; // implemented algorithm attribute
41 } CRYPT_EAL_AlgInfo;
42 
43 typedef void (CRYPT_EAL_CvtVoid)(void);
44 
45 /* capFuncs */
46 #define CRYPT_EAL_CAP_GETENTROPY   1 // Callback definition CRYPT_EAL_GetEntropyCb, in crypt_types.h
47 #define CRYPT_EAL_CAP_CLEANENTROPY 2 // Callback definition CRYPT_EAL_CleanEntropyCb
48 #define CRYPT_EAL_CAP_GETNONCE     3 // Callback definition CRYPT_EAL_GetNonceCb
49 #define CRYPT_EAL_CAP_CLEANNONCE   4 // Callback definition CRYPT_EAL_CleanNonceCb
50 
51 /* get information from mgrCtx, such as entropy source context */
52 #define CRYPT_EAL_CAP_MGRCTXCTRL   5
53 
54 typedef int32_t (*CRYPT_EAL_ProvMgrCtrlCb)(void *mgrCtx, int32_t cmd, void *val, uint32_t valLen);
55 
56 typedef enum {
57     CRYPT_EAL_MGR_GETSEEDCTX,
58     CRYPT_EAL_MGR_GETLIBCTX,
59 } CRYPT_EAL_PROVMGRCTRL;
60 
61 /* outFuncs */
62 #define CRYPT_EAL_PROVCB_FREE       1
63 #define CRYPT_EAL_PROVCB_QUERY      2
64 #define CRYPT_EAL_PROVCB_CTRL       3
65 #define CRYPT_EAL_PROVCB_GETCAPS    4
66 
67 
68 typedef void (*CRYPT_EAL_ProvFreeCb)(void *provCtx);
69 
70 #define CRYPT_EAL_OPERAID_SYMMCIPHER  1
71 #define CRYPT_EAL_OPERAID_KEYMGMT     2
72 #define CRYPT_EAL_OPERAID_SIGN        3
73 #define CRYPT_EAL_OPERAID_ASYMCIPHER  4
74 #define CRYPT_EAL_OPERAID_KEYEXCH     5
75 #define CRYPT_EAL_OPERAID_KEM         6
76 #define CRYPT_EAL_OPERAID_HASH        7
77 #define CRYPT_EAL_OPERAID_MAC         8
78 #define CRYPT_EAL_OPERAID_KDF         9
79 #define CRYPT_EAL_OPERAID_RAND        10
80 #define CRYPT_EAL_OPERAID_DECODER     11
81 
82 typedef int32_t (*CRYPT_EAL_ProvQueryCb)(void *provCtx, int32_t operaId, CRYPT_EAL_AlgInfo **algInfos);
83 /* Used for obtaining provider information through the eal layer interface */
84 typedef int32_t (*CRYPT_EAL_ProvCtrlCb)(void *provCtx, int32_t cmd, void *val, uint32_t valLen);
85 
86 #define CRYPT_EAL_GET_GROUP_CAP 1
87 #define CRYPT_EAL_GET_SIGALG_CAP 2
88 
89 /* Used for obtaining the capabilities of provider through the eal layer interface */
90 typedef int32_t (*CRYPT_EAL_ProvGetCapsCb)(void *provCtx, int32_t cmd, CRYPT_EAL_ProcessFuncCb cb, void *args);
91 
92 /**
93  * @ingroup crypt_eal_provider
94  * @brief Provider initialization function prototype,
95  *
96  * @param mgrCtx [IN] framework generates context for each provider, for provider, it is opaque
97  * @param param [IN] parameters passed transparently when loading the provider interface
98  * @param capFuncs [IN] The ability passed from the framework to provider, such as entropy source
99  * @param outFuncs [OUT] The callback returned by provider, such as entropy source
100  * @param provCtx [OUT] provider context
101  *
102  * @retval #CRYPT_SUCCESS, if success.
103  *         Other error codes see the crypt_errno.h
104 */
105 typedef int32_t (*CRYPT_EAL_ImplProviderInit)(CRYPT_EAL_ProvMgrCtx *mgrCtx, BSL_Param *param,
106     CRYPT_EAL_Func *capFuncs, CRYPT_EAL_Func **outFuncs, void **provCtx);
107 
108 // CRYPT_EAL_OPERAID_SYMMCIPHER
109 #define CRYPT_EAL_IMPLCIPHER_NEWCTX      1
110 #define CRYPT_EAL_IMPLCIPHER_INITCTX     2
111 #define CRYPT_EAL_IMPLCIPHER_UPDATE      3
112 #define CRYPT_EAL_IMPLCIPHER_FINAL       4
113 #define CRYPT_EAL_IMPLCIPHER_DEINITCTX   5
114 #define CRYPT_EAL_IMPLCIPHER_CTRL        6
115 #define CRYPT_EAL_IMPLCIPHER_FREECTX     7
116 
117 typedef void *(*CRYPT_EAL_ImplCipherNewCtx)(void *provCtx, int32_t algId);
118 typedef int32_t (*CRYPT_EAL_ImplCipherInitCtx)(void *ctx, const uint8_t *key, uint32_t keyLen,
119     const uint8_t *iv, uint32_t ivLen, BSL_Param *param, bool enc);
120 typedef int32_t (*CRYPT_EAL_ImplCipherUpdate)(void *ctx, const uint8_t *in, uint32_t inLen,
121     uint8_t *out, uint32_t *outLen);
122 typedef int32_t (*CRYPT_EAL_ImplCipherFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
123 typedef int32_t (*CRYPT_EAL_ImplCipherDeinitCtx)(void *ctx);
124 typedef int32_t (*CRYPT_EAL_ImplCipherCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
125 typedef void (*CRYPT_EAL_ImplCipherFreeCtx)(void *ctx);
126 
127 
128 // CRYPT_EAL_OPERAID_KEYMGMT
129 #define CRYPT_EAL_IMPLPKEYMGMT_NEWCTX     1
130 #define CRYPT_EAL_IMPLPKEYMGMT_SETPARAM   2
131 #define CRYPT_EAL_IMPLPKEYMGMT_GETPARAM   3
132 #define CRYPT_EAL_IMPLPKEYMGMT_GENKEY     4
133 #define CRYPT_EAL_IMPLPKEYMGMT_SETPRV     5
134 #define CRYPT_EAL_IMPLPKEYMGMT_SETPUB     6
135 #define CRYPT_EAL_IMPLPKEYMGMT_GETPRV     7
136 #define CRYPT_EAL_IMPLPKEYMGMT_GETPUB     8
137 #define CRYPT_EAL_IMPLPKEYMGMT_DUPCTX     9
138 #define CRYPT_EAL_IMPLPKEYMGMT_CHECK     10
139 #define CRYPT_EAL_IMPLPKEYMGMT_COMPARE   11
140 #define CRYPT_EAL_IMPLPKEYMGMT_CTRL      12
141 #define CRYPT_EAL_IMPLPKEYMGMT_FREECTX   13
142 #define CRYPT_EAL_IMPLPKEYMGMT_IMPORT    14
143 #define CRYPT_EAL_IMPLPKEYMGMT_EXPORT    15
144 
145 typedef void *(*CRYPT_EAL_ImplPkeyMgmtNewCtx)(void *provCtx, int32_t algId);
146 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetParam)(void *ctx, const BSL_Param *param);
147 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetParam)(void *ctx, BSL_Param *param);
148 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGenKey)(void *ctx);
149 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetPrv)(void *ctx, const BSL_Param *param);
150 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtSetPub)(void *ctx, const BSL_Param *param);
151 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetPrv)(const void *ctx, BSL_Param *param);
152 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtGetPub)(const void *ctx, BSL_Param *param);
153 typedef void *(*CRYPT_EAL_ImplPkeyMgmtDupCtx)(const void *ctx);
154 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCheck)(const void *prv, const void *pub);
155 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCompare)(const void *ctx1, const void *ctx2);
156 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
157 typedef void (*CRYPT_EAL_ImplPkeyMgmtFreeCtx)(void *ctx);
158 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtImport)(void *ctx, const BSL_Param *param);
159 typedef int32_t (*CRYPT_EAL_ImplPkeyMgmtExport)(const void *ctx, BSL_Param *param);
160 
161 // CRYPT_EAL_OPERAID_SIGN
162 #define CRYPT_EAL_IMPLPKEYSIGN_SIGN       1
163 #define CRYPT_EAL_IMPLPKEYSIGN_SIGNDATA   2
164 #define CRYPT_EAL_IMPLPKEYSIGN_VERIFY     3
165 #define CRYPT_EAL_IMPLPKEYSIGN_VERIFYDATA 4
166 #define CRYPT_EAL_IMPLPKEYSIGN_RECOVER    5
167 #define CRYPT_EAL_IMPLPKEYSIGN_BLIND      6
168 #define CRYPT_EAL_IMPLPKEYSIGN_UNBLIND    7
169 
170 typedef int32_t (*CRYPT_EAL_ImplPkeySign)(void *ctx, int32_t mdAlgId, const uint8_t *data, uint32_t dataLen,
171     uint8_t *sign, uint32_t *signLen);
172 typedef int32_t (*CRYPT_EAL_ImplPkeySignData)(void *ctx, const uint8_t *data, uint32_t dataLen,
173     uint8_t *sign, uint32_t *signLen);
174 typedef int32_t (*CRYPT_EAL_ImplPkeyVerify)(const void *ctx, int32_t mdAlgId, const uint8_t *data, uint32_t dataLen,
175     uint8_t *sign, uint32_t signLen);
176 typedef int32_t (*CRYPT_EAL_ImplPkeyVerifyData)(const void *ctx, const uint8_t *data, uint32_t dataLen,
177     uint8_t *sign, uint32_t signLen);
178 typedef int32_t (*CRYPT_EAL_ImplPkeyRecover)(const void *ctx, uint8_t *sign, uint32_t signLen,
179     uint8_t *data, uint32_t *dataLen);
180 typedef int32_t (*CRYPT_EAL_ImplPkeyBlind)(void *ctx, int32_t mdAlgId, const uint8_t *input, uint32_t inputLen,
181     uint8_t *out, uint32_t *outLen);
182 typedef int32_t (*CRYPT_EAL_ImplPkeyUnBlind)(const void *ctx, const uint8_t *input, uint32_t inputLen,
183     uint8_t *out, uint32_t *outLen);
184 
185 // CRYPT_EAL_OPERAID_ASYMCIPHER
186 #define CRYPT_EAL_IMPLPKEYCIPHER_ENCRYPT  1
187 #define CRYPT_EAL_IMPLPKEYCIPHER_DECRYPT  2
188 
189 typedef int32_t (*CRYPT_EAL_ImplPkeyEncrypt)(void *ctx, const uint8_t *data, uint32_t dataLen,
190     uint8_t *out, uint32_t *outLen);
191 typedef int32_t (*CRYPT_EAL_ImplPkeyDecrypt)(void *ctx, const uint8_t *data, uint32_t dataLen,
192     uint8_t *out, uint32_t *outLen);
193 
194 // CRYPT_EAL_OPERAID_KEYEXCH
195 #define CRYPT_EAL_IMPLPKEYEXCH_EXCH  1
196 typedef int32_t (*CRYPT_EAL_ImplPkeyExch)(const void *ctx, const void *pubCtx, uint8_t *out, uint32_t *outLen);
197 
198 // CRYPT_EAL_OPERAID_KEM
199 #define CRYPT_EAL_IMPLPKEYKEM_ENCAPSULATE_INIT  1
200 #define CRYPT_EAL_IMPLPKEYKEM_DECAPSULATE_INIT  2
201 #define CRYPT_EAL_IMPLPKEYKEM_ENCAPSULATE       3
202 #define CRYPT_EAL_IMPLPKEYKEM_DECAPSULATE       4
203 
204 typedef int32_t (*CRYPT_EAL_ImplPkeyEncapsInit)(const void *ctx, BSL_Param *params);
205 typedef int32_t (*CRYPT_EAL_ImplPkeyDecapsInit)(const void *ctx, BSL_Param *params);
206 typedef int32_t (*CRYPT_EAL_ImplPkeyKemEncapsulate)(const void *ctx, uint8_t *cipher, uint32_t *cipherLen,
207     uint8_t *out, uint32_t *outLen);
208 typedef int32_t (*CRYPT_EAL_ImplPkeyKemDecapsulate)(const void *ctx, uint8_t *data, uint32_t dataLen,
209     uint8_t *out, uint32_t *outLen);
210 
211 // CRYPT_EAL_OPERAID_HASH
212 #define CRYPT_EAL_IMPLMD_NEWCTX      1
213 #define CRYPT_EAL_IMPLMD_INITCTX     2
214 #define CRYPT_EAL_IMPLMD_UPDATE      3
215 #define CRYPT_EAL_IMPLMD_FINAL       4
216 #define CRYPT_EAL_IMPLMD_DEINITCTX   5
217 #define CRYPT_EAL_IMPLMD_DUPCTX      6
218 #define CRYPT_EAL_IMPLMD_CTRL        7 // not support
219 #define CRYPT_EAL_IMPLMD_FREECTX     8
220 #define CRYPT_EAL_IMPLMD_SQUEEZE     9
221 
222 typedef void *(*CRYPT_EAL_ImplMdNewCtx)(void *provCtx, int32_t algId);
223 typedef int32_t (*CRYPT_EAL_ImplMdInitCtx)(void *ctx, BSL_Param *param);
224 typedef int32_t (*CRYPT_EAL_ImplMdUpdate)(void *ctx, const uint8_t *input, uint32_t len);
225 typedef int32_t (*CRYPT_EAL_ImplMdFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
226 typedef int32_t (*CRYPT_EAL_ImplMdDeInitCtx)(void *ctx);
227 typedef void *(*CRYPT_EAL_ImplMdDupCtx)(const void *ctx);
228 typedef int32_t (*CRYPT_EAL_ImplMdCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen); // not support
229 typedef void (*CRYPT_EAL_ImplMdFreeCtx)(void *ctx);
230 typedef int32_t (*CRYPT_EAL_ImplMdSqueeze)(void *ctx, uint8_t *out, uint32_t len);
231 
232 // CRYPT_EAL_OPERAID_MAC
233 #define CRYPT_EAL_IMPLMAC_NEWCTX      1
234 #define CRYPT_EAL_IMPLMAC_INIT        2
235 #define CRYPT_EAL_IMPLMAC_UPDATE      3
236 #define CRYPT_EAL_IMPLMAC_FINAL       4
237 #define CRYPT_EAL_IMPLMAC_DEINITCTX   5
238 #define CRYPT_EAL_IMPLMAC_REINITCTX   6
239 #define CRYPT_EAL_IMPLMAC_CTRL        7
240 #define CRYPT_EAL_IMPLMAC_FREECTX     8
241 
242 typedef void *(*CRYPT_EAL_ImplMacNewCtx)(void *provCtx, int32_t algId);
243 typedef int32_t (*CRYPT_EAL_ImplMacInit)(void *ctx, const uint8_t *key, uint32_t len, BSL_Param *param);
244 typedef int32_t (*CRYPT_EAL_ImplMacUpdate)(void *ctx, const uint8_t *input, uint32_t len);
245 typedef int32_t (*CRYPT_EAL_ImplMacFinal)(void *ctx, uint8_t *out, uint32_t *outLen);
246 typedef int32_t (*CRYPT_EAL_ImplMacDeInitCtx)(void *ctx);
247 typedef int32_t (*CRYPT_EAL_ImplMacReInitCtx)(void *ctx);
248 typedef int32_t (*CRYPT_EAL_ImplMacCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
249 typedef void (*CRYPT_EAL_ImplMacFreeCtx)(void *ctx);
250 
251 // CRYPT_EAL_OPERAID_KDF
252 #define CRYPT_EAL_IMPLKDF_NEWCTX      1
253 #define CRYPT_EAL_IMPLKDF_SETPARAM    2
254 #define CRYPT_EAL_IMPLKDF_DERIVE      3
255 #define CRYPT_EAL_IMPLKDF_DEINITCTX   4
256 #define CRYPT_EAL_IMPLKDF_CTRL        5 // not support
257 #define CRYPT_EAL_IMPLKDF_FREECTX     6
258 
259 typedef void *(*CRYPT_EAL_ImplKdfNewCtx)(void *provCtx, int32_t algId);
260 typedef int32_t (*CRYPT_EAL_ImplKdfSetParam)(void *ctx, BSL_Param *param);
261 typedef int32_t (*CRYPT_EAL_ImplKdfDerive)(void *ctx, uint8_t *key, uint32_t keyLen);
262 typedef int32_t (*CRYPT_EAL_ImplKdfDeInitCtx)(void *ctx);
263 typedef int32_t (*CRYPT_EAL_ImplKdfCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen); // not support
264 typedef void (*CRYPT_EAL_ImplKdfFreeCtx)(void *ctx);
265 
266 // CRYPT_EAL_OPERAID_RAND
267 #define CRYPT_EAL_IMPLRAND_DRBGNEWCTX   1
268 #define CRYPT_EAL_IMPLRAND_DRBGINST     2
269 #define CRYPT_EAL_IMPLRAND_DRBGUNINST   3
270 #define CRYPT_EAL_IMPLRAND_DRBGGEN      4
271 #define CRYPT_EAL_IMPLRAND_DRBGRESEED   5
272 #define CRYPT_EAL_IMPLRAND_DRBGCTRL     6
273 #define CRYPT_EAL_IMPLRAND_DRBGFREECTX  7
274 
275 typedef void *(*CRYPT_EAL_ImplRandDrbgNewCtx)(void *provCtx, int32_t algId, BSL_Param *param);
276 typedef int32_t (*CRYPT_EAL_ImplRandDrbgInst)(void *ctx, const uint8_t *pers, uint32_t persLen, BSL_Param *param);
277 typedef int32_t (*CRYPT_EAL_ImplRandDrbgUnInst)(void *ctx);
278 typedef int32_t (*CRYPT_EAL_ImplRandDrbgGen)(void *ctx, uint8_t *out, uint32_t outLen, const uint8_t *addin,
279     uint32_t adinLen, BSL_Param *param);
280 typedef int32_t (*CRYPT_EAL_ImplRandDrbgReSeed)(void *ctx, const uint8_t *addin, uint32_t addinLen, BSL_Param *param);
281 typedef int32_t (*CRYPT_EAL_ImplRandDrbgCtrl)(void *ctx, int32_t cmd, void *val, uint32_t valLen);
282 typedef void (*CRYPT_EAL_ImplRandDrbgFreeCtx)(void *ctx);
283 
284 // CRYPT_EAL_OPERAID_DECODER
285 #define CRYPT_DECODER_IMPL_NEWCTX           1
286 #define CRYPT_DECODER_IMPL_SETPARAM         2
287 #define CRYPT_DECODER_IMPL_GETPARAM         3
288 #define CRYPT_DECODER_IMPL_DECODE           4
289 #define CRYPT_DECODER_IMPL_FREEOUTDATA      5
290 #define CRYPT_DECODER_IMPL_FREECTX          6
291 
292 typedef void *(*CRYPT_DECODER_IMPL_NewCtx)(void *provCtx);
293 typedef int32_t (*CRYPT_DECODER_IMPL_SetParam)(void *ctx, const BSL_Param *param);
294 typedef int32_t (*CRYPT_DECODER_IMPL_GetParam)(void *ctx, BSL_Param *param);
295 typedef int32_t (*CRYPT_DECODER_IMPL_Decode)(void *ctx, const BSL_Param *inParam, BSL_Param **outParam);
296 typedef void (*CRYPT_DECODER_IMPL_FreeOutData)(void *ctx, BSL_Param *outData);
297 typedef void (*CRYPT_DECODER_IMPL_FreeCtx)(void *ctx);
298 
299 #ifdef __cplusplus
300 }
301 #endif // __cplusplus
302 
303 #endif // CRYPT_EAL_IMPLPROVIDER_H
304