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