• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022-2023 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/rand.h>
26 #include <openssl/des.h>
27 #include <openssl/dh.h>
28 #include <crypto/sm2.h>
29 #include <crypto/x509.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 BIGNUM *Openssl_BN_dup(const BIGNUM *a);
36 void Openssl_BN_clear(BIGNUM *a);
37 void Openssl_BN_clear_free(BIGNUM *a);
38 BIGNUM *Openssl_BN_new(void);
39 void Openssl_BN_free(BIGNUM *a);
40 BIGNUM *Openssl_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
41 BIGNUM *Openssl_BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret);
42 int Openssl_BN_bn2binpad(const BIGNUM *a, unsigned char *to, int toLen);
43 int Openssl_BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int toLen);
44 BN_CTX *Openssl_BN_CTX_new(void);
45 void Openssl_BN_CTX_free(BN_CTX *ctx);
46 int Openssl_BN_num_bytes(const BIGNUM *a);
47 int Openssl_BN_set_word(BIGNUM *a, unsigned int w);
48 unsigned int Openssl_BN_get_word(const BIGNUM *a);
49 int Openssl_BN_num_bits(const BIGNUM *a);
50 int Openssl_BN_hex2bn(BIGNUM **a, const char *str);
51 int Openssl_BN_cmp(const BIGNUM *a, const BIGNUM *b);
52 
53 EC_KEY *Openssl_EC_KEY_new_by_curve_name(int nid);
54 EC_POINT *Openssl_EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
55 int Openssl_EC_KEY_generate_key(EC_KEY *ecKey);
56 int Openssl_EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
57 int Openssl_EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv_key);
58 int Openssl_EC_KEY_check_key(const EC_KEY *key);
59 const EC_POINT *Openssl_EC_KEY_get0_public_key(const EC_KEY *key);
60 const BIGNUM *Openssl_EC_KEY_get0_private_key(const EC_KEY *key);
61 const EC_GROUP *Openssl_EC_KEY_get0_group(const EC_KEY *key);
62 int Openssl_i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp);
63 int Openssl_i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
64 EC_KEY *Openssl_d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length);
65 EC_KEY *Openssl_d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
66 void Openssl_EC_KEY_set_asn1_flag(EC_KEY *key, int flag);
67 void Openssl_EC_KEY_set_enc_flags(EC_KEY *ecKey, unsigned int flags);
68 void Openssl_EC_KEY_free(EC_KEY *key);
69 void Openssl_EC_POINT_free(EC_POINT *point);
70 EC_GROUP *Openssl_EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
71 void Openssl_EC_GROUP_free(EC_GROUP *group);
72 EC_POINT *Openssl_EC_POINT_new(const EC_GROUP *group);
73 int Openssl_EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
74 int Openssl_EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point, const BIGNUM *x,
75     const BIGNUM *y, BN_CTX *ctx);
76 int Openssl_EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
77     const BIGNUM *order, const BIGNUM *cofactor);
78 EC_KEY *Openssl_EC_KEY_new(void);
79 EC_KEY *Openssl_EC_KEY_dup(const EC_KEY *ecKey);
80 int Openssl_EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
81 int Openssl_EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
82 const EC_POINT *Openssl_EC_GROUP_get0_generator(const EC_GROUP *group);
83 int Openssl_EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, const EC_POINT *point, BIGNUM *x,
84     BIGNUM *y, BN_CTX *ctx);
85 int Openssl_EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
86 int Openssl_EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
87 int Openssl_EC_GROUP_get_degree(const EC_GROUP *group);
88 EC_GROUP *Openssl_EC_GROUP_dup(const EC_GROUP *a);
89 void Openssl_EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
90 int Openssl_EC_GROUP_get_curve_name(const EC_GROUP *group);
91 int Openssl_EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar, const EC_POINT *point,
92     const BIGNUM *p_scalar, BN_CTX *ctx);
93 
94 EVP_MD_CTX *Openssl_EVP_MD_CTX_new(void);
95 void Openssl_EVP_MD_CTX_free(EVP_MD_CTX *ctx);
96 void Openssl_EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
97 EVP_PKEY_CTX *Openssl_EVP_MD_CTX_get_pkey_ctx(EVP_MD_CTX *ctx);
98 int Openssl_EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
99 int Openssl_EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t count);
100 int Openssl_EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen);
101 int Openssl_EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
102     const unsigned char *tbs, size_t tbslen);
103 int Openssl_EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
104 int Openssl_EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t count);
105 int Openssl_EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen);
106 int Openssl_EVP_DigestVerify(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen,
107     const unsigned char *tbs, size_t tbslen);
108 int Openssl_EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
109 int Openssl_EVP_PKEY_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs,
110     size_t tbslen);
111 int Openssl_EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
112 int Openssl_EVP_PKEY_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs,
113     size_t tbslen);
114 
115 EVP_PKEY *Openssl_EVP_PKEY_new(void);
116 EVP_PKEY *Openssl_EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len);
117 EVP_PKEY *Openssl_EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *pub, size_t len);
118 int Openssl_EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len);
119 int Openssl_EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, size_t *len);
120 int Openssl_EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
121 void Openssl_EVP_PKEY_free(EVP_PKEY *pkey);
122 EVP_PKEY_CTX *Openssl_EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx,
123     EVP_PKEY *pkey, const char *propquery);
124 EVP_PKEY_CTX *Openssl_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
125 int Openssl_EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
126 int Openssl_EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
127 int Openssl_EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
128 void Openssl_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
129 
130 // new added
131 int Openssl_EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
132     const unsigned char *in, size_t inlen);
133 int Openssl_EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
134     const unsigned char *in, size_t inlen);
135 int Openssl_EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
136 int Openssl_EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
137 
138 EVP_PKEY_CTX *Openssl_EVP_PKEY_CTX_new_id(int id, ENGINE *e);
139 int Openssl_EVP_PKEY_base_id(EVP_PKEY *pkey);
140 EVP_PKEY_CTX *Openssl_EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx, const char *name, const char *propquery);
141 OSSL_PARAM Openssl_OSSL_PARAM_construct_utf8_string(const char *key, char *buf, size_t bsize);
142 OSSL_PARAM Openssl_OSSL_PARAM_construct_end(void);
143 OSSL_PARAM Openssl_OSSL_PARAM_construct_uint(const char *key, unsigned int *buf);
144 OSSL_PARAM Openssl_OSSL_PARAM_construct_int(const char *key, int *buf);
145 int Openssl_EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
146 int Openssl_EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int id_len);
147 int Openssl_EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
148 int Openssl_EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits);
149 int Openssl_EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params);
150 int Openssl_EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
151 int Openssl_EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
152 int Openssl_EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
153 int Openssl_EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key);
154 DSA *Openssl_EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
155 DSA *Openssl_DSA_new(void);
156 void Openssl_DSA_free(DSA *dsa);
157 int Openssl_DSA_up_ref(DSA *dsa);
158 int Openssl_DSA_set0_pqg(DSA *dsa, BIGNUM *p, BIGNUM *q, BIGNUM *g);
159 int Openssl_DSA_set0_key(DSA *dsa, BIGNUM *pub_key, BIGNUM *pri_key);
160 const BIGNUM *Openssl_DSA_get0_p(const DSA *dsa);
161 const BIGNUM *Openssl_DSA_get0_q(const DSA *dsa);
162 const BIGNUM *Openssl_DSA_get0_g(const DSA *dsa);
163 const BIGNUM *Openssl_DSA_get0_pub_key(const DSA *dsa);
164 const BIGNUM *Openssl_DSA_get0_priv_key(const DSA *dsa);
165 int Openssl_DSA_generate_key(DSA *a);
166 DSA *Openssl_d2i_DSA_PUBKEY(DSA **dsa, const unsigned char **ppin, long length);
167 DSA *Openssl_d2i_DSAPrivateKey(DSA **dsa, const unsigned char **ppin, long length);
168 int Openssl_i2d_DSA_PUBKEY(DSA *dsa, unsigned char **ppout);
169 int Openssl_i2d_DSAPrivateKey(DSA *dsa, unsigned char **ppout);
170 
171 int Openssl_EVP_PKEY_check(EVP_PKEY_CTX *ctx);
172 EVP_PKEY *Openssl_EVP_PKEY_dup(EVP_PKEY *a);
173 EVP_PKEY *Openssl_d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
174 EVP_PKEY *Openssl_d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length);
175 int Openssl_i2d_PUBKEY(EVP_PKEY *pkey, unsigned char **ppout);
176 int Openssl_i2d_PrivateKey(EVP_PKEY *pkey, unsigned char **ppout);
177 RSA *Openssl_RSA_new(void);
178 void Openssl_RSA_free(RSA *rsa);
179 int Openssl_RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes,
180     BIGNUM *e, BN_GENCB *cb);
181 int Openssl_RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
182 int Openssl_RSA_bits(const RSA *rsa);
183 int Openssl_RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
184 void Openssl_RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
185 const BIGNUM *Openssl_RSA_get0_n(const RSA *d);
186 const BIGNUM *Openssl_RSA_get0_e(const RSA *d);
187 const BIGNUM *Openssl_RSA_get0_d(const RSA *d);
188 void Openssl_RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
189 RSA *Openssl_RSAPublicKey_dup(RSA *rsa);
190 RSA *Openssl_RSAPrivateKey_dup(RSA *rsa);
191 RSA *Openssl_d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length);
192 int Openssl_i2d_RSA_PUBKEY(RSA *a, unsigned char **pp);
193 int Openssl_EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen);
194 int Openssl_EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen);
195 int Openssl_EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad);
196 int Openssl_EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
197 int Openssl_EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
198 int Openssl_EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, int len);
199 int Openssl_EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label);
200 EVP_PKEY *Openssl_d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length);
201 struct rsa_st *Openssl_EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
202 int Openssl_EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key);
203 int Openssl_EVP_PKEY_assign_RSA(EVP_PKEY *pkey, struct rsa_st *key);
204 int Openssl_i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
205     char *kstr, int klen, pem_password_cb *cb, void *u);
206 // BIO
207 BIO *Openssl_BIO_new(const BIO_METHOD *type);
208 const BIO_METHOD *Openssl_BIO_s_mem(void);
209 int Openssl_BIO_read(BIO *b, void *data, int dlen);
210 void Openssl_BIO_free_all(BIO *a);
211 
212 int Openssl_RAND_priv_bytes(unsigned char *buf, int num);
213 void Openssl_RAND_seed(const void *buf, int num);
214 
215 const EVP_MD *Openssl_EVP_sha1(void);
216 const EVP_MD *Openssl_EVP_sha224(void);
217 const EVP_MD *Openssl_EVP_sha256(void);
218 const EVP_MD *Openssl_EVP_sha384(void);
219 const EVP_MD *Openssl_EVP_sha512(void);
220 const EVP_MD *Openssl_EVP_md5(void);
221 const EVP_MD *Openssl_EVP_sm3(void);
222 int Openssl_EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size);
223 int Openssl_EVP_MD_CTX_size(const EVP_MD_CTX *ctx);
224 int Openssl_EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
225 
226 int Openssl_HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md, ENGINE *impl);
227 int Openssl_HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
228 size_t Openssl_HMAC_size(const HMAC_CTX *ctx);
229 void Openssl_HMAC_CTX_free(HMAC_CTX *ctx);
230 HMAC_CTX *Openssl_HMAC_CTX_new(void);
231 
232 void Openssl_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx);
233 const EVP_CIPHER *Openssl_EVP_aes_128_ecb(void);
234 const EVP_CIPHER *Openssl_EVP_aes_192_ecb(void);
235 const EVP_CIPHER *Openssl_EVP_aes_256_ecb(void);
236 const EVP_CIPHER *Openssl_EVP_aes_128_cbc(void);
237 const EVP_CIPHER *Openssl_EVP_aes_192_cbc(void);
238 const EVP_CIPHER *Openssl_EVP_aes_256_cbc(void);
239 const EVP_CIPHER *Openssl_EVP_aes_128_ctr(void);
240 const EVP_CIPHER *Openssl_EVP_aes_192_ctr(void);
241 const EVP_CIPHER *Openssl_EVP_aes_256_ctr(void);
242 const EVP_CIPHER *Openssl_EVP_aes_128_ofb(void);
243 const EVP_CIPHER *Openssl_EVP_aes_192_ofb(void);
244 const EVP_CIPHER *Openssl_EVP_aes_256_ofb(void);
245 const EVP_CIPHER *Openssl_EVP_aes_128_cfb(void);
246 const EVP_CIPHER *Openssl_EVP_aes_192_cfb(void);
247 const EVP_CIPHER *Openssl_EVP_aes_256_cfb(void);
248 const EVP_CIPHER *Openssl_EVP_aes_128_cfb1(void);
249 const EVP_CIPHER *Openssl_EVP_aes_192_cfb1(void);
250 const EVP_CIPHER *Openssl_EVP_aes_256_cfb1(void);
251 const EVP_CIPHER *Openssl_EVP_aes_128_cfb128(void);
252 const EVP_CIPHER *Openssl_EVP_aes_192_cfb128(void);
253 const EVP_CIPHER *Openssl_EVP_aes_256_cfb128(void);
254 const EVP_CIPHER *Openssl_EVP_aes_128_cfb8(void);
255 const EVP_CIPHER *Openssl_EVP_aes_192_cfb8(void);
256 const EVP_CIPHER *Openssl_EVP_aes_256_cfb8(void);
257 const EVP_CIPHER *Openssl_EVP_aes_128_ccm(void);
258 const EVP_CIPHER *Openssl_EVP_aes_192_ccm(void);
259 const EVP_CIPHER *Openssl_EVP_aes_256_ccm(void);
260 const EVP_CIPHER *Openssl_EVP_aes_128_gcm(void);
261 const EVP_CIPHER *Openssl_EVP_aes_192_gcm(void);
262 const EVP_CIPHER *Openssl_EVP_aes_256_gcm(void);
263 const EVP_CIPHER *Openssl_EVP_sm4_ecb(void);
264 const EVP_CIPHER *Openssl_EVP_sm4_cbc(void);
265 const EVP_CIPHER *Openssl_EVP_sm4_cfb(void);
266 const EVP_CIPHER *Openssl_EVP_sm4_cfb128(void);
267 const EVP_CIPHER *Openssl_EVP_sm4_ctr(void);
268 const EVP_CIPHER *Openssl_EVP_sm4_ofb(void);
269 const EVP_CIPHER *Openssl_EVP_des_ede3_ecb(void);
270 const EVP_CIPHER *Openssl_EVP_des_ede3_cbc(void);
271 const EVP_CIPHER *Openssl_EVP_des_ede3_ofb(void);
272 const EVP_CIPHER *Openssl_EVP_des_ede3_cfb64(void);
273 const EVP_CIPHER *Openssl_EVP_des_ede3_cfb1(void);
274 const EVP_CIPHER *Openssl_EVP_des_ede3_cfb8(void);
275 EVP_CIPHER_CTX *Openssl_EVP_CIPHER_CTX_new(void);
276 int Openssl_EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
277                            const unsigned char *key, const unsigned char *iv, int enc);
278 int Openssl_EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *ctx, int pad);
279 int Openssl_EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
280 int Openssl_EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
281 int Openssl_EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl);
282 
283 int Openssl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msgLen, size_t *cipherTextSize);
284 int Openssl_sm2_plaintext_size(const unsigned char *cipherText, size_t cipherTextSize, size_t *plainTextSize);
285 int Openssl_sm2_encrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *msg,
286                         size_t msgLen, uint8_t *cipherTextBuf, size_t *cipherTextLen);
287 
288 int Openssl_sm2_decrypt(const EC_KEY *key, const EVP_MD *digest, const uint8_t *cipherText,
289                         size_t cipherTextLen, uint8_t *plainTextBuf, size_t *plainTextLen);
290 
291 int Openssl_PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt,
292     int saltlen, int iter, const EVP_MD *digest, int keylen, unsigned char *out);
293 
294 EC_GROUP *Openssl_EC_GROUP_new_by_curve_name(int nid);
295 
296 int OPENSSL_EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
297 
298 DH *Openssl_DH_new(void);
299 int Openssl_DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh);
300 void Openssl_DH_free(DH *dh);
301 int Openssl_DH_generate_key(DH *dh);
302 const BIGNUM *Openssl_DH_get0_p(const DH *dh);
303 const BIGNUM *Openssl_DH_get0_q(const DH *dh);
304 const BIGNUM *Openssl_DH_get0_g(const DH *dh);
305 long Openssl_DH_get_length(const DH *dh);
306 int Openssl_DH_set_length(DH *dh, long length);
307 const BIGNUM *Openssl_DH_get0_pub_key(const DH *dh);
308 const BIGNUM *Openssl_DH_get0_priv_key(const DH *dh);
309 int Openssl_EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key);
310 int Openssl_EVP_PKEY_assign_DH(EVP_PKEY *pkey, DH *key);
311 struct dh_st *Openssl_EVP_PKEY_get1_DH(EVP_PKEY *pkey);
312 int Openssl_EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits);
313 int Openssl_DH_up_ref(DH *r);
314 int Openssl_DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
315 int Openssl_DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key);
316 
317 #ifdef __cplusplus
318 }
319 #endif
320 
321 #endif