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