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 // Source code for the test .so file
17
18 #include <stdio.h>
19 #include <stdint.h>
20 #include <stdlib.h>
21 #include <string.h>
22 #include "crypt_errno.h"
23 #include "crypt_eal_provider.h"
24 #include "crypt_eal_implprovider.h"
25
26 #define CRYPT_EAL_DEFAULT_ATTR "provider=test1,compare1=one,cpmpare3=three"
27 #define RESULT 1415926
28
Provider_NewCtx(void * provCtx,int32_t algid,BSL_Param * param)29 void *Provider_NewCtx(void *provCtx, int32_t algid, BSL_Param *param)
30 {
31 (void)provCtx;
32 (void)param;
33 int *ctx = malloc(sizeof(int));
34 return ctx;
35 }
36
Provider_FreeCtx(void * ctx)37 int32_t Provider_FreeCtx(void *ctx)
38 {
39 free(ctx);
40 return 0;
41 }
42
MD5_Init(void * mdCtx)43 int32_t MD5_Init(void *mdCtx)
44 {
45 mdCtx = NULL;
46 return RESULT;
47 }
48
49 const CRYPT_EAL_Func defMdMd5[] = {
50 {CRYPT_EAL_IMPLMD_NEWCTX, NULL},
51 {CRYPT_EAL_IMPLMD_INITCTX, MD5_Init},
52 {CRYPT_EAL_IMPLMD_UPDATE, NULL},
53 {CRYPT_EAL_IMPLMD_FINAL, NULL},
54 {CRYPT_EAL_IMPLMD_DEINITCTX, NULL},
55 {CRYPT_EAL_IMPLMD_DUPCTX, NULL},
56 {CRYPT_EAL_IMPLMD_CTRL, NULL},
57 {CRYPT_EAL_IMPLMD_FREECTX, NULL},
58 CRYPT_EAL_FUNC_END,
59 };
60
61 const CRYPT_EAL_Func defKdfScrypt[] = {
62 {CRYPT_EAL_IMPLKDF_NEWCTX, NULL},
63 {CRYPT_EAL_IMPLKDF_SETPARAM, NULL},
64 {CRYPT_EAL_IMPLKDF_DERIVE, NULL},
65 {CRYPT_EAL_IMPLKDF_DEINITCTX, NULL},
66 {CRYPT_EAL_IMPLKDF_CTRL, NULL},
67 {CRYPT_EAL_IMPLKDF_FREECTX, NULL},
68 CRYPT_EAL_FUNC_END,
69 };
70
71 const CRYPT_EAL_Func defMacHmac[] = {
72 {CRYPT_EAL_IMPLMAC_NEWCTX, NULL},
73 {CRYPT_EAL_IMPLMAC_INIT, NULL},
74 {CRYPT_EAL_IMPLMAC_UPDATE, NULL},
75 {CRYPT_EAL_IMPLMAC_FINAL, NULL},
76 {CRYPT_EAL_IMPLMAC_REINITCTX, NULL},
77 {CRYPT_EAL_IMPLMAC_CTRL, NULL},
78 {CRYPT_EAL_IMPLMAC_FREECTX, NULL},
79 CRYPT_EAL_FUNC_END,
80 };
81
82 const CRYPT_EAL_Func defKeyMgmtDsa[] = {
83 {CRYPT_EAL_IMPLPKEYMGMT_NEWCTX, NULL},
84 {CRYPT_EAL_IMPLPKEYMGMT_SETPARAM, NULL},
85 {CRYPT_EAL_IMPLPKEYMGMT_GETPARAM, NULL},
86 {CRYPT_EAL_IMPLPKEYMGMT_GENKEY, NULL},
87 {CRYPT_EAL_IMPLPKEYMGMT_SETPRV, NULL},
88 {CRYPT_EAL_IMPLPKEYMGMT_SETPUB, NULL},
89 {CRYPT_EAL_IMPLPKEYMGMT_GETPRV, NULL},
90 {CRYPT_EAL_IMPLPKEYMGMT_GETPUB, NULL},
91 {CRYPT_EAL_IMPLPKEYMGMT_DUPCTX, NULL},
92 {CRYPT_EAL_IMPLPKEYMGMT_CHECK, NULL},
93 {CRYPT_EAL_IMPLPKEYMGMT_COMPARE, NULL},
94 {CRYPT_EAL_IMPLPKEYMGMT_CTRL, NULL},
95 {CRYPT_EAL_IMPLPKEYMGMT_FREECTX, NULL},
96 CRYPT_EAL_FUNC_END,
97 };
98
99 const CRYPT_EAL_Func defAsymCipherRsa[] = {
100 {CRYPT_EAL_IMPLPKEYCIPHER_ENCRYPT, NULL},
101 {CRYPT_EAL_IMPLPKEYCIPHER_DECRYPT, NULL},
102 CRYPT_EAL_FUNC_END
103 };
104
105 const CRYPT_EAL_Func defExchX25519[] = {
106 {CRYPT_EAL_IMPLPKEYEXCH_EXCH, NULL},
107 CRYPT_EAL_FUNC_END
108 };
109
110 const CRYPT_EAL_Func defSignDsa[] = {
111 {CRYPT_EAL_IMPLPKEYSIGN_SIGN, NULL},
112 {CRYPT_EAL_IMPLPKEYSIGN_VERIFY, NULL},
113 CRYPT_EAL_FUNC_END,
114 };
115 static const CRYPT_EAL_AlgInfo defMds[] = {
116 {CRYPT_MD_MD5, defMdMd5, CRYPT_EAL_DEFAULT_ATTR},
117 CRYPT_EAL_ALGINFO_END
118 };
119
120 static const CRYPT_EAL_AlgInfo defKdfs[] = {
121 {CRYPT_KDF_SCRYPT, defKdfScrypt, CRYPT_EAL_DEFAULT_ATTR},
122 CRYPT_EAL_ALGINFO_END
123 };
124
125 static const CRYPT_EAL_AlgInfo defKeyMgmt[] = {
126 {CRYPT_PKEY_DSA, defKeyMgmtDsa, CRYPT_EAL_DEFAULT_ATTR},
127 CRYPT_EAL_ALGINFO_END
128 };
129
130 static const CRYPT_EAL_AlgInfo defAsymCiphers[] = {
131 {CRYPT_PKEY_RSA, defAsymCipherRsa, CRYPT_EAL_DEFAULT_ATTR},
132 CRYPT_EAL_ALGINFO_END
133 };
134
135 static const CRYPT_EAL_AlgInfo defKeyExch[] = {
136 {CRYPT_PKEY_X25519, defExchX25519, CRYPT_EAL_DEFAULT_ATTR},
137 CRYPT_EAL_ALGINFO_END
138 };
139
140 static const CRYPT_EAL_AlgInfo defSigns[] = {
141 {CRYPT_PKEY_DSA, defSignDsa, CRYPT_EAL_DEFAULT_ATTR},
142 CRYPT_EAL_ALGINFO_END
143 };
144
145 static const CRYPT_EAL_AlgInfo defMacs[] = {
146 {CRYPT_MAC_HMAC_MD5, defMacHmac, CRYPT_EAL_DEFAULT_ATTR},
147 CRYPT_EAL_ALGINFO_END
148 };
149
CRYPT_EAL_DefaultProvQuery(void * provCtx,int32_t operaId,const CRYPT_EAL_AlgInfo ** algInfos)150 static int32_t CRYPT_EAL_DefaultProvQuery(void *provCtx, int32_t operaId, const CRYPT_EAL_AlgInfo **algInfos)
151 {
152 (void) provCtx;
153 int32_t ret = CRYPT_SUCCESS;
154 switch (operaId) {
155 case CRYPT_EAL_OPERAID_SYMMCIPHER:
156 break;
157 case CRYPT_EAL_OPERAID_KEYMGMT:
158 *algInfos = defKeyMgmt;
159 break;
160 case CRYPT_EAL_OPERAID_SIGN:
161 *algInfos = defSigns;
162 break;
163 case CRYPT_EAL_OPERAID_ASYMCIPHER:
164 *algInfos = defAsymCiphers;
165 break;
166 case CRYPT_EAL_OPERAID_KEYEXCH:
167 *algInfos = defKeyExch;
168 break;
169 case CRYPT_EAL_OPERAID_KEM:
170 break;
171 case CRYPT_EAL_OPERAID_HASH:
172 *algInfos = defMds;
173 break;
174 case CRYPT_EAL_OPERAID_MAC:
175 *algInfos = defMacs;
176 break;
177 case CRYPT_EAL_OPERAID_KDF:
178 *algInfos = defKdfs;
179 break;
180 case CRYPT_EAL_OPERAID_RAND:
181 break;
182 default:
183 ret = CRYPT_NOT_SUPPORT;
184 break;
185 }
186 return ret;
187 }
CRYPT_EAL_DefaultProvFree(void * provCtx)188 static void CRYPT_EAL_DefaultProvFree(void *provCtx)
189 {
190 return;
191 }
192
193 static CRYPT_EAL_Func defProvOutFuncs[] = {
194 {CRYPT_EAL_PROVCB_QUERY, CRYPT_EAL_DefaultProvQuery},
195 {CRYPT_EAL_PROVCB_FREE, CRYPT_EAL_DefaultProvFree},
196 {CRYPT_EAL_PROVCB_CTRL, NULL},
197 CRYPT_EAL_FUNC_END
198 };
199
CRYPT_EAL_ProviderInit(CRYPT_EAL_ProvMgrCtx * mgrCtx,BSL_Param * param,CRYPT_EAL_Func * capFuncs,CRYPT_EAL_Func ** outFuncs,void ** provCtx)200 int32_t CRYPT_EAL_ProviderInit(CRYPT_EAL_ProvMgrCtx *mgrCtx,
201 BSL_Param *param, CRYPT_EAL_Func *capFuncs, CRYPT_EAL_Func **outFuncs, void **provCtx)
202 {
203 *outFuncs = defProvOutFuncs;
204 return 0;
205 }
206