Home | History | Annotate | Line # | Download | only in openssl
      1 /*
      2  * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the OpenSSL license (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #ifndef HEADER_ENVELOPE_H
     11 # define HEADER_ENVELOPE_H
     12 
     13 # include <openssl/opensslconf.h>
     14 # include <openssl/ossl_typ.h>
     15 # include <openssl/symhacks.h>
     16 # include <openssl/bio.h>
     17 # include <openssl/evperr.h>
     18 
     19 # define EVP_MAX_MD_SIZE                 64/* longest known is SHA512 */
     20 # define EVP_MAX_KEY_LENGTH              64
     21 # define EVP_MAX_IV_LENGTH               16
     22 # define EVP_MAX_BLOCK_LENGTH            32
     23 
     24 # define PKCS5_SALT_LEN                  8
     25 /* Default PKCS#5 iteration count */
     26 # define PKCS5_DEFAULT_ITER              2048
     27 
     28 # include <openssl/objects.h>
     29 
     30 # define EVP_PK_RSA      0x0001
     31 # define EVP_PK_DSA      0x0002
     32 # define EVP_PK_DH       0x0004
     33 # define EVP_PK_EC       0x0008
     34 # define EVP_PKT_SIGN    0x0010
     35 # define EVP_PKT_ENC     0x0020
     36 # define EVP_PKT_EXCH    0x0040
     37 # define EVP_PKS_RSA     0x0100
     38 # define EVP_PKS_DSA     0x0200
     39 # define EVP_PKS_EC      0x0400
     40 
     41 # define EVP_PKEY_NONE   NID_undef
     42 # define EVP_PKEY_RSA    NID_rsaEncryption
     43 # define EVP_PKEY_RSA2   NID_rsa
     44 # define EVP_PKEY_RSA_PSS NID_rsassaPss
     45 # define EVP_PKEY_DSA    NID_dsa
     46 # define EVP_PKEY_DSA1   NID_dsa_2
     47 # define EVP_PKEY_DSA2   NID_dsaWithSHA
     48 # define EVP_PKEY_DSA3   NID_dsaWithSHA1
     49 # define EVP_PKEY_DSA4   NID_dsaWithSHA1_2
     50 # define EVP_PKEY_DH     NID_dhKeyAgreement
     51 # define EVP_PKEY_DHX    NID_dhpublicnumber
     52 # define EVP_PKEY_EC     NID_X9_62_id_ecPublicKey
     53 # define EVP_PKEY_SM2    NID_sm2
     54 # define EVP_PKEY_HMAC   NID_hmac
     55 # define EVP_PKEY_CMAC   NID_cmac
     56 # define EVP_PKEY_SCRYPT NID_id_scrypt
     57 # define EVP_PKEY_TLS1_PRF NID_tls1_prf
     58 # define EVP_PKEY_HKDF   NID_hkdf
     59 # define EVP_PKEY_POLY1305 NID_poly1305
     60 # define EVP_PKEY_SIPHASH NID_siphash
     61 # define EVP_PKEY_X25519 NID_X25519
     62 # define EVP_PKEY_ED25519 NID_ED25519
     63 # define EVP_PKEY_X448 NID_X448
     64 # define EVP_PKEY_ED448 NID_ED448
     65 
     66 #ifdef  __cplusplus
     67 extern "C" {
     68 #endif
     69 
     70 # define EVP_PKEY_MO_SIGN        0x0001
     71 # define EVP_PKEY_MO_VERIFY      0x0002
     72 # define EVP_PKEY_MO_ENCRYPT     0x0004
     73 # define EVP_PKEY_MO_DECRYPT     0x0008
     74 
     75 # ifndef EVP_MD
     76 EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type);
     77 EVP_MD *EVP_MD_meth_dup(const EVP_MD *md);
     78 void EVP_MD_meth_free(EVP_MD *md);
     79 
     80 int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize);
     81 int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize);
     82 int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize);
     83 int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags);
     84 int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx));
     85 int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx,
     86                                                      const void *data,
     87                                                      size_t count));
     88 int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx,
     89                                                    unsigned char *md));
     90 int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to,
     91                                                  const EVP_MD_CTX *from));
     92 int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx));
     93 int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd,
     94                                                  int p1, void *p2));
     95 
     96 int EVP_MD_meth_get_input_blocksize(const EVP_MD *md);
     97 int EVP_MD_meth_get_result_size(const EVP_MD *md);
     98 int EVP_MD_meth_get_app_datasize(const EVP_MD *md);
     99 unsigned long EVP_MD_meth_get_flags(const EVP_MD *md);
    100 int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx);
    101 int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx,
    102                                                 const void *data,
    103                                                 size_t count);
    104 int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx,
    105                                                unsigned char *md);
    106 int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to,
    107                                               const EVP_MD_CTX *from);
    108 int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx);
    109 int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd,
    110                                               int p1, void *p2);
    111 
    112 /* digest can only handle a single block */
    113 #  define EVP_MD_FLAG_ONESHOT     0x0001
    114 
    115 /* digest is extensible-output function, XOF */
    116 #  define EVP_MD_FLAG_XOF         0x0002
    117 
    118 /* DigestAlgorithmIdentifier flags... */
    119 
    120 #  define EVP_MD_FLAG_DIGALGID_MASK               0x0018
    121 
    122 /* NULL or absent parameter accepted. Use NULL */
    123 
    124 #  define EVP_MD_FLAG_DIGALGID_NULL               0x0000
    125 
    126 /* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */
    127 
    128 #  define EVP_MD_FLAG_DIGALGID_ABSENT             0x0008
    129 
    130 /* Custom handling via ctrl */
    131 
    132 #  define EVP_MD_FLAG_DIGALGID_CUSTOM             0x0018
    133 
    134 /* Note if suitable for use in FIPS mode */
    135 #  define EVP_MD_FLAG_FIPS        0x0400
    136 
    137 /* Digest ctrls */
    138 
    139 #  define EVP_MD_CTRL_DIGALGID                    0x1
    140 #  define EVP_MD_CTRL_MICALG                      0x2
    141 #  define EVP_MD_CTRL_XOF_LEN                     0x3
    142 
    143 /* Minimum Algorithm specific ctrl value */
    144 
    145 #  define EVP_MD_CTRL_ALG_CTRL                    0x1000
    146 
    147 # endif                         /* !EVP_MD */
    148 
    149 /* values for EVP_MD_CTX flags */
    150 
    151 # define EVP_MD_CTX_FLAG_ONESHOT         0x0001/* digest update will be
    152                                                 * called once only */
    153 # define EVP_MD_CTX_FLAG_CLEANED         0x0002/* context has already been
    154                                                 * cleaned */
    155 # define EVP_MD_CTX_FLAG_REUSE           0x0004/* Don't free up ctx->md_data
    156                                                 * in EVP_MD_CTX_reset */
    157 /*
    158  * FIPS and pad options are ignored in 1.0.0, definitions are here so we
    159  * don't accidentally reuse the values for other purposes.
    160  */
    161 
    162 # define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW  0x0008/* Allow use of non FIPS
    163                                                 * digest in FIPS mode */
    164 
    165 /*
    166  * The following PAD options are also currently ignored in 1.0.0, digest
    167  * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*()
    168  * instead.
    169  */
    170 # define EVP_MD_CTX_FLAG_PAD_MASK        0xF0/* RSA mode to use */
    171 # define EVP_MD_CTX_FLAG_PAD_PKCS1       0x00/* PKCS#1 v1.5 mode */
    172 # define EVP_MD_CTX_FLAG_PAD_X931        0x10/* X9.31 mode */
    173 # define EVP_MD_CTX_FLAG_PAD_PSS         0x20/* PSS mode */
    174 
    175 # define EVP_MD_CTX_FLAG_NO_INIT         0x0100/* Don't initialize md_data */
    176 /*
    177  * Some functions such as EVP_DigestSign only finalise copies of internal
    178  * contexts so additional data can be included after the finalisation call.
    179  * This is inefficient if this functionality is not required: it is disabled
    180  * if the following flag is set.
    181  */
    182 # define EVP_MD_CTX_FLAG_FINALISE        0x0200
    183 /* NOTE: 0x0400 is reserved for internal usage */
    184 
    185 EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len);
    186 EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher);
    187 void EVP_CIPHER_meth_free(EVP_CIPHER *cipher);
    188 
    189 int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len);
    190 int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags);
    191 int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size);
    192 int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher,
    193                              int (*init) (EVP_CIPHER_CTX *ctx,
    194                                           const unsigned char *key,
    195                                           const unsigned char *iv,
    196                                           int enc));
    197 int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher,
    198                                   int (*do_cipher) (EVP_CIPHER_CTX *ctx,
    199                                                     unsigned char *out,
    200                                                     const unsigned char *in,
    201                                                     size_t inl));
    202 int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher,
    203                                 int (*cleanup) (EVP_CIPHER_CTX *));
    204 int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher,
    205                                         int (*set_asn1_parameters) (EVP_CIPHER_CTX *,
    206                                                                     ASN1_TYPE *));
    207 int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher,
    208                                         int (*get_asn1_parameters) (EVP_CIPHER_CTX *,
    209                                                                     ASN1_TYPE *));
    210 int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher,
    211                              int (*ctrl) (EVP_CIPHER_CTX *, int type,
    212                                           int arg, void *ptr));
    213 
    214 int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
    215                                                           const unsigned char *key,
    216                                                           const unsigned char *iv,
    217                                                           int enc);
    218 int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx,
    219                                                                unsigned char *out,
    220                                                                const unsigned char *in,
    221                                                                size_t inl);
    222 int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *);
    223 int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
    224                                                                      ASN1_TYPE *);
    225 int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
    226                                                                ASN1_TYPE *);
    227 int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *,
    228                                                           int type, int arg,
    229                                                           void *ptr);
    230 
    231 /* Values for cipher flags */
    232 
    233 /* Modes for ciphers */
    234 
    235 # define         EVP_CIPH_STREAM_CIPHER          0x0
    236 # define         EVP_CIPH_ECB_MODE               0x1
    237 # define         EVP_CIPH_CBC_MODE               0x2
    238 # define         EVP_CIPH_CFB_MODE               0x3
    239 # define         EVP_CIPH_OFB_MODE               0x4
    240 # define         EVP_CIPH_CTR_MODE               0x5
    241 # define         EVP_CIPH_GCM_MODE               0x6
    242 # define         EVP_CIPH_CCM_MODE               0x7
    243 # define         EVP_CIPH_XTS_MODE               0x10001
    244 # define         EVP_CIPH_WRAP_MODE              0x10002
    245 # define         EVP_CIPH_OCB_MODE               0x10003
    246 # define         EVP_CIPH_MODE                   0xF0007
    247 /* Set if variable length cipher */
    248 # define         EVP_CIPH_VARIABLE_LENGTH        0x8
    249 /* Set if the iv handling should be done by the cipher itself */
    250 # define         EVP_CIPH_CUSTOM_IV              0x10
    251 /* Set if the cipher's init() function should be called if key is NULL */
    252 # define         EVP_CIPH_ALWAYS_CALL_INIT       0x20
    253 /* Call ctrl() to init cipher parameters */
    254 # define         EVP_CIPH_CTRL_INIT              0x40
    255 /* Don't use standard key length function */
    256 # define         EVP_CIPH_CUSTOM_KEY_LENGTH      0x80
    257 /* Don't use standard block padding */
    258 # define         EVP_CIPH_NO_PADDING             0x100
    259 /* cipher handles random key generation */
    260 # define         EVP_CIPH_RAND_KEY               0x200
    261 /* cipher has its own additional copying logic */
    262 # define         EVP_CIPH_CUSTOM_COPY            0x400
    263 /* Don't use standard iv length function */
    264 # define         EVP_CIPH_CUSTOM_IV_LENGTH       0x800
    265 /* Allow use default ASN1 get/set iv */
    266 # define         EVP_CIPH_FLAG_DEFAULT_ASN1      0x1000
    267 /* Buffer length in bits not bytes: CFB1 mode only */
    268 # define         EVP_CIPH_FLAG_LENGTH_BITS       0x2000
    269 /* Note if suitable for use in FIPS mode */
    270 # define         EVP_CIPH_FLAG_FIPS              0x4000
    271 /* Allow non FIPS cipher in FIPS mode */
    272 # define         EVP_CIPH_FLAG_NON_FIPS_ALLOW    0x8000
    273 /*
    274  * Cipher handles any and all padding logic as well as finalisation.
    275  */
    276 # define         EVP_CIPH_FLAG_CUSTOM_CIPHER     0x100000
    277 # define         EVP_CIPH_FLAG_AEAD_CIPHER       0x200000
    278 # define         EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000
    279 /* Cipher can handle pipeline operations */
    280 # define         EVP_CIPH_FLAG_PIPELINE          0X800000
    281 
    282 /*
    283  * Cipher context flag to indicate we can handle wrap mode: if allowed in
    284  * older applications it could overflow buffers.
    285  */
    286 
    287 # define         EVP_CIPHER_CTX_FLAG_WRAP_ALLOW  0x1
    288 
    289 /* ctrl() values */
    290 
    291 # define         EVP_CTRL_INIT                   0x0
    292 # define         EVP_CTRL_SET_KEY_LENGTH         0x1
    293 # define         EVP_CTRL_GET_RC2_KEY_BITS       0x2
    294 # define         EVP_CTRL_SET_RC2_KEY_BITS       0x3
    295 # define         EVP_CTRL_GET_RC5_ROUNDS         0x4
    296 # define         EVP_CTRL_SET_RC5_ROUNDS         0x5
    297 # define         EVP_CTRL_RAND_KEY               0x6
    298 # define         EVP_CTRL_PBE_PRF_NID            0x7
    299 # define         EVP_CTRL_COPY                   0x8
    300 # define         EVP_CTRL_AEAD_SET_IVLEN         0x9
    301 # define         EVP_CTRL_AEAD_GET_TAG           0x10
    302 # define         EVP_CTRL_AEAD_SET_TAG           0x11
    303 # define         EVP_CTRL_AEAD_SET_IV_FIXED      0x12
    304 # define         EVP_CTRL_GCM_SET_IVLEN          EVP_CTRL_AEAD_SET_IVLEN
    305 # define         EVP_CTRL_GCM_GET_TAG            EVP_CTRL_AEAD_GET_TAG
    306 # define         EVP_CTRL_GCM_SET_TAG            EVP_CTRL_AEAD_SET_TAG
    307 # define         EVP_CTRL_GCM_SET_IV_FIXED       EVP_CTRL_AEAD_SET_IV_FIXED
    308 # define         EVP_CTRL_GCM_IV_GEN             0x13
    309 # define         EVP_CTRL_CCM_SET_IVLEN          EVP_CTRL_AEAD_SET_IVLEN
    310 # define         EVP_CTRL_CCM_GET_TAG            EVP_CTRL_AEAD_GET_TAG
    311 # define         EVP_CTRL_CCM_SET_TAG            EVP_CTRL_AEAD_SET_TAG
    312 # define         EVP_CTRL_CCM_SET_IV_FIXED       EVP_CTRL_AEAD_SET_IV_FIXED
    313 # define         EVP_CTRL_CCM_SET_L              0x14
    314 # define         EVP_CTRL_CCM_SET_MSGLEN         0x15
    315 /*
    316  * AEAD cipher deduces payload length and returns number of bytes required to
    317  * store MAC and eventual padding. Subsequent call to EVP_Cipher even
    318  * appends/verifies MAC.
    319  */
    320 # define         EVP_CTRL_AEAD_TLS1_AAD          0x16
    321 /* Used by composite AEAD ciphers, no-op in GCM, CCM... */
    322 # define         EVP_CTRL_AEAD_SET_MAC_KEY       0x17
    323 /* Set the GCM invocation field, decrypt only */
    324 # define         EVP_CTRL_GCM_SET_IV_INV         0x18
    325 
    326 # define         EVP_CTRL_TLS1_1_MULTIBLOCK_AAD  0x19
    327 # define         EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT      0x1a
    328 # define         EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT      0x1b
    329 # define         EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE  0x1c
    330 
    331 # define         EVP_CTRL_SSL3_MASTER_SECRET             0x1d
    332 
    333 /* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */
    334 # define         EVP_CTRL_SET_SBOX                       0x1e
    335 /*
    336  * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a
    337  * pre-allocated buffer with specified size
    338  */
    339 # define         EVP_CTRL_SBOX_USED                      0x1f
    340 /* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after,
    341  * 0 switches meshing off
    342  */
    343 # define         EVP_CTRL_KEY_MESH                       0x20
    344 /* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */
    345 # define         EVP_CTRL_BLOCK_PADDING_MODE             0x21
    346 
    347 /* Set the output buffers to use for a pipelined operation */
    348 # define         EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS       0x22
    349 /* Set the input buffers to use for a pipelined operation */
    350 # define         EVP_CTRL_SET_PIPELINE_INPUT_BUFS        0x23
    351 /* Set the input buffer lengths to use for a pipelined operation */
    352 # define         EVP_CTRL_SET_PIPELINE_INPUT_LENS        0x24
    353 
    354 # define         EVP_CTRL_GET_IVLEN                      0x25
    355 
    356 /* Padding modes */
    357 #define EVP_PADDING_PKCS7       1
    358 #define EVP_PADDING_ISO7816_4   2
    359 #define EVP_PADDING_ANSI923     3
    360 #define EVP_PADDING_ISO10126    4
    361 #define EVP_PADDING_ZERO        5
    362 
    363 /* RFC 5246 defines additional data to be 13 bytes in length */
    364 # define         EVP_AEAD_TLS1_AAD_LEN           13
    365 
    366 typedef struct {
    367     unsigned char *out;
    368     const unsigned char *inp;
    369     size_t len;
    370     unsigned int interleave;
    371 } EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM;
    372 
    373 /* GCM TLS constants */
    374 /* Length of fixed part of IV derived from PRF */
    375 # define EVP_GCM_TLS_FIXED_IV_LEN                        4
    376 /* Length of explicit part of IV part of TLS records */
    377 # define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8
    378 /* Length of tag for TLS */
    379 # define EVP_GCM_TLS_TAG_LEN                             16
    380 
    381 /* CCM TLS constants */
    382 /* Length of fixed part of IV derived from PRF */
    383 # define EVP_CCM_TLS_FIXED_IV_LEN                        4
    384 /* Length of explicit part of IV part of TLS records */
    385 # define EVP_CCM_TLS_EXPLICIT_IV_LEN                     8
    386 /* Total length of CCM IV length for TLS */
    387 # define EVP_CCM_TLS_IV_LEN                              12
    388 /* Length of tag for TLS */
    389 # define EVP_CCM_TLS_TAG_LEN                             16
    390 /* Length of CCM8 tag for TLS */
    391 # define EVP_CCM8_TLS_TAG_LEN                            8
    392 
    393 /* Length of tag for TLS */
    394 # define EVP_CHACHAPOLY_TLS_TAG_LEN                      16
    395 
    396 typedef struct evp_cipher_info_st {
    397     const EVP_CIPHER *cipher;
    398     unsigned char iv[EVP_MAX_IV_LENGTH];
    399 } EVP_CIPHER_INFO;
    400 
    401 
    402 /* Password based encryption function */
    403 typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass,
    404                               int passlen, ASN1_TYPE *param,
    405                               const EVP_CIPHER *cipher, const EVP_MD *md,
    406                               int en_de);
    407 
    408 # ifndef OPENSSL_NO_RSA
    409 #  define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
    410                                         (char *)(rsa))
    411 # endif
    412 
    413 # ifndef OPENSSL_NO_DSA
    414 #  define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
    415                                         (char *)(dsa))
    416 # endif
    417 
    418 # ifndef OPENSSL_NO_DH
    419 #  define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\
    420                                         (char *)(dh))
    421 # endif
    422 
    423 # ifndef OPENSSL_NO_EC
    424 #  define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\
    425                                         (char *)(eckey))
    426 # endif
    427 # ifndef OPENSSL_NO_SIPHASH
    428 #  define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\
    429                                         (char *)(shkey))
    430 # endif
    431 
    432 # ifndef OPENSSL_NO_POLY1305
    433 #  define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\
    434                                         (char *)(polykey))
    435 # endif
    436 
    437 /* Add some extra combinations */
    438 # define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))
    439 # define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))
    440 # define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))
    441 # define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))
    442 
    443 int EVP_MD_type(const EVP_MD *md);
    444 # define EVP_MD_nid(e)                   EVP_MD_type(e)
    445 # define EVP_MD_name(e)                  OBJ_nid2sn(EVP_MD_nid(e))
    446 int EVP_MD_pkey_type(const EVP_MD *md);
    447 int EVP_MD_size(const EVP_MD *md);
    448 int EVP_MD_block_size(const EVP_MD *md);
    449 unsigned long EVP_MD_flags(const EVP_MD *md);
    450 
    451 const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);
    452 int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx,
    453                                              const void *data, size_t count);
    454 void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx,
    455                               int (*update) (EVP_MD_CTX *ctx,
    456                                              const void *data, size_t count));
    457 # define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))
    458 # define EVP_MD_CTX_block_size(e)        EVP_MD_block_size(EVP_MD_CTX_md(e))
    459 # define EVP_MD_CTX_type(e)              EVP_MD_type(EVP_MD_CTX_md(e))
    460 EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx);
    461 void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx);
    462 void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx);
    463 
    464 int EVP_CIPHER_nid(const EVP_CIPHER *cipher);
    465 # define EVP_CIPHER_name(e)              OBJ_nid2sn(EVP_CIPHER_nid(e))
    466 int EVP_CIPHER_block_size(const EVP_CIPHER *cipher);
    467 int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher);
    468 int EVP_CIPHER_key_length(const EVP_CIPHER *cipher);
    469 int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher);
    470 unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher);
    471 # define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)
    472 
    473 const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);
    474 int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx);
    475 int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);
    476 int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);
    477 int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);
    478 int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);
    479 const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
    480 const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx);
    481 unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);
    482 unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx);
    483 int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx);
    484 void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num);
    485 int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);
    486 void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);
    487 void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);
    488 void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx);
    489 void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data);
    490 # define EVP_CIPHER_CTX_type(c)         EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))
    491 # if OPENSSL_API_COMPAT < 0x10100000L
    492 #  define EVP_CIPHER_CTX_flags(c)       EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c))
    493 # endif
    494 # define EVP_CIPHER_CTX_mode(c)         EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c))
    495 
    496 # define EVP_ENCODE_LENGTH(l)    ((((l)+2)/3*4)+((l)/48+1)*2+80)
    497 # define EVP_DECODE_LENGTH(l)    (((l)+3)/4*3+80)
    498 
    499 # define EVP_SignInit_ex(a,b,c)          EVP_DigestInit_ex(a,b,c)
    500 # define EVP_SignInit(a,b)               EVP_DigestInit(a,b)
    501 # define EVP_SignUpdate(a,b,c)           EVP_DigestUpdate(a,b,c)
    502 # define EVP_VerifyInit_ex(a,b,c)        EVP_DigestInit_ex(a,b,c)
    503 # define EVP_VerifyInit(a,b)             EVP_DigestInit(a,b)
    504 # define EVP_VerifyUpdate(a,b,c)         EVP_DigestUpdate(a,b,c)
    505 # define EVP_OpenUpdate(a,b,c,d,e)       EVP_DecryptUpdate(a,b,c,d,e)
    506 # define EVP_SealUpdate(a,b,c,d,e)       EVP_EncryptUpdate(a,b,c,d,e)
    507 # define EVP_DigestSignUpdate(a,b,c)     EVP_DigestUpdate(a,b,c)
    508 # define EVP_DigestVerifyUpdate(a,b,c)   EVP_DigestUpdate(a,b,c)
    509 
    510 # ifdef CONST_STRICT
    511 void BIO_set_md(BIO *, const EVP_MD *md);
    512 # else
    513 #  define BIO_set_md(b,md)          BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md))
    514 # endif
    515 # define BIO_get_md(b,mdp)          BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp))
    516 # define BIO_get_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \
    517                                              (char *)(mdcp))
    518 # define BIO_set_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \
    519                                              (char *)(mdcp))
    520 # define BIO_get_cipher_status(b)   BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)
    521 # define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \
    522                                              (char *)(c_pp))
    523 
    524 /*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c,
    525                           unsigned char *out,
    526                           const unsigned char *in, unsigned int inl);
    527 
    528 # define EVP_add_cipher_alias(n,alias) \
    529         OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))
    530 # define EVP_add_digest_alias(n,alias) \
    531         OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))
    532 # define EVP_delete_cipher_alias(alias) \
    533         OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS);
    534 # define EVP_delete_digest_alias(alias) \
    535         OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS);
    536 
    537 int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2);
    538 EVP_MD_CTX *EVP_MD_CTX_new(void);
    539 int EVP_MD_CTX_reset(EVP_MD_CTX *ctx);
    540 void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
    541 # define EVP_MD_CTX_create()     EVP_MD_CTX_new()
    542 # define EVP_MD_CTX_init(ctx)    EVP_MD_CTX_reset((ctx))
    543 # define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx))
    544 __owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);
    545 void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);
    546 void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);
    547 int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);
    548 __owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type,
    549                                  ENGINE *impl);
    550 __owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d,
    551                                 size_t cnt);
    552 __owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md,
    553                                   unsigned int *s);
    554 __owur int EVP_Digest(const void *data, size_t count,
    555                           unsigned char *md, unsigned int *size,
    556                           const EVP_MD *type, ENGINE *impl);
    557 
    558 __owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);
    559 __owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
    560 __owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md,
    561                            unsigned int *s);
    562 __owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md,
    563                               size_t len);
    564 
    565 int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify);
    566 int EVP_read_pw_string_min(char *buf, int minlen, int maxlen,
    567                            const char *prompt, int verify);
    568 void EVP_set_pw_prompt(const char *prompt);
    569 char *EVP_get_pw_prompt(void);
    570 
    571 __owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,
    572                           const unsigned char *salt,
    573                           const unsigned char *data, int datal, int count,
    574                           unsigned char *key, unsigned char *iv);
    575 
    576 void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);
    577 void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);
    578 int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);
    579 
    580 __owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
    581                            const unsigned char *key, const unsigned char *iv);
    582 /*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx,
    583                                   const EVP_CIPHER *cipher, ENGINE *impl,
    584                                   const unsigned char *key,
    585                                   const unsigned char *iv);
    586 /*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
    587                                  int *outl, const unsigned char *in, int inl);
    588 /*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
    589                                    int *outl);
    590 /*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
    591                                 int *outl);
    592 
    593 __owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
    594                            const unsigned char *key, const unsigned char *iv);
    595 /*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx,
    596                                   const EVP_CIPHER *cipher, ENGINE *impl,
    597                                   const unsigned char *key,
    598                                   const unsigned char *iv);
    599 /*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
    600                                  int *outl, const unsigned char *in, int inl);
    601 __owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
    602                             int *outl);
    603 /*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
    604                                    int *outl);
    605 
    606 __owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
    607                           const unsigned char *key, const unsigned char *iv,
    608                           int enc);
    609 /*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx,
    610                                  const EVP_CIPHER *cipher, ENGINE *impl,
    611                                  const unsigned char *key,
    612                                  const unsigned char *iv, int enc);
    613 __owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
    614                             int *outl, const unsigned char *in, int inl);
    615 __owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm,
    616                            int *outl);
    617 __owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm,
    618                               int *outl);
    619 
    620 __owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
    621                          EVP_PKEY *pkey);
    622 
    623 __owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret,
    624                           size_t *siglen, const unsigned char *tbs,
    625                           size_t tbslen);
    626 
    627 __owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
    628                            unsigned int siglen, EVP_PKEY *pkey);
    629 
    630 __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret,
    631                             size_t siglen, const unsigned char *tbs,
    632                             size_t tbslen);
    633 
    634 /*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
    635                                   const EVP_MD *type, ENGINE *e,
    636                                   EVP_PKEY *pkey);
    637 __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
    638                                size_t *siglen);
    639 
    640 __owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
    641                                 const EVP_MD *type, ENGINE *e,
    642                                 EVP_PKEY *pkey);
    643 __owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
    644                                  size_t siglen);
    645 
    646 # ifndef OPENSSL_NO_RSA
    647 __owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
    648                         const unsigned char *ek, int ekl,
    649                         const unsigned char *iv, EVP_PKEY *priv);
    650 __owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
    651 
    652 __owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
    653                         unsigned char **ek, int *ekl, unsigned char *iv,
    654                         EVP_PKEY **pubk, int npubk);
    655 __owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
    656 # endif
    657 
    658 EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
    659 void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
    660 int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx);
    661 int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
    662 void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
    663 int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
    664                      const unsigned char *in, int inl);
    665 void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
    666 int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
    667 
    668 void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
    669 int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
    670                      const unsigned char *in, int inl);
    671 int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
    672                     char *out, int *outl);
    673 int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
    674 
    675 # if OPENSSL_API_COMPAT < 0x10100000L
    676 #  define EVP_CIPHER_CTX_init(c)      EVP_CIPHER_CTX_reset(c)
    677 #  define EVP_CIPHER_CTX_cleanup(c)   EVP_CIPHER_CTX_reset(c)
    678 # endif
    679 EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);
    680 int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c);
    681 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c);
    682 int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);
    683 int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);
    684 int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);
    685 int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);
    686 
    687 const BIO_METHOD *BIO_f_md(void);
    688 const BIO_METHOD *BIO_f_base64(void);
    689 const BIO_METHOD *BIO_f_cipher(void);
    690 const BIO_METHOD *BIO_f_reliable(void);
    691 __owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
    692                           const unsigned char *i, int enc);
    693 
    694 const EVP_MD *EVP_md_null(void);
    695 # ifndef OPENSSL_NO_MD2
    696 const EVP_MD *EVP_md2(void);
    697 # endif
    698 # ifndef OPENSSL_NO_MD4
    699 const EVP_MD *EVP_md4(void);
    700 # endif
    701 # ifndef OPENSSL_NO_MD5
    702 const EVP_MD *EVP_md5(void);
    703 const EVP_MD *EVP_md5_sha1(void);
    704 # endif
    705 # ifndef OPENSSL_NO_BLAKE2
    706 const EVP_MD *EVP_blake2b512(void);
    707 const EVP_MD *EVP_blake2s256(void);
    708 # endif
    709 const EVP_MD *EVP_sha1(void);
    710 const EVP_MD *EVP_sha224(void);
    711 const EVP_MD *EVP_sha256(void);
    712 const EVP_MD *EVP_sha384(void);
    713 const EVP_MD *EVP_sha512(void);
    714 const EVP_MD *EVP_sha512_224(void);
    715 const EVP_MD *EVP_sha512_256(void);
    716 const EVP_MD *EVP_sha3_224(void);
    717 const EVP_MD *EVP_sha3_256(void);
    718 const EVP_MD *EVP_sha3_384(void);
    719 const EVP_MD *EVP_sha3_512(void);
    720 const EVP_MD *EVP_shake128(void);
    721 const EVP_MD *EVP_shake256(void);
    722 # ifndef OPENSSL_NO_MDC2
    723 const EVP_MD *EVP_mdc2(void);
    724 # endif
    725 # ifndef OPENSSL_NO_RMD160
    726 const EVP_MD *EVP_ripemd160(void);
    727 # endif
    728 # ifndef OPENSSL_NO_WHIRLPOOL
    729 const EVP_MD *EVP_whirlpool(void);
    730 # endif
    731 # ifndef OPENSSL_NO_SM3
    732 const EVP_MD *EVP_sm3(void);
    733 # endif
    734 const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */
    735 # ifndef OPENSSL_NO_DES
    736 const EVP_CIPHER *EVP_des_ecb(void);
    737 const EVP_CIPHER *EVP_des_ede(void);
    738 const EVP_CIPHER *EVP_des_ede3(void);
    739 const EVP_CIPHER *EVP_des_ede_ecb(void);
    740 const EVP_CIPHER *EVP_des_ede3_ecb(void);
    741 const EVP_CIPHER *EVP_des_cfb64(void);
    742 #  define EVP_des_cfb EVP_des_cfb64
    743 const EVP_CIPHER *EVP_des_cfb1(void);
    744 const EVP_CIPHER *EVP_des_cfb8(void);
    745 const EVP_CIPHER *EVP_des_ede_cfb64(void);
    746 #  define EVP_des_ede_cfb EVP_des_ede_cfb64
    747 const EVP_CIPHER *EVP_des_ede3_cfb64(void);
    748 #  define EVP_des_ede3_cfb EVP_des_ede3_cfb64
    749 const EVP_CIPHER *EVP_des_ede3_cfb1(void);
    750 const EVP_CIPHER *EVP_des_ede3_cfb8(void);
    751 const EVP_CIPHER *EVP_des_ofb(void);
    752 const EVP_CIPHER *EVP_des_ede_ofb(void);
    753 const EVP_CIPHER *EVP_des_ede3_ofb(void);
    754 const EVP_CIPHER *EVP_des_cbc(void);
    755 const EVP_CIPHER *EVP_des_ede_cbc(void);
    756 const EVP_CIPHER *EVP_des_ede3_cbc(void);
    757 const EVP_CIPHER *EVP_desx_cbc(void);
    758 const EVP_CIPHER *EVP_des_ede3_wrap(void);
    759 /*
    760  * This should now be supported through the dev_crypto ENGINE. But also, why
    761  * are rc4 and md5 declarations made here inside a "NO_DES" precompiler
    762  * branch?
    763  */
    764 # endif
    765 # ifndef OPENSSL_NO_RC4
    766 const EVP_CIPHER *EVP_rc4(void);
    767 const EVP_CIPHER *EVP_rc4_40(void);
    768 #  ifndef OPENSSL_NO_MD5
    769 const EVP_CIPHER *EVP_rc4_hmac_md5(void);
    770 #  endif
    771 # endif
    772 # ifndef OPENSSL_NO_IDEA
    773 const EVP_CIPHER *EVP_idea_ecb(void);
    774 const EVP_CIPHER *EVP_idea_cfb64(void);
    775 #  define EVP_idea_cfb EVP_idea_cfb64
    776 const EVP_CIPHER *EVP_idea_ofb(void);
    777 const EVP_CIPHER *EVP_idea_cbc(void);
    778 # endif
    779 # ifndef OPENSSL_NO_RC2
    780 const EVP_CIPHER *EVP_rc2_ecb(void);
    781 const EVP_CIPHER *EVP_rc2_cbc(void);
    782 const EVP_CIPHER *EVP_rc2_40_cbc(void);
    783 const EVP_CIPHER *EVP_rc2_64_cbc(void);
    784 const EVP_CIPHER *EVP_rc2_cfb64(void);
    785 #  define EVP_rc2_cfb EVP_rc2_cfb64
    786 const EVP_CIPHER *EVP_rc2_ofb(void);
    787 # endif
    788 # ifndef OPENSSL_NO_BF
    789 const EVP_CIPHER *EVP_bf_ecb(void);
    790 const EVP_CIPHER *EVP_bf_cbc(void);
    791 const EVP_CIPHER *EVP_bf_cfb64(void);
    792 #  define EVP_bf_cfb EVP_bf_cfb64
    793 const EVP_CIPHER *EVP_bf_ofb(void);
    794 # endif
    795 # ifndef OPENSSL_NO_CAST
    796 const EVP_CIPHER *EVP_cast5_ecb(void);
    797 const EVP_CIPHER *EVP_cast5_cbc(void);
    798 const EVP_CIPHER *EVP_cast5_cfb64(void);
    799 #  define EVP_cast5_cfb EVP_cast5_cfb64
    800 const EVP_CIPHER *EVP_cast5_ofb(void);
    801 # endif
    802 # ifndef OPENSSL_NO_RC5
    803 const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
    804 const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
    805 const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
    806 #  define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
    807 const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
    808 # endif
    809 const EVP_CIPHER *EVP_aes_128_ecb(void);
    810 const EVP_CIPHER *EVP_aes_128_cbc(void);
    811 const EVP_CIPHER *EVP_aes_128_cfb1(void);
    812 const EVP_CIPHER *EVP_aes_128_cfb8(void);
    813 const EVP_CIPHER *EVP_aes_128_cfb128(void);
    814 # define EVP_aes_128_cfb EVP_aes_128_cfb128
    815 const EVP_CIPHER *EVP_aes_128_ofb(void);
    816 const EVP_CIPHER *EVP_aes_128_ctr(void);
    817 const EVP_CIPHER *EVP_aes_128_ccm(void);
    818 const EVP_CIPHER *EVP_aes_128_gcm(void);
    819 const EVP_CIPHER *EVP_aes_128_xts(void);
    820 const EVP_CIPHER *EVP_aes_128_wrap(void);
    821 const EVP_CIPHER *EVP_aes_128_wrap_pad(void);
    822 # ifndef OPENSSL_NO_OCB
    823 const EVP_CIPHER *EVP_aes_128_ocb(void);
    824 # endif
    825 const EVP_CIPHER *EVP_aes_192_ecb(void);
    826 const EVP_CIPHER *EVP_aes_192_cbc(void);
    827 const EVP_CIPHER *EVP_aes_192_cfb1(void);
    828 const EVP_CIPHER *EVP_aes_192_cfb8(void);
    829 const EVP_CIPHER *EVP_aes_192_cfb128(void);
    830 # define EVP_aes_192_cfb EVP_aes_192_cfb128
    831 const EVP_CIPHER *EVP_aes_192_ofb(void);
    832 const EVP_CIPHER *EVP_aes_192_ctr(void);
    833 const EVP_CIPHER *EVP_aes_192_ccm(void);
    834 const EVP_CIPHER *EVP_aes_192_gcm(void);
    835 const EVP_CIPHER *EVP_aes_192_wrap(void);
    836 const EVP_CIPHER *EVP_aes_192_wrap_pad(void);
    837 # ifndef OPENSSL_NO_OCB
    838 const EVP_CIPHER *EVP_aes_192_ocb(void);
    839 # endif
    840 const EVP_CIPHER *EVP_aes_256_ecb(void);
    841 const EVP_CIPHER *EVP_aes_256_cbc(void);
    842 const EVP_CIPHER *EVP_aes_256_cfb1(void);
    843 const EVP_CIPHER *EVP_aes_256_cfb8(void);
    844 const EVP_CIPHER *EVP_aes_256_cfb128(void);
    845 # define EVP_aes_256_cfb EVP_aes_256_cfb128
    846 const EVP_CIPHER *EVP_aes_256_ofb(void);
    847 const EVP_CIPHER *EVP_aes_256_ctr(void);
    848 const EVP_CIPHER *EVP_aes_256_ccm(void);
    849 const EVP_CIPHER *EVP_aes_256_gcm(void);
    850 const EVP_CIPHER *EVP_aes_256_xts(void);
    851 const EVP_CIPHER *EVP_aes_256_wrap(void);
    852 const EVP_CIPHER *EVP_aes_256_wrap_pad(void);
    853 # ifndef OPENSSL_NO_OCB
    854 const EVP_CIPHER *EVP_aes_256_ocb(void);
    855 # endif
    856 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
    857 const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void);
    858 const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void);
    859 const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void);
    860 # ifndef OPENSSL_NO_ARIA
    861 const EVP_CIPHER *EVP_aria_128_ecb(void);
    862 const EVP_CIPHER *EVP_aria_128_cbc(void);
    863 const EVP_CIPHER *EVP_aria_128_cfb1(void);
    864 const EVP_CIPHER *EVP_aria_128_cfb8(void);
    865 const EVP_CIPHER *EVP_aria_128_cfb128(void);
    866 #  define EVP_aria_128_cfb EVP_aria_128_cfb128
    867 const EVP_CIPHER *EVP_aria_128_ctr(void);
    868 const EVP_CIPHER *EVP_aria_128_ofb(void);
    869 const EVP_CIPHER *EVP_aria_128_gcm(void);
    870 const EVP_CIPHER *EVP_aria_128_ccm(void);
    871 const EVP_CIPHER *EVP_aria_192_ecb(void);
    872 const EVP_CIPHER *EVP_aria_192_cbc(void);
    873 const EVP_CIPHER *EVP_aria_192_cfb1(void);
    874 const EVP_CIPHER *EVP_aria_192_cfb8(void);
    875 const EVP_CIPHER *EVP_aria_192_cfb128(void);
    876 #  define EVP_aria_192_cfb EVP_aria_192_cfb128
    877 const EVP_CIPHER *EVP_aria_192_ctr(void);
    878 const EVP_CIPHER *EVP_aria_192_ofb(void);
    879 const EVP_CIPHER *EVP_aria_192_gcm(void);
    880 const EVP_CIPHER *EVP_aria_192_ccm(void);
    881 const EVP_CIPHER *EVP_aria_256_ecb(void);
    882 const EVP_CIPHER *EVP_aria_256_cbc(void);
    883 const EVP_CIPHER *EVP_aria_256_cfb1(void);
    884 const EVP_CIPHER *EVP_aria_256_cfb8(void);
    885 const EVP_CIPHER *EVP_aria_256_cfb128(void);
    886 #  define EVP_aria_256_cfb EVP_aria_256_cfb128
    887 const EVP_CIPHER *EVP_aria_256_ctr(void);
    888 const EVP_CIPHER *EVP_aria_256_ofb(void);
    889 const EVP_CIPHER *EVP_aria_256_gcm(void);
    890 const EVP_CIPHER *EVP_aria_256_ccm(void);
    891 # endif
    892 # ifndef OPENSSL_NO_CAMELLIA
    893 const EVP_CIPHER *EVP_camellia_128_ecb(void);
    894 const EVP_CIPHER *EVP_camellia_128_cbc(void);
    895 const EVP_CIPHER *EVP_camellia_128_cfb1(void);
    896 const EVP_CIPHER *EVP_camellia_128_cfb8(void);
    897 const EVP_CIPHER *EVP_camellia_128_cfb128(void);
    898 #  define EVP_camellia_128_cfb EVP_camellia_128_cfb128
    899 const EVP_CIPHER *EVP_camellia_128_ofb(void);
    900 const EVP_CIPHER *EVP_camellia_128_ctr(void);
    901 const EVP_CIPHER *EVP_camellia_192_ecb(void);
    902 const EVP_CIPHER *EVP_camellia_192_cbc(void);
    903 const EVP_CIPHER *EVP_camellia_192_cfb1(void);
    904 const EVP_CIPHER *EVP_camellia_192_cfb8(void);
    905 const EVP_CIPHER *EVP_camellia_192_cfb128(void);
    906 #  define EVP_camellia_192_cfb EVP_camellia_192_cfb128
    907 const EVP_CIPHER *EVP_camellia_192_ofb(void);
    908 const EVP_CIPHER *EVP_camellia_192_ctr(void);
    909 const EVP_CIPHER *EVP_camellia_256_ecb(void);
    910 const EVP_CIPHER *EVP_camellia_256_cbc(void);
    911 const EVP_CIPHER *EVP_camellia_256_cfb1(void);
    912 const EVP_CIPHER *EVP_camellia_256_cfb8(void);
    913 const EVP_CIPHER *EVP_camellia_256_cfb128(void);
    914 #  define EVP_camellia_256_cfb EVP_camellia_256_cfb128
    915 const EVP_CIPHER *EVP_camellia_256_ofb(void);
    916 const EVP_CIPHER *EVP_camellia_256_ctr(void);
    917 # endif
    918 # ifndef OPENSSL_NO_CHACHA
    919 const EVP_CIPHER *EVP_chacha20(void);
    920 #  ifndef OPENSSL_NO_POLY1305
    921 const EVP_CIPHER *EVP_chacha20_poly1305(void);
    922 #  endif
    923 # endif
    924 
    925 # ifndef OPENSSL_NO_SEED
    926 const EVP_CIPHER *EVP_seed_ecb(void);
    927 const EVP_CIPHER *EVP_seed_cbc(void);
    928 const EVP_CIPHER *EVP_seed_cfb128(void);
    929 #  define EVP_seed_cfb EVP_seed_cfb128
    930 const EVP_CIPHER *EVP_seed_ofb(void);
    931 # endif
    932 
    933 # ifndef OPENSSL_NO_SM4
    934 const EVP_CIPHER *EVP_sm4_ecb(void);
    935 const EVP_CIPHER *EVP_sm4_cbc(void);
    936 const EVP_CIPHER *EVP_sm4_cfb128(void);
    937 #  define EVP_sm4_cfb EVP_sm4_cfb128
    938 const EVP_CIPHER *EVP_sm4_ofb(void);
    939 const EVP_CIPHER *EVP_sm4_ctr(void);
    940 # endif
    941 
    942 # if OPENSSL_API_COMPAT < 0x10100000L
    943 #  define OPENSSL_add_all_algorithms_conf() \
    944     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
    945                         | OPENSSL_INIT_ADD_ALL_DIGESTS \
    946                         | OPENSSL_INIT_LOAD_CONFIG, NULL)
    947 #  define OPENSSL_add_all_algorithms_noconf() \
    948     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \
    949                         | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
    950 
    951 #  ifdef OPENSSL_LOAD_CONF
    952 #   define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf()
    953 #  else
    954 #   define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf()
    955 #  endif
    956 
    957 #  define OpenSSL_add_all_ciphers() \
    958     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL)
    959 #  define OpenSSL_add_all_digests() \
    960     OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL)
    961 
    962 #  define EVP_cleanup() while(0) continue
    963 # endif
    964 
    965 int EVP_add_cipher(const EVP_CIPHER *cipher);
    966 int EVP_add_digest(const EVP_MD *digest);
    967 
    968 const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
    969 const EVP_MD *EVP_get_digestbyname(const char *name);
    970 
    971 void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph,
    972                                    const char *from, const char *to, void *x),
    973                        void *arg);
    974 void EVP_CIPHER_do_all_sorted(void (*fn)
    975                                (const EVP_CIPHER *ciph, const char *from,
    976                                 const char *to, void *x), void *arg);
    977 
    978 void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph,
    979                                const char *from, const char *to, void *x),
    980                    void *arg);
    981 void EVP_MD_do_all_sorted(void (*fn)
    982                            (const EVP_MD *ciph, const char *from,
    983                             const char *to, void *x), void *arg);
    984 
    985 int EVP_PKEY_decrypt_old(unsigned char *dec_key,
    986                          const unsigned char *enc_key, int enc_key_len,
    987                          EVP_PKEY *private_key);
    988 int EVP_PKEY_encrypt_old(unsigned char *enc_key,
    989                          const unsigned char *key, int key_len,
    990                          EVP_PKEY *pub_key);
    991 int EVP_PKEY_type(int type);
    992 int EVP_PKEY_id(const EVP_PKEY *pkey);
    993 int EVP_PKEY_base_id(const EVP_PKEY *pkey);
    994 int EVP_PKEY_bits(const EVP_PKEY *pkey);
    995 int EVP_PKEY_security_bits(const EVP_PKEY *pkey);
    996 int EVP_PKEY_size(const EVP_PKEY *pkey);
    997 int EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
    998 int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);
    999 int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type);
   1000 # ifndef OPENSSL_NO_ENGINE
   1001 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e);
   1002 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey);
   1003 # endif
   1004 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);
   1005 void *EVP_PKEY_get0(const EVP_PKEY *pkey);
   1006 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len);
   1007 # ifndef OPENSSL_NO_POLY1305
   1008 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len);
   1009 # endif
   1010 # ifndef OPENSSL_NO_SIPHASH
   1011 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len);
   1012 # endif
   1013 
   1014 # ifndef OPENSSL_NO_RSA
   1015 struct rsa_st;
   1016 int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key);
   1017 struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
   1018 struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);
   1019 # endif
   1020 # ifndef OPENSSL_NO_DSA
   1021 struct dsa_st;
   1022 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key);
   1023 struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey);
   1024 struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);
   1025 # endif
   1026 # ifndef OPENSSL_NO_DH
   1027 struct dh_st;
   1028 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key);
   1029 struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey);
   1030 struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);
   1031 # endif
   1032 # ifndef OPENSSL_NO_EC
   1033 struct ec_key_st;
   1034 int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key);
   1035 struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey);
   1036 struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
   1037 # endif
   1038 
   1039 EVP_PKEY *EVP_PKEY_new(void);
   1040 int EVP_PKEY_up_ref(EVP_PKEY *pkey);
   1041 void EVP_PKEY_free(EVP_PKEY *pkey);
   1042 
   1043 EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
   1044                         long length);
   1045 int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
   1046 
   1047 EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
   1048                          long length);
   1049 EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
   1050                              long length);
   1051 int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
   1052 
   1053 int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);
   1054 int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);
   1055 int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode);
   1056 int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);
   1057 
   1058 int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);
   1059 
   1060 int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
   1061                           int indent, ASN1_PCTX *pctx);
   1062 int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
   1063                            int indent, ASN1_PCTX *pctx);
   1064 int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
   1065                           int indent, ASN1_PCTX *pctx);
   1066 
   1067 int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);
   1068 
   1069 int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey,
   1070                                    const unsigned char *pt, size_t ptlen);
   1071 size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt);
   1072 
   1073 int EVP_CIPHER_type(const EVP_CIPHER *ctx);
   1074 
   1075 /* calls methods */
   1076 int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
   1077 int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
   1078 
   1079 /* These are used by EVP_CIPHER methods */
   1080 int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
   1081 int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);
   1082 
   1083 /* PKCS5 password based encryption */
   1084 int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
   1085                        ASN1_TYPE *param, const EVP_CIPHER *cipher,
   1086                        const EVP_MD *md, int en_de);
   1087 int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
   1088                            const unsigned char *salt, int saltlen, int iter,
   1089                            int keylen, unsigned char *out);
   1090 int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
   1091                       const unsigned char *salt, int saltlen, int iter,
   1092                       const EVP_MD *digest, int keylen, unsigned char *out);
   1093 int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
   1094                           ASN1_TYPE *param, const EVP_CIPHER *cipher,
   1095                           const EVP_MD *md, int en_de);
   1096 
   1097 #ifndef OPENSSL_NO_SCRYPT
   1098 int EVP_PBE_scrypt(const char *pass, size_t passlen,
   1099                    const unsigned char *salt, size_t saltlen,
   1100                    uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem,
   1101                    unsigned char *key, size_t keylen);
   1102 
   1103 int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass,
   1104                              int passlen, ASN1_TYPE *param,
   1105                              const EVP_CIPHER *c, const EVP_MD *md, int en_de);
   1106 #endif
   1107 
   1108 void PKCS5_PBE_add(void);
   1109 
   1110 int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen,
   1111                        ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);
   1112 
   1113 /* PBE type */
   1114 
   1115 /* Can appear as the outermost AlgorithmIdentifier */
   1116 # define EVP_PBE_TYPE_OUTER      0x0
   1117 /* Is an PRF type OID */
   1118 # define EVP_PBE_TYPE_PRF        0x1
   1119 /* Is a PKCS#5 v2.0 KDF */
   1120 # define EVP_PBE_TYPE_KDF        0x2
   1121 
   1122 int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid,
   1123                          int md_nid, EVP_PBE_KEYGEN *keygen);
   1124 int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,
   1125                     EVP_PBE_KEYGEN *keygen);
   1126 int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid,
   1127                  EVP_PBE_KEYGEN **pkeygen);
   1128 void EVP_PBE_cleanup(void);
   1129 int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num);
   1130 
   1131 # define ASN1_PKEY_ALIAS         0x1
   1132 # define ASN1_PKEY_DYNAMIC       0x2
   1133 # define ASN1_PKEY_SIGPARAM_NULL 0x4
   1134 
   1135 # define ASN1_PKEY_CTRL_PKCS7_SIGN       0x1
   1136 # define ASN1_PKEY_CTRL_PKCS7_ENCRYPT    0x2
   1137 # define ASN1_PKEY_CTRL_DEFAULT_MD_NID   0x3
   1138 # define ASN1_PKEY_CTRL_CMS_SIGN         0x5
   1139 # define ASN1_PKEY_CTRL_CMS_ENVELOPE     0x7
   1140 # define ASN1_PKEY_CTRL_CMS_RI_TYPE      0x8
   1141 
   1142 # define ASN1_PKEY_CTRL_SET1_TLS_ENCPT   0x9
   1143 # define ASN1_PKEY_CTRL_GET1_TLS_ENCPT   0xa
   1144 
   1145 int EVP_PKEY_asn1_get_count(void);
   1146 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
   1147 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);
   1148 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
   1149                                                    const char *str, int len);
   1150 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);
   1151 int EVP_PKEY_asn1_add_alias(int to, int from);
   1152 int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,
   1153                             int *ppkey_flags, const char **pinfo,
   1154                             const char **ppem_str,
   1155                             const EVP_PKEY_ASN1_METHOD *ameth);
   1156 
   1157 const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey);
   1158 EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,
   1159                                         const char *pem_str,
   1160                                         const char *info);
   1161 void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,
   1162                         const EVP_PKEY_ASN1_METHOD *src);
   1163 void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);
   1164 void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,
   1165                               int (*pub_decode) (EVP_PKEY *pk,
   1166                                                  X509_PUBKEY *pub),
   1167                               int (*pub_encode) (X509_PUBKEY *pub,
   1168                                                  const EVP_PKEY *pk),
   1169                               int (*pub_cmp) (const EVP_PKEY *a,
   1170                                               const EVP_PKEY *b),
   1171                               int (*pub_print) (BIO *out,
   1172                                                 const EVP_PKEY *pkey,
   1173                                                 int indent, ASN1_PCTX *pctx),
   1174                               int (*pkey_size) (const EVP_PKEY *pk),
   1175                               int (*pkey_bits) (const EVP_PKEY *pk));
   1176 void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,
   1177                                int (*priv_decode) (EVP_PKEY *pk,
   1178                                                    const PKCS8_PRIV_KEY_INFO
   1179                                                    *p8inf),
   1180                                int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8,
   1181                                                    const EVP_PKEY *pk),
   1182                                int (*priv_print) (BIO *out,
   1183                                                   const EVP_PKEY *pkey,
   1184                                                   int indent,
   1185                                                   ASN1_PCTX *pctx));
   1186 void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,
   1187                              int (*param_decode) (EVP_PKEY *pkey,
   1188                                                   const unsigned char **pder,
   1189                                                   int derlen),
   1190                              int (*param_encode) (const EVP_PKEY *pkey,
   1191                                                   unsigned char **pder),
   1192                              int (*param_missing) (const EVP_PKEY *pk),
   1193                              int (*param_copy) (EVP_PKEY *to,
   1194                                                 const EVP_PKEY *from),
   1195                              int (*param_cmp) (const EVP_PKEY *a,
   1196                                                const EVP_PKEY *b),
   1197                              int (*param_print) (BIO *out,
   1198                                                  const EVP_PKEY *pkey,
   1199                                                  int indent,
   1200                                                  ASN1_PCTX *pctx));
   1201 
   1202 void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
   1203                             void (*pkey_free) (EVP_PKEY *pkey));
   1204 void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
   1205                             int (*pkey_ctrl) (EVP_PKEY *pkey, int op,
   1206                                               long arg1, void *arg2));
   1207 void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
   1208                             int (*item_verify) (EVP_MD_CTX *ctx,
   1209                                                 const ASN1_ITEM *it,
   1210                                                 void *asn,
   1211                                                 X509_ALGOR *a,
   1212                                                 ASN1_BIT_STRING *sig,
   1213                                                 EVP_PKEY *pkey),
   1214                             int (*item_sign) (EVP_MD_CTX *ctx,
   1215                                               const ASN1_ITEM *it,
   1216                                               void *asn,
   1217                                               X509_ALGOR *alg1,
   1218                                               X509_ALGOR *alg2,
   1219                                               ASN1_BIT_STRING *sig));
   1220 
   1221 void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth,
   1222                               int (*siginf_set) (X509_SIG_INFO *siginf,
   1223                                                  const X509_ALGOR *alg,
   1224                                                  const ASN1_STRING *sig));
   1225 
   1226 void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth,
   1227                              int (*pkey_check) (const EVP_PKEY *pk));
   1228 
   1229 void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth,
   1230                                     int (*pkey_pub_check) (const EVP_PKEY *pk));
   1231 
   1232 void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth,
   1233                                    int (*pkey_param_check) (const EVP_PKEY *pk));
   1234 
   1235 void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
   1236                                     int (*set_priv_key) (EVP_PKEY *pk,
   1237                                                          const unsigned char
   1238                                                             *priv,
   1239                                                          size_t len));
   1240 void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
   1241                                    int (*set_pub_key) (EVP_PKEY *pk,
   1242                                                        const unsigned char *pub,
   1243                                                        size_t len));
   1244 void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth,
   1245                                     int (*get_priv_key) (const EVP_PKEY *pk,
   1246                                                          unsigned char *priv,
   1247                                                          size_t *len));
   1248 void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth,
   1249                                    int (*get_pub_key) (const EVP_PKEY *pk,
   1250                                                        unsigned char *pub,
   1251                                                        size_t *len));
   1252 
   1253 void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth,
   1254                                      int (*pkey_security_bits) (const EVP_PKEY
   1255                                                                 *pk));
   1256 
   1257 # define EVP_PKEY_OP_UNDEFINED           0
   1258 # define EVP_PKEY_OP_PARAMGEN            (1<<1)
   1259 # define EVP_PKEY_OP_KEYGEN              (1<<2)
   1260 # define EVP_PKEY_OP_SIGN                (1<<3)
   1261 # define EVP_PKEY_OP_VERIFY              (1<<4)
   1262 # define EVP_PKEY_OP_VERIFYRECOVER       (1<<5)
   1263 # define EVP_PKEY_OP_SIGNCTX             (1<<6)
   1264 # define EVP_PKEY_OP_VERIFYCTX           (1<<7)
   1265 # define EVP_PKEY_OP_ENCRYPT             (1<<8)
   1266 # define EVP_PKEY_OP_DECRYPT             (1<<9)
   1267 # define EVP_PKEY_OP_DERIVE              (1<<10)
   1268 
   1269 # define EVP_PKEY_OP_TYPE_SIG    \
   1270         (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \
   1271                 | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)
   1272 
   1273 # define EVP_PKEY_OP_TYPE_CRYPT \
   1274         (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)
   1275 
   1276 # define EVP_PKEY_OP_TYPE_NOGEN \
   1277         (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE)
   1278 
   1279 # define EVP_PKEY_OP_TYPE_GEN \
   1280                 (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)
   1281 
   1282 # define  EVP_PKEY_CTX_set_signature_md(ctx, md) \
   1283                 EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG,  \
   1284                                         EVP_PKEY_CTRL_MD, 0, (void *)(md))
   1285 
   1286 # define  EVP_PKEY_CTX_get_signature_md(ctx, pmd)        \
   1287                 EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG,  \
   1288                                         EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd))
   1289 
   1290 # define  EVP_PKEY_CTX_set_mac_key(ctx, key, len)        \
   1291                 EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN,  \
   1292                                   EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key))
   1293 
   1294 # define EVP_PKEY_CTRL_MD                1
   1295 # define EVP_PKEY_CTRL_PEER_KEY          2
   1296 
   1297 # define EVP_PKEY_CTRL_PKCS7_ENCRYPT     3
   1298 # define EVP_PKEY_CTRL_PKCS7_DECRYPT     4
   1299 
   1300 # define EVP_PKEY_CTRL_PKCS7_SIGN        5
   1301 
   1302 # define EVP_PKEY_CTRL_SET_MAC_KEY       6
   1303 
   1304 # define EVP_PKEY_CTRL_DIGESTINIT        7
   1305 
   1306 /* Used by GOST key encryption in TLS */
   1307 # define EVP_PKEY_CTRL_SET_IV            8
   1308 
   1309 # define EVP_PKEY_CTRL_CMS_ENCRYPT       9
   1310 # define EVP_PKEY_CTRL_CMS_DECRYPT       10
   1311 # define EVP_PKEY_CTRL_CMS_SIGN          11
   1312 
   1313 # define EVP_PKEY_CTRL_CIPHER            12
   1314 
   1315 # define EVP_PKEY_CTRL_GET_MD            13
   1316 
   1317 # define EVP_PKEY_CTRL_SET_DIGEST_SIZE   14
   1318 
   1319 # define EVP_PKEY_ALG_CTRL               0x1000
   1320 
   1321 # define EVP_PKEY_FLAG_AUTOARGLEN        2
   1322 /*
   1323  * Method handles all operations: don't assume any digest related defaults.
   1324  */
   1325 # define EVP_PKEY_FLAG_SIGCTX_CUSTOM     4
   1326 
   1327 const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);
   1328 EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags);
   1329 void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
   1330                              const EVP_PKEY_METHOD *meth);
   1331 void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src);
   1332 void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);
   1333 int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);
   1334 int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth);
   1335 size_t EVP_PKEY_meth_get_count(void);
   1336 const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx);
   1337 
   1338 EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
   1339 EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);
   1340 EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);
   1341 void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
   1342 
   1343 int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
   1344                       int cmd, int p1, void *p2);
   1345 int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
   1346                           const char *value);
   1347 int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype,
   1348                              int cmd, uint64_t value);
   1349 
   1350 int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str);
   1351 int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex);
   1352 
   1353 int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md);
   1354 
   1355 int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);
   1356 void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);
   1357 
   1358 EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,
   1359                                const unsigned char *key, int keylen);
   1360 EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e,
   1361                                        const unsigned char *priv,
   1362                                        size_t len);
   1363 EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e,
   1364                                       const unsigned char *pub,
   1365                                       size_t len);
   1366 int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv,
   1367                                  size_t *len);
   1368 int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub,
   1369                                 size_t *len);
   1370 
   1371 EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv,
   1372                                 size_t len, const EVP_CIPHER *cipher);
   1373 
   1374 void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);
   1375 void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx);
   1376 EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);
   1377 
   1378 EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);
   1379 
   1380 void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);
   1381 void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);
   1382 
   1383 int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
   1384 int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,
   1385                   unsigned char *sig, size_t *siglen,
   1386                   const unsigned char *tbs, size_t tbslen);
   1387 int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
   1388 int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,
   1389                     const unsigned char *sig, size_t siglen,
   1390                     const unsigned char *tbs, size_t tbslen);
   1391 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
   1392 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
   1393                             unsigned char *rout, size_t *routlen,
   1394                             const unsigned char *sig, size_t siglen);
   1395 int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);
   1396 int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,
   1397                      unsigned char *out, size_t *outlen,
   1398                      const unsigned char *in, size_t inlen);
   1399 int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
   1400 int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
   1401                      unsigned char *out, size_t *outlen,
   1402                      const unsigned char *in, size_t inlen);
   1403 
   1404 int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
   1405 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
   1406 int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
   1407 
   1408 typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
   1409 
   1410 int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);
   1411 int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
   1412 int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
   1413 int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
   1414 int EVP_PKEY_check(EVP_PKEY_CTX *ctx);
   1415 int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx);
   1416 int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx);
   1417 
   1418 void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);
   1419 EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);
   1420 
   1421 int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);
   1422 
   1423 void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
   1424                             int (*init) (EVP_PKEY_CTX *ctx));
   1425 
   1426 void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,
   1427                             int (*copy) (EVP_PKEY_CTX *dst,
   1428                                          EVP_PKEY_CTX *src));
   1429 
   1430 void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
   1431                                void (*cleanup) (EVP_PKEY_CTX *ctx));
   1432 
   1433 void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
   1434                                 int (*paramgen_init) (EVP_PKEY_CTX *ctx),
   1435                                 int (*paramgen) (EVP_PKEY_CTX *ctx,
   1436                                                  EVP_PKEY *pkey));
   1437 
   1438 void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
   1439                               int (*keygen_init) (EVP_PKEY_CTX *ctx),
   1440                               int (*keygen) (EVP_PKEY_CTX *ctx,
   1441                                              EVP_PKEY *pkey));
   1442 
   1443 void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
   1444                             int (*sign_init) (EVP_PKEY_CTX *ctx),
   1445                             int (*sign) (EVP_PKEY_CTX *ctx,
   1446                                          unsigned char *sig, size_t *siglen,
   1447                                          const unsigned char *tbs,
   1448                                          size_t tbslen));
   1449 
   1450 void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
   1451                               int (*verify_init) (EVP_PKEY_CTX *ctx),
   1452                               int (*verify) (EVP_PKEY_CTX *ctx,
   1453                                              const unsigned char *sig,
   1454                                              size_t siglen,
   1455                                              const unsigned char *tbs,
   1456                                              size_t tbslen));
   1457 
   1458 void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,
   1459                                       int (*verify_recover_init) (EVP_PKEY_CTX
   1460                                                                   *ctx),
   1461                                       int (*verify_recover) (EVP_PKEY_CTX
   1462                                                              *ctx,
   1463                                                              unsigned char
   1464                                                              *sig,
   1465                                                              size_t *siglen,
   1466                                                              const unsigned
   1467                                                              char *tbs,
   1468                                                              size_t tbslen));
   1469 
   1470 void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
   1471                                int (*signctx_init) (EVP_PKEY_CTX *ctx,
   1472                                                     EVP_MD_CTX *mctx),
   1473                                int (*signctx) (EVP_PKEY_CTX *ctx,
   1474                                                unsigned char *sig,
   1475                                                size_t *siglen,
   1476                                                EVP_MD_CTX *mctx));
   1477 
   1478 void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
   1479                                  int (*verifyctx_init) (EVP_PKEY_CTX *ctx,
   1480                                                         EVP_MD_CTX *mctx),
   1481                                  int (*verifyctx) (EVP_PKEY_CTX *ctx,
   1482                                                    const unsigned char *sig,
   1483                                                    int siglen,
   1484                                                    EVP_MD_CTX *mctx));
   1485 
   1486 void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
   1487                                int (*encrypt_init) (EVP_PKEY_CTX *ctx),
   1488                                int (*encryptfn) (EVP_PKEY_CTX *ctx,
   1489                                                  unsigned char *out,
   1490                                                  size_t *outlen,
   1491                                                  const unsigned char *in,
   1492                                                  size_t inlen));
   1493 
   1494 void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
   1495                                int (*decrypt_init) (EVP_PKEY_CTX *ctx),
   1496                                int (*decrypt) (EVP_PKEY_CTX *ctx,
   1497                                                unsigned char *out,
   1498                                                size_t *outlen,
   1499                                                const unsigned char *in,
   1500                                                size_t inlen));
   1501 
   1502 void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
   1503                               int (*derive_init) (EVP_PKEY_CTX *ctx),
   1504                               int (*derive) (EVP_PKEY_CTX *ctx,
   1505                                              unsigned char *key,
   1506                                              size_t *keylen));
   1507 
   1508 void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
   1509                             int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1,
   1510                                          void *p2),
   1511                             int (*ctrl_str) (EVP_PKEY_CTX *ctx,
   1512                                              const char *type,
   1513                                              const char *value));
   1514 
   1515 void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth,
   1516                                   int (*digestsign) (EVP_MD_CTX *ctx,
   1517                                                      unsigned char *sig,
   1518                                                      size_t *siglen,
   1519                                                      const unsigned char *tbs,
   1520                                                      size_t tbslen));
   1521 
   1522 void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth,
   1523                                     int (*digestverify) (EVP_MD_CTX *ctx,
   1524                                                          const unsigned char *sig,
   1525                                                          size_t siglen,
   1526                                                          const unsigned char *tbs,
   1527                                                          size_t tbslen));
   1528 
   1529 void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth,
   1530                              int (*check) (EVP_PKEY *pkey));
   1531 
   1532 void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth,
   1533                                     int (*check) (EVP_PKEY *pkey));
   1534 
   1535 void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth,
   1536                                    int (*check) (EVP_PKEY *pkey));
   1537 
   1538 void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth,
   1539                                      int (*digest_custom) (EVP_PKEY_CTX *ctx,
   1540                                                            EVP_MD_CTX *mctx));
   1541 
   1542 void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth,
   1543                             int (**pinit) (EVP_PKEY_CTX *ctx));
   1544 
   1545 void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth,
   1546                             int (**pcopy) (EVP_PKEY_CTX *dst,
   1547                                            EVP_PKEY_CTX *src));
   1548 
   1549 void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth,
   1550                                void (**pcleanup) (EVP_PKEY_CTX *ctx));
   1551 
   1552 void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth,
   1553                                 int (**pparamgen_init) (EVP_PKEY_CTX *ctx),
   1554                                 int (**pparamgen) (EVP_PKEY_CTX *ctx,
   1555                                                    EVP_PKEY *pkey));
   1556 
   1557 void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth,
   1558                               int (**pkeygen_init) (EVP_PKEY_CTX *ctx),
   1559                               int (**pkeygen) (EVP_PKEY_CTX *ctx,
   1560                                                EVP_PKEY *pkey));
   1561 
   1562 void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth,
   1563                             int (**psign_init) (EVP_PKEY_CTX *ctx),
   1564                             int (**psign) (EVP_PKEY_CTX *ctx,
   1565                                            unsigned char *sig, size_t *siglen,
   1566                                            const unsigned char *tbs,
   1567                                            size_t tbslen));
   1568 
   1569 void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth,
   1570                               int (**pverify_init) (EVP_PKEY_CTX *ctx),
   1571                               int (**pverify) (EVP_PKEY_CTX *ctx,
   1572                                                const unsigned char *sig,
   1573                                                size_t siglen,
   1574                                                const unsigned char *tbs,
   1575                                                size_t tbslen));
   1576 
   1577 void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth,
   1578                                       int (**pverify_recover_init) (EVP_PKEY_CTX
   1579                                                                     *ctx),
   1580                                       int (**pverify_recover) (EVP_PKEY_CTX
   1581                                                                *ctx,
   1582                                                                unsigned char
   1583                                                                *sig,
   1584                                                                size_t *siglen,
   1585                                                                const unsigned
   1586                                                                char *tbs,
   1587                                                                size_t tbslen));
   1588 
   1589 void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth,
   1590                                int (**psignctx_init) (EVP_PKEY_CTX *ctx,
   1591                                                       EVP_MD_CTX *mctx),
   1592                                int (**psignctx) (EVP_PKEY_CTX *ctx,
   1593                                                  unsigned char *sig,
   1594                                                  size_t *siglen,
   1595                                                  EVP_MD_CTX *mctx));
   1596 
   1597 void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth,
   1598                                  int (**pverifyctx_init) (EVP_PKEY_CTX *ctx,
   1599                                                           EVP_MD_CTX *mctx),
   1600                                  int (**pverifyctx) (EVP_PKEY_CTX *ctx,
   1601                                                      const unsigned char *sig,
   1602                                                      int siglen,
   1603                                                      EVP_MD_CTX *mctx));
   1604 
   1605 void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth,
   1606                                int (**pencrypt_init) (EVP_PKEY_CTX *ctx),
   1607                                int (**pencryptfn) (EVP_PKEY_CTX *ctx,
   1608                                                    unsigned char *out,
   1609                                                    size_t *outlen,
   1610                                                    const unsigned char *in,
   1611                                                    size_t inlen));
   1612 
   1613 void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth,
   1614                                int (**pdecrypt_init) (EVP_PKEY_CTX *ctx),
   1615                                int (**pdecrypt) (EVP_PKEY_CTX *ctx,
   1616                                                  unsigned char *out,
   1617                                                  size_t *outlen,
   1618                                                  const unsigned char *in,
   1619                                                  size_t inlen));
   1620 
   1621 void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth,
   1622                               int (**pderive_init) (EVP_PKEY_CTX *ctx),
   1623                               int (**pderive) (EVP_PKEY_CTX *ctx,
   1624                                                unsigned char *key,
   1625                                                size_t *keylen));
   1626 
   1627 void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth,
   1628                             int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1,
   1629                                            void *p2),
   1630                             int (**pctrl_str) (EVP_PKEY_CTX *ctx,
   1631                                                const char *type,
   1632                                                const char *value));
   1633 
   1634 void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth,
   1635                                   int (**digestsign) (EVP_MD_CTX *ctx,
   1636                                                       unsigned char *sig,
   1637                                                       size_t *siglen,
   1638                                                       const unsigned char *tbs,
   1639                                                       size_t tbslen));
   1640 
   1641 void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth,
   1642                                     int (**digestverify) (EVP_MD_CTX *ctx,
   1643                                                           const unsigned char *sig,
   1644                                                           size_t siglen,
   1645                                                           const unsigned char *tbs,
   1646                                                           size_t tbslen));
   1647 
   1648 void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth,
   1649                              int (**pcheck) (EVP_PKEY *pkey));
   1650 
   1651 void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth,
   1652                                     int (**pcheck) (EVP_PKEY *pkey));
   1653 
   1654 void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth,
   1655                                    int (**pcheck) (EVP_PKEY *pkey));
   1656 
   1657 void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth,
   1658                                      int (**pdigest_custom) (EVP_PKEY_CTX *ctx,
   1659                                                              EVP_MD_CTX *mctx));
   1660 void EVP_add_alg_module(void);
   1661 
   1662 
   1663 # ifdef  __cplusplus
   1664 }
   1665 # endif
   1666 #endif
   1667