• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HCF_OPENSSL_ADAPTER_H
17 #define HCF_OPENSSL_ADAPTER_H
18 
19 #include <openssl/ec.h>
20 #include <openssl/evp.h>
21 #include <openssl/pem.h>
22 #include <openssl/x509.h>
23 #include <openssl/evp.h>
24 #include <openssl/hmac.h>
25 #include <openssl/cmac.h>
26 #include <openssl/rand.h>
27 #include <openssl/des.h>
28 #include <openssl/dh.h>
29 #include <openssl/kdf.h>
30 #include <openssl/params.h>
31 #include <openssl/types.h>
32 #include <openssl/obj_mac.h>
33 #include <openssl/core_names.h>
34 #include <openssl/ecdsa.h>
35 #include <crypto/sm2.h>
36 #include <crypto/x509.h>
37 
38 #include <openssl/asn1.h>
39 #include <openssl/asn1t.h>
40 
41 #include <openssl/encoder.h>
42 #include <openssl/decoder.h>
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
48 BIGNUM *OpensslBnDup(const BIGNUM *a);
49 void OpensslBnClear(BIGNUM *a);
50 void OpensslBnClearFree(BIGNUM *a);
51 BIGNUM *OpensslBnNew(void);
52 void OpensslBnFree(BIGNUM *a);
53 BIGNUM *OpensslBin2Bn(const unsigned char *s, int len, BIGNUM *ret);
54 BIGNUM *OpensslLeBin2Bn(const unsigned char *s, int len, BIGNUM *ret);
55 int OpensslBn2BinPad(const BIGNUM *a, unsigned char *to, int toLen);
56 int OpensslBn2LeBinPad(const BIGNUM *a, unsigned char *to, int toLen);
57 BN_CTX *OpensslBnCtxNew(void);
58 void OpensslBnCtxFree(BN_CTX *ctx);
59 int OpensslBnNumBytes(const BIGNUM *a);
60 int OpensslBnSetWord(BIGNUM *a, unsigned int w);
61 unsigned int OpensslBnGetWord(const BIGNUM *a);
62 int OpensslBnNumBits(const BIGNUM *a);
63 int OpensslHex2Bn(BIGNUM **a, const char *str);
64 int OpensslBnCmp(const BIGNUM *a, const BIGNUM *b);
65 
66 EC_KEY *OpensslEcKeyNewByCurveName(int nid);
67 EC_POINT *OpensslEcPointDup(const EC_POINT *src, const EC_GROUP *group);
68 int OpensslEcKeyGenerateKey(EC_KEY *ecKey);
69 int OpensslEcKeySetPublicKey(EC_KEY *key, const EC_POINT *pub);
70 int OpensslEcKeySetPrivateKey(EC_KEY *key, const BIGNUM *privKey);
71 int OpensslEcKeyCheckKey(const EC_KEY *key);
72 const EC_POINT *OpensslEcKeyGet0PublicKey(const EC_KEY *key);
73 const BIGNUM *OpensslEcKeyGet0PrivateKey(const EC_KEY *key);
74 const EC_GROUP *OpensslEcKeyGet0Group(const EC_KEY *key);
75 int OpensslI2dEcPubKey(EC_KEY *a, unsigned char **pp);
76 int OpensslI2dEcPrivateKey(EC_KEY *key, unsigned char **out);
77 EC_KEY *OpensslD2iEcPubKey(EC_KEY **a, const unsigned char **pp, long length);
78 EC_KEY *OpensslD2iEcPrivateKey(EC_KEY **key, const unsigned char **in, long len);
79 void OpensslEcKeySetAsn1Flag(EC_KEY *key, int flag);
80 void OpensslEcKeySetEncFlags(EC_KEY *ecKey, unsigned int flags);
81 void OpensslEcKeyFree(EC_KEY *key);
82 void OpensslEcPointFree(EC_POINT *point);
83 EC_GROUP *OpensslEcGroupNewCurveGfp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
84 void OpensslEcGroupFree(EC_GROUP *group);
85 EC_POINT *OpensslEcPointNew(const EC_GROUP *group);
86 int OpensslEcPointCopy(EC_POINT *dst, const EC_POINT *src);
87 int OpensslEcPointSetAffineCoordinatesGfp(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x,
88     const BIGNUM *y, BN_CTX *ctx);
89 int OpensslEcGroupSetGenerator(EC_GROUP *group, const EC_POINT *generator,
90     const BIGNUM *order, const BIGNUM *cofactor);
91 EC_KEY *OpensslEcKeyNew(void);
92 EC_KEY *OpensslEcKeyDup(const EC_KEY *ecKey);
93 int OpensslEcKeySetGroup(EC_KEY *key, const EC_GROUP *group);
94 int OpensslEcGroupGetCurveGfp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
95 const EC_POINT *OpensslEcGroupGet0Generator(const EC_GROUP *group);
96 int OpensslEcPointGetAffineCoordinatesGfp(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x,
97     BIGNUM *y, BN_CTX *ctx);
98 int OpensslEcGroupGetOrder(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
99 int OpensslEcGroupGetCofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
100 int OpensslEcGroupGetDegree(const EC_GROUP *group);
101 EC_GROUP *OpensslEcGroupDup(const EC_GROUP *a);
102 void OpensslEcGroupSetCurveName(EC_GROUP *group, int nid);
103 int OpensslEcGroupGetCurveName(const EC_GROUP *group);
104 int OpensslEcPointMul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *gScalar, const EC_POINT *point,
105     const BIGNUM *pScalar, BN_CTX *ctx);
106 
107 EVP_MD_CTX *OpensslEvpMdCtxNew(void);
108 void OpensslEvpMdCtxFree(EVP_MD_CTX *ctx);
109 void OpensslEvpMdCtxSetPkeyCtx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
110 EVP_PKEY_CTX *OpensslEvpMdCtxGetPkeyCtx(EVP_MD_CTX *ctx);
111 int OpensslEvpDigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
112 int OpensslEvpDigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t count);
113 int OpensslEvpDigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen);
114 int OpensslEvpDigestSign(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
115     const unsigned char *tbs, size_t tbslen);
116 int OpensslEvpDigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
117 int OpensslEvpDigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t count);
118 int OpensslEvpDigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen);
119 int OpensslEvpDigestVerify(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen,
120     const unsigned char *tbs, size_t tbslen);
121 int OpensslEvpPkeySignInit(EVP_PKEY_CTX *ctx);
122 int OpensslEvpPkeySign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs,
123     size_t tbslen);
124 int OpensslEvpPkeyVerifyInit(EVP_PKEY_CTX *ctx);
125 int OpensslEvpPkeyVerify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs,
126     size_t tbslen);
127 
128 EVP_PKEY *OpensslEvpPkeyNew(void);
129 EVP_PKEY *OpensslEvpPkeyNewRawPublicKey(int type, ENGINE *e, const unsigned char *pub, size_t len);
130 EVP_PKEY *OpensslEvpPkeyNewRawPrivateKey(int type, ENGINE *e, const unsigned char *pub, size_t len);
131 int OpensslEvpPkeyGetRawPublicKey(const EVP_PKEY *pkey, unsigned char *pub, size_t *len);
132 int OpensslEvpPkeyGetRawPrivateKey(const EVP_PKEY *pkey, unsigned char *priv, size_t *len);
133 int OpensslEvpPkeyAssignEcKey(EVP_PKEY *pkey, EC_KEY *key);
134 int OpensslEvpPkeySet1EcKey(EVP_PKEY *pkey, EC_KEY *key);
135 void OpensslEvpPkeyFree(EVP_PKEY *pkey);
136 EVP_PKEY_CTX *OpensslEvpPkeyCtxNewFromPkey(OSSL_LIB_CTX *libctx,
137     EVP_PKEY *pkey, const char *propquery);
138 EVP_PKEY_CTX *OpensslEvpPkeyCtxNew(EVP_PKEY *pkey, ENGINE *e);
139 int OpensslEvpPkeyDeriveInit(EVP_PKEY_CTX *ctx);
140 int OpensslEvpPkeyDeriveSetPeer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
141 int OpensslEvpPkeyDerive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
142 void OpensslEvpPkeyCtxFree(EVP_PKEY_CTX *ctx);
143 
144 // new added
145 int OpensslEvpPkeyEncrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
146     const unsigned char *in, size_t inlen);
147 int OpensslEvpPkeyDecrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
148     const unsigned char *in, size_t inlen);
149 int OpensslEvpPkeyEncryptInit(EVP_PKEY_CTX *ctx);
150 int OpensslEvpPkeyDecryptInit(EVP_PKEY_CTX *ctx);
151 
152 EVP_PKEY_CTX *OpensslEvpPkeyCtxNewId(int id, ENGINE *e);
153 int OpensslEvpPkeyBaseId(EVP_PKEY *pkey);
154 EVP_PKEY_CTX *OpensslEvpPkeyCtxNewFromName(OSSL_LIB_CTX *libctx, const char *name, const char *propquery);
155 int OpensslEvpPkeyVerifyRecoverInit(EVP_PKEY_CTX *ctx);
156 int OpensslEvpPkeyVerifyRecover(EVP_PKEY_CTX *ctx, unsigned char *rout, size_t *routlen, const unsigned char *sig,
157     size_t siglen);
158 OSSL_PARAM OpensslOsslParamConstructUtf8String(const char *key, char *buf, size_t bsize);
159 OSSL_PARAM OpensslOsslParamConstructOctetString(const char *key, void *buf, size_t bsize);
160 OSSL_PARAM OpensslOsslParamConstructEnd(void);
161 OSSL_PARAM OpensslOsslParamConstructUint(const char *key, unsigned int *buf);
162 OSSL_PARAM OpensslOsslParamConstructInt(const char *key, int *buf);
163 OSSL_PARAM OpensslOsslParamConstructUint64(const char *key, uint64_t *buf);
164 int OpensslEvpPkeyGenerate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
165 int OpensslEvpPkeyCtxSet1Id(EVP_PKEY_CTX *ctx, const void *id, int idLen);
166 int OpensslEvpPkeyParamGenInit(EVP_PKEY_CTX *ctx);
167 int OpensslEvpPkeyCtxSetDsaParamgenBits(EVP_PKEY_CTX *ctx, int nbits);
168 int OpensslEvpPkeyCtxSetParams(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params);
169 int OpensslEvpPkeyParamGen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
170 int OpensslEvpPkeyKeyGenInit(EVP_PKEY_CTX *ctx);
171 int OpensslEvpPkeyKeyGen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
172 int OpensslEvpPkeySet1Dsa(EVP_PKEY *pkey, DSA *key);
173 DSA *OpensslEvpPkeyGet1Dsa(EVP_PKEY *pkey);
174 DSA *OpensslDsaNew(void);
175 void OpensslDsaFree(DSA *dsa);
176 int OpensslDsaUpRef(DSA *dsa);
177 int OpensslDsaSet0Pqg(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g);
178 int OpensslDsaSet0Key(DSA *dsa, BIGNUM *pubKey, BIGNUM *priKey);
179 const BIGNUM *OpensslDsaGet0P(const DSA *dsa);
180 const BIGNUM *OpensslDsaGet0Q(const DSA *dsa);
181 const BIGNUM *OpensslDsaGet0G(const DSA *dsa);
182 const BIGNUM *OpensslDsaGet0PubKey(const DSA *dsa);
183 const BIGNUM *OpensslDsaGet0PrivKey(const DSA *dsa);
184 int OpensslDsaGenerateKey(DSA *a);
185 DSA *OpensslD2iDsaPubKey(DSA **dsa, const unsigned char **ppin, long length);
186 DSA *OpensslD2iDsaPrivateKey(DSA **dsa, const unsigned char **ppin, long length);
187 int OpensslI2dDsaPubkey(DSA *dsa, unsigned char **ppout);
188 int OpensslI2dDsaPrivateKey(DSA *dsa, unsigned char **ppout);
189 
190 int OpensslEvpPkeyCheck(EVP_PKEY_CTX *ctx);
191 EVP_PKEY *OpensslEvpPkeyDup(EVP_PKEY *a);
192 EVP_PKEY *OpensslD2iPubKey(EVP_PKEY **a, const unsigned char **pp, long length);
193 EVP_PKEY *OpensslD2iPrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length);
194 int OpensslI2dPubKey(EVP_PKEY *pkey, unsigned char **ppout);
195 int OpensslI2dPrivateKey(EVP_PKEY *pkey, unsigned char **ppout);
196 RSA *OpensslRsaNew(void);
197 void OpensslRsaFree(RSA *rsa);
198 int OpensslRsaGenerateMultiPrimeKey(RSA *rsa, int bits, int primes,
199     BIGNUM *e, BN_GENCB *cb);
200 int OpensslRsaGenerateKeyEx(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
201 int OpensslRsaBits(const RSA *rsa);
202 int OpensslRsaSet0Key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
203 void OpensslRsaGet0Key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
204 const BIGNUM *OpensslRsaGet0N(const RSA *d);
205 const BIGNUM *OpensslRsaGet0E(const RSA *d);
206 const BIGNUM *OpensslRsaGet0D(const RSA *d);
207 void OpensslRsaGet0Factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
208 RSA *OpensslRsaPublicKeyDup(RSA *rsa);
209 RSA *OpensslRsaPrivateKeyDup(RSA *rsa);
210 RSA *OpensslD2iRsaPubKey(RSA **a, const unsigned char **pp, long length);
211 int OpensslI2dRsaPubKey(RSA *a, unsigned char **pp);
212 int OpensslEvpPkeyCtxSetRsaPssSaltLen(EVP_PKEY_CTX *ctx, int saltlen);
213 int OpensslEvpPkeyCtxGetRsaPssSaltLen(EVP_PKEY_CTX *ctx, int *saltlen);
214 int OpensslEvpPkeyCtxSetRsaPadding(EVP_PKEY_CTX *ctx, int pad);
215 int OpensslEvpPkeyCtxSetRsaMgf1Md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
216 int OpensslEvpPkeyCtxSetRsaOaepMd(EVP_PKEY_CTX *ctx, const EVP_MD *md);
217 int OpensslEvpPkeyCtxSet0RsaOaepLabel(EVP_PKEY_CTX *ctx, void *label, int len);
218 int OpensslEvpPkeyCtxGet0RsaOaepLabel(EVP_PKEY_CTX *ctx, unsigned char **label);
219 EVP_PKEY *OpensslD2iAutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length);
220 struct rsa_st *OpensslEvpPkeyGet1Rsa(EVP_PKEY *pkey);
221 int OpensslEvpPkeySet1Rsa(EVP_PKEY *pkey, struct rsa_st *key);
222 int OpensslEvpPkeyAssignRsa(EVP_PKEY *pkey, struct rsa_st *key);
223 int OpensslPemWriteBioRsaPublicKey(BIO *bp, RSA *x);
224 int OpensslPemWriteBioRsaPubKey(BIO *bp, RSA *x);
225 EVP_PKEY *OpensslPemReadBioPrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, void *u);
226 
227 // BIO
228 BIO *OpensslBioNew(const BIO_METHOD *type);
229 const BIO_METHOD *OpensslBioSMem(void);
230 int OpensslBioWrite(BIO *b, const void *data, int dlen);
231 int OpensslBioRead(BIO *b, void *data, int dlen);
232 void OpensslBioFreeAll(BIO *a);
233 
234 int OpensslRandPrivBytes(unsigned char *buf, int num);
235 void OpensslRandSeed(const void *buf, int num);
236 
237 const EVP_MD *OpensslEvpSha1(void);
238 const EVP_MD *OpensslEvpSha224(void);
239 const EVP_MD *OpensslEvpSha256(void);
240 const EVP_MD *OpensslEvpSha384(void);
241 const EVP_MD *OpensslEvpSha512(void);
242 const EVP_MD *OpensslEvpMd5(void);
243 const EVP_MD *OpensslEvpSm3(void);
244 int OpensslEvpDigestFinalEx(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size);
245 int OpensslEvpMdCtxSize(const EVP_MD_CTX *ctx);
246 int OpensslEvpDigestInitEx(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
247 
248 int OpensslHmacInitEx(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md, ENGINE *impl);
249 int OpensslHmacFinal(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
250 size_t OpensslHmacSize(const HMAC_CTX *ctx);
251 void OpensslHmacCtxFree(HMAC_CTX *ctx);
252 HMAC_CTX *OpensslHmacCtxNew(void);
253 
254 int OpensslCmacInit(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, const OSSL_PARAM params[]);
255 int OpensslCmacUpdate(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
256 int OpensslCmacFinal(EVP_MAC_CTX *ctx, unsigned char *out, size_t *outl, size_t outsize);
257 size_t OpensslCmacSize(EVP_MAC_CTX *ctx);
258 void OpensslCmacCtxFree(EVP_MAC_CTX *ctx);
259 EVP_MAC_CTX *OpensslCmacCtxNew(EVP_MAC *mac);
260 void OpensslMacFree(EVP_MAC *mac);
261 
262 void OpensslEvpCipherCtxFree(EVP_CIPHER_CTX *ctx);
263 const EVP_CIPHER *OpensslEvpAes128Ecb(void);
264 const EVP_CIPHER *OpensslEvpAes192Ecb(void);
265 const EVP_CIPHER *OpensslEvpAes256Ecb(void);
266 const EVP_CIPHER *OpensslEvpAes128Cbc(void);
267 const EVP_CIPHER *OpensslEvpAes192Cbc(void);
268 const EVP_CIPHER *OpensslEvpAes256Cbc(void);
269 const EVP_CIPHER *OpensslEvpAes128Ctr(void);
270 const EVP_CIPHER *OpensslEvpAes192Ctr(void);
271 const EVP_CIPHER *OpensslEvpAes256Ctr(void);
272 const EVP_CIPHER *OpensslEvpAes128Ofb(void);
273 const EVP_CIPHER *OpensslEvpAes192Ofb(void);
274 const EVP_CIPHER *OpensslEvpAes256Ofb(void);
275 const EVP_CIPHER *OpensslEvpAes128Cfb(void);
276 const EVP_CIPHER *OpensslEvpAes192Cfb(void);
277 const EVP_CIPHER *OpensslEvpAes256Cfb(void);
278 const EVP_CIPHER *OpensslEvpAes128Cfb1(void);
279 const EVP_CIPHER *OpensslEvpAes192Cfb1(void);
280 const EVP_CIPHER *OpensslEvpAes256Cfb1(void);
281 const EVP_CIPHER *OpensslEvpAes128Cfb128(void);
282 const EVP_CIPHER *OpensslEvpAes192Cfb128(void);
283 const EVP_CIPHER *OpensslEvpAes256Cfb128(void);
284 const EVP_CIPHER *OpensslEvpAes128Cfb8(void);
285 const EVP_CIPHER *OpensslEvpAes192Cfb8(void);
286 const EVP_CIPHER *OpensslEvpAes256Cfb8(void);
287 const EVP_CIPHER *OpensslEvpAes128Ccm(void);
288 const EVP_CIPHER *OpensslEvpAes192Ccm(void);
289 const EVP_CIPHER *OpensslEvpAes256Ccm(void);
290 const EVP_CIPHER *OpensslEvpAes128Gcm(void);
291 const EVP_CIPHER *OpensslEvpAes192Gcm(void);
292 const EVP_CIPHER *OpensslEvpAes256Gcm(void);
293 const EVP_CIPHER *OpensslEvpSm4Ecb(void);
294 const EVP_CIPHER *OpensslEvpSm4Cbc(void);
295 const EVP_CIPHER *OpensslEvpSm4Cfb(void);
296 const EVP_CIPHER *OpensslEvpSm4Cfb128(void);
297 const EVP_CIPHER *OpensslEvpSm4Ctr(void);
298 const EVP_CIPHER *OpensslEvpSm4Ofb(void);
299 const EVP_CIPHER *OpensslEvpDesEde3Ecb(void);
300 const EVP_CIPHER *OpensslEvpDesEde3Cbc(void);
301 const EVP_CIPHER *OpensslEvpDesEde3Ofb(void);
302 const EVP_CIPHER *OpensslEvpDesEde3Cfb64(void);
303 const EVP_CIPHER *OpensslEvpDesEde3Cfb1(void);
304 const EVP_CIPHER *OpensslEvpDesEde3Cfb8(void);
305 const EVP_CIPHER *OpensslEvpDesEcb(void);
306 const EVP_CIPHER *OpensslEvpDesCbc(void);
307 const EVP_CIPHER *OpensslEvpDesOfb(void);
308 const EVP_CIPHER *OpensslEvpDesCfb64(void);
309 const EVP_CIPHER *OpensslEvpDesCfb1(void);
310 const EVP_CIPHER *OpensslEvpDesCfb8(void);
311 EVP_CIPHER *OpensslEvpCipherFetch(OSSL_LIB_CTX *ctx, const char *algorithm, const char *properties);
312 void OpensslEvpCipherFree(EVP_CIPHER *cipher);
313 EVP_CIPHER_CTX *OpensslEvpCipherCtxNew(void);
314 int OpensslEvpCipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
315     const unsigned char *key, const unsigned char *iv, int enc);
316 int OpensslEvpCipherCtxSetPadding(EVP_CIPHER_CTX *ctx, int pad);
317 
318 int OpensslEvpCipherFinalEx(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
319 int OpensslEvpCipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl);
320 
321 int OpensslSm2CipherTextSize(const EC_KEY *key, const EVP_MD *digest, size_t msgLen, size_t *cipherTextSize);
322 int OpensslSm2PlainTextSize(const unsigned char *cipherText, size_t cipherTextSize, size_t *plainTextSize);
323 int OpensslOsslSm2Encrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *msg,
324     size_t msgLen, uint8_t *cipherTextBuf, size_t *cipherTextLen);
325 
326 int OpensslOsslSm2Decrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *cipherText,
327     size_t cipherTextLen, uint8_t *plainTextBuf, size_t *plainTextLen);
328 
329 int OpensslPkcs5Pbkdf2Hmac(const char *pass, int passlen, const unsigned char *salt,
330     int saltlen, int iter, const EVP_MD *digest, int keylen, unsigned char *out);
331 
332 EC_GROUP *OpensslEcGroupNewByCurveName(int nid);
333 
334 int OpensslEvpEncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
335     const unsigned char *key, const unsigned char *iv);
336 int OpensslEvpCipherCtxCtrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
337 
338 DH *OpensslDhNew(void);
339 int OpensslDhComputeKeyPadded(unsigned char *key, const BIGNUM *pubKey, DH *dh);
340 void OpensslDhFree(DH *dh);
341 int OpensslDhGenerateKey(DH *dh);
342 const BIGNUM *OpensslDhGet0P(const DH *dh);
343 const BIGNUM *OpensslDhGet0Q(const DH *dh);
344 const BIGNUM *OpensslDhGet0G(const DH *dh);
345 long OpensslDhGetLength(const DH *dh);
346 int OpensslDhSetLength(DH *dh, long length);
347 const BIGNUM *OpensslDhGet0PubKey(const DH *dh);
348 const BIGNUM *OpensslDhGet0PrivKey(const DH *dh);
349 int OpensslEvpPkeySet1Dh(EVP_PKEY *pkey, DH *key);
350 int OpensslEvpPkeyAssignDh(EVP_PKEY *pkey, DH *key);
351 struct dh_st *OpensslEvpPkeyGet1Dh(EVP_PKEY *pkey);
352 int OpensslEvpPkeyIsA(const EVP_PKEY *pkey, const char *name);
353 int OpensslEvpPkeyCtxSetDhParamgenPrimeLen(EVP_PKEY_CTX *ctx, int pbits);
354 int OpensslEvpPkeyCtxSetSignatureMd(EVP_PKEY_CTX *ctx, const EVP_MD *md);
355 int OpensslDhUpRef(DH *r);
356 int OpensslDhSet0Pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
357 int OpensslDhSet0Key(DH *dh, BIGNUM *pubKey, BIGNUM *privKey);
358 EVP_KDF *OpensslEvpKdfFetch(OSSL_LIB_CTX *libctx, const char *algorithm,
359     const char *properties);
360 EVP_KDF_CTX *OpensslEvpKdfCtxNew(EVP_KDF *kdf);
361 void OpensslEvpKdfFree(EVP_KDF *kdf);
362 void OpensslEvpKdfCtxFree(EVP_KDF_CTX *ctx);
363 int OpensslEvpKdfDerive(EVP_KDF_CTX *ctx, unsigned char *key, size_t keylen,
364     const OSSL_PARAM params[]);
365 
366 // SM2 ASN1
367 typedef struct Sm2CipherTextSt Sm2CipherText;
368 DECLARE_ASN1_FUNCTIONS(Sm2CipherText)
369 
370 struct Sm2CipherTextSt {
371     BIGNUM *c1X;
372     BIGNUM *c1Y;
373     ASN1_OCTET_STRING *c3;
374     ASN1_OCTET_STRING *c2;
375 };
376 
377 typedef struct ECDSA_SIG_st ECDSA_SIG;
378 
379 ECDSA_SIG *OpensslEcdsaSigNew();
380 ECDSA_SIG *OpensslD2iSm2EcdsaSig(const unsigned char **inputData, int dataLen);
381 int OpensslI2dSm2EcdsaSig(ECDSA_SIG *sm2Text, unsigned char **returnData);
382 void OpensslSm2EcdsaSigFree(ECDSA_SIG *sm2Text);
383 const BIGNUM *OpensslEcdsaSigGet0r(const ECDSA_SIG *sig);
384 const BIGNUM *OpensslEcdsaSigGet0s(const ECDSA_SIG *sig);
385 int OpensslEcdsaSigSet0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
386 
387 void OpensslSm2CipherTextFree(struct Sm2CipherTextSt *sm2Text);
388 struct Sm2CipherTextSt *OpensslD2iSm2CipherText(const uint8_t *ciphertext, size_t cipherTextLen);
389 void OpensslAsn1OctetStringFree(ASN1_OCTET_STRING *field);
390 ASN1_OCTET_STRING *OpensslAsn1OctetStringNew(void);
391 int OpensslAsn1OctetStringSet(ASN1_OCTET_STRING *x, const unsigned char *d, int len);
392 struct Sm2CipherTextSt *OpensslSm2CipherTextNew(void);
393 int OpensslI2dSm2CipherText(struct Sm2CipherTextSt *sm2Text, unsigned char **returnData);
394 int OpensslAsn1StringLength(ASN1_OCTET_STRING *p);
395 const unsigned char *OpensslAsn1StringGet0Data(ASN1_OCTET_STRING *p);
396 
397 OSSL_PARAM_BLD *OpensslOsslParamBldNew(void);
398 void OpensslOsslParamBldFree(OSSL_PARAM_BLD *bld);
399 OSSL_PARAM *OpensslOsslParamBldToParam(OSSL_PARAM_BLD *bld);
400 int OpensslOsslParamBldPushUtf8String(OSSL_PARAM_BLD *bld, const char *key, const char *buf, size_t bsize);
401 int OpensslOsslParamBldPushOctetString(OSSL_PARAM_BLD *bld, const char *key, const void *buf, size_t bsize);
402 int OpensslEvpPkeyCtxSetEcParamgenCurveNid(EVP_PKEY_CTX *ctx, int nid);
403 int OpensslEvpPkeyFromDataInit(EVP_PKEY_CTX *ctx);
404 int OpensslEvpPkeyFromData(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection, OSSL_PARAM params[]);
405 EC_KEY *OpensslEvpPkeyGet1EcKey(EVP_PKEY *pkey);
406 void OpensslOsslParamFree(OSSL_PARAM *params);
407 int OpensslEcOct2Point(const EC_GROUP *group, EC_POINT *p, const unsigned char *buf, size_t len, BN_CTX *ctx);
408 int OpensslEcPointSetAffineCoordinates(const EC_GROUP *group, EC_POINT *p,
409     const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
410 int OpensslEcPointGetAffineCoordinates(const EC_GROUP *group, const EC_POINT *p,
411     BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
412 OSSL_ENCODER_CTX *OpensslOsslEncoderCtxNewForPkey(const EVP_PKEY *pkey, int selection,
413     const char *outputType, const char *outputStruct, const char *propquery);
414 int OpensslOsslEncoderToData(OSSL_ENCODER_CTX *ctx, unsigned char **pdata, size_t *len);
415 int OpensslOsslDecoderCtxSetPassPhrase(OSSL_DECODER_CTX *ctx, const unsigned char *kstr, size_t klen);
416 void OpensslOsslEncoderCtxFree(OSSL_ENCODER_CTX *ctx);
417 OSSL_DECODER_CTX *OpensslOsslDecoderCtxNewForPkey(EVP_PKEY **pkey, const char *inputType,
418     const char *inputStructure, const char *keytype, int selection, OSSL_LIB_CTX *libctx, const char *propquery);
419 int OpensslOsslDecoderFromData(OSSL_DECODER_CTX *ctx, const unsigned char **pdata,
420     size_t *len);
421 void OpensslOsslDecoderCtxFree(OSSL_DECODER_CTX *ctx);
422 EC_KEY *OpensslEcKeyNewbyCurveNameEx(OSSL_LIB_CTX *ctx, const char *propq, int nid);
423 int OpensslEvpPkeyGetOctetStringParam(const EVP_PKEY *pkey, const char *keyName, unsigned char *buf, size_t maxBufSz,
424     size_t *outLen);
425 void OpensslEcKeySetFlags(EC_KEY *key, int flags);
426 int OpensslEvpPkeyGetBnParam(const EVP_PKEY *pkey, const char *keyName, BIGNUM **bn);
427 
428 #ifdef __cplusplus
429 }
430 #endif
431 
432 #endif
433