Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-04 08:46:49

0001 /*
0002  * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.
0003  *
0004  * Licensed under the Apache License 2.0 (the "License").  You may not use
0005  * this file except in compliance with the License.  You can obtain a copy
0006  * in the file LICENSE in the source distribution or at
0007  * https://www.openssl.org/source/license.html
0008  */
0009 
0010 #ifndef OPENSSL_EVP_H
0011 #define OPENSSL_EVP_H
0012 #pragma once
0013 
0014 #include <openssl/macros.h>
0015 #ifndef OPENSSL_NO_DEPRECATED_3_0
0016 #define HEADER_ENVELOPE_H
0017 #endif
0018 
0019 #include <stdarg.h>
0020 
0021 #ifndef OPENSSL_NO_STDIO
0022 #include <stdio.h>
0023 #endif
0024 
0025 #include <openssl/opensslconf.h>
0026 #include <openssl/types.h>
0027 #include <openssl/core.h>
0028 #include <openssl/core_dispatch.h>
0029 #include <openssl/symhacks.h>
0030 #include <openssl/bio.h>
0031 #include <openssl/evperr.h>
0032 #include <openssl/params.h>
0033 
0034 #define EVP_MAX_MD_SIZE 64 /* longest known is SHA512 */
0035 #define EVP_MAX_KEY_LENGTH 64
0036 #define EVP_MAX_IV_LENGTH 16
0037 #define EVP_MAX_BLOCK_LENGTH 32
0038 #define EVP_MAX_AEAD_TAG_LENGTH 16
0039 
0040 /* Maximum pipes in cipher pipelining */
0041 #define EVP_MAX_PIPES 32
0042 
0043 #define PKCS5_SALT_LEN 8
0044 /* Default PKCS#5 iteration count */
0045 #define PKCS5_DEFAULT_ITER 2048
0046 
0047 #include <openssl/objects.h>
0048 
0049 #ifndef OPENSSL_NO_DEPRECATED_3_0
0050 #define EVP_PK_RSA 0x0001
0051 #define EVP_PK_DSA 0x0002
0052 #define EVP_PK_DH 0x0004
0053 #define EVP_PK_EC 0x0008
0054 #define EVP_PKT_SIGN 0x0010
0055 #define EVP_PKT_ENC 0x0020
0056 #define EVP_PKT_EXCH 0x0040
0057 #define EVP_PKS_RSA 0x0100
0058 #define EVP_PKS_DSA 0x0200
0059 #define EVP_PKS_EC 0x0400
0060 #endif
0061 
0062 #define EVP_PKEY_NONE NID_undef
0063 #define EVP_PKEY_RSA NID_rsaEncryption
0064 #define EVP_PKEY_RSA2 NID_rsa
0065 #define EVP_PKEY_RSA_PSS NID_rsassaPss
0066 #define EVP_PKEY_DSA NID_dsa
0067 #define EVP_PKEY_DSA1 NID_dsa_2
0068 #define EVP_PKEY_DSA2 NID_dsaWithSHA
0069 #define EVP_PKEY_DSA3 NID_dsaWithSHA1
0070 #define EVP_PKEY_DSA4 NID_dsaWithSHA1_2
0071 #define EVP_PKEY_DH NID_dhKeyAgreement
0072 #define EVP_PKEY_DHX NID_dhpublicnumber
0073 #define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
0074 #define EVP_PKEY_SM2 NID_sm2
0075 #define EVP_PKEY_HMAC NID_hmac
0076 #define EVP_PKEY_CMAC NID_cmac
0077 #define EVP_PKEY_SCRYPT NID_id_scrypt
0078 #define EVP_PKEY_TLS1_PRF NID_tls1_prf
0079 #define EVP_PKEY_HKDF NID_hkdf
0080 #define EVP_PKEY_POLY1305 NID_poly1305
0081 #define EVP_PKEY_SIPHASH NID_siphash
0082 #define EVP_PKEY_X25519 NID_X25519
0083 #define EVP_PKEY_ED25519 NID_ED25519
0084 #define EVP_PKEY_X448 NID_X448
0085 #define EVP_PKEY_ED448 NID_ED448
0086 #define EVP_PKEY_ML_DSA_44 NID_ML_DSA_44
0087 #define EVP_PKEY_ML_DSA_65 NID_ML_DSA_65
0088 #define EVP_PKEY_ML_DSA_87 NID_ML_DSA_87
0089 #define EVP_PKEY_SLH_DSA_SHA2_128S NID_SLH_DSA_SHA2_128s
0090 #define EVP_PKEY_SLH_DSA_SHA2_128F NID_SLH_DSA_SHA2_128f
0091 #define EVP_PKEY_SLH_DSA_SHA2_192S NID_SLH_DSA_SHA2_192s
0092 #define EVP_PKEY_SLH_DSA_SHA2_192F NID_SLH_DSA_SHA2_192f
0093 #define EVP_PKEY_SLH_DSA_SHA2_256S NID_SLH_DSA_SHA2_256s
0094 #define EVP_PKEY_SLH_DSA_SHA2_256F NID_SLH_DSA_SHA2_256f
0095 #define EVP_PKEY_SLH_DSA_SHAKE_128S NID_SLH_DSA_SHAKE_128s
0096 #define EVP_PKEY_SLH_DSA_SHAKE_128F NID_SLH_DSA_SHAKE_128f
0097 #define EVP_PKEY_SLH_DSA_SHAKE_192S NID_SLH_DSA_SHAKE_192s
0098 #define EVP_PKEY_SLH_DSA_SHAKE_192F NID_SLH_DSA_SHAKE_192f
0099 #define EVP_PKEY_SLH_DSA_SHAKE_256S NID_SLH_DSA_SHAKE_256s
0100 #define EVP_PKEY_SLH_DSA_SHAKE_256F NID_SLH_DSA_SHAKE_256f
0101 
0102 /* Special indicator that the object is uniquely provider side */
0103 #define EVP_PKEY_KEYMGMT -1
0104 
0105 /* Easy to use macros for EVP_PKEY related selections */
0106 #define EVP_PKEY_KEY_PARAMETERS \
0107     (OSSL_KEYMGMT_SELECT_ALL_PARAMETERS)
0108 #define EVP_PKEY_PRIVATE_KEY \
0109     (EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PRIVATE_KEY)
0110 #define EVP_PKEY_PUBLIC_KEY \
0111     (EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PUBLIC_KEY)
0112 #define EVP_PKEY_KEYPAIR \
0113     (EVP_PKEY_PUBLIC_KEY | OSSL_KEYMGMT_SELECT_PRIVATE_KEY)
0114 
0115 #ifdef __cplusplus
0116 extern "C" {
0117 #endif
0118 
0119 int EVP_set_default_properties(OSSL_LIB_CTX *libctx, const char *propq);
0120 char *EVP_get1_default_properties(OSSL_LIB_CTX *libctx);
0121 int EVP_default_properties_is_fips_enabled(OSSL_LIB_CTX *libctx);
0122 int EVP_default_properties_enable_fips(OSSL_LIB_CTX *libctx, int enable);
0123 
0124 #define EVP_PKEY_MO_SIGN 0x0001
0125 #define EVP_PKEY_MO_VERIFY 0x0002
0126 #define EVP_PKEY_MO_ENCRYPT 0x0004
0127 #define EVP_PKEY_MO_DECRYPT 0x0008
0128 
0129 #ifndef EVP_MD
0130 #ifndef OPENSSL_NO_DEPRECATED_3_0
0131 OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type);
0132 OSSL_DEPRECATEDIN_3_0 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md);
0133 OSSL_DEPRECATEDIN_3_0 void EVP_MD_meth_free(EVP_MD *md);
0134 OSSL_DEPRECATEDIN_3_0
0135 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize);
0136 OSSL_DEPRECATEDIN_3_0
0137 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize);
0138 OSSL_DEPRECATEDIN_3_0
0139 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize);
0140 OSSL_DEPRECATEDIN_3_0
0141 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags);
0142 OSSL_DEPRECATEDIN_3_0
0143 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx));
0144 OSSL_DEPRECATEDIN_3_0
0145 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count));
0146 OSSL_DEPRECATEDIN_3_0
0147 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, unsigned char *md));
0148 OSSL_DEPRECATEDIN_3_0
0149 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from));
0150 OSSL_DEPRECATEDIN_3_0
0151 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx));
0152 OSSL_DEPRECATEDIN_3_0
0153 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2));
0154 OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md);
0155 OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_result_size(const EVP_MD *md);
0156 OSSL_DEPRECATEDIN_3_0 int EVP_MD_meth_get_app_datasize(const EVP_MD *md);
0157 OSSL_DEPRECATEDIN_3_0 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md);
0158 OSSL_DEPRECATEDIN_3_0
0159 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx);
0160 OSSL_DEPRECATEDIN_3_0
0161 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx,
0162     const void *data, size_t count);
0163 OSSL_DEPRECATEDIN_3_0
0164 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx,
0165     unsigned char *md);
0166 OSSL_DEPRECATEDIN_3_0
0167 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to,
0168     const EVP_MD_CTX *from);
0169 OSSL_DEPRECATEDIN_3_0
0170 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx);
0171 OSSL_DEPRECATEDIN_3_0
0172 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd,
0173     int p1, void *p2);
0174 #endif
0175 /* digest can only handle a single block */
0176 #define EVP_MD_FLAG_ONESHOT 0x0001
0177 
0178 /* digest is extensible-output function, XOF */
0179 #define EVP_MD_FLAG_XOF 0x0002
0180 
0181 /* DigestAlgorithmIdentifier flags... */
0182 
0183 #define EVP_MD_FLAG_DIGALGID_MASK 0x0018
0184 
0185 /* NULL or absent parameter accepted. Use NULL */
0186 
0187 #define EVP_MD_FLAG_DIGALGID_NULL 0x0000
0188 
0189 /* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */
0190 
0191 #define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008
0192 
0193 /* Custom handling via ctrl */
0194 
0195 #define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018
0196 
0197 /* Note if suitable for use in FIPS mode */
0198 #define EVP_MD_FLAG_FIPS 0x0400
0199 
0200 /* Digest ctrls */
0201 
0202 #define EVP_MD_CTRL_DIGALGID 0x1
0203 #define EVP_MD_CTRL_MICALG 0x2
0204 #define EVP_MD_CTRL_XOF_LEN 0x3
0205 #define EVP_MD_CTRL_TLSTREE 0x4
0206 
0207 /* Minimum Algorithm specific ctrl value */
0208 
0209 #define EVP_MD_CTRL_ALG_CTRL 0x1000
0210 
0211 #endif /* !EVP_MD */
0212 
0213 /* values for EVP_MD_CTX flags */
0214 
0215 #define EVP_MD_CTX_FLAG_ONESHOT 0x0001 /* digest update will be \
0216                                         * called once only */
0217 #define EVP_MD_CTX_FLAG_CLEANED 0x0002 /* context has already been \
0218                                         * cleaned */
0219 #define EVP_MD_CTX_FLAG_REUSE 0x0004 /* Don't free up ctx->md_data \
0220                                       * in EVP_MD_CTX_reset */
0221 /*
0222  * FIPS and pad options are ignored in 1.0.0, definitions are here so we
0223  * don't accidentally reuse the values for other purposes.
0224  */
0225 
0226 /* This flag has no effect from openssl-3.0 onwards */
0227 #define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008
0228 
0229 /*
0230  * The following PAD options are also currently ignored in 1.0.0, digest
0231  * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*()
0232  * instead.
0233  */
0234 #define EVP_MD_CTX_FLAG_PAD_MASK 0xF0 /* RSA mode to use */
0235 #define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00 /* PKCS#1 v1.5 mode */
0236 #define EVP_MD_CTX_FLAG_PAD_X931 0x10 /* X9.31 mode */
0237 #define EVP_MD_CTX_FLAG_PAD_PSS 0x20 /* PSS mode */
0238 
0239 #define EVP_MD_CTX_FLAG_NO_INIT 0x0100 /* Don't initialize md_data */
0240 /*
0241  * Some functions such as EVP_DigestSign only finalise copies of internal
0242  * contexts so additional data can be included after the finalisation call.
0243  * This is inefficient if this functionality is not required: it is disabled
0244  * if the following flag is set.
0245  */
0246 #define EVP_MD_CTX_FLAG_FINALISE 0x0200
0247 /* NOTE: 0x0400 and 0x0800 are reserved for internal usage */
0248 
0249 #ifndef OPENSSL_NO_DEPRECATED_3_0
0250 OSSL_DEPRECATEDIN_3_0
0251 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len);
0252 OSSL_DEPRECATEDIN_3_0
0253 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher);
0254 OSSL_DEPRECATEDIN_3_0
0255 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher);
0256 OSSL_DEPRECATEDIN_3_0
0257 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len);
0258 OSSL_DEPRECATEDIN_3_0
0259 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags);
0260 OSSL_DEPRECATEDIN_3_0
0261 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size);
0262 OSSL_DEPRECATEDIN_3_0
0263 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
0264     int (*init)(EVP_CIPHER_CTX *ctx,
0265         const unsigned char *key,
0266         const unsigned char *iv,
0267         int enc));
0268 OSSL_DEPRECATEDIN_3_0
0269 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
0270     int (*do_cipher)(EVP_CIPHER_CTX *ctx,
0271         unsigned char *out,
0272         const unsigned char *in,
0273         size_t inl));
0274 OSSL_DEPRECATEDIN_3_0
0275 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
0276     int (*cleanup)(EVP_CIPHER_CTX *));
0277 OSSL_DEPRECATEDIN_3_0
0278 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
0279     int (*set_asn1_parameters)(EVP_CIPHER_CTX *,
0280         ASN1_TYPE *));
0281 OSSL_DEPRECATEDIN_3_0
0282 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
0283     int (*get_asn1_parameters)(EVP_CIPHER_CTX *,
0284         ASN1_TYPE *));
0285 OSSL_DEPRECATEDIN_3_0
0286 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
0287     int (*ctrl)(EVP_CIPHER_CTX *, int type,
0288         int arg, void *ptr));
0289 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
0290     const unsigned char *key,
0291     const unsigned char *iv,
0292     int enc);
0293 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
0294     unsigned char *out,
0295     const unsigned char *in,
0296     size_t inl);
0297 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *);
0298 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
0299     ASN1_TYPE *);
0300 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
0301     ASN1_TYPE *);
0302 OSSL_DEPRECATEDIN_3_0 int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type,
0303     int arg, void *ptr);
0304 #endif
0305 
0306 /* Values for cipher flags */
0307 
0308 /* Modes for ciphers */
0309 
0310 #define EVP_CIPH_STREAM_CIPHER 0x0
0311 #define EVP_CIPH_ECB_MODE 0x1
0312 #define EVP_CIPH_CBC_MODE 0x2
0313 #define EVP_CIPH_CFB_MODE 0x3
0314 #define EVP_CIPH_OFB_MODE 0x4
0315 #define EVP_CIPH_CTR_MODE 0x5
0316 #define EVP_CIPH_GCM_MODE 0x6
0317 #define EVP_CIPH_CCM_MODE 0x7
0318 #define EVP_CIPH_XTS_MODE 0x10001
0319 #define EVP_CIPH_WRAP_MODE 0x10002
0320 #define EVP_CIPH_OCB_MODE 0x10003
0321 #define EVP_CIPH_SIV_MODE 0x10004
0322 #define EVP_CIPH_GCM_SIV_MODE 0x10005
0323 #define EVP_CIPH_MODE 0xF0007
0324 /* Set if variable length cipher */
0325 #define EVP_CIPH_VARIABLE_LENGTH 0x8
0326 /* Set if the iv handling should be done by the cipher itself */
0327 #define EVP_CIPH_CUSTOM_IV 0x10
0328 /* Set if the cipher's init() function should be called if key is NULL */
0329 #define EVP_CIPH_ALWAYS_CALL_INIT 0x20
0330 /* Call ctrl() to init cipher parameters */
0331 #define EVP_CIPH_CTRL_INIT 0x40
0332 /* Don't use standard key length function */
0333 #define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80
0334 /* Don't use standard block padding */
0335 #define EVP_CIPH_NO_PADDING 0x100
0336 /* cipher handles random key generation */
0337 #define EVP_CIPH_RAND_KEY 0x200
0338 /* cipher has its own additional copying logic */
0339 #define EVP_CIPH_CUSTOM_COPY 0x400
0340 /* Don't use standard iv length function */
0341 #define EVP_CIPH_CUSTOM_IV_LENGTH 0x800
0342 /* Legacy and no longer relevant: Allow use default ASN1 get/set iv */
0343 #define EVP_CIPH_FLAG_DEFAULT_ASN1 0
0344 /* Free:                                         0x1000 */
0345 /* Buffer length in bits not bytes: CFB1 mode only */
0346 #define EVP_CIPH_FLAG_LENGTH_BITS 0x2000
0347 /* Deprecated FIPS flag: was 0x4000 */
0348 #define EVP_CIPH_FLAG_FIPS 0
0349 /* Deprecated FIPS flag: was 0x8000 */
0350 #define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0
0351 
0352 /*
0353  * Cipher handles any and all padding logic as well as finalisation.
0354  */
0355 #define EVP_CIPH_FLAG_CTS 0x4000
0356 #define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000
0357 #define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
0358 #define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000
0359 /* Cipher can handle pipeline operations */
0360 #define EVP_CIPH_FLAG_PIPELINE 0X800000
0361 /* For provider implementations that handle  ASN1 get/set param themselves */
0362 #define EVP_CIPH_FLAG_CUSTOM_ASN1 0x1000000
0363 /* For ciphers generating unprotected CMS attributes */
0364 #define EVP_CIPH_FLAG_CIPHER_WITH_MAC 0x2000000
0365 /* For supplementary wrap cipher support */
0366 #define EVP_CIPH_FLAG_GET_WRAP_CIPHER 0x4000000
0367 #define EVP_CIPH_FLAG_INVERSE_CIPHER 0x8000000
0368 #define EVP_CIPH_FLAG_ENC_THEN_MAC 0x10000000
0369 
0370 /*
0371  * Cipher context flag to indicate we can handle wrap mode: if allowed in
0372  * older applications it could overflow buffers.
0373  */
0374 
0375 #define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1
0376 
0377 /* ctrl() values */
0378 
0379 #define EVP_CTRL_INIT 0x0
0380 #define EVP_CTRL_SET_KEY_LENGTH 0x1
0381 #define EVP_CTRL_GET_RC2_KEY_BITS 0x2
0382 #define EVP_CTRL_SET_RC2_KEY_BITS 0x3
0383 #define EVP_CTRL_GET_RC5_ROUNDS 0x4
0384 #define EVP_CTRL_SET_RC5_ROUNDS 0x5
0385 #define EVP_CTRL_RAND_KEY 0x6
0386 #define EVP_CTRL_PBE_PRF_NID 0x7
0387 #define EVP_CTRL_COPY 0x8
0388 #define EVP_CTRL_AEAD_SET_IVLEN 0x9
0389 #define EVP_CTRL_AEAD_GET_TAG 0x10
0390 #define EVP_CTRL_AEAD_SET_TAG 0x11
0391 #define EVP_CTRL_AEAD_SET_IV_FIXED 0x12
0392 #define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
0393 #define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
0394 #define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
0395 #define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED
0396 #define EVP_CTRL_GCM_IV_GEN 0x13
0397 #define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN
0398 #define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG
0399 #define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG
0400 #define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED
0401 #define EVP_CTRL_CCM_SET_L 0x14
0402 #define EVP_CTRL_CCM_SET_MSGLEN 0x15
0403 /*
0404  * AEAD cipher deduces payload length and returns number of bytes required to
0405  * store MAC and eventual padding. Subsequent call to EVP_Cipher even
0406  * appends/verifies MAC.
0407  */
0408 #define EVP_CTRL_AEAD_TLS1_AAD 0x16
0409 /* Used by composite AEAD ciphers, no-op in GCM, CCM... */
0410 #define EVP_CTRL_AEAD_SET_MAC_KEY 0x17
0411 /* Set the GCM invocation field, decrypt only */
0412 #define EVP_CTRL_GCM_SET_IV_INV 0x18
0413 
0414 #define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19
0415 #define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a
0416 #define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b
0417 #define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c
0418 
0419 #define EVP_CTRL_SSL3_MASTER_SECRET 0x1d
0420 
0421 /* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */
0422 #define EVP_CTRL_SET_SBOX 0x1e
0423 /*
0424  * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a
0425  * pre-allocated buffer with specified size
0426  */
0427 #define EVP_CTRL_SBOX_USED 0x1f
0428 /* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after,
0429  * 0 switches meshing off
0430  */
0431 #define EVP_CTRL_KEY_MESH 0x20
0432 /* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */
0433 #define EVP_CTRL_BLOCK_PADDING_MODE 0x21
0434 
0435 /* Set the output buffers to use for a pipelined operation */
0436 #define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22
0437 /* Set the input buffers to use for a pipelined operation */
0438 #define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23
0439 /* Set the input buffer lengths to use for a pipelined operation */
0440 #define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24
0441 /* Get the IV length used by the cipher */
0442 #define EVP_CTRL_GET_IVLEN 0x25
0443 /* 0x26 is unused */
0444 /* Tell the cipher it's doing a speed test (SIV disallows multiple ops) */
0445 #define EVP_CTRL_SET_SPEED 0x27
0446 /* Get the unprotectedAttrs from cipher ctx */
0447 #define EVP_CTRL_PROCESS_UNPROTECTED 0x28
0448 /* Get the supplementary wrap cipher */
0449 #define EVP_CTRL_GET_WRAP_CIPHER 0x29
0450 /* TLSTREE key diversification */
0451 #define EVP_CTRL_TLSTREE 0x2A
0452 
0453 /* Padding modes */
0454 #define EVP_PADDING_PKCS7 1
0455 #define EVP_PADDING_ISO7816_4 2
0456 #define EVP_PADDING_ANSI923 3
0457 #define EVP_PADDING_ISO10126 4
0458 #define EVP_PADDING_ZERO 5
0459 
0460 /* RFC 5246 defines additional data to be 13 bytes in length */
0461 #define EVP_AEAD_TLS1_AAD_LEN 13
0462 
0463 typedef struct {
0464     unsigned char *out;
0465     const unsigned char *inp;
0466     size_t len;
0467     unsigned int interleave;
0468 } EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM;
0469 
0470 /* GCM TLS constants */
0471 /* Length of fixed part of IV derived from PRF */
0472 #define EVP_GCM_TLS_FIXED_IV_LEN 4
0473 /* Length of explicit part of IV part of TLS records */
0474 #define EVP_GCM_TLS_EXPLICIT_IV_LEN 8
0475 /* Length of tag for TLS */
0476 #define EVP_GCM_TLS_TAG_LEN 16
0477 
0478 /* CCM TLS constants */
0479 /* Length of fixed part of IV derived from PRF */
0480 #define EVP_CCM_TLS_FIXED_IV_LEN 4
0481 /* Length of explicit part of IV part of TLS records */
0482 #define EVP_CCM_TLS_EXPLICIT_IV_LEN 8
0483 /* Total length of CCM IV length for TLS */
0484 #define EVP_CCM_TLS_IV_LEN 12
0485 /* Length of tag for TLS */
0486 #define EVP_CCM_TLS_TAG_LEN 16
0487 /* Length of CCM8 tag for TLS */
0488 #define EVP_CCM8_TLS_TAG_LEN 8
0489 
0490 /* Length of tag for TLS */
0491 #define EVP_CHACHAPOLY_TLS_TAG_LEN 16
0492 
0493 typedef struct evp_cipher_info_st {
0494     const EVP_CIPHER *cipher;
0495     unsigned char iv[EVP_MAX_IV_LENGTH];
0496 } EVP_CIPHER_INFO;
0497 
0498 /* Password based encryption function */
0499 typedef int(EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass,
0500     int passlen, ASN1_TYPE *param,
0501     const EVP_CIPHER *cipher, const EVP_MD *md,
0502     int en_de);
0503 
0504 typedef int(EVP_PBE_KEYGEN_EX)(EVP_CIPHER_CTX *ctx, const char *pass,
0505     int passlen, ASN1_TYPE *param,
0506     const EVP_CIPHER *cipher, const EVP_MD *md,
0507     int en_de, OSSL_LIB_CTX *libctx, const char *propq);
0508 
0509 #ifndef OPENSSL_NO_DEPRECATED_3_0
0510 #define EVP_PKEY_assign_RSA(pkey, rsa) EVP_PKEY_assign((pkey), EVP_PKEY_RSA, \
0511     (rsa))
0512 #endif
0513 
0514 #ifndef OPENSSL_NO_DEPRECATED_3_6
0515 #ifndef OPENSSL_NO_DSA
0516 #define EVP_PKEY_assign_DSA(pkey, dsa) EVP_PKEY_assign((pkey), EVP_PKEY_DSA, \
0517     (dsa))
0518 #endif
0519 #endif
0520 
0521 #if !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_DEPRECATED_3_0)
0522 #define EVP_PKEY_assign_DH(pkey, dh) EVP_PKEY_assign((pkey), EVP_PKEY_DH, (dh))
0523 #endif
0524 
0525 #ifndef OPENSSL_NO_DEPRECATED_3_0
0526 #ifndef OPENSSL_NO_EC
0527 #define EVP_PKEY_assign_EC_KEY(pkey, eckey) EVP_PKEY_assign((pkey), \
0528     EVP_PKEY_EC,                                                    \
0529     (eckey))
0530 #endif
0531 #endif
0532 #ifndef OPENSSL_NO_DEPRECATED_3_6
0533 #ifndef OPENSSL_NO_SIPHASH
0534 #define EVP_PKEY_assign_SIPHASH(pkey, shkey) EVP_PKEY_assign((pkey), \
0535     EVP_PKEY_SIPHASH,                                                \
0536     (shkey))
0537 #endif
0538 
0539 #ifndef OPENSSL_NO_POLY1305
0540 #define EVP_PKEY_assign_POLY1305(pkey, polykey) EVP_PKEY_assign((pkey), \
0541     EVP_PKEY_POLY1305,                                                  \
0542     (polykey))
0543 #endif
0544 #endif
0545 
0546 /* Add some extra combinations */
0547 #define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
0548 #define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
0549 #define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
0550 #define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
0551 
0552 int EVP_MD_get_type(const EVP_MD *md);
0553 #define EVP_MD_type EVP_MD_get_type
0554 #define EVP_MD_nid EVP_MD_get_type
0555 const char *EVP_MD_get0_name(const EVP_MD *md);
0556 #define EVP_MD_name EVP_MD_get0_name
0557 const char *EVP_MD_get0_description(const EVP_MD *md);
0558 int EVP_MD_is_a(const EVP_MD *md, const char *name);
0559 int EVP_MD_names_do_all(const EVP_MD *md,
0560     void (*fn)(const char *name, void *data),
0561     void *data);
0562 const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md);
0563 int EVP_MD_get_pkey_type(const EVP_MD *md);
0564 #define EVP_MD_pkey_type EVP_MD_get_pkey_type
0565 int EVP_MD_get_size(const EVP_MD *md);
0566 #define EVP_MD_size EVP_MD_get_size
0567 int EVP_MD_get_block_size(const EVP_MD *md);
0568 #define EVP_MD_block_size EVP_MD_get_block_size
0569 unsigned long EVP_MD_get_flags(const EVP_MD *md);
0570 #define EVP_MD_flags EVP_MD_get_flags
0571 int EVP_MD_xof(const EVP_MD *md);
0572 
0573 const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx);
0574 EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx);
0575 #ifndef OPENSSL_NO_DEPRECATED_3_0
0576 OSSL_DEPRECATEDIN_3_0
0577 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
0578 OSSL_DEPRECATEDIN_3_0
0579 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx,
0580     const void *data, size_t count);
0581 OSSL_DEPRECATEDIN_3_0
0582 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
0583     int (*update)(EVP_MD_CTX *ctx,
0584         const void *data, size_t count));
0585 #endif
0586 int EVP_MD_CTX_get_size_ex(const EVP_MD_CTX *ctx);
0587 
0588 #define EVP_MD_CTX_get0_name(e) EVP_MD_get0_name(EVP_MD_CTX_get0_md(e))
0589 #define EVP_MD_CTX_get_size(e) EVP_MD_CTX_get_size_ex(e)
0590 #define EVP_MD_CTX_size EVP_MD_CTX_get_size_ex
0591 #define EVP_MD_CTX_get_block_size(e) EVP_MD_get_block_size(EVP_MD_CTX_get0_md(e))
0592 #define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size
0593 #define EVP_MD_CTX_get_type(e) EVP_MD_get_type(EVP_MD_CTX_get0_md(e))
0594 #define EVP_MD_CTX_type EVP_MD_CTX_get_type
0595 EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx);
0596 #define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx
0597 void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
0598 void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx);
0599 #define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data
0600 
0601 int EVP_CIPHER_get_nid(const EVP_CIPHER *cipher);
0602 #define EVP_CIPHER_nid EVP_CIPHER_get_nid
0603 const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher);
0604 #define EVP_CIPHER_name EVP_CIPHER_get0_name
0605 const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher);
0606 int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name);
0607 int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher,
0608     void (*fn)(const char *name, void *data),
0609     void *data);
0610 const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher);
0611 int EVP_CIPHER_get_block_size(const EVP_CIPHER *cipher);
0612 #define EVP_CIPHER_block_size EVP_CIPHER_get_block_size
0613 #ifndef OPENSSL_NO_DEPRECATED_3_0
0614 OSSL_DEPRECATEDIN_3_0
0615 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher);
0616 #endif
0617 int EVP_CIPHER_get_key_length(const EVP_CIPHER *cipher);
0618 #define EVP_CIPHER_key_length EVP_CIPHER_get_key_length
0619 int EVP_CIPHER_get_iv_length(const EVP_CIPHER *cipher);
0620 #define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length
0621 unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *cipher);
0622 #define EVP_CIPHER_flags EVP_CIPHER_get_flags
0623 int EVP_CIPHER_get_mode(const EVP_CIPHER *cipher);
0624 #define EVP_CIPHER_mode EVP_CIPHER_get_mode
0625 int EVP_CIPHER_get_type(const EVP_CIPHER *cipher);
0626 #define EVP_CIPHER_type EVP_CIPHER_get_type
0627 EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
0628     const char *properties);
0629 int EVP_CIPHER_can_pipeline(const EVP_CIPHER *cipher, int enc);
0630 int EVP_CIPHER_up_ref(EVP_CIPHER *cipher);
0631 void EVP_CIPHER_free(EVP_CIPHER *cipher);
0632 
0633 const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx);
0634 EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(EVP_CIPHER_CTX *ctx);
0635 int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx);
0636 #define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting
0637 int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx);
0638 #define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid
0639 int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx);
0640 #define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size
0641 int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx);
0642 #define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length
0643 int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx);
0644 #define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length
0645 int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx);
0646 #define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length
0647 #ifndef OPENSSL_NO_DEPRECATED_3_0
0648 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
0649 OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
0650 OSSL_DEPRECATEDIN_3_0 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx);
0651 OSSL_DEPRECATEDIN_3_0 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);
0652 #endif
0653 int EVP_CIPHER_CTX_get_updated_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len);
0654 int EVP_CIPHER_CTX_get_original_iv(EVP_CIPHER_CTX *ctx, void *buf, size_t len);
0655 #ifndef OPENSSL_NO_DEPRECATED_3_0
0656 OSSL_DEPRECATEDIN_3_0
0657 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx);
0658 #endif
0659 int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx);
0660 #define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num
0661 int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num);
0662 EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in);
0663 int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
0664 void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
0665 void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
0666 void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
0667 void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
0668 #define EVP_CIPHER_CTX_get0_name(c) EVP_CIPHER_get0_name(EVP_CIPHER_CTX_get0_cipher(c))
0669 #define EVP_CIPHER_CTX_get_type(c) EVP_CIPHER_get_type(EVP_CIPHER_CTX_get0_cipher(c))
0670 #define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type
0671 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
0672 #define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(c))
0673 #endif
0674 #define EVP_CIPHER_CTX_get_mode(c) EVP_CIPHER_get_mode(EVP_CIPHER_CTX_get0_cipher(c))
0675 #define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode
0676 
0677 #define EVP_ENCODE_LENGTH(l) ((((l) + 2) / 3 * 4) + ((l) / 48 + 1) * 2 + 80)
0678 #define EVP_DECODE_LENGTH(l) (((l) + 3) / 4 * 3 + 80)
0679 
0680 #define EVP_SignInit_ex(a, b, c) EVP_DigestInit_ex(a, b, c)
0681 #define EVP_SignInit(a, b) EVP_DigestInit(a, b)
0682 #define EVP_SignUpdate(a, b, c) EVP_DigestUpdate(a, b, c)
0683 #define EVP_VerifyInit_ex(a, b, c) EVP_DigestInit_ex(a, b, c)
0684 #define EVP_VerifyInit(a, b) EVP_DigestInit(a, b)
0685 #define EVP_VerifyUpdate(a, b, c) EVP_DigestUpdate(a, b, c)
0686 #define EVP_OpenUpdate(a, b, c, d, e) EVP_DecryptUpdate(a, b, c, d, e)
0687 #define EVP_SealUpdate(a, b, c, d, e) EVP_EncryptUpdate(a, b, c, d, e)
0688 
0689 #ifdef CONST_STRICT
0690 void BIO_set_md(BIO *, const EVP_MD *md);
0691 #else
0692 #define BIO_set_md(b, md) BIO_ctrl(b, BIO_C_SET_MD, 0, (void *)(md))
0693 #endif
0694 #define BIO_get_md(b, mdp) BIO_ctrl(b, BIO_C_GET_MD, 0, (mdp))
0695 #define BIO_get_md_ctx(b, mdcp) BIO_ctrl(b, BIO_C_GET_MD_CTX, 0, (mdcp))
0696 #define BIO_set_md_ctx(b, mdcp) BIO_ctrl(b, BIO_C_SET_MD_CTX, 0, (mdcp))
0697 #define BIO_get_cipher_status(b) BIO_ctrl(b, BIO_C_GET_CIPHER_STATUS, 0, NULL)
0698 #define BIO_get_cipher_ctx(b, c_pp) BIO_ctrl(b, BIO_C_GET_CIPHER_CTX, 0, (c_pp))
0699 
0700 __owur int EVP_Cipher(EVP_CIPHER_CTX *c,
0701     unsigned char *out,
0702     const unsigned char *in, unsigned int inl);
0703 
0704 #define EVP_add_cipher_alias(n, alias) \
0705     OBJ_NAME_add((alias), OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS, (n))
0706 #define EVP_add_digest_alias(n, alias) \
0707     OBJ_NAME_add((alias), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, (n))
0708 #define EVP_delete_cipher_alias(alias) \
0709     OBJ_NAME_remove(alias, OBJ_NAME_TYPE_CIPHER_METH | OBJ_NAME_ALIAS);
0710 #define EVP_delete_digest_alias(alias) \
0711     OBJ_NAME_remove(alias, OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS);
0712 
0713 int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]);
0714 int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]);
0715 int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]);
0716 const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest);
0717 const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md);
0718 const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md);
0719 const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx);
0720 const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx);
0721 int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2);
0722 EVP_MD_CTX *EVP_MD_CTX_new(void);
0723 int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
0724 void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
0725 #define EVP_MD_CTX_create() EVP_MD_CTX_new()
0726 #define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx))
0727 #define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx))
0728 __owur EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in);
0729 __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);
0730 void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
0731 void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
0732 int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
0733 __owur int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type,
0734     const OSSL_PARAM params[]);
0735 __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
0736     ENGINE *impl);
0737 __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d,
0738     size_t cnt);
0739 __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md,
0740     unsigned int *s);
0741 __owur int EVP_Digest(const void *data, size_t count,
0742     unsigned char *md, unsigned int *size,
0743     const EVP_MD *type, ENGINE *impl);
0744 __owur int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name,
0745     const char *propq, const void *data, size_t datalen,
0746     unsigned char *md, size_t *mdlen);
0747 
0748 __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);
0749 __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
0750 __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md,
0751     unsigned int *s);
0752 __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *out,
0753     size_t outlen);
0754 __owur int EVP_DigestSqueeze(EVP_MD_CTX *ctx, unsigned char *out,
0755     size_t outlen);
0756 
0757 __owur EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
0758     const char *properties);
0759 
0760 int EVP_MD_up_ref(EVP_MD *md);
0761 void EVP_MD_free(EVP_MD *md);
0762 
0763 int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify);
0764 int EVP_read_pw_string_min(char *buf, int minlen, int maxlen,
0765     const char *prompt, int verify);
0766 void EVP_set_pw_prompt(const char *prompt);
0767 char *EVP_get_pw_prompt(void);
0768 
0769 __owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
0770     const unsigned char *salt,
0771     const unsigned char *data, int datal, int count,
0772     unsigned char *key, unsigned char *iv);
0773 
0774 void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
0775 void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
0776 int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);
0777 
0778 __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0779     const unsigned char *key, const unsigned char *iv);
0780 __owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,
0781     const EVP_CIPHER *cipher, ENGINE *impl,
0782     const unsigned char *key,
0783     const unsigned char *iv);
0784 __owur int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0785     const unsigned char *key,
0786     const unsigned char *iv,
0787     const OSSL_PARAM params[]);
0788 __owur int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
0789     int *outl, const unsigned char *in, int inl);
0790 __owur int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
0791     int *outl);
0792 __owur int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
0793     int *outl);
0794 
0795 __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0796     const unsigned char *key, const unsigned char *iv);
0797 __owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx,
0798     const EVP_CIPHER *cipher, ENGINE *impl,
0799     const unsigned char *key,
0800     const unsigned char *iv);
0801 __owur int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0802     const unsigned char *key,
0803     const unsigned char *iv,
0804     const OSSL_PARAM params[]);
0805 __owur int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
0806     int *outl, const unsigned char *in, int inl);
0807 __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
0808     int *outl);
0809 __owur int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
0810     int *outl);
0811 
0812 __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0813     const unsigned char *key, const unsigned char *iv,
0814     int enc);
0815 __owur int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx,
0816     const EVP_CIPHER *cipher, ENGINE *impl,
0817     const unsigned char *key,
0818     const unsigned char *iv, int enc);
0819 __owur int EVP_CipherInit_SKEY(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0820     EVP_SKEY *skey, const unsigned char *iv, size_t iv_len,
0821     int enc, const OSSL_PARAM params[]);
0822 __owur int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
0823     const unsigned char *key, const unsigned char *iv,
0824     int enc, const OSSL_PARAM params[]);
0825 __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
0826     int *outl, const unsigned char *in, int inl);
0827 __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
0828     int *outl);
0829 __owur int EVP_CipherPipelineEncryptInit(EVP_CIPHER_CTX *ctx,
0830     const EVP_CIPHER *cipher,
0831     const unsigned char *key, size_t keylen,
0832     size_t numpipes,
0833     const unsigned char **iv, size_t ivlen);
0834 __owur int EVP_CipherPipelineDecryptInit(EVP_CIPHER_CTX *ctx,
0835     const EVP_CIPHER *cipher,
0836     const unsigned char *key, size_t keylen,
0837     size_t numpipes,
0838     const unsigned char **iv, size_t ivlen);
0839 __owur int EVP_CipherPipelineUpdate(EVP_CIPHER_CTX *ctx,
0840     unsigned char **out, size_t *outl,
0841     const size_t *outsize,
0842     const unsigned char **in, const size_t *inl);
0843 __owur int EVP_CipherPipelineFinal(EVP_CIPHER_CTX *ctx,
0844     unsigned char **outm, size_t *outl,
0845     const size_t *outsize);
0846 __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
0847     int *outl);
0848 
0849 __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
0850     EVP_PKEY *pkey);
0851 __owur int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
0852     EVP_PKEY *pkey, OSSL_LIB_CTX *libctx,
0853     const char *propq);
0854 
0855 __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret,
0856     size_t *siglen, const unsigned char *tbs,
0857     size_t tbslen);
0858 
0859 __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
0860     unsigned int siglen, EVP_PKEY *pkey);
0861 __owur int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
0862     unsigned int siglen, EVP_PKEY *pkey,
0863     OSSL_LIB_CTX *libctx, const char *propq);
0864 
0865 __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
0866     size_t siglen, const unsigned char *tbs,
0867     size_t tbslen);
0868 
0869 __owur int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
0870     const char *mdname, OSSL_LIB_CTX *libctx,
0871     const char *props, EVP_PKEY *pkey,
0872     const OSSL_PARAM params[]);
0873 __owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
0874     const EVP_MD *type, ENGINE *e,
0875     EVP_PKEY *pkey);
0876 __owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize);
0877 __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
0878     size_t *siglen);
0879 
0880 __owur int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
0881     const char *mdname, OSSL_LIB_CTX *libctx,
0882     const char *props, EVP_PKEY *pkey,
0883     const OSSL_PARAM params[]);
0884 __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
0885     const EVP_MD *type, ENGINE *e,
0886     EVP_PKEY *pkey);
0887 int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize);
0888 __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
0889     size_t siglen);
0890 
0891 __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
0892     const unsigned char *ek, int ekl,
0893     const unsigned char *iv, EVP_PKEY *priv);
0894 __owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
0895 
0896 __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
0897     unsigned char **ek, int *ekl, unsigned char *iv,
0898     EVP_PKEY **pubk, int npubk);
0899 __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
0900 
0901 EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
0902 void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
0903 int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, const EVP_ENCODE_CTX *sctx);
0904 int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
0905 void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
0906 int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
0907     const unsigned char *in, int inl);
0908 void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
0909 int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
0910 
0911 void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
0912 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
0913     const unsigned char *in, int inl);
0914 int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
0915 int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
0916 
0917 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
0918 #define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c)
0919 #define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c)
0920 #endif
0921 EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
0922 int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
0923 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c);
0924 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
0925 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
0926 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
0927 int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
0928 int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]);
0929 int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]);
0930 int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]);
0931 const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher);
0932 const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher);
0933 const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher);
0934 const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx);
0935 const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx);
0936 
0937 int EVP_CIPHER_CTX_set_algor_params(EVP_CIPHER_CTX *ctx, const X509_ALGOR *alg);
0938 int EVP_CIPHER_CTX_get_algor_params(EVP_CIPHER_CTX *ctx, X509_ALGOR *alg);
0939 int EVP_CIPHER_CTX_get_algor(EVP_CIPHER_CTX *ctx, X509_ALGOR **alg);
0940 
0941 const BIO_METHOD *BIO_f_md(void);
0942 const BIO_METHOD *BIO_f_base64(void);
0943 const BIO_METHOD *BIO_f_cipher(void);
0944 const BIO_METHOD *BIO_f_reliable(void);
0945 __owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
0946     const unsigned char *i, int enc);
0947 
0948 const EVP_MD *EVP_md_null(void);
0949 #ifndef OPENSSL_NO_MD2
0950 const EVP_MD *EVP_md2(void);
0951 #endif
0952 #ifndef OPENSSL_NO_MD4
0953 const EVP_MD *EVP_md4(void);
0954 #endif
0955 #ifndef OPENSSL_NO_MD5
0956 const EVP_MD *EVP_md5(void);
0957 const EVP_MD *EVP_md5_sha1(void);
0958 #endif
0959 #ifndef OPENSSL_NO_BLAKE2
0960 const EVP_MD *EVP_blake2b512(void);
0961 const EVP_MD *EVP_blake2s256(void);
0962 #endif
0963 const EVP_MD *EVP_sha1(void);
0964 const EVP_MD *EVP_sha224(void);
0965 const EVP_MD *EVP_sha256(void);
0966 const EVP_MD *EVP_sha384(void);
0967 const EVP_MD *EVP_sha512(void);
0968 const EVP_MD *EVP_sha512_224(void);
0969 const EVP_MD *EVP_sha512_256(void);
0970 const EVP_MD *EVP_sha3_224(void);
0971 const EVP_MD *EVP_sha3_256(void);
0972 const EVP_MD *EVP_sha3_384(void);
0973 const EVP_MD *EVP_sha3_512(void);
0974 const EVP_MD *EVP_shake128(void);
0975 const EVP_MD *EVP_shake256(void);
0976 
0977 #ifndef OPENSSL_NO_MDC2
0978 const EVP_MD *EVP_mdc2(void);
0979 #endif
0980 #ifndef OPENSSL_NO_RMD160
0981 const EVP_MD *EVP_ripemd160(void);
0982 #endif
0983 #ifndef OPENSSL_NO_WHIRLPOOL
0984 const EVP_MD *EVP_whirlpool(void);
0985 #endif
0986 #ifndef OPENSSL_NO_SM3
0987 const EVP_MD *EVP_sm3(void);
0988 #endif
0989 const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */
0990 #ifndef OPENSSL_NO_DES
0991 const EVP_CIPHER *EVP_des_ecb(void);
0992 const EVP_CIPHER *EVP_des_ede(void);
0993 const EVP_CIPHER *EVP_des_ede3(void);
0994 const EVP_CIPHER *EVP_des_ede_ecb(void);
0995 const EVP_CIPHER *EVP_des_ede3_ecb(void);
0996 const EVP_CIPHER *EVP_des_cfb64(void);
0997 #define EVP_des_cfb EVP_des_cfb64
0998 const EVP_CIPHER *EVP_des_cfb1(void);
0999 const EVP_CIPHER *EVP_des_cfb8(void);
1000 const EVP_CIPHER *EVP_des_ede_cfb64(void);
1001 #define EVP_des_ede_cfb EVP_des_ede_cfb64
1002 const EVP_CIPHER *EVP_des_ede3_cfb64(void);
1003 #define EVP_des_ede3_cfb EVP_des_ede3_cfb64
1004 const EVP_CIPHER *EVP_des_ede3_cfb1(void);
1005 const EVP_CIPHER *EVP_des_ede3_cfb8(void);
1006 const EVP_CIPHER *EVP_des_ofb(void);
1007 const EVP_CIPHER *EVP_des_ede_ofb(void);
1008 const EVP_CIPHER *EVP_des_ede3_ofb(void);
1009 const EVP_CIPHER *EVP_des_cbc(void);
1010 const EVP_CIPHER *EVP_des_ede_cbc(void);
1011 const EVP_CIPHER *EVP_des_ede3_cbc(void);
1012 const EVP_CIPHER *EVP_desx_cbc(void);
1013 const EVP_CIPHER *EVP_des_ede3_wrap(void);
1014 /*
1015  * This should now be supported through the dev_crypto ENGINE. But also, why
1016  * are rc4 and md5 declarations made here inside a "NO_DES" precompiler
1017  * branch?
1018  */
1019 #endif
1020 #ifndef OPENSSL_NO_RC4
1021 const EVP_CIPHER *EVP_rc4(void);
1022 const EVP_CIPHER *EVP_rc4_40(void);
1023 #ifndef OPENSSL_NO_MD5
1024 const EVP_CIPHER *EVP_rc4_hmac_md5(void);
1025 #endif
1026 #endif
1027 #ifndef OPENSSL_NO_IDEA
1028 const EVP_CIPHER *EVP_idea_ecb(void);
1029 const EVP_CIPHER *EVP_idea_cfb64(void);
1030 #define EVP_idea_cfb EVP_idea_cfb64
1031 const EVP_CIPHER *EVP_idea_ofb(void);
1032 const EVP_CIPHER *EVP_idea_cbc(void);
1033 #endif
1034 #ifndef OPENSSL_NO_RC2
1035 const EVP_CIPHER *EVP_rc2_ecb(void);
1036 const EVP_CIPHER *EVP_rc2_cbc(void);
1037 const EVP_CIPHER *EVP_rc2_40_cbc(void);
1038 const EVP_CIPHER *EVP_rc2_64_cbc(void);
1039 const EVP_CIPHER *EVP_rc2_cfb64(void);
1040 #define EVP_rc2_cfb EVP_rc2_cfb64
1041 const EVP_CIPHER *EVP_rc2_ofb(void);
1042 #endif
1043 #ifndef OPENSSL_NO_BF
1044 const EVP_CIPHER *EVP_bf_ecb(void);
1045 const EVP_CIPHER *EVP_bf_cbc(void);
1046 const EVP_CIPHER *EVP_bf_cfb64(void);
1047 #define EVP_bf_cfb EVP_bf_cfb64
1048 const EVP_CIPHER *EVP_bf_ofb(void);
1049 #endif
1050 #ifndef OPENSSL_NO_CAST
1051 const EVP_CIPHER *EVP_cast5_ecb(void);
1052 const EVP_CIPHER *EVP_cast5_cbc(void);
1053 const EVP_CIPHER *EVP_cast5_cfb64(void);
1054 #define EVP_cast5_cfb EVP_cast5_cfb64
1055 const EVP_CIPHER *EVP_cast5_ofb(void);
1056 #endif
1057 #ifndef OPENSSL_NO_RC5
1058 const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
1059 const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
1060 const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
1061 #define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
1062 const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
1063 #endif
1064 const EVP_CIPHER *EVP_aes_128_ecb(void);
1065 const EVP_CIPHER *EVP_aes_128_cbc(void);
1066 const EVP_CIPHER *EVP_aes_128_cfb1(void);
1067 const EVP_CIPHER *EVP_aes_128_cfb8(void);
1068 const EVP_CIPHER *EVP_aes_128_cfb128(void);
1069 #define EVP_aes_128_cfb EVP_aes_128_cfb128
1070 const EVP_CIPHER *EVP_aes_128_ofb(void);
1071 const EVP_CIPHER *EVP_aes_128_ctr(void);
1072 const EVP_CIPHER *EVP_aes_128_ccm(void);
1073 const EVP_CIPHER *EVP_aes_128_gcm(void);
1074 const EVP_CIPHER *EVP_aes_128_xts(void);
1075 const EVP_CIPHER *EVP_aes_128_wrap(void);
1076 const EVP_CIPHER *EVP_aes_128_wrap_pad(void);
1077 #ifndef OPENSSL_NO_OCB
1078 const EVP_CIPHER *EVP_aes_128_ocb(void);
1079 #endif
1080 const EVP_CIPHER *EVP_aes_192_ecb(void);
1081 const EVP_CIPHER *EVP_aes_192_cbc(void);
1082 const EVP_CIPHER *EVP_aes_192_cfb1(void);
1083 const EVP_CIPHER *EVP_aes_192_cfb8(void);
1084 const EVP_CIPHER *EVP_aes_192_cfb128(void);
1085 #define EVP_aes_192_cfb EVP_aes_192_cfb128
1086 const EVP_CIPHER *EVP_aes_192_ofb(void);
1087 const EVP_CIPHER *EVP_aes_192_ctr(void);
1088 const EVP_CIPHER *EVP_aes_192_ccm(void);
1089 const EVP_CIPHER *EVP_aes_192_gcm(void);
1090 const EVP_CIPHER *EVP_aes_192_wrap(void);
1091 const EVP_CIPHER *EVP_aes_192_wrap_pad(void);
1092 #ifndef OPENSSL_NO_OCB
1093 const EVP_CIPHER *EVP_aes_192_ocb(void);
1094 #endif
1095 const EVP_CIPHER *EVP_aes_256_ecb(void);
1096 const EVP_CIPHER *EVP_aes_256_cbc(void);
1097 const EVP_CIPHER *EVP_aes_256_cfb1(void);
1098 const EVP_CIPHER *EVP_aes_256_cfb8(void);
1099 const EVP_CIPHER *EVP_aes_256_cfb128(void);
1100 #define EVP_aes_256_cfb EVP_aes_256_cfb128
1101 const EVP_CIPHER *EVP_aes_256_ofb(void);
1102 const EVP_CIPHER *EVP_aes_256_ctr(void);
1103 const EVP_CIPHER *EVP_aes_256_ccm(void);
1104 const EVP_CIPHER *EVP_aes_256_gcm(void);
1105 const EVP_CIPHER *EVP_aes_256_xts(void);
1106 const EVP_CIPHER *EVP_aes_256_wrap(void);
1107 const EVP_CIPHER *EVP_aes_256_wrap_pad(void);
1108 #ifndef OPENSSL_NO_OCB
1109 const EVP_CIPHER *EVP_aes_256_ocb(void);
1110 #endif
1111 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
1112 const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void);
1113 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void);
1114 const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void);
1115 #ifndef OPENSSL_NO_ARIA
1116 const EVP_CIPHER *EVP_aria_128_ecb(void);
1117 const EVP_CIPHER *EVP_aria_128_cbc(void);
1118 const EVP_CIPHER *EVP_aria_128_cfb1(void);
1119 const EVP_CIPHER *EVP_aria_128_cfb8(void);
1120 const EVP_CIPHER *EVP_aria_128_cfb128(void);
1121 #define EVP_aria_128_cfb EVP_aria_128_cfb128
1122 const EVP_CIPHER *EVP_aria_128_ctr(void);
1123 const EVP_CIPHER *EVP_aria_128_ofb(void);
1124 const EVP_CIPHER *EVP_aria_128_gcm(void);
1125 const EVP_CIPHER *EVP_aria_128_ccm(void);
1126 const EVP_CIPHER *EVP_aria_192_ecb(void);
1127 const EVP_CIPHER *EVP_aria_192_cbc(void);
1128 const EVP_CIPHER *EVP_aria_192_cfb1(void);
1129 const EVP_CIPHER *EVP_aria_192_cfb8(void);
1130 const EVP_CIPHER *EVP_aria_192_cfb128(void);
1131 #define EVP_aria_192_cfb EVP_aria_192_cfb128
1132 const EVP_CIPHER *EVP_aria_192_ctr(void);
1133 const EVP_CIPHER *EVP_aria_192_ofb(void);
1134 const EVP_CIPHER *EVP_aria_192_gcm(void);
1135 const EVP_CIPHER *EVP_aria_192_ccm(void);
1136 const EVP_CIPHER *EVP_aria_256_ecb(void);
1137 const EVP_CIPHER *EVP_aria_256_cbc(void);
1138 const EVP_CIPHER *EVP_aria_256_cfb1(void);
1139 const EVP_CIPHER *EVP_aria_256_cfb8(void);
1140 const EVP_CIPHER *EVP_aria_256_cfb128(void);
1141 #define EVP_aria_256_cfb EVP_aria_256_cfb128
1142 const EVP_CIPHER *EVP_aria_256_ctr(void);
1143 const EVP_CIPHER *EVP_aria_256_ofb(void);
1144 const EVP_CIPHER *EVP_aria_256_gcm(void);
1145 const EVP_CIPHER *EVP_aria_256_ccm(void);
1146 #endif
1147 #ifndef OPENSSL_NO_CAMELLIA
1148 const EVP_CIPHER *EVP_camellia_128_ecb(void);
1149 const EVP_CIPHER *EVP_camellia_128_cbc(void);
1150 const EVP_CIPHER *EVP_camellia_128_cfb1(void);
1151 const EVP_CIPHER *EVP_camellia_128_cfb8(void);
1152 const EVP_CIPHER *EVP_camellia_128_cfb128(void);
1153 #define EVP_camellia_128_cfb EVP_camellia_128_cfb128
1154 const EVP_CIPHER *EVP_camellia_128_ofb(void);
1155 const EVP_CIPHER *EVP_camellia_128_ctr(void);
1156 const EVP_CIPHER *EVP_camellia_192_ecb(void);
1157 const EVP_CIPHER *EVP_camellia_192_cbc(void);
1158 const EVP_CIPHER *EVP_camellia_192_cfb1(void);
1159 const EVP_CIPHER *EVP_camellia_192_cfb8(void);
1160 const EVP_CIPHER *EVP_camellia_192_cfb128(void);
1161 #define EVP_camellia_192_cfb EVP_camellia_192_cfb128
1162 const EVP_CIPHER *EVP_camellia_192_ofb(void);
1163 const EVP_CIPHER *EVP_camellia_192_ctr(void);
1164 const EVP_CIPHER *EVP_camellia_256_ecb(void);
1165 const EVP_CIPHER *EVP_camellia_256_cbc(void);
1166 const EVP_CIPHER *EVP_camellia_256_cfb1(void);
1167 const EVP_CIPHER *EVP_camellia_256_cfb8(void);
1168 const EVP_CIPHER *EVP_camellia_256_cfb128(void);
1169 #define EVP_camellia_256_cfb EVP_camellia_256_cfb128
1170 const EVP_CIPHER *EVP_camellia_256_ofb(void);
1171 const EVP_CIPHER *EVP_camellia_256_ctr(void);
1172 #endif
1173 #ifndef OPENSSL_NO_CHACHA
1174 const EVP_CIPHER *EVP_chacha20(void);
1175 #ifndef OPENSSL_NO_POLY1305
1176 const EVP_CIPHER *EVP_chacha20_poly1305(void);
1177 #endif
1178 #endif
1179 
1180 #ifndef OPENSSL_NO_SEED
1181 const EVP_CIPHER *EVP_seed_ecb(void);
1182 const EVP_CIPHER *EVP_seed_cbc(void);
1183 const EVP_CIPHER *EVP_seed_cfb128(void);
1184 #define EVP_seed_cfb EVP_seed_cfb128
1185 const EVP_CIPHER *EVP_seed_ofb(void);
1186 #endif
1187 
1188 #ifndef OPENSSL_NO_SM4
1189 const EVP_CIPHER *EVP_sm4_ecb(void);
1190 const EVP_CIPHER *EVP_sm4_cbc(void);
1191 const EVP_CIPHER *EVP_sm4_cfb128(void);
1192 #define EVP_sm4_cfb EVP_sm4_cfb128
1193 const EVP_CIPHER *EVP_sm4_ofb(void);
1194 const EVP_CIPHER *EVP_sm4_ctr(void);
1195 #endif
1196 
1197 #ifndef OPENSSL_NO_DEPRECATED_1_1_0
1198 #define OPENSSL_add_all_algorithms_conf()            \
1199     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
1200             | OPENSSL_INIT_ADD_ALL_DIGESTS           \
1201             | OPENSSL_INIT_LOAD_CONFIG,              \
1202         NULL)
1203 #define OPENSSL_add_all_algorithms_noconf()          \
1204     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
1205             | OPENSSL_INIT_ADD_ALL_DIGESTS,          \
1206         NULL)
1207 
1208 #ifdef OPENSSL_LOAD_CONF
1209 #define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf()
1210 #else
1211 #define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf()
1212 #endif
1213 
1214 #define OpenSSL_add_all_ciphers() \
1215     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL)
1216 #define OpenSSL_add_all_digests() \
1217     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
1218 
1219 #define EVP_cleanup() \
1220     while (0)         \
1221     continue
1222 #endif
1223 
1224 int EVP_add_cipher(const EVP_CIPHER *cipher);
1225 int EVP_add_digest(const EVP_MD *digest);
1226 
1227 const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
1228 const EVP_MD *EVP_get_digestbyname(const char *name);
1229 
1230 void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph,
1231                            const char *from, const char *to, void *x),
1232     void *arg);
1233 void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph, const char *from,
1234                                   const char *to, void *x),
1235     void *arg);
1236 void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
1237     void (*fn)(EVP_CIPHER *cipher, void *arg),
1238     void *arg);
1239 
1240 void EVP_MD_do_all(void (*fn)(const EVP_MD *ciph,
1241                        const char *from, const char *to, void *x),
1242     void *arg);
1243 void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *ciph, const char *from,
1244                               const char *to, void *x),
1245     void *arg);
1246 void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx,
1247     void (*fn)(EVP_MD *md, void *arg),
1248     void *arg);
1249 
1250 /* MAC stuff */
1251 
1252 EVP_MAC *EVP_MAC_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
1253     const char *properties);
1254 int EVP_MAC_up_ref(EVP_MAC *mac);
1255 void EVP_MAC_free(EVP_MAC *mac);
1256 const char *EVP_MAC_get0_name(const EVP_MAC *mac);
1257 const char *EVP_MAC_get0_description(const EVP_MAC *mac);
1258 int EVP_MAC_is_a(const EVP_MAC *mac, const char *name);
1259 const OSSL_PROVIDER *EVP_MAC_get0_provider(const EVP_MAC *mac);
1260 int EVP_MAC_get_params(EVP_MAC *mac, OSSL_PARAM params[]);
1261 
1262 EVP_MAC_CTX *EVP_MAC_CTX_new(EVP_MAC *mac);
1263 void EVP_MAC_CTX_free(EVP_MAC_CTX *ctx);
1264 EVP_MAC_CTX *EVP_MAC_CTX_dup(const EVP_MAC_CTX *src);
1265 EVP_MAC *EVP_MAC_CTX_get0_mac(EVP_MAC_CTX *ctx);
1266 int EVP_MAC_CTX_get_params(EVP_MAC_CTX *ctx, OSSL_PARAM params[]);
1267 int EVP_MAC_CTX_set_params(EVP_MAC_CTX *ctx, const OSSL_PARAM params[]);
1268 
1269 size_t EVP_MAC_CTX_get_mac_size(EVP_MAC_CTX *ctx);
1270 size_t EVP_MAC_CTX_get_block_size(EVP_MAC_CTX *ctx);
1271 unsigned char *EVP_Q_mac(OSSL_LIB_CTX *libctx, const char *name, const char *propq,
1272     const char *subalg, const OSSL_PARAM *params,
1273     const void *key, size_t keylen,
1274     const unsigned char *data, size_t datalen,
1275     unsigned char *out, size_t outsize, size_t *outlen);
1276 int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen,
1277     const OSSL_PARAM params[]);
1278 int EVP_MAC_init_SKEY(EVP_MAC_CTX *ctx, EVP_SKEY *skey, const OSSL_PARAM params[]);
1279 int EVP_MAC_update(EVP_MAC_CTX *ctx, const unsigned char *data, size_t datalen);
1280 int EVP_MAC_final(EVP_MAC_CTX *ctx,
1281     unsigned char *out, size_t *outl, size_t outsize);
1282 int EVP_MAC_finalXOF(EVP_MAC_CTX *ctx, unsigned char *out, size_t outsize);
1283 const OSSL_PARAM *EVP_MAC_gettable_params(const EVP_MAC *mac);
1284 const OSSL_PARAM *EVP_MAC_gettable_ctx_params(const EVP_MAC *mac);
1285 const OSSL_PARAM *EVP_MAC_settable_ctx_params(const EVP_MAC *mac);
1286 const OSSL_PARAM *EVP_MAC_CTX_gettable_params(EVP_MAC_CTX *ctx);
1287 const OSSL_PARAM *EVP_MAC_CTX_settable_params(EVP_MAC_CTX *ctx);
1288 
1289 void EVP_MAC_do_all_provided(OSSL_LIB_CTX *libctx,
1290     void (*fn)(EVP_MAC *mac, void *arg),
1291     void *arg);
1292 int EVP_MAC_names_do_all(const EVP_MAC *mac,
1293     void (*fn)(const char *name, void *data),
1294     void *data);
1295 
1296 /* RAND stuff */
1297 EVP_RAND *EVP_RAND_fetch(OSSL_LIB_CTX *libctx, const char *algorithm,
1298     const char *properties);
1299 int EVP_RAND_up_ref(EVP_RAND *rand);
1300 void EVP_RAND_free(EVP_RAND *rand);
1301 const char *EVP_RAND_get0_name(const EVP_RAND *rand);
1302 const char *EVP_RAND_get0_description(const EVP_RAND *md);
1303 int EVP_RAND_is_a(const EVP_RAND *rand, const char *name);
1304 const OSSL_PROVIDER *EVP_RAND_get0_provider(const EVP_RAND *rand);
1305 int EVP_RAND_get_params(EVP_RAND *rand, OSSL_PARAM params[]);
1306 
1307 EVP_RAND_CTX *EVP_RAND_CTX_new(EVP_RAND *rand, EVP_RAND_CTX *parent);
1308 int EVP_RAND_CTX_up_ref(EVP_RAND_CTX *ctx);
1309 void EVP_RAND_CTX_free(EVP_RAND_CTX *ctx);
1310 EVP_RAND *EVP_RAND_CTX_get0_rand(EVP_RAND_CTX *ctx);
1311 int EVP_RAND_CTX_get_params(EVP_RAND_CTX *ctx, OSSL_PARAM params[]);
1312 int EVP_RAND_CTX_set_params(EVP_RAND_CTX *ctx, const OSSL_PARAM params[]);
1313 const OSSL_PARAM *EVP_RAND_gettable_params(const EVP_RAND *rand);
1314 const OSSL_PARAM *EVP_RAND_gettable_ctx_params(const EVP_RAND *rand);
1315 const OSSL_PARAM *EVP_RAND_settable_ctx_params(const EVP_RAND *rand);
1316 const OSSL_PARAM *EVP_RAND_CTX_gettable_params(EVP_RAND_CTX *ctx);
1317 const OSSL_PARAM *EVP_RAND_CTX_settable_params(EVP_RAND_CTX *ctx);
1318 
1319 void EVP_RAND_do_all_provided(OSSL_LIB_CTX *libctx,
1320     void (*fn)(EVP_RAND *rand, void *arg),
1321     void *arg);
1322 int EVP_RAND_names_do_all(const EVP_RAND *rand,
1323     void (*fn)(const char *name, void *data),
1324     void *data);
1325 
1326 __owur int EVP_RAND_instantiate(EVP_RAND_CTX *ctx, unsigned int strength,
1327     int prediction_resistance,
1328     const unsigned char *pstr, size_t pstr_len,
1329     const OSSL_PARAM params[]);
1330 int EVP_RAND_uninstantiate(EVP_RAND_CTX *ctx);
1331 __owur int EVP_RAND_generate(EVP_RAND_CTX *ctx, unsigned char *out,
1332     size_t outlen, unsigned int strength,
1333     int prediction_resistance,
1334     const unsigned char *addin, size_t addin_len);
1335 int EVP_RAND_reseed(EVP_RAND_CTX *ctx, int prediction_resistance,
1336     const unsigned char *ent, size_t ent_len,
1337     const unsigned char *addin, size_t addin_len);
1338 __owur int EVP_RAND_nonce(EVP_RAND_CTX *ctx, unsigned char *out, size_t outlen);
1339 __owur int EVP_RAND_enable_locking(EVP_RAND_CTX *ctx);
1340 
1341 int EVP_RAND_verify_zeroization(EVP_RAND_CTX *ctx);
1342 unsigned int EVP_RAND_get_strength(EVP_RAND_CTX *ctx);
1343 int EVP_RAND_get_state(EVP_RAND_CTX *ctx);
1344 
1345 #define EVP_RAND_STATE_UNINITIALISED 0
1346 #define EVP_RAND_STATE_READY 1
1347 #define EVP_RAND_STATE_ERROR 2
1348 
1349 /* PKEY stuff */
1350 #ifndef OPENSSL_NO_DEPRECATED_3_0
1351 OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_decrypt_old(unsigned char *dec_key,
1352     const unsigned char *enc_key,
1353     int enc_key_len,
1354     EVP_PKEY *private_key);
1355 OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_encrypt_old(unsigned char *enc_key,
1356     const unsigned char *key,
1357     int key_len, EVP_PKEY *pub_key);
1358 #endif
1359 int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name);
1360 int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey,
1361     void (*fn)(const char *name, void *data),
1362     void *data);
1363 int EVP_PKEY_type(int type);
1364 int EVP_PKEY_get_id(const EVP_PKEY *pkey);
1365 #define EVP_PKEY_id EVP_PKEY_get_id
1366 int EVP_PKEY_get_base_id(const EVP_PKEY *pkey);
1367 #define EVP_PKEY_base_id EVP_PKEY_get_base_id
1368 int EVP_PKEY_get_bits(const EVP_PKEY *pkey);
1369 #define EVP_PKEY_bits EVP_PKEY_get_bits
1370 int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey);
1371 #define EVP_PKEY_security_bits EVP_PKEY_get_security_bits
1372 int EVP_PKEY_get_security_category(const EVP_PKEY *pkey);
1373 int EVP_PKEY_get_size(const EVP_PKEY *pkey);
1374 #define EVP_PKEY_size EVP_PKEY_get_size
1375 int EVP_PKEY_can_sign(const EVP_PKEY *pkey);
1376 int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
1377 int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);
1378 int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt);
1379 #ifndef OPENSSL_NO_DEPRECATED_3_0
1380 #ifndef OPENSSL_NO_ENGINE
1381 OSSL_DEPRECATEDIN_3_0
1382 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e);
1383 OSSL_DEPRECATEDIN_3_0
1384 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
1385 #endif
1386 OSSL_DEPRECATEDIN_3_0
1387 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
1388 OSSL_DEPRECATEDIN_3_0
1389 void *EVP_PKEY_get0(const EVP_PKEY *pkey);
1390 OSSL_DEPRECATEDIN_3_0
1391 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
1392 #ifndef OPENSSL_NO_POLY1305
1393 OSSL_DEPRECATEDIN_3_0
1394 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
1395 #endif
1396 #ifndef OPENSSL_NO_SIPHASH
1397 OSSL_DEPRECATEDIN_3_0
1398 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
1399 #endif
1400 
1401 struct rsa_st;
1402 OSSL_DEPRECATEDIN_3_0
1403 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key);
1404 OSSL_DEPRECATEDIN_3_0
1405 const struct rsa_st *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey);
1406 OSSL_DEPRECATEDIN_3_0
1407 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
1408 
1409 #ifndef OPENSSL_NO_DSA
1410 struct dsa_st;
1411 OSSL_DEPRECATEDIN_3_0
1412 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key);
1413 OSSL_DEPRECATEDIN_3_0
1414 const struct dsa_st *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey);
1415 OSSL_DEPRECATEDIN_3_0
1416 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
1417 #endif
1418 
1419 #ifndef OPENSSL_NO_DH
1420 struct dh_st;
1421 OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key);
1422 OSSL_DEPRECATEDIN_3_0 const struct dh_st *EVP_PKEY_get0_DH(const EVP_PKEY *pkey);
1423 OSSL_DEPRECATEDIN_3_0 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
1424 #endif
1425 
1426 #ifndef OPENSSL_NO_EC
1427 struct ec_key_st;
1428 OSSL_DEPRECATEDIN_3_0
1429 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key);
1430 OSSL_DEPRECATEDIN_3_0
1431 const struct ec_key_st *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey);
1432 OSSL_DEPRECATEDIN_3_0
1433 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
1434 #endif
1435 #endif /* OPENSSL_NO_DEPRECATED_3_0 */
1436 
1437 EVP_PKEY *EVP_PKEY_new(void);
1438 int EVP_PKEY_up_ref(EVP_PKEY *pkey);
1439 EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey);
1440 void EVP_PKEY_free(EVP_PKEY *pkey);
1441 const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey);
1442 const OSSL_PROVIDER *EVP_PKEY_get0_provider(const EVP_PKEY *key);
1443 
1444 EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
1445     long length);
1446 int i2d_PublicKey(const EVP_PKEY *a, unsigned char **pp);
1447 
1448 EVP_PKEY *d2i_PrivateKey_ex(int type, EVP_PKEY **a, const unsigned char **pp,
1449     long length, OSSL_LIB_CTX *libctx,
1450     const char *propq);
1451 EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
1452     long length);
1453 EVP_PKEY *d2i_AutoPrivateKey_ex(EVP_PKEY **a, const unsigned char **pp,
1454     long length, OSSL_LIB_CTX *libctx,
1455     const char *propq);
1456 EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
1457     long length);
1458 int i2d_PrivateKey(const EVP_PKEY *a, unsigned char **pp);
1459 int i2d_PKCS8PrivateKey(const EVP_PKEY *a, unsigned char **pp);
1460 
1461 int i2d_KeyParams(const EVP_PKEY *a, unsigned char **pp);
1462 EVP_PKEY *d2i_KeyParams(int type, EVP_PKEY **a, const unsigned char **pp,
1463     long length);
1464 int i2d_KeyParams_bio(BIO *bp, const EVP_PKEY *pkey);
1465 EVP_PKEY *d2i_KeyParams_bio(int type, EVP_PKEY **a, BIO *in);
1466 
1467 int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
1468 int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
1469 int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode);
1470 int EVP_PKEY_parameters_eq(const EVP_PKEY *a, const EVP_PKEY *b);
1471 int EVP_PKEY_eq(const EVP_PKEY *a, const EVP_PKEY *b);
1472 
1473 #ifndef OPENSSL_NO_DEPRECATED_3_0
1474 OSSL_DEPRECATEDIN_3_0
1475 int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
1476 OSSL_DEPRECATEDIN_3_0
1477 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
1478 #endif
1479 
1480 int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
1481     int indent, ASN1_PCTX *pctx);
1482 int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
1483     int indent, ASN1_PCTX *pctx);
1484 int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
1485     int indent, ASN1_PCTX *pctx);
1486 #ifndef OPENSSL_NO_STDIO
1487 int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey,
1488     int indent, ASN1_PCTX *pctx);
1489 int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey,
1490     int indent, ASN1_PCTX *pctx);
1491 int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey,
1492     int indent, ASN1_PCTX *pctx);
1493 #endif
1494 
1495 int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);
1496 int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey,
1497     char *mdname, size_t mdname_sz);
1498 int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx,
1499     const char *name, const char *propq);
1500 
1501 #ifndef OPENSSL_NO_DEPRECATED_3_0
1502 /*
1503  * For backwards compatibility. Use EVP_PKEY_set1_encoded_public_key in
1504  * preference
1505  */
1506 #define EVP_PKEY_set1_tls_encodedpoint(pkey, pt, ptlen) \
1507     EVP_PKEY_set1_encoded_public_key((pkey), (pt), (ptlen))
1508 #endif
1509 
1510 int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey,
1511     const unsigned char *pub, size_t publen);
1512 
1513 #ifndef OPENSSL_NO_DEPRECATED_3_0
1514 /*
1515  * For backwards compatibility. Use EVP_PKEY_get1_encoded_public_key in
1516  * preference
1517  */
1518 #define EVP_PKEY_get1_tls_encodedpoint(pkey, ppt) \
1519     EVP_PKEY_get1_encoded_public_key((pkey), (ppt))
1520 #endif
1521 
1522 size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub);
1523 
1524 /* calls methods */
1525 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
1526 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
1527 
1528 /* These are used by EVP_CIPHER methods */
1529 int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
1530 int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
1531 
1532 /* PKCS5 password based encryption */
1533 int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
1534     ASN1_TYPE *param, const EVP_CIPHER *cipher,
1535     const EVP_MD *md, int en_de);
1536 int PKCS5_PBE_keyivgen_ex(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
1537     ASN1_TYPE *param, const EVP_CIPHER *cipher,
1538     const EVP_MD *md, int en_de, OSSL_LIB_CTX *libctx,
1539     const char *propq);
1540 int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
1541     const unsigned char *salt, int saltlen, int iter,
1542     int keylen, unsigned char *out);
1543 int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
1544     const unsigned char *salt, int saltlen, int iter,
1545     const EVP_MD *digest, int keylen, unsigned char *out);
1546 int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
1547     ASN1_TYPE *param, const EVP_CIPHER *cipher,
1548     const EVP_MD *md, int en_de);
1549 int PKCS5_v2_PBE_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
1550     ASN1_TYPE *param, const EVP_CIPHER *cipher,
1551     const EVP_MD *md, int en_de,
1552     OSSL_LIB_CTX *libctx, const char *propq);
1553 
1554 #ifndef OPENSSL_NO_SCRYPT
1555 int EVP_PBE_scrypt(const char *pass, size_t passlen,
1556     const unsigned char *salt, size_t saltlen,
1557     uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem,
1558     unsigned char *key, size_t keylen);
1559 int EVP_PBE_scrypt_ex(const char *pass, size_t passlen,
1560     const unsigned char *salt, size_t saltlen,
1561     uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem,
1562     unsigned char *key, size_t keylen,
1563     OSSL_LIB_CTX *ctx, const char *propq);
1564 
1565 int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass,
1566     int passlen, ASN1_TYPE *param,
1567     const EVP_CIPHER *c, const EVP_MD *md, int en_de);
1568 int PKCS5_v2_scrypt_keyivgen_ex(EVP_CIPHER_CTX *ctx, const char *pass,
1569     int passlen, ASN1_TYPE *param,
1570     const EVP_CIPHER *c, const EVP_MD *md, int en_de,
1571     OSSL_LIB_CTX *libctx, const char *propq);
1572 #endif
1573 
1574 void PKCS5_PBE_add(void);
1575 
1576 int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
1577     ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);
1578 
1579 int EVP_PBE_CipherInit_ex(ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
1580     ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de,
1581     OSSL_LIB_CTX *libctx, const char *propq);
1582 
1583 /* PBE type */
1584 
1585 /* Can appear as the outermost AlgorithmIdentifier */
1586 #define EVP_PBE_TYPE_OUTER 0x0
1587 /* Is an PRF type OID */
1588 #define EVP_PBE_TYPE_PRF 0x1
1589 /* Is a PKCS#5 v2.0 KDF */
1590 #define EVP_PBE_TYPE_KDF 0x2
1591 
1592 int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid,
1593     int md_nid, EVP_PBE_KEYGEN *keygen);
1594 int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,
1595     EVP_PBE_KEYGEN *keygen);
1596 int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid,
1597     EVP_PBE_KEYGEN **pkeygen);
1598 int EVP_PBE_find_ex(int type, int pbe_nid, int *pcnid, int *pmnid,
1599     EVP_PBE_KEYGEN **pkeygen, EVP_PBE_KEYGEN_EX **pkeygen_ex);
1600 void EVP_PBE_cleanup(void);
1601 int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num);
1602 
1603 #define ASN1_PKEY_ALIAS 0x1
1604 #define ASN1_PKEY_DYNAMIC 0x2
1605 #define ASN1_PKEY_SIGPARAM_NULL 0x4
1606 
1607 #define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1
1608 #define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2
1609 #define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3
1610 #define ASN1_PKEY_CTRL_CMS_SIGN 0x5
1611 #define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7
1612 #define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8
1613 
1614 #define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9
1615 #define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa
1616 #define ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED 0xb
1617 
1618 #ifndef OPENSSL_NO_DEPRECATED_3_6
1619 OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_get_count(void);
1620 OSSL_DEPRECATEDIN_3_6 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
1621 OSSL_DEPRECATEDIN_3_6
1622 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
1623 OSSL_DEPRECATEDIN_3_6
1624 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
1625     const char *str, int len);
1626 OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
1627 OSSL_DEPRECATEDIN_3_6 int EVP_PKEY_asn1_add_alias(int to, int from);
1628 OSSL_DEPRECATEDIN_3_6
1629 int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,
1630     int *ppkey_flags, const char **pinfo,
1631     const char **ppem_str,
1632     const EVP_PKEY_ASN1_METHOD *ameth);
1633 
1634 OSSL_DEPRECATEDIN_3_6 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
1635 OSSL_DEPRECATEDIN_3_6 EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,
1636     const char *pem_str,
1637     const char *info);
1638 OSSL_DEPRECATEDIN_3_6 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
1639     const EVP_PKEY_ASN1_METHOD *src);
1640 OSSL_DEPRECATEDIN_3_6 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
1641 OSSL_DEPRECATEDIN_3_6
1642 void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
1643     int (*pub_decode)(EVP_PKEY *pk,
1644         const X509_PUBKEY *pub),
1645     int (*pub_encode)(X509_PUBKEY *pub,
1646         const EVP_PKEY *pk),
1647     int (*pub_cmp)(const EVP_PKEY *a,
1648         const EVP_PKEY *b),
1649     int (*pub_print)(BIO *out,
1650         const EVP_PKEY *pkey,
1651         int indent, ASN1_PCTX *pctx),
1652     int (*pkey_size)(const EVP_PKEY *pk),
1653     int (*pkey_bits)(const EVP_PKEY *pk));
1654 OSSL_DEPRECATEDIN_3_6
1655 void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
1656     int (*priv_decode)(EVP_PKEY *pk,
1657         const PKCS8_PRIV_KEY_INFO
1658             *p8inf),
1659     int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8,
1660         const EVP_PKEY *pk),
1661     int (*priv_print)(BIO *out,
1662         const EVP_PKEY *pkey,
1663         int indent,
1664         ASN1_PCTX *pctx));
1665 OSSL_DEPRECATEDIN_3_6
1666 void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
1667     int (*param_decode)(EVP_PKEY *pkey,
1668         const unsigned char **pder,
1669         int derlen),
1670     int (*param_encode)(const EVP_PKEY *pkey,
1671         unsigned char **pder),
1672     int (*param_missing)(const EVP_PKEY *pk),
1673     int (*param_copy)(EVP_PKEY *to,
1674         const EVP_PKEY *from),
1675     int (*param_cmp)(const EVP_PKEY *a,
1676         const EVP_PKEY *b),
1677     int (*param_print)(BIO *out,
1678         const EVP_PKEY *pkey,
1679         int indent,
1680         ASN1_PCTX *pctx));
1681 
1682 OSSL_DEPRECATEDIN_3_6
1683 void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
1684     void (*pkey_free)(EVP_PKEY *pkey));
1685 OSSL_DEPRECATEDIN_3_6
1686 void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
1687     int (*pkey_ctrl)(EVP_PKEY *pkey, int op,
1688         long arg1, void *arg2));
1689 OSSL_DEPRECATEDIN_3_6
1690 void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
1691     int (*item_verify)(EVP_MD_CTX *ctx,
1692         const ASN1_ITEM *it,
1693         const void *data,
1694         const X509_ALGOR *a,
1695         const ASN1_BIT_STRING *sig,
1696         EVP_PKEY *pkey),
1697     int (*item_sign)(EVP_MD_CTX *ctx,
1698         const ASN1_ITEM *it,
1699         const void *data,
1700         X509_ALGOR *alg1,
1701         X509_ALGOR *alg2,
1702         ASN1_BIT_STRING *sig));
1703 
1704 OSSL_DEPRECATEDIN_3_6
1705 void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth,
1706     int (*siginf_set)(X509_SIG_INFO *siginf,
1707         const X509_ALGOR *alg,
1708         const ASN1_STRING *sig));
1709 
1710 OSSL_DEPRECATEDIN_3_6
1711 void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth,
1712     int (*pkey_check)(const EVP_PKEY *pk));
1713 
1714 OSSL_DEPRECATEDIN_3_6
1715 void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth,
1716     int (*pkey_pub_check)(const EVP_PKEY *pk));
1717 
1718 OSSL_DEPRECATEDIN_3_6
1719 void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth,
1720     int (*pkey_param_check)(const EVP_PKEY *pk));
1721 
1722 OSSL_DEPRECATEDIN_3_6
1723 void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
1724     int (*set_priv_key)(EVP_PKEY *pk,
1725         const unsigned char
1726             *priv,
1727         size_t len));
1728 OSSL_DEPRECATEDIN_3_6
1729 void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
1730     int (*set_pub_key)(EVP_PKEY *pk,
1731         const unsigned char *pub,
1732         size_t len));
1733 OSSL_DEPRECATEDIN_3_6
1734 void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
1735     int (*get_priv_key)(const EVP_PKEY *pk,
1736         unsigned char *priv,
1737         size_t *len));
1738 OSSL_DEPRECATEDIN_3_6
1739 void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
1740     int (*get_pub_key)(const EVP_PKEY *pk,
1741         unsigned char *pub,
1742         size_t *len));
1743 
1744 OSSL_DEPRECATEDIN_3_6
1745 void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth,
1746     int (*pkey_security_bits)(const EVP_PKEY
1747             *pk));
1748 #endif /* OPENSSL_NO_DEPRECATED_3_6 */
1749 
1750 int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **md);
1751 int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md);
1752 
1753 int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, const void *id, int len);
1754 int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id);
1755 int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len);
1756 
1757 int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op);
1758 
1759 const char *EVP_PKEY_get0_type_name(const EVP_PKEY *key);
1760 
1761 #define EVP_PKEY_OP_UNDEFINED 0
1762 #define EVP_PKEY_OP_PARAMGEN (1 << 1)
1763 #define EVP_PKEY_OP_KEYGEN (1 << 2)
1764 #define EVP_PKEY_OP_FROMDATA (1 << 3)
1765 #define EVP_PKEY_OP_SIGN (1 << 4)
1766 #define EVP_PKEY_OP_VERIFY (1 << 5)
1767 #define EVP_PKEY_OP_VERIFYRECOVER (1 << 6)
1768 #define EVP_PKEY_OP_SIGNCTX (1 << 7)
1769 #define EVP_PKEY_OP_VERIFYCTX (1 << 8)
1770 #define EVP_PKEY_OP_ENCRYPT (1 << 9)
1771 #define EVP_PKEY_OP_DECRYPT (1 << 10)
1772 #define EVP_PKEY_OP_DERIVE (1 << 11)
1773 #define EVP_PKEY_OP_ENCAPSULATE (1 << 12)
1774 #define EVP_PKEY_OP_DECAPSULATE (1 << 13)
1775 #define EVP_PKEY_OP_SIGNMSG (1 << 14)
1776 #define EVP_PKEY_OP_VERIFYMSG (1 << 15)
1777 /* Update the following when adding new EVP_PKEY_OPs */
1778 #define EVP_PKEY_OP_ALL ((1 << 16) - 1)
1779 
1780 #define EVP_PKEY_OP_TYPE_SIG                         \
1781     (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_SIGNMSG          \
1782         | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYMSG \
1783         | EVP_PKEY_OP_VERIFYRECOVER                  \
1784         | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)
1785 
1786 #define EVP_PKEY_OP_TYPE_CRYPT \
1787     (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)
1788 
1789 #define EVP_PKEY_OP_TYPE_DERIVE \
1790     (EVP_PKEY_OP_DERIVE)
1791 
1792 #define EVP_PKEY_OP_TYPE_DATA \
1793     (EVP_PKEY_OP_FROMDATA)
1794 
1795 #define EVP_PKEY_OP_TYPE_KEM \
1796     (EVP_PKEY_OP_ENCAPSULATE | EVP_PKEY_OP_DECAPSULATE)
1797 
1798 #define EVP_PKEY_OP_TYPE_GEN \
1799     (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)
1800 
1801 #define EVP_PKEY_OP_TYPE_NOGEN \
1802     (EVP_PKEY_OP_ALL & ~EVP_PKEY_OP_TYPE_GEN)
1803 
1804 int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key,
1805     int keylen);
1806 
1807 #define EVP_PKEY_CTRL_MD 1
1808 #define EVP_PKEY_CTRL_PEER_KEY 2
1809 #define EVP_PKEY_CTRL_SET_MAC_KEY 6
1810 #define EVP_PKEY_CTRL_DIGESTINIT 7
1811 /* Used by GOST key encryption in TLS */
1812 #define EVP_PKEY_CTRL_SET_IV 8
1813 #ifndef OPENSSL_NO_DEPRECATED_3_0
1814 #define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3
1815 #define EVP_PKEY_CTRL_PKCS7_DECRYPT 4
1816 #define EVP_PKEY_CTRL_PKCS7_SIGN 5
1817 #define EVP_PKEY_CTRL_CMS_ENCRYPT 9
1818 #define EVP_PKEY_CTRL_CMS_DECRYPT 10
1819 #define EVP_PKEY_CTRL_CMS_SIGN 11
1820 #endif
1821 #define EVP_PKEY_CTRL_CIPHER 12
1822 #define EVP_PKEY_CTRL_GET_MD 13
1823 #define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14
1824 #define EVP_PKEY_CTRL_SET1_ID 15
1825 #define EVP_PKEY_CTRL_GET1_ID 16
1826 #define EVP_PKEY_CTRL_GET1_ID_LEN 17
1827 
1828 #define EVP_PKEY_ALG_CTRL 0x1000
1829 
1830 #define EVP_PKEY_FLAG_AUTOARGLEN 2
1831 /*
1832  * Method handles all operations: don't assume any digest related defaults.
1833  */
1834 #define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4
1835 #ifndef OPENSSL_NO_DEPRECATED_3_0
1836 OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);
1837 OSSL_DEPRECATEDIN_3_0 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags);
1838 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
1839     const EVP_PKEY_METHOD *meth);
1840 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst,
1841     const EVP_PKEY_METHOD *src);
1842 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);
1843 OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);
1844 OSSL_DEPRECATEDIN_3_0 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth);
1845 OSSL_DEPRECATEDIN_3_0 size_t EVP_PKEY_meth_get_count(void);
1846 OSSL_DEPRECATEDIN_3_0 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
1847 #endif
1848 
1849 EVP_KEYMGMT *EVP_KEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
1850     const char *properties);
1851 int EVP_KEYMGMT_up_ref(EVP_KEYMGMT *keymgmt);
1852 void EVP_KEYMGMT_free(EVP_KEYMGMT *keymgmt);
1853 const OSSL_PROVIDER *EVP_KEYMGMT_get0_provider(const EVP_KEYMGMT *keymgmt);
1854 const char *EVP_KEYMGMT_get0_name(const EVP_KEYMGMT *keymgmt);
1855 const char *EVP_KEYMGMT_get0_description(const EVP_KEYMGMT *keymgmt);
1856 int EVP_KEYMGMT_is_a(const EVP_KEYMGMT *keymgmt, const char *name);
1857 void EVP_KEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx,
1858     void (*fn)(EVP_KEYMGMT *keymgmt, void *arg),
1859     void *arg);
1860 int EVP_KEYMGMT_names_do_all(const EVP_KEYMGMT *keymgmt,
1861     void (*fn)(const char *name, void *data),
1862     void *data);
1863 const OSSL_PARAM *EVP_KEYMGMT_gettable_params(const EVP_KEYMGMT *keymgmt);
1864 const OSSL_PARAM *EVP_KEYMGMT_settable_params(const EVP_KEYMGMT *keymgmt);
1865 const OSSL_PARAM *EVP_KEYMGMT_gen_settable_params(const EVP_KEYMGMT *keymgmt);
1866 const OSSL_PARAM *EVP_KEYMGMT_gen_gettable_params(const EVP_KEYMGMT *keymgmt);
1867 
1868 EVP_SKEYMGMT *EVP_SKEYMGMT_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
1869     const char *properties);
1870 int EVP_SKEYMGMT_up_ref(EVP_SKEYMGMT *keymgmt);
1871 void EVP_SKEYMGMT_free(EVP_SKEYMGMT *keymgmt);
1872 const OSSL_PROVIDER *EVP_SKEYMGMT_get0_provider(const EVP_SKEYMGMT *keymgmt);
1873 const char *EVP_SKEYMGMT_get0_name(const EVP_SKEYMGMT *keymgmt);
1874 const char *EVP_SKEYMGMT_get0_description(const EVP_SKEYMGMT *keymgmt);
1875 int EVP_SKEYMGMT_is_a(const EVP_SKEYMGMT *keymgmt, const char *name);
1876 void EVP_SKEYMGMT_do_all_provided(OSSL_LIB_CTX *libctx,
1877     void (*fn)(EVP_SKEYMGMT *keymgmt, void *arg),
1878     void *arg);
1879 int EVP_SKEYMGMT_names_do_all(const EVP_SKEYMGMT *keymgmt,
1880     void (*fn)(const char *name, void *data),
1881     void *data);
1882 const OSSL_PARAM *EVP_SKEYMGMT_get0_gen_settable_params(const EVP_SKEYMGMT *skeymgmt);
1883 const OSSL_PARAM *EVP_SKEYMGMT_get0_imp_settable_params(const EVP_SKEYMGMT *skeymgmt);
1884 
1885 EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
1886 EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
1887 EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_name(OSSL_LIB_CTX *libctx,
1888     const char *name,
1889     const char *propquery);
1890 EVP_PKEY_CTX *EVP_PKEY_CTX_new_from_pkey(OSSL_LIB_CTX *libctx,
1891     EVP_PKEY *pkey, const char *propquery);
1892 EVP_PKEY_CTX *EVP_PKEY_CTX_dup(const EVP_PKEY_CTX *ctx);
1893 void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
1894 int EVP_PKEY_CTX_is_a(EVP_PKEY_CTX *ctx, const char *keytype);
1895 
1896 int EVP_PKEY_CTX_get_params(EVP_PKEY_CTX *ctx, OSSL_PARAM *params);
1897 const OSSL_PARAM *EVP_PKEY_CTX_gettable_params(const EVP_PKEY_CTX *ctx);
1898 int EVP_PKEY_CTX_set_params(EVP_PKEY_CTX *ctx, const OSSL_PARAM *params);
1899 const OSSL_PARAM *EVP_PKEY_CTX_settable_params(const EVP_PKEY_CTX *ctx);
1900 
1901 int EVP_PKEY_CTX_set_algor_params(EVP_PKEY_CTX *ctx, const X509_ALGOR *alg);
1902 int EVP_PKEY_CTX_get_algor_params(EVP_PKEY_CTX *ctx, X509_ALGOR *alg);
1903 int EVP_PKEY_CTX_get_algor(EVP_PKEY_CTX *ctx, X509_ALGOR **alg);
1904 
1905 int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
1906     int cmd, int p1, void *p2);
1907 int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
1908     const char *value);
1909 int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
1910     int cmd, uint64_t value);
1911 
1912 int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str);
1913 int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex);
1914 
1915 int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
1916 
1917 int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);
1918 void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);
1919 
1920 EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
1921     const unsigned char *key, int keylen);
1922 EVP_PKEY *EVP_PKEY_new_raw_private_key_ex(OSSL_LIB_CTX *libctx,
1923     const char *keytype,
1924     const char *propq,
1925     const unsigned char *priv, size_t len);
1926 EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e,
1927     const unsigned char *priv,
1928     size_t len);
1929 EVP_PKEY *EVP_PKEY_new_raw_public_key_ex(OSSL_LIB_CTX *libctx,
1930     const char *keytype, const char *propq,
1931     const unsigned char *pub, size_t len);
1932 EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e,
1933     const unsigned char *pub,
1934     size_t len);
1935 int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv,
1936     size_t *len);
1937 int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub,
1938     size_t *len);
1939 
1940 #ifndef OPENSSL_NO_DEPRECATED_3_0
1941 OSSL_DEPRECATEDIN_3_0
1942 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv,
1943     size_t len, const EVP_CIPHER *cipher);
1944 #endif
1945 
1946 void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);
1947 void *EVP_PKEY_CTX_get_data(const EVP_PKEY_CTX *ctx);
1948 EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
1949 
1950 EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);
1951 
1952 void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
1953 void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
1954 
1955 int EVP_PKEY_CTX_set_signature(EVP_PKEY_CTX *pctx,
1956     const unsigned char *sig, size_t siglen);
1957 
1958 void EVP_SIGNATURE_free(EVP_SIGNATURE *signature);
1959 int EVP_SIGNATURE_up_ref(EVP_SIGNATURE *signature);
1960 OSSL_PROVIDER *EVP_SIGNATURE_get0_provider(const EVP_SIGNATURE *signature);
1961 EVP_SIGNATURE *EVP_SIGNATURE_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
1962     const char *properties);
1963 int EVP_SIGNATURE_is_a(const EVP_SIGNATURE *signature, const char *name);
1964 const char *EVP_SIGNATURE_get0_name(const EVP_SIGNATURE *signature);
1965 const char *EVP_SIGNATURE_get0_description(const EVP_SIGNATURE *signature);
1966 void EVP_SIGNATURE_do_all_provided(OSSL_LIB_CTX *libctx,
1967     void (*fn)(EVP_SIGNATURE *signature,
1968         void *data),
1969     void *data);
1970 int EVP_SIGNATURE_names_do_all(const EVP_SIGNATURE *signature,
1971     void (*fn)(const char *name, void *data),
1972     void *data);
1973 const OSSL_PARAM *EVP_SIGNATURE_gettable_ctx_params(const EVP_SIGNATURE *sig);
1974 const OSSL_PARAM *EVP_SIGNATURE_settable_ctx_params(const EVP_SIGNATURE *sig);
1975 
1976 void EVP_ASYM_CIPHER_free(EVP_ASYM_CIPHER *cipher);
1977 int EVP_ASYM_CIPHER_up_ref(EVP_ASYM_CIPHER *cipher);
1978 OSSL_PROVIDER *EVP_ASYM_CIPHER_get0_provider(const EVP_ASYM_CIPHER *cipher);
1979 EVP_ASYM_CIPHER *EVP_ASYM_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
1980     const char *properties);
1981 int EVP_ASYM_CIPHER_is_a(const EVP_ASYM_CIPHER *cipher, const char *name);
1982 const char *EVP_ASYM_CIPHER_get0_name(const EVP_ASYM_CIPHER *cipher);
1983 const char *EVP_ASYM_CIPHER_get0_description(const EVP_ASYM_CIPHER *cipher);
1984 void EVP_ASYM_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx,
1985     void (*fn)(EVP_ASYM_CIPHER *cipher,
1986         void *arg),
1987     void *arg);
1988 int EVP_ASYM_CIPHER_names_do_all(const EVP_ASYM_CIPHER *cipher,
1989     void (*fn)(const char *name, void *data),
1990     void *data);
1991 const OSSL_PARAM *EVP_ASYM_CIPHER_gettable_ctx_params(const EVP_ASYM_CIPHER *ciph);
1992 const OSSL_PARAM *EVP_ASYM_CIPHER_settable_ctx_params(const EVP_ASYM_CIPHER *ciph);
1993 
1994 void EVP_KEM_free(EVP_KEM *wrap);
1995 int EVP_KEM_up_ref(EVP_KEM *wrap);
1996 OSSL_PROVIDER *EVP_KEM_get0_provider(const EVP_KEM *wrap);
1997 EVP_KEM *EVP_KEM_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
1998     const char *properties);
1999 int EVP_KEM_is_a(const EVP_KEM *wrap, const char *name);
2000 const char *EVP_KEM_get0_name(const EVP_KEM *wrap);
2001 const char *EVP_KEM_get0_description(const EVP_KEM *wrap);
2002 void EVP_KEM_do_all_provided(OSSL_LIB_CTX *libctx,
2003     void (*fn)(EVP_KEM *wrap, void *arg), void *arg);
2004 int EVP_KEM_names_do_all(const EVP_KEM *wrap,
2005     void (*fn)(const char *name, void *data), void *data);
2006 const OSSL_PARAM *EVP_KEM_gettable_ctx_params(const EVP_KEM *kem);
2007 const OSSL_PARAM *EVP_KEM_settable_ctx_params(const EVP_KEM *kem);
2008 
2009 int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
2010 int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2011 int EVP_PKEY_sign_init_ex2(EVP_PKEY_CTX *ctx,
2012     EVP_SIGNATURE *algo, const OSSL_PARAM params[]);
2013 int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
2014     unsigned char *sig, size_t *siglen,
2015     const unsigned char *tbs, size_t tbslen);
2016 int EVP_PKEY_sign_message_init(EVP_PKEY_CTX *ctx,
2017     EVP_SIGNATURE *algo, const OSSL_PARAM params[]);
2018 int EVP_PKEY_sign_message_update(EVP_PKEY_CTX *ctx,
2019     const unsigned char *in, size_t inlen);
2020 int EVP_PKEY_sign_message_final(EVP_PKEY_CTX *ctx,
2021     unsigned char *sig, size_t *siglen);
2022 int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
2023 int EVP_PKEY_verify_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2024 int EVP_PKEY_verify_init_ex2(EVP_PKEY_CTX *ctx,
2025     EVP_SIGNATURE *algo, const OSSL_PARAM params[]);
2026 int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
2027     const unsigned char *sig, size_t siglen,
2028     const unsigned char *tbs, size_t tbslen);
2029 int EVP_PKEY_verify_message_init(EVP_PKEY_CTX *ctx,
2030     EVP_SIGNATURE *algo, const OSSL_PARAM params[]);
2031 int EVP_PKEY_verify_message_update(EVP_PKEY_CTX *ctx,
2032     const unsigned char *in, size_t inlen);
2033 int EVP_PKEY_verify_message_final(EVP_PKEY_CTX *ctx);
2034 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
2035 int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx,
2036     const OSSL_PARAM params[]);
2037 int EVP_PKEY_verify_recover_init_ex2(EVP_PKEY_CTX *ctx,
2038     EVP_SIGNATURE *algo,
2039     const OSSL_PARAM params[]);
2040 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
2041     unsigned char *rout, size_t *routlen,
2042     const unsigned char *sig, size_t siglen);
2043 int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
2044 int EVP_PKEY_encrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2045 int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
2046     unsigned char *out, size_t *outlen,
2047     const unsigned char *in, size_t inlen);
2048 int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
2049 int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2050 int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
2051     unsigned char *out, size_t *outlen,
2052     const unsigned char *in, size_t inlen);
2053 
2054 int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
2055 int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2056 int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer,
2057     int validate_peer);
2058 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
2059 int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
2060 EVP_SKEY *EVP_PKEY_derive_SKEY(EVP_PKEY_CTX *ctx, EVP_SKEYMGMT *mgmt,
2061     const char *key_type, const char *propquery,
2062     size_t keylen, const OSSL_PARAM params[]);
2063 
2064 int EVP_PKEY_encapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2065 int EVP_PKEY_auth_encapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpriv,
2066     const OSSL_PARAM params[]);
2067 int EVP_PKEY_encapsulate(EVP_PKEY_CTX *ctx,
2068     unsigned char *wrappedkey, size_t *wrappedkeylen,
2069     unsigned char *genkey, size_t *genkeylen);
2070 int EVP_PKEY_decapsulate_init(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
2071 int EVP_PKEY_auth_decapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpub,
2072     const OSSL_PARAM params[]);
2073 int EVP_PKEY_decapsulate(EVP_PKEY_CTX *ctx,
2074     unsigned char *unwrapped, size_t *unwrappedlen,
2075     const unsigned char *wrapped, size_t wrappedlen);
2076 typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
2077 
2078 int EVP_PKEY_fromdata_init(EVP_PKEY_CTX *ctx);
2079 int EVP_PKEY_fromdata(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey, int selection,
2080     OSSL_PARAM param[]);
2081 const OSSL_PARAM *EVP_PKEY_fromdata_settable(EVP_PKEY_CTX *ctx, int selection);
2082 
2083 int EVP_PKEY_todata(const EVP_PKEY *pkey, int selection, OSSL_PARAM **params);
2084 int EVP_PKEY_export(const EVP_PKEY *pkey, int selection,
2085     OSSL_CALLBACK *export_cb, void *export_cbarg);
2086 
2087 const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey);
2088 int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[]);
2089 int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name,
2090     int *out);
2091 int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name,
2092     size_t *out);
2093 int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name,
2094     BIGNUM **bn);
2095 int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name,
2096     char *str, size_t max_buf_sz, size_t *out_sz);
2097 int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name,
2098     unsigned char *buf, size_t max_buf_sz,
2099     size_t *out_sz);
2100 
2101 const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey);
2102 int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[]);
2103 int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in);
2104 int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in);
2105 int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name,
2106     const BIGNUM *bn);
2107 int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name,
2108     const char *str);
2109 int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name,
2110     const unsigned char *buf, size_t bsize);
2111 
2112 int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey);
2113 int EVP_PKEY_get_field_type(const EVP_PKEY *pkey);
2114 
2115 EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq,
2116     const char *type, ...);
2117 int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
2118 int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
2119 int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
2120 int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
2121 int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
2122 int EVP_PKEY_check(EVP_PKEY_CTX *ctx);
2123 int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx);
2124 int EVP_PKEY_public_check_quick(EVP_PKEY_CTX *ctx);
2125 int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
2126 int EVP_PKEY_param_check_quick(EVP_PKEY_CTX *ctx);
2127 int EVP_PKEY_private_check(EVP_PKEY_CTX *ctx);
2128 int EVP_PKEY_pairwise_check(EVP_PKEY_CTX *ctx);
2129 
2130 #define EVP_PKEY_get_ex_new_index(l, p, newf, dupf, freef) \
2131     CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EVP_PKEY, l, p, newf, dupf, freef)
2132 int EVP_PKEY_set_ex_data(EVP_PKEY *key, int idx, void *arg);
2133 void *EVP_PKEY_get_ex_data(const EVP_PKEY *key, int idx);
2134 
2135 void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
2136 EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
2137 
2138 int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
2139 #ifndef OPENSSL_NO_DEPRECATED_3_0
2140 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
2141     int (*init)(EVP_PKEY_CTX *ctx));
2142 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, int (*copy)(EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src));
2143 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, void (*cleanup)(EVP_PKEY_CTX *ctx));
2144 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, int (*paramgen_init)(EVP_PKEY_CTX *ctx),
2145     int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
2146 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, int (*keygen_init)(EVP_PKEY_CTX *ctx),
2147     int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
2148 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, int (*sign_init)(EVP_PKEY_CTX *ctx),
2149     int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
2150         const unsigned char *tbs, size_t tbslen));
2151 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, int (*verify_init)(EVP_PKEY_CTX *ctx),
2152     int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,
2153         const unsigned char *tbs, size_t tbslen));
2154 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, int (*verify_recover_init)(EVP_PKEY_CTX *ctx),
2155     int (*verify_recover)(EVP_PKEY_CTX *ctx, unsigned char *sig,
2156         size_t *siglen, const unsigned char *tbs,
2157         size_t tbslen));
2158 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
2159     int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
2160         EVP_MD_CTX *mctx));
2161 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
2162     int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen,
2163         EVP_MD_CTX *mctx));
2164 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, int (*encrypt_init)(EVP_PKEY_CTX *ctx),
2165     int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
2166         const unsigned char *in, size_t inlen));
2167 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, int (*decrypt_init)(EVP_PKEY_CTX *ctx),
2168     int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
2169         const unsigned char *in, size_t inlen));
2170 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, int (*derive_init)(EVP_PKEY_CTX *ctx),
2171     int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen));
2172 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2),
2173     int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type, const char *value));
2174 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth,
2175     int (*digestsign)(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
2176         const unsigned char *tbs, size_t tbslen));
2177 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth,
2178     int (*digestverify)(EVP_MD_CTX *ctx, const unsigned char *sig,
2179         size_t siglen, const unsigned char *tbs,
2180         size_t tbslen));
2181 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, int (*check)(EVP_PKEY *pkey));
2182 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, int (*check)(EVP_PKEY *pkey));
2183 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, int (*check)(EVP_PKEY *pkey));
2184 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, int (*digest_custom)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx));
2185 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, int (**pinit)(EVP_PKEY_CTX *ctx));
2186 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, int (**pcopy)(EVP_PKEY_CTX *dst, const EVP_PKEY_CTX *src));
2187 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, void (**pcleanup)(EVP_PKEY_CTX *ctx));
2188 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, int (**pparamgen_init)(EVP_PKEY_CTX *ctx),
2189     int (**pparamgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
2190 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, int (**pkeygen_init)(EVP_PKEY_CTX *ctx),
2191     int (**pkeygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
2192 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, int (**psign_init)(EVP_PKEY_CTX *ctx),
2193     int (**psign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
2194         const unsigned char *tbs, size_t tbslen));
2195 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, int (**pverify_init)(EVP_PKEY_CTX *ctx),
2196     int (**pverify)(EVP_PKEY_CTX *ctx, const unsigned char *sig,
2197         size_t siglen, const unsigned char *tbs, size_t tbslen));
2198 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth,
2199     int (**pverify_recover_init)(EVP_PKEY_CTX *ctx),
2200     int (**pverify_recover)(EVP_PKEY_CTX *ctx, unsigned char *sig,
2201         size_t *siglen, const unsigned char *tbs,
2202         size_t tbslen));
2203 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth,
2204     int (**psignctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
2205     int (**psignctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
2206         EVP_MD_CTX *mctx));
2207 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth,
2208     int (**pverifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx),
2209     int (**pverifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig,
2210         int siglen, EVP_MD_CTX *mctx));
2211 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, int (**pencrypt_init)(EVP_PKEY_CTX *ctx),
2212     int (**pencryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
2213         const unsigned char *in, size_t inlen));
2214 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, int (**pdecrypt_init)(EVP_PKEY_CTX *ctx),
2215     int (**pdecrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
2216         const unsigned char *in, size_t inlen));
2217 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, int (**pderive_init)(EVP_PKEY_CTX *ctx),
2218     int (**pderive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen));
2219 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth,
2220     int (**pctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2),
2221     int (**pctrl_str)(EVP_PKEY_CTX *ctx, const char *type,
2222         const char *value));
2223 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestsign(const EVP_PKEY_METHOD *pmeth,
2224     int (**digestsign)(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen,
2225         const unsigned char *tbs, size_t tbslen));
2226 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digestverify(const EVP_PKEY_METHOD *pmeth,
2227     int (**digestverify)(EVP_MD_CTX *ctx, const unsigned char *sig,
2228         size_t siglen, const unsigned char *tbs,
2229         size_t tbslen));
2230 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, int (**pcheck)(EVP_PKEY *pkey));
2231 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, int (**pcheck)(EVP_PKEY *pkey));
2232 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, int (**pcheck)(EVP_PKEY *pkey));
2233 OSSL_DEPRECATEDIN_3_0 void EVP_PKEY_meth_get_digest_custom(const EVP_PKEY_METHOD *pmeth,
2234     int (**pdigest_custom)(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx));
2235 #endif
2236 
2237 void EVP_KEYEXCH_free(EVP_KEYEXCH *exchange);
2238 int EVP_KEYEXCH_up_ref(EVP_KEYEXCH *exchange);
2239 EVP_KEYEXCH *EVP_KEYEXCH_fetch(OSSL_LIB_CTX *ctx, const char *algorithm,
2240     const char *properties);
2241 OSSL_PROVIDER *EVP_KEYEXCH_get0_provider(const EVP_KEYEXCH *exchange);
2242 int EVP_KEYEXCH_is_a(const EVP_KEYEXCH *keyexch, const char *name);
2243 const char *EVP_KEYEXCH_get0_name(const EVP_KEYEXCH *keyexch);
2244 const char *EVP_KEYEXCH_get0_description(const EVP_KEYEXCH *keyexch);
2245 void EVP_KEYEXCH_do_all_provided(OSSL_LIB_CTX *libctx,
2246     void (*fn)(EVP_KEYEXCH *keyexch, void *data),
2247     void *data);
2248 int EVP_KEYEXCH_names_do_all(const EVP_KEYEXCH *keyexch,
2249     void (*fn)(const char *name, void *data),
2250     void *data);
2251 const OSSL_PARAM *EVP_KEYEXCH_gettable_ctx_params(const EVP_KEYEXCH *keyexch);
2252 const OSSL_PARAM *EVP_KEYEXCH_settable_ctx_params(const EVP_KEYEXCH *keyexch);
2253 
2254 void EVP_add_alg_module(void);
2255 
2256 int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name);
2257 int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen);
2258 int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *name, size_t name_sz,
2259     size_t *gname_len);
2260 
2261 OSSL_LIB_CTX *EVP_PKEY_CTX_get0_libctx(EVP_PKEY_CTX *ctx);
2262 const char *EVP_PKEY_CTX_get0_propq(const EVP_PKEY_CTX *ctx);
2263 const OSSL_PROVIDER *EVP_PKEY_CTX_get0_provider(const EVP_PKEY_CTX *ctx);
2264 
2265 int EVP_SKEY_is_a(const EVP_SKEY *skey, const char *name);
2266 EVP_SKEY *EVP_SKEY_import(OSSL_LIB_CTX *libctx, const char *skeymgmtname, const char *propquery,
2267     int selection, const OSSL_PARAM *params);
2268 EVP_SKEY *EVP_SKEY_generate(OSSL_LIB_CTX *libctx, const char *skeymgmtname,
2269     const char *propquery, const OSSL_PARAM *params);
2270 EVP_SKEY *EVP_SKEY_import_raw_key(OSSL_LIB_CTX *libctx, const char *skeymgmtname,
2271     unsigned char *key, size_t keylen,
2272     const char *propquery);
2273 EVP_SKEY *EVP_SKEY_import_SKEYMGMT(OSSL_LIB_CTX *libctx, EVP_SKEYMGMT *skeymgmt,
2274     int selection, const OSSL_PARAM *params);
2275 int EVP_SKEY_get0_raw_key(const EVP_SKEY *skey, const unsigned char **key,
2276     size_t *len);
2277 const char *EVP_SKEY_get0_key_id(const EVP_SKEY *skey);
2278 int EVP_SKEY_export(const EVP_SKEY *skey, int selection,
2279     OSSL_CALLBACK *export_cb, void *export_cbarg);
2280 int EVP_SKEY_up_ref(EVP_SKEY *skey);
2281 void EVP_SKEY_free(EVP_SKEY *skey);
2282 const char *EVP_SKEY_get0_skeymgmt_name(const EVP_SKEY *skey);
2283 const char *EVP_SKEY_get0_provider_name(const EVP_SKEY *skey);
2284 EVP_SKEY *EVP_SKEY_to_provider(EVP_SKEY *skey, OSSL_LIB_CTX *libctx,
2285     OSSL_PROVIDER *prov, const char *propquery);
2286 
2287 #ifdef __cplusplus
2288 }
2289 #endif
2290 #endif