gnunet-android

GNUnet for Android
Log | Files | Refs | README

evp.h (72324B)


      1 /* evp.h
      2  *
      3  * Copyright (C) 2006-2025 wolfSSL Inc.
      4  *
      5  * This file is part of wolfSSL.
      6  *
      7  * wolfSSL is free software; you can redistribute it and/or modify
      8  * it under the terms of the GNU General Public License as published by
      9  * the Free Software Foundation; either version 3 of the License, or
     10  * (at your option) any later version.
     11  *
     12  * wolfSSL is distributed in the hope that it will be useful,
     13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  * GNU General Public License for more details.
     16  *
     17  * You should have received a copy of the GNU General Public License
     18  * along with this program; if not, write to the Free Software
     19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
     20  */
     21 
     22 
     23 
     24 /*!
     25     \file wolfssl/openssl/evp.h
     26     \brief evp.h defines mini evp openssl compatibility layer
     27  */
     28 
     29 
     30 #ifndef WOLFSSL_EVP_H_
     31 #define WOLFSSL_EVP_H_
     32 
     33 #include <wolfssl/wolfcrypt/types.h>
     34 
     35 #ifdef WOLFSSL_PREFIX
     36 #include "prefix_evp.h"
     37 #endif
     38 
     39 #ifndef NO_MD4
     40     #include <wolfssl/openssl/md4.h>
     41 #endif
     42 #ifndef NO_MD5
     43     #include <wolfssl/openssl/md5.h>
     44 #endif
     45 #include <wolfssl/openssl/sha.h>
     46 #include <wolfssl/openssl/sha3.h>
     47 #include <wolfssl/openssl/ripemd.h>
     48 #include <wolfssl/openssl/rsa.h>
     49 #include <wolfssl/openssl/dsa.h>
     50 #include <wolfssl/openssl/ec.h>
     51 #include <wolfssl/openssl/dh.h>
     52 #include <wolfssl/openssl/opensslv.h>
     53 #include <wolfssl/openssl/compat_types.h>
     54 
     55 #include <wolfssl/wolfcrypt/aes.h>
     56 #include <wolfssl/wolfcrypt/des3.h>
     57 #include <wolfssl/wolfcrypt/arc4.h>
     58 #include <wolfssl/wolfcrypt/chacha20_poly1305.h>
     59 #include <wolfssl/wolfcrypt/hmac.h>
     60 #include <wolfssl/wolfcrypt/pwdbased.h>
     61 #ifdef WOLFSSL_SM3
     62     #include <wolfssl/wolfcrypt/sm3.h>
     63 #endif
     64 #ifdef WOLFSSL_SM4
     65     #include <wolfssl/wolfcrypt/sm4.h>
     66 #endif
     67 
     68 #if defined(WOLFSSL_BASE64_ENCODE) || defined(WOLFSSL_BASE64_DECODE)
     69 #include <wolfssl/wolfcrypt/coding.h>
     70 #endif
     71 
     72 #ifdef HAVE_ARIA
     73     #include <wolfssl/wolfcrypt/port/aria/aria-crypt.h>
     74 #endif
     75 
     76 #ifdef __cplusplus
     77     extern "C" {
     78 #endif
     79 
     80 
     81 #ifndef NO_MD4
     82     WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_md4(void);
     83 #endif
     84 #ifndef NO_MD5
     85     WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_md5(void);
     86 #endif
     87 WOLFSSL_API void wolfSSL_EVP_set_pw_prompt(const char *prompt);
     88 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_mdc2(void);
     89 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha1(void);
     90 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha224(void);
     91 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha256(void);
     92 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha384(void);
     93 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha512(void);
     94 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_shake128(void);
     95 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_shake256(void);
     96 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_sha512_224(void);
     97 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_sha512_256(void);
     98 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_ripemd160(void);
     99 
    100 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha3_224(void);
    101 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha3_256(void);
    102 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha3_384(void);
    103 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sha3_512(void);
    104 
    105 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_sm3(void);
    106 
    107 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ecb(void);
    108 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ecb(void);
    109 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ecb(void);
    110 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cbc(void);
    111 #if !defined(NO_AES) && (defined(HAVE_AES_CBC) || defined(WOLFSSL_AES_DIRECT))
    112 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cbc(void);
    113 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cbc(void);
    114 #endif
    115 #ifndef NO_AES
    116 #ifdef WOLFSSL_AES_CFB
    117 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cfb1(void);
    118 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cfb1(void);
    119 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cfb1(void);
    120 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cfb8(void);
    121 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cfb8(void);
    122 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cfb8(void);
    123 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_cfb128(void);
    124 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_cfb128(void);
    125 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_cfb128(void);
    126 #endif
    127 #ifdef WOLFSSL_AES_OFB
    128 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ofb(void);
    129 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ofb(void);
    130 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ofb(void);
    131 #endif
    132 #ifdef WOLFSSL_AES_XTS
    133 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_xts(void);
    134 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_xts(void);
    135 #endif
    136 #endif /* NO_AES */
    137 #if !defined(NO_AES) && defined(HAVE_AESGCM)
    138 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_gcm(void);
    139 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_gcm(void);
    140 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_gcm(void);
    141 #endif
    142 #if !defined(NO_AES) && defined(HAVE_AESCCM)
    143 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ccm(void);
    144 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ccm(void);
    145 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ccm(void);
    146 #endif
    147 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_128_ctr(void);
    148 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_192_ctr(void);
    149 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aes_256_ctr(void);
    150 #if defined(HAVE_ARIA)
    151 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aria_128_gcm(void);
    152 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aria_192_gcm(void);
    153 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_aria_256_gcm(void);
    154 #endif
    155 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ecb(void);
    156 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_ecb(void);
    157 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_cbc(void);
    158 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_cbc(void);
    159 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_rc4(void);
    160 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_enc_null(void);
    161 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_rc2_cbc(void);
    162 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    163 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_chacha20_poly1305(void);
    164 #endif
    165 #ifdef HAVE_CHACHA
    166 /* ChaCha IV + counter is set as one IV in EVP */
    167 #define WOLFSSL_EVP_CHACHA_IV_BYTES     (CHACHA_IV_BYTES + sizeof(word32))
    168 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_chacha20(void);
    169 #endif
    170 #ifdef WOLFSSL_SM4_ECB
    171 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_sm4_ecb(void);
    172 #endif
    173 #ifdef WOLFSSL_SM4_CBC
    174 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_sm4_cbc(void);
    175 #endif
    176 #ifdef WOLFSSL_SM4_CTR
    177 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_sm4_ctr(void);
    178 #endif
    179 #ifdef WOLFSSL_SM4_GCM
    180 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_sm4_gcm(void);
    181 #endif
    182 #ifdef WOLFSSL_SM4_CCM
    183 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_sm4_ccm(void);
    184 #endif
    185 
    186 typedef union {
    187     #ifndef NO_MD4
    188         WOLFSSL_MD4_CTX    md4;
    189     #endif
    190     #ifndef NO_MD5
    191         WOLFSSL_MD5_CTX    md5;
    192     #endif
    193     #ifndef NO_SHA
    194         WOLFSSL_SHA_CTX    sha;
    195     #endif
    196     #ifdef WOLFSSL_SHA224
    197         WOLFSSL_SHA224_CTX sha224;
    198     #endif
    199     #ifndef NO_SHA256
    200         WOLFSSL_SHA256_CTX sha256;
    201     #endif
    202     #ifdef WOLFSSL_SHA384
    203         WOLFSSL_SHA384_CTX sha384;
    204     #endif
    205     #ifdef WOLFSSL_SHA512
    206         WOLFSSL_SHA512_CTX sha512;
    207     #endif
    208     #ifdef WOLFSSL_RIPEMD
    209         WOLFSSL_RIPEMD_CTX ripemd;
    210     #endif
    211     #ifndef WOLFSSL_NOSHA3_224
    212         WOLFSSL_SHA3_224_CTX sha3_224;
    213     #endif
    214     #ifndef WOLFSSL_NOSHA3_256
    215         WOLFSSL_SHA3_256_CTX sha3_256;
    216     #endif
    217         WOLFSSL_SHA3_384_CTX sha3_384;
    218     #ifndef WOLFSSL_NOSHA3_512
    219         WOLFSSL_SHA3_512_CTX sha3_512;
    220     #endif
    221     #ifdef WOLFSSL_SM3
    222         wc_Sm3               sm3;
    223     #endif
    224     #if defined(WOLFSSL_SHAKE128) || defined(WOLFSSL_SHAKE256)
    225         wc_Shake            shake;
    226     #endif
    227 } WOLFSSL_Hasher;
    228 
    229 
    230 struct WOLFSSL_EVP_MD_CTX {
    231     union {
    232         WOLFSSL_Hasher digest;
    233     #ifndef NO_HMAC
    234         Hmac hmac;
    235     #endif
    236     } hash;
    237     enum wc_HashType macType;
    238     WOLFSSL_EVP_PKEY_CTX *pctx;
    239 #ifndef NO_HMAC
    240     unsigned int isHMAC;
    241 #endif
    242 };
    243 
    244 
    245 typedef union {
    246 #ifndef NO_AES
    247     Aes  aes;
    248 #ifdef WOLFSSL_AES_XTS
    249     XtsAes xts;
    250 #endif
    251 #endif
    252 #ifdef HAVE_ARIA
    253     wc_Aria aria;
    254 #endif
    255 #ifndef NO_DES3
    256     Des  des;
    257     Des3 des3;
    258 #endif
    259     Arc4 arc4;
    260 #ifdef WOLFSSL_QT
    261     int (*ctrl) (WOLFSSL_EVP_CIPHER_CTX *, int type, int arg, void *ptr);
    262 #endif
    263 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    264     ChaChaPoly_Aead chachaPoly;
    265 #endif
    266 #ifdef HAVE_CHACHA
    267     ChaCha chacha;
    268 #endif
    269 #ifdef WOLFSSL_SM4
    270     wc_Sm4 sm4;
    271 #endif
    272 } WOLFSSL_Cipher;
    273 
    274 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    275 
    276 /* note, this WC_NID_undef definition duplicates the definition in
    277  * wolfcrypt/asn.h, which is gated out when -DNO_ASN.
    278  */
    279 #define WC_NID_undef                       0
    280 
    281 #define WC_NID_aes_128_cbc                 419
    282 #define WC_NID_aes_192_cbc                 423
    283 #define WC_NID_aes_256_cbc                 427
    284 #define WC_NID_aes_128_ccm                 896
    285 #define WC_NID_aes_192_ccm                 899
    286 #define WC_NID_aes_256_ccm                 902
    287 #define WC_NID_aes_128_gcm                 895
    288 #define WC_NID_aes_192_gcm                 898
    289 #define WC_NID_aes_256_gcm                 901
    290 #define WC_NID_aes_128_ctr                 904
    291 #define WC_NID_aes_192_ctr                 905
    292 #define WC_NID_aes_256_ctr                 906
    293 #define WC_NID_aes_128_ecb                 418
    294 #define WC_NID_aes_192_ecb                 422
    295 #define WC_NID_aes_256_ecb                 426
    296 #define WC_NID_des_cbc                     31
    297 #define WC_NID_des_ecb                     29
    298 #define WC_NID_des_ede3_cbc                44
    299 #define WC_NID_des_ede3_ecb                33
    300 #define WC_NID_aes_128_cfb1                650
    301 #define WC_NID_aes_192_cfb1                651
    302 #define WC_NID_aes_256_cfb1                652
    303 #define WC_NID_aes_128_cfb8                653
    304 #define WC_NID_aes_192_cfb8                654
    305 #define WC_NID_aes_256_cfb8                655
    306 #define WC_NID_aes_128_cfb128              421
    307 #define WC_NID_aes_192_cfb128              425
    308 #define WC_NID_aes_256_cfb128              429
    309 #define WC_NID_aes_128_ofb                 420
    310 #define WC_NID_aes_192_ofb                 424
    311 #define WC_NID_aes_256_ofb                 428
    312 #define WC_NID_aes_128_xts                 913
    313 #define WC_NID_aes_256_xts                 914
    314 #define WC_NID_camellia_128_cbc            751
    315 #define WC_NID_camellia_256_cbc            753
    316 #define WC_NID_chacha20_poly1305           1018
    317 #define WC_NID_chacha20                    1019
    318 #define WC_NID_sm4_ecb                     1133
    319 #define WC_NID_sm4_cbc                     1134
    320 #define WC_NID_sm4_ctr                     1139
    321 #define WC_NID_sm4_gcm                     1248
    322 #define WC_NID_sm4_ccm                     1249
    323 #define WC_NID_md5WithRSA                  104
    324 #define WC_NID_md2WithRSAEncryption        9
    325 #define WC_NID_md5WithRSAEncryption        99
    326 #define WC_NID_dsaWithSHA1                 113
    327 #define WC_NID_dsaWithSHA1_2               70
    328 #define WC_NID_sha1WithRSA                 115
    329 #define WC_NID_sha1WithRSAEncryption       65
    330 #define WC_NID_sha224WithRSAEncryption     671
    331 #define WC_NID_sha256WithRSAEncryption     668
    332 #define WC_NID_sha384WithRSAEncryption     669
    333 #define WC_NID_sha512WithRSAEncryption     670
    334 #define WC_NID_RSA_SHA3_224                1116
    335 #define WC_NID_RSA_SHA3_256                1117
    336 #define WC_NID_RSA_SHA3_384                1118
    337 #define WC_NID_RSA_SHA3_512                1119
    338 #define WC_NID_rsassaPss                   912
    339 #define WC_NID_ecdsa_with_SHA1             416
    340 #define WC_NID_ecdsa_with_SHA224           793
    341 #define WC_NID_ecdsa_with_SHA256           794
    342 #define WC_NID_ecdsa_with_SHA384           795
    343 #define WC_NID_ecdsa_with_SHA512           796
    344 #define WC_NID_ecdsa_with_SHA3_224         1112
    345 #define WC_NID_ecdsa_with_SHA3_256         1113
    346 #define WC_NID_ecdsa_with_SHA3_384         1114
    347 #define WC_NID_ecdsa_with_SHA3_512         1115
    348 #define WC_NID_dsa_with_SHA224             802
    349 #define WC_NID_dsa_with_SHA256             803
    350 #define WC_NID_sha3_224                    1096
    351 #define WC_NID_sha3_256                    1097
    352 #define WC_NID_sha3_384                    1098
    353 #define WC_NID_sha3_512                    1099
    354 #define WC_NID_blake2b512                  1056
    355 #define WC_NID_blake2s256                  1057
    356 #define WC_NID_shake128                    1100
    357 #define WC_NID_shake256                    1101
    358 #define WC_NID_sha1                        64
    359 #define WC_NID_sha224                      675
    360 #define WC_NID_sm3                         1143
    361 #define WC_NID_md2                         77
    362 #define WC_NID_md4                         257
    363 #define WC_NID_md5                         40
    364 #define WC_NID_hmac                        855
    365 #define WC_NID_hmacWithSHA1                163
    366 #define WC_NID_hmacWithSHA224              798
    367 #define WC_NID_hmacWithSHA256              799
    368 #define WC_NID_hmacWithSHA384              800
    369 #define WC_NID_hmacWithSHA512              801
    370 #define WC_NID_hkdf                        1036
    371 #define WC_NID_cmac                        894
    372 #define WC_NID_dhKeyAgreement              28
    373 #define WC_NID_ffdhe2048                   1126
    374 #define WC_NID_ffdhe3072                   1127
    375 #define WC_NID_ffdhe4096                   1128
    376 #define WC_NID_rc4                         5
    377 #define WC_NID_bf_cbc                      91
    378 #define WC_NID_bf_ecb                      92
    379 #define WC_NID_bf_cfb64                    93
    380 #define WC_NID_bf_ofb64                    94
    381 #define WC_NID_cast5_cbc                   108
    382 #define WC_NID_cast5_ecb                   109
    383 #define WC_NID_cast5_cfb64                 110
    384 #define WC_NID_cast5_ofb64                 111
    385 /* key exchange */
    386 #define WC_NID_kx_rsa                      1037
    387 #define WC_NID_kx_ecdhe                    1038
    388 #define WC_NID_kx_dhe                      1039
    389 #define WC_NID_kx_ecdhe_psk                1040
    390 #define WC_NID_kx_dhe_psk                  1041
    391 #define WC_NID_kx_rsa_psk                  1042
    392 #define WC_NID_kx_psk                      1043
    393 #define WC_NID_kx_srp                      1044
    394 #define WC_NID_kx_gost                     1045
    395 #define WC_NID_kx_any                      1063
    396 /* server authentication */
    397 #define WC_NID_auth_rsa                    1046
    398 #define WC_NID_auth_ecdsa                  1047
    399 #define WC_NID_auth_psk                    1048
    400 #define WC_NID_auth_dss                    1049
    401 #define WC_NID_auth_srp                    1052
    402 #define WC_NID_auth_null                   1054
    403 #define WC_NID_auth_any                    1055
    404 /* Curve */
    405 #define WC_NID_aria_128_gcm                1123
    406 #define WC_NID_aria_192_gcm                1124
    407 #define WC_NID_aria_256_gcm                1125
    408 #define WC_NID_sm2                         1172
    409 
    410 #define WC_NID_X9_62_id_ecPublicKey WC_EVP_PKEY_EC
    411 #define WC_NID_rsaEncryption        WC_EVP_PKEY_RSA
    412 #define WC_NID_rsa                  WC_EVP_PKEY_RSA
    413 #define WC_NID_dsa                  WC_EVP_PKEY_DSA
    414 
    415 enum {
    416     WC_EVP_PKEY_NONE          = WC_NID_undef,
    417     WC_AES_128_CBC_TYPE       = 1,
    418     WC_AES_192_CBC_TYPE       = 2,
    419     WC_AES_256_CBC_TYPE       = 3,
    420     WC_AES_128_CTR_TYPE       = 4,
    421     WC_AES_192_CTR_TYPE       = 5,
    422     WC_AES_256_CTR_TYPE       = 6,
    423     WC_AES_128_ECB_TYPE       = 7,
    424     WC_AES_192_ECB_TYPE       = 8,
    425     WC_AES_256_ECB_TYPE       = 9,
    426     WC_DES_CBC_TYPE           = 10,
    427     WC_DES_ECB_TYPE           = 11,
    428     WC_DES_EDE3_CBC_TYPE      = 12,
    429     WC_DES_EDE3_ECB_TYPE      = 13,
    430     WC_ARC4_TYPE              = 14,
    431     WC_NULL_CIPHER_TYPE       = 15,
    432     WC_EVP_PKEY_RSA           = 16,
    433     WC_EVP_PKEY_DSA           = 17,
    434     WC_EVP_PKEY_EC            = 18,
    435     WC_AES_128_GCM_TYPE       = 21,
    436     WC_AES_192_GCM_TYPE       = 22,
    437     WC_AES_256_GCM_TYPE       = 23,
    438     WC_EVP_PKEY_DH            = WC_NID_dhKeyAgreement,
    439     WC_EVP_PKEY_HMAC          = WC_NID_hmac,
    440     WC_EVP_PKEY_CMAC          = WC_NID_cmac,
    441     WC_EVP_PKEY_HKDF          = WC_NID_hkdf,
    442     WC_EVP_PKEY_FALCON        = 300, /* Randomly picked value. */
    443     WC_EVP_PKEY_DILITHIUM     = 301, /* Randomly picked value. */
    444     WC_AES_128_CFB1_TYPE      = 24,
    445     WC_AES_192_CFB1_TYPE      = 25,
    446     WC_AES_256_CFB1_TYPE      = 26,
    447     WC_AES_128_CFB8_TYPE      = 27,
    448     WC_AES_192_CFB8_TYPE      = 28,
    449     WC_AES_256_CFB8_TYPE      = 29,
    450     WC_AES_128_CFB128_TYPE    = 30,
    451     WC_AES_192_CFB128_TYPE    = 31,
    452     WC_AES_256_CFB128_TYPE    = 32,
    453     WC_AES_128_OFB_TYPE       = 33,
    454     WC_AES_192_OFB_TYPE       = 34,
    455     WC_AES_256_OFB_TYPE       = 35,
    456     WC_AES_128_XTS_TYPE       = 36,
    457     WC_AES_256_XTS_TYPE       = 37,
    458     WC_CHACHA20_POLY1305_TYPE = 38,
    459     WC_CHACHA20_TYPE          = 39,
    460     WC_AES_128_CCM_TYPE       = 40,
    461     WC_AES_192_CCM_TYPE       = 41,
    462     WC_AES_256_CCM_TYPE       = 42,
    463     WC_SM4_ECB_TYPE           = 43,
    464     WC_SM4_CBC_TYPE           = 44,
    465     WC_SM4_CTR_TYPE           = 45,
    466     WC_SM4_GCM_TYPE           = 46,
    467     WC_SM4_CCM_TYPE           = 47,
    468     WC_ARIA_128_GCM_TYPE      = 48,
    469     WC_ARIA_192_GCM_TYPE      = 49,
    470     WC_ARIA_256_GCM_TYPE      = 50
    471 };
    472 
    473 #define WOLFSSL_EVP_PKEY_PRINT_INDENT_MAX    128
    474 
    475 #define WC_EVP_PKEY_OP_SIGN    (1 << 3)
    476 #define WC_EVP_PKEY_OP_VERIFY  (1 << 5)
    477 #define WC_EVP_PKEY_OP_ENCRYPT (1 << 6)
    478 #define WC_EVP_PKEY_OP_DECRYPT (1 << 7)
    479 #define WC_EVP_PKEY_OP_DERIVE  (1 << 8)
    480 
    481 #ifndef OPENSSL_COEXIST
    482 
    483 #define EVP_PKEY_NONE WC_EVP_PKEY_NONE
    484 #define AES_128_CBC_TYPE WC_AES_128_CBC_TYPE
    485 #define AES_192_CBC_TYPE WC_AES_192_CBC_TYPE
    486 #define AES_256_CBC_TYPE WC_AES_256_CBC_TYPE
    487 #define AES_128_CTR_TYPE WC_AES_128_CTR_TYPE
    488 #define AES_192_CTR_TYPE WC_AES_192_CTR_TYPE
    489 #define AES_256_CTR_TYPE WC_AES_256_CTR_TYPE
    490 #define AES_128_ECB_TYPE WC_AES_128_ECB_TYPE
    491 #define AES_192_ECB_TYPE WC_AES_192_ECB_TYPE
    492 #define AES_256_ECB_TYPE WC_AES_256_ECB_TYPE
    493 #define DES_CBC_TYPE WC_DES_CBC_TYPE
    494 #define DES_ECB_TYPE WC_DES_ECB_TYPE
    495 #define DES_EDE3_CBC_TYPE WC_DES_EDE3_CBC_TYPE
    496 #define DES_EDE3_ECB_TYPE WC_DES_EDE3_ECB_TYPE
    497 #define ARC4_TYPE WC_ARC4_TYPE
    498 #define NULL_CIPHER_TYPE WC_NULL_CIPHER_TYPE
    499 #define EVP_PKEY_RSA WC_EVP_PKEY_RSA
    500 #define EVP_PKEY_DSA WC_EVP_PKEY_DSA
    501 #define EVP_PKEY_EC WC_EVP_PKEY_EC
    502 #define AES_128_GCM_TYPE WC_AES_128_GCM_TYPE
    503 #define AES_192_GCM_TYPE WC_AES_192_GCM_TYPE
    504 #define AES_256_GCM_TYPE WC_AES_256_GCM_TYPE
    505 #define EVP_PKEY_DH WC_EVP_PKEY_DH
    506 #define EVP_PKEY_HMAC WC_EVP_PKEY_HMAC
    507 #define EVP_PKEY_CMAC WC_EVP_PKEY_CMAC
    508 #define EVP_PKEY_HKDF WC_EVP_PKEY_HKDF
    509 #define EVP_PKEY_FALCON WC_EVP_PKEY_FALCON
    510 #define EVP_PKEY_DILITHIUM WC_EVP_PKEY_DILITHIUM
    511 #define AES_128_CFB1_TYPE WC_AES_128_CFB1_TYPE
    512 #define AES_192_CFB1_TYPE WC_AES_192_CFB1_TYPE
    513 #define AES_256_CFB1_TYPE WC_AES_256_CFB1_TYPE
    514 #define AES_128_CFB8_TYPE WC_AES_128_CFB8_TYPE
    515 #define AES_192_CFB8_TYPE WC_AES_192_CFB8_TYPE
    516 #define AES_256_CFB8_TYPE WC_AES_256_CFB8_TYPE
    517 #define AES_128_CFB128_TYPE WC_AES_128_CFB128_TYPE
    518 #define AES_192_CFB128_TYPE WC_AES_192_CFB128_TYPE
    519 #define AES_256_CFB128_TYPE WC_AES_256_CFB128_TYPE
    520 #define AES_128_OFB_TYPE WC_AES_128_OFB_TYPE
    521 #define AES_192_OFB_TYPE WC_AES_192_OFB_TYPE
    522 #define AES_256_OFB_TYPE WC_AES_256_OFB_TYPE
    523 #define AES_128_XTS_TYPE WC_AES_128_XTS_TYPE
    524 #define AES_256_XTS_TYPE WC_AES_256_XTS_TYPE
    525 #define CHACHA20_POLY1305_TYPE WC_CHACHA20_POLY1305_TYPE
    526 #define CHACHA20_TYPE WC_CHACHA20_TYPE
    527 #define AES_128_CCM_TYPE WC_AES_128_CCM_TYPE
    528 #define AES_192_CCM_TYPE WC_AES_192_CCM_TYPE
    529 #define AES_256_CCM_TYPE WC_AES_256_CCM_TYPE
    530 #define SM4_ECB_TYPE WC_SM4_ECB_TYPE
    531 #define SM4_CBC_TYPE WC_SM4_CBC_TYPE
    532 #define SM4_CTR_TYPE WC_SM4_CTR_TYPE
    533 #define SM4_GCM_TYPE WC_SM4_GCM_TYPE
    534 #define SM4_CCM_TYPE WC_SM4_CCM_TYPE
    535 #define ARIA_128_GCM_TYPE WC_ARIA_128_GCM_TYPE
    536 #define ARIA_192_GCM_TYPE WC_ARIA_192_GCM_TYPE
    537 #define ARIA_256_GCM_TYPE WC_ARIA_256_GCM_TYPE
    538 
    539 #define NID_aes_128_cbc WC_NID_aes_128_cbc
    540 #define NID_aes_192_cbc WC_NID_aes_192_cbc
    541 #define NID_aes_256_cbc WC_NID_aes_256_cbc
    542 #define NID_aes_128_ccm WC_NID_aes_128_ccm
    543 #define NID_aes_192_ccm WC_NID_aes_192_ccm
    544 #define NID_aes_256_ccm WC_NID_aes_256_ccm
    545 #define NID_aes_128_gcm WC_NID_aes_128_gcm
    546 #define NID_aes_192_gcm WC_NID_aes_192_gcm
    547 #define NID_aes_256_gcm WC_NID_aes_256_gcm
    548 #define NID_aes_128_ctr WC_NID_aes_128_ctr
    549 #define NID_aes_192_ctr WC_NID_aes_192_ctr
    550 #define NID_aes_256_ctr WC_NID_aes_256_ctr
    551 #define NID_aes_128_ecb WC_NID_aes_128_ecb
    552 #define NID_aes_192_ecb WC_NID_aes_192_ecb
    553 #define NID_aes_256_ecb WC_NID_aes_256_ecb
    554 #define NID_des_cbc WC_NID_des_cbc
    555 #define NID_des_ecb WC_NID_des_ecb
    556 #define NID_des_ede3_cbc WC_NID_des_ede3_cbc
    557 #define NID_des_ede3_ecb WC_NID_des_ede3_ecb
    558 #define NID_aes_128_cfb1 WC_NID_aes_128_cfb1
    559 #define NID_aes_192_cfb1 WC_NID_aes_192_cfb1
    560 #define NID_aes_256_cfb1 WC_NID_aes_256_cfb1
    561 #define NID_aes_128_cfb8 WC_NID_aes_128_cfb8
    562 #define NID_aes_192_cfb8 WC_NID_aes_192_cfb8
    563 #define NID_aes_256_cfb8 WC_NID_aes_256_cfb8
    564 #define NID_aes_128_cfb128 WC_NID_aes_128_cfb128
    565 #define NID_aes_192_cfb128 WC_NID_aes_192_cfb128
    566 #define NID_aes_256_cfb128 WC_NID_aes_256_cfb128
    567 #define NID_aes_128_ofb WC_NID_aes_128_ofb
    568 #define NID_aes_192_ofb WC_NID_aes_192_ofb
    569 #define NID_aes_256_ofb WC_NID_aes_256_ofb
    570 #define NID_aes_128_xts WC_NID_aes_128_xts
    571 #define NID_aes_256_xts WC_NID_aes_256_xts
    572 #define NID_camellia_128_cbc WC_NID_camellia_128_cbc
    573 #define NID_camellia_256_cbc WC_NID_camellia_256_cbc
    574 #define NID_chacha20_poly1305 WC_NID_chacha20_poly1305
    575 #define NID_chacha20 WC_NID_chacha20
    576 #define NID_sm4_ecb WC_NID_sm4_ecb
    577 #define NID_sm4_cbc WC_NID_sm4_cbc
    578 #define NID_sm4_ctr WC_NID_sm4_ctr
    579 #define NID_sm4_gcm WC_NID_sm4_gcm
    580 #define NID_sm4_ccm WC_NID_sm4_ccm
    581 #define NID_md5WithRSA WC_NID_md5WithRSA
    582 #define NID_md2WithRSAEncryption WC_NID_md2WithRSAEncryption
    583 #define NID_md5WithRSAEncryption WC_NID_md5WithRSAEncryption
    584 #define NID_dsaWithSHA1 WC_NID_dsaWithSHA1
    585 #define NID_dsaWithSHA1_2 WC_NID_dsaWithSHA1_2
    586 #define NID_sha1WithRSA WC_NID_sha1WithRSA
    587 #define NID_sha1WithRSAEncryption WC_NID_sha1WithRSAEncryption
    588 #define NID_sha224WithRSAEncryption WC_NID_sha224WithRSAEncryption
    589 #define NID_sha256WithRSAEncryption WC_NID_sha256WithRSAEncryption
    590 #define NID_sha384WithRSAEncryption WC_NID_sha384WithRSAEncryption
    591 #define NID_sha512WithRSAEncryption WC_NID_sha512WithRSAEncryption
    592 #define NID_RSA_SHA3_224 WC_NID_RSA_SHA3_224
    593 #define NID_RSA_SHA3_256 WC_NID_RSA_SHA3_256
    594 #define NID_RSA_SHA3_384 WC_NID_RSA_SHA3_384
    595 #define NID_RSA_SHA3_512 WC_NID_RSA_SHA3_512
    596 #define NID_rsassaPss WC_NID_rsassaPss
    597 #define NID_ecdsa_with_SHA1 WC_NID_ecdsa_with_SHA1
    598 #define NID_ecdsa_with_SHA224 WC_NID_ecdsa_with_SHA224
    599 #define NID_ecdsa_with_SHA256 WC_NID_ecdsa_with_SHA256
    600 #define NID_ecdsa_with_SHA384 WC_NID_ecdsa_with_SHA384
    601 #define NID_ecdsa_with_SHA512 WC_NID_ecdsa_with_SHA512
    602 #define NID_ecdsa_with_SHA3_224 WC_NID_ecdsa_with_SHA3_224
    603 #define NID_ecdsa_with_SHA3_256 WC_NID_ecdsa_with_SHA3_256
    604 #define NID_ecdsa_with_SHA3_384 WC_NID_ecdsa_with_SHA3_384
    605 #define NID_ecdsa_with_SHA3_512 WC_NID_ecdsa_with_SHA3_512
    606 #define NID_dsa_with_SHA224 WC_NID_dsa_with_SHA224
    607 #define NID_dsa_with_SHA256 WC_NID_dsa_with_SHA256
    608 #define NID_sha3_224 WC_NID_sha3_224
    609 #define NID_sha3_256 WC_NID_sha3_256
    610 #define NID_sha3_384 WC_NID_sha3_384
    611 #define NID_sha3_512 WC_NID_sha3_512
    612 #define NID_blake2b512 WC_NID_blake2b512
    613 #define NID_blake2s256 WC_NID_blake2s256
    614 #define NID_shake128 WC_NID_shake128
    615 #define NID_shake256 WC_NID_shake256
    616 #define NID_sha1 WC_NID_sha1
    617 #define NID_sha224 WC_NID_sha224
    618 #define NID_sm3 WC_NID_sm3
    619 #define NID_md2 WC_NID_md2
    620 #define NID_md4 WC_NID_md4
    621 #define NID_md5 WC_NID_md5
    622 #define NID_hmac WC_NID_hmac
    623 #define NID_hmacWithSHA1 WC_NID_hmacWithSHA1
    624 #define NID_hmacWithSHA224 WC_NID_hmacWithSHA224
    625 #define NID_hmacWithSHA256 WC_NID_hmacWithSHA256
    626 #define NID_hmacWithSHA384 WC_NID_hmacWithSHA384
    627 #define NID_hmacWithSHA512 WC_NID_hmacWithSHA512
    628 #define NID_hkdf WC_NID_hkdf
    629 #define NID_cmac WC_NID_cmac
    630 #define NID_dhKeyAgreement WC_NID_dhKeyAgreement
    631 #define NID_ffdhe2048 WC_NID_ffdhe2048
    632 #define NID_ffdhe3072 WC_NID_ffdhe3072
    633 #define NID_ffdhe4096 WC_NID_ffdhe4096
    634 #define NID_rc4 WC_NID_rc4
    635 #define NID_bf_cbc WC_NID_bf_cbc
    636 #define NID_bf_ecb WC_NID_bf_ecb
    637 #define NID_bf_cfb64 WC_NID_bf_cfb64
    638 #define NID_bf_ofb64 WC_NID_bf_ofb64
    639 #define NID_cast5_cbc WC_NID_cast5_cbc
    640 #define NID_cast5_ecb WC_NID_cast5_ecb
    641 #define NID_cast5_cfb64 WC_NID_cast5_cfb64
    642 #define NID_cast5_ofb64 WC_NID_cast5_ofb64
    643 /* key exchange */
    644 #define NID_kx_rsa WC_NID_kx_rsa
    645 #define NID_kx_ecdhe WC_NID_kx_ecdhe
    646 #define NID_kx_dhe WC_NID_kx_dhe
    647 #define NID_kx_ecdhe_psk WC_NID_kx_ecdhe_psk
    648 #define NID_kx_dhe_psk WC_NID_kx_dhe_psk
    649 #define NID_kx_rsa_psk WC_NID_kx_rsa_psk
    650 #define NID_kx_psk WC_NID_kx_psk
    651 #define NID_kx_srp WC_NID_kx_srp
    652 #define NID_kx_gost WC_NID_kx_gost
    653 #define NID_kx_any WC_NID_kx_any
    654 /* server authentication */
    655 #define NID_auth_rsa WC_NID_auth_rsa
    656 #define NID_auth_ecdsa WC_NID_auth_ecdsa
    657 #define NID_auth_psk WC_NID_auth_psk
    658 #define NID_auth_dss WC_NID_auth_dss
    659 #define NID_auth_srp WC_NID_auth_srp
    660 #define NID_auth_null WC_NID_auth_null
    661 #define NID_auth_any WC_NID_auth_any
    662 /* Curve */
    663 #define NID_aria_128_gcm WC_NID_aria_128_gcm
    664 #define NID_aria_192_gcm WC_NID_aria_192_gcm
    665 #define NID_aria_256_gcm WC_NID_aria_256_gcm
    666 #define NID_sm2 WC_NID_sm2
    667 
    668 #define NID_X9_62_id_ecPublicKey WC_NID_X9_62_id_ecPublicKey
    669 #define NID_rsaEncryption WC_NID_rsaEncryption
    670 #define NID_rsa WC_NID_rsa
    671 #define NID_dsa WC_NID_dsa
    672 
    673 #define EVP_PKEY_OP_SIGN     WC_EVP_PKEY_OP_SIGN
    674 #define EVP_PKEY_OP_VERIFY   WC_EVP_PKEY_OP_VERIFY
    675 #define EVP_PKEY_OP_ENCRYPT  WC_EVP_PKEY_OP_ENCRYPT
    676 #define EVP_PKEY_OP_DECRYPT  WC_EVP_PKEY_OP_DECRYPT
    677 #define EVP_PKEY_OP_DERIVE   WC_EVP_PKEY_OP_DERIVE
    678 
    679 #define EVP_PKEY_PRINT_INDENT_MAX WOLFSSL_EVP_PKEY_PRINT_INDENT_MAX
    680 
    681 #endif /* !OPENSSL_COEXIST */
    682 
    683 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
    684 
    685 
    686 #define WOLFSSL_EVP_BUF_SIZE 16
    687 struct WOLFSSL_EVP_CIPHER_CTX {
    688     int            keyLen;         /* user may set for variable */
    689     int            block_size;
    690     unsigned long  flags;
    691     unsigned char  enc;            /* if encrypt side, then true */
    692     unsigned char  cipherType;
    693 #if !defined(NO_AES)
    694     /* working iv pointer into cipher */
    695     ALIGN16 unsigned char  iv[WC_AES_BLOCK_SIZE];
    696 #elif defined(WOLFSSL_SM4)
    697     ALIGN16 unsigned char  iv[SM4_BLOCK_SIZE];
    698 #elif defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    699     ALIGN16 unsigned char  iv[CHACHA20_POLY1305_AEAD_IV_SIZE];
    700 #elif !defined(NO_DES3)
    701     ALIGN16 unsigned char  iv[DES_BLOCK_SIZE];
    702 #endif
    703     WOLFSSL_Cipher  cipher;
    704     ALIGN16 byte buf[WOLFSSL_EVP_BUF_SIZE];
    705     int  bufUsed;
    706     ALIGN16 byte lastBlock[WOLFSSL_EVP_BUF_SIZE];
    707     int  lastUsed;
    708 #if !defined(NO_AES) || !defined(NO_DES3) || defined(HAVE_AESGCM) || \
    709     defined (WOLFSSL_AES_XTS) || (defined(HAVE_CHACHA) || \
    710     defined(HAVE_POLY1305) || defined(HAVE_AESCCM)) || \
    711     defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM)
    712 #define HAVE_WOLFSSL_EVP_CIPHER_CTX_IV
    713     int    ivSz;
    714 #if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || \
    715     defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM)
    716     byte*   authBuffer;
    717     int     authBufferLen;
    718     byte*   authIn;
    719     int     authInSz;
    720 #endif
    721 #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    722     byte*   key;                 /* used in partial Init()s */
    723 #endif
    724 #if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || defined(HAVE_ARIA) || \
    725     defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM) || \
    726     (defined(HAVE_CHACHA) && defined(HAVE_POLY1305))
    727 #if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || defined(HAVE_ARIA)
    728     ALIGN16 unsigned char authTag[WC_AES_BLOCK_SIZE];
    729 #elif defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM)
    730     ALIGN16 unsigned char authTag[SM4_BLOCK_SIZE];
    731 #else
    732     ALIGN16 unsigned char authTag[CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE];
    733 #endif
    734     int     authTagSz;
    735 #endif
    736 #if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || \
    737     defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM)
    738     WC_BITFIELD authIvGenEnable:1;
    739     WC_BITFIELD authIncIv:1;
    740 #endif
    741 #endif
    742 };
    743 
    744 struct WOLFSSL_EVP_PKEY_CTX {
    745     WOLFSSL_EVP_PKEY *pkey;
    746     WOLFSSL_EVP_PKEY *peerKey;
    747     int op; /* operation */
    748     int padding;
    749     int nbits;
    750 #ifdef HAVE_ECC
    751     int curveNID;
    752 #endif
    753 #ifndef NO_RSA
    754     const WOLFSSL_EVP_MD* md;
    755     const WOLFSSL_EVP_MD* mgf1_md;
    756     int saltlen;
    757 #endif /* !NO_RSA */
    758 };
    759 
    760 struct WOLFSSL_ASN1_PCTX {
    761     int dummy;
    762 };
    763 #if defined(WOLFSSL_BASE64_ENCODE) || defined(WOLFSSL_BASE64_DECODE)
    764 
    765 #define   BASE64_ENCODE_BLOCK_SIZE  48
    766 #define   BASE64_ENCODE_RESULT_BLOCK_SIZE 64
    767 #define   BASE64_DECODE_BLOCK_SIZE  4
    768 
    769 struct WOLFSSL_EVP_ENCODE_CTX {
    770     void* heap;
    771     int   remaining;     /* num of bytes in data[] */
    772     byte  data[BASE64_ENCODE_BLOCK_SIZE];/* storage for unprocessed raw data */
    773 };
    774 typedef struct WOLFSSL_EVP_ENCODE_CTX WOLFSSL_EVP_ENCODE_CTX;
    775 
    776 WOLFSSL_API struct WOLFSSL_EVP_ENCODE_CTX* wolfSSL_EVP_ENCODE_CTX_new(void);
    777 WOLFSSL_API void wolfSSL_EVP_ENCODE_CTX_free(WOLFSSL_EVP_ENCODE_CTX* ctx);
    778 #endif /* WOLFSSL_BASE64_ENCODE || WOLFSSL_BASE64_DECODE */
    779 
    780 #if defined(WOLFSSL_BASE64_ENCODE)
    781 WOLFSSL_API void wolfSSL_EVP_EncodeInit(WOLFSSL_EVP_ENCODE_CTX* ctx);
    782 WOLFSSL_API int  wolfSSL_EVP_EncodeUpdate(WOLFSSL_EVP_ENCODE_CTX* ctx,
    783                  unsigned char*out, int *outl, const unsigned char*in, int inl);
    784 WOLFSSL_API void wolfSSL_EVP_EncodeFinal(WOLFSSL_EVP_ENCODE_CTX* ctx,
    785                  unsigned char*out, int *outl);
    786 WOLFSSL_API int wolfSSL_EVP_EncodeBlock(unsigned char *out,
    787                 const unsigned char *in, int inLen);
    788 WOLFSSL_API int wolfSSL_EVP_DecodeBlock(unsigned char *out,
    789                 const unsigned char *in, int inLen);
    790 #endif /* WOLFSSL_BASE64_ENCODE */
    791 
    792 #if defined(WOLFSSL_BASE64_DECODE)
    793 WOLFSSL_API void wolfSSL_EVP_DecodeInit(WOLFSSL_EVP_ENCODE_CTX* ctx);
    794 WOLFSSL_API int  wolfSSL_EVP_DecodeUpdate(WOLFSSL_EVP_ENCODE_CTX* ctx,
    795                 unsigned char*out, int *outl, const unsigned char*in, int inl);
    796 WOLFSSL_API int wolfSSL_EVP_DecodeFinal(WOLFSSL_EVP_ENCODE_CTX* ctx,
    797                 unsigned char*out, int *outl);
    798 #endif /* WOLFSSL_BASE64_DECODE */
    799 
    800 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2b512(void);
    801 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_blake2s256(void);
    802 
    803 WOLFSSL_API void wolfSSL_EVP_init(void);
    804 WOLFSSL_API int  wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type);
    805 WOLFSSL_API int  wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type);
    806 WOLFSSL_API unsigned long wolfSSL_EVP_MD_flags(const WOLFSSL_EVP_MD *md);
    807 WOLFSSL_API int  wolfSSL_EVP_MD_block_size(const WOLFSSL_EVP_MD* type);
    808 WOLFSSL_API int  wolfSSL_EVP_MD_pkey_type(const WOLFSSL_EVP_MD* type);
    809 
    810 WOLFSSL_API WOLFSSL_EVP_MD_CTX *wolfSSL_EVP_MD_CTX_new (void);
    811 WOLFSSL_API void                wolfSSL_EVP_MD_CTX_free(WOLFSSL_EVP_MD_CTX* ctx);
    812 WOLFSSL_API void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx);
    813 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_cleanup(WOLFSSL_EVP_MD_CTX* ctx);
    814 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_copy(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in);
    815 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_copy_ex(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in);
    816 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_type(const WOLFSSL_EVP_MD_CTX *ctx);
    817 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_size(const WOLFSSL_EVP_MD_CTX *ctx);
    818 WOLFSSL_API int  wolfSSL_EVP_MD_CTX_block_size(const WOLFSSL_EVP_MD_CTX *ctx);
    819 WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_MD_CTX_md(const WOLFSSL_EVP_MD_CTX *ctx);
    820 WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_get_cipherbyname(const char *name);
    821 WOLFSSL_API const WOLFSSL_EVP_MD     *wolfSSL_EVP_get_digestbyname(const char *name);
    822 WOLFSSL_API int wolfSSL_EVP_CIPHER_nid(const WOLFSSL_EVP_CIPHER *cipher);
    823 
    824 WOLFSSL_API int wolfSSL_EVP_DigestInit(WOLFSSL_EVP_MD_CTX* ctx,
    825                                      const WOLFSSL_EVP_MD* type);
    826 WOLFSSL_API int wolfSSL_EVP_DigestUpdate(WOLFSSL_EVP_MD_CTX* ctx, const void* data,
    827                                        size_t sz);
    828 WOLFSSL_API int wolfSSL_EVP_DigestFinal(WOLFSSL_EVP_MD_CTX* ctx, unsigned char* md,
    829                                       unsigned int* s);
    830 WOLFSSL_API int wolfSSL_EVP_DigestFinal_ex(WOLFSSL_EVP_MD_CTX* ctx,
    831                                             unsigned char* md, unsigned int* s);
    832 WOLFSSL_API int wolfSSL_EVP_DigestFinalXOF(WOLFSSL_EVP_MD_CTX* ctx,
    833                                             unsigned char* md, size_t sz);
    834 WOLFSSL_API int wolfSSL_EVP_DigestSignUpdate(WOLFSSL_EVP_MD_CTX *ctx,
    835                                              const void *d, unsigned int cnt);
    836 WOLFSSL_API int wolfSSL_EVP_DigestSignFinal(WOLFSSL_EVP_MD_CTX *ctx,
    837                                             unsigned char *sig, size_t *siglen);
    838 WOLFSSL_API int wolfSSL_EVP_DigestVerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx,
    839                                                const void *d, size_t cnt);
    840 WOLFSSL_API int wolfSSL_EVP_DigestVerifyFinal(WOLFSSL_EVP_MD_CTX *ctx,
    841                                               const unsigned char *sig,
    842                                               size_t siglen);
    843 
    844 WOLFSSL_API int wolfSSL_EVP_BytesToKey(const WOLFSSL_EVP_CIPHER* type,
    845                        const WOLFSSL_EVP_MD* md, const byte* salt,
    846                        const byte* data, int sz, int count, byte* key, byte* iv);
    847 
    848 WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_init(WOLFSSL_EVP_CIPHER_CTX* ctx);
    849 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_cleanup(WOLFSSL_EVP_CIPHER_CTX* ctx);
    850 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_ctrl(WOLFSSL_EVP_CIPHER_CTX *ctx, \
    851                                              int type, int arg, void *ptr);
    852 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_iv_length(
    853                                     const WOLFSSL_EVP_CIPHER_CTX* ctx);
    854 WOLFSSL_API int  wolfSSL_EVP_CIPHER_iv_length(const WOLFSSL_EVP_CIPHER* cipher);
    855 WOLFSSL_API int wolfSSL_EVP_Cipher_key_length(const WOLFSSL_EVP_CIPHER* c);
    856 
    857 
    858 WOLFSSL_API int  wolfSSL_EVP_CipherInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
    859                                     const WOLFSSL_EVP_CIPHER* type,
    860                                     const unsigned char* key,
    861                                     const unsigned char* iv,
    862                                     int enc);
    863 WOLFSSL_API int wolfSSL_EVP_CipherUpdate(WOLFSSL_EVP_CIPHER_CTX *ctx,
    864                                    unsigned char *out, int *outl,
    865                                    const unsigned char *in, int inl);
    866 WOLFSSL_API int  wolfSSL_EVP_CipherFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
    867                                    unsigned char *out, int *outl);
    868 WOLFSSL_API int  wolfSSL_EVP_CipherFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
    869                                    unsigned char *out, int *outl, int enc);
    870 WOLFSSL_API int  wolfSSL_EVP_EncryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
    871                                    unsigned char *out, int *outl);
    872 WOLFSSL_API int  wolfSSL_EVP_EncryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
    873                                    unsigned char *out, int *outl);
    874 WOLFSSL_API int  wolfSSL_EVP_DecryptFinal(WOLFSSL_EVP_CIPHER_CTX *ctx,
    875                                    unsigned char *out, int *outl);
    876 WOLFSSL_API int  wolfSSL_EVP_DecryptFinal_ex(WOLFSSL_EVP_CIPHER_CTX *ctx,
    877                                    unsigned char *out, int *outl);
    878 WOLFSSL_API int  wolfSSL_EVP_DecryptFinal_legacy(WOLFSSL_EVP_CIPHER_CTX *ctx,
    879                                    unsigned char *out, int *outl);
    880 
    881 WOLFSSL_API WOLFSSL_EVP_CIPHER_CTX *wolfSSL_EVP_CIPHER_CTX_new(void);
    882 WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx);
    883 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_reset(WOLFSSL_EVP_CIPHER_CTX *ctx);
    884 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_nid(const WOLFSSL_EVP_CIPHER_CTX *ctx);
    885 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx);
    886 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx,
    887                                                      int keylen);
    888 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_set_iv_length(WOLFSSL_EVP_CIPHER_CTX* ctx,
    889                                                      int ivLen);
    890 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_set_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, byte* iv,
    891                                                      int ivLen);
    892 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_get_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, byte* iv,
    893                                                      int ivLen);
    894 WOLFSSL_API int  wolfSSL_EVP_Cipher(WOLFSSL_EVP_CIPHER_CTX* ctx,
    895                           unsigned char* dst, unsigned char* src,
    896                           unsigned int len);
    897 
    898 WOLFSSL_API const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_get_cipherbynid(int id);
    899 WOLFSSL_API const WOLFSSL_EVP_MD* wolfSSL_EVP_get_digestbynid(int id);
    900 WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_CIPHER_CTX_cipher(const WOLFSSL_EVP_CIPHER_CTX *ctx);
    901 
    902 WOLFSSL_API int wolfSSL_EVP_PKEY_assign_RSA(WOLFSSL_EVP_PKEY* pkey,
    903                                             WOLFSSL_RSA* key);
    904 WOLFSSL_API int wolfSSL_EVP_PKEY_assign_EC_KEY(WOLFSSL_EVP_PKEY* pkey,
    905                                                WOLFSSL_EC_KEY* key);
    906 WOLFSSL_API int wolfSSL_EVP_PKEY_assign_DSA(WOLFSSL_EVP_PKEY* pkey, WOLFSSL_DSA* key);
    907 WOLFSSL_API int wolfSSL_EVP_PKEY_assign_DH(WOLFSSL_EVP_PKEY* pkey, WOLFSSL_DH* key);
    908 WOLFSSL_API WOLFSSL_RSA* wolfSSL_EVP_PKEY_get0_RSA(WOLFSSL_EVP_PKEY *pkey);
    909 WOLFSSL_API WOLFSSL_DSA* wolfSSL_EVP_PKEY_get0_DSA(WOLFSSL_EVP_PKEY *pkey);
    910 WOLFSSL_API WOLFSSL_RSA* wolfSSL_EVP_PKEY_get1_RSA(WOLFSSL_EVP_PKEY* key);
    911 WOLFSSL_API WOLFSSL_DSA* wolfSSL_EVP_PKEY_get1_DSA(WOLFSSL_EVP_PKEY* key);
    912 WOLFSSL_API WOLFSSL_EC_KEY *wolfSSL_EVP_PKEY_get0_EC_KEY(WOLFSSL_EVP_PKEY *pkey);
    913 WOLFSSL_API WOLFSSL_EC_KEY *wolfSSL_EVP_PKEY_get1_EC_KEY(WOLFSSL_EVP_PKEY *key);
    914 WOLFSSL_API WOLFSSL_DH* wolfSSL_EVP_PKEY_get0_DH(WOLFSSL_EVP_PKEY* key);
    915 WOLFSSL_API WOLFSSL_DH* wolfSSL_EVP_PKEY_get1_DH(WOLFSSL_EVP_PKEY* key);
    916 WOLFSSL_API int wolfSSL_EVP_PKEY_set1_RSA(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_RSA *key);
    917 WOLFSSL_API int wolfSSL_EVP_PKEY_set1_DSA(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_DSA *key);
    918 WOLFSSL_API int wolfSSL_EVP_PKEY_set1_DH(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_DH *key);
    919 WOLFSSL_API int wolfSSL_EVP_PKEY_set1_EC_KEY(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_EC_KEY *key);
    920 WOLFSSL_API int wolfSSL_EVP_PKEY_assign(WOLFSSL_EVP_PKEY *pkey, int type, void *key);
    921 
    922 WOLFSSL_API const unsigned char* wolfSSL_EVP_PKEY_get0_hmac(const WOLFSSL_EVP_PKEY* pkey,
    923         size_t* len);
    924 WOLFSSL_API int wolfSSL_EVP_PKEY_sign_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    925 WOLFSSL_API int wolfSSL_EVP_PKEY_sign(WOLFSSL_EVP_PKEY_CTX *ctx,
    926   unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen);
    927 WOLFSSL_API int wolfSSL_EVP_PKEY_verify_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    928 WOLFSSL_API int wolfSSL_EVP_PKEY_verify(WOLFSSL_EVP_PKEY_CTX *ctx, const unsigned char *sig,
    929   size_t siglen, const unsigned char *tbs, size_t tbslen);
    930 WOLFSSL_API int wolfSSL_EVP_PKEY_paramgen_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    931 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_ec_paramgen_curve_nid(WOLFSSL_EVP_PKEY_CTX *ctx,
    932         int nid);
    933 WOLFSSL_API int wolfSSL_EVP_PKEY_paramgen(WOLFSSL_EVP_PKEY_CTX* ctx,
    934                                           WOLFSSL_EVP_PKEY** pkey);
    935 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_ec_param_enc(WOLFSSL_EVP_PKEY_CTX *ctx,
    936         int flag);
    937 WOLFSSL_API int wolfSSL_EVP_PKEY_keygen_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    938 WOLFSSL_API int wolfSSL_EVP_PKEY_keygen(WOLFSSL_EVP_PKEY_CTX *ctx,
    939   WOLFSSL_EVP_PKEY **ppkey);
    940 WOLFSSL_API int wolfSSL_EVP_PKEY_bits(const WOLFSSL_EVP_PKEY *pkey);
    941 WOLFSSL_API int wolfSSL_EVP_PKEY_is_a(const WOLFSSL_EVP_PKEY *pkey,
    942                                       const char *name);
    943 #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L
    944 WOLFSSL_API void wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx);
    945 #else
    946 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx);
    947 #endif
    948 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_padding(WOLFSSL_EVP_PKEY_CTX *ctx, int padding);
    949 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_signature_md(WOLFSSL_EVP_PKEY_CTX *ctx,
    950     const WOLFSSL_EVP_MD* md);
    951 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_keygen_bits(WOLFSSL_EVP_PKEY_CTX *ctx, int bits);
    952 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_pss_saltlen(WOLFSSL_EVP_PKEY_CTX *ctx, int saltlen);
    953 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_mgf1_md(WOLFSSL_EVP_PKEY_CTX *ctx, const WOLFSSL_EVP_MD *md);
    954 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_oaep_md(WOLFSSL_EVP_PKEY_CTX *ctx, const WOLFSSL_EVP_MD *md);
    955 
    956 WOLFSSL_API int wolfSSL_EVP_PKEY_derive_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    957 WOLFSSL_API int wolfSSL_EVP_PKEY_derive_set_peer(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY *peer);
    958 WOLFSSL_API int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
    959 
    960 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_ctrl_str(WOLFSSL_EVP_PKEY_CTX *ctx,
    961                           const char *name, const char *value);
    962 
    963 WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
    964                      unsigned char *out, size_t *outlen,
    965                      const unsigned char *in, size_t inlen);
    966 WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    967 WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
    968                      unsigned char *out, size_t *outlen,
    969                      const unsigned char *in, size_t inlen);
    970 WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx);
    971 WOLFSSL_API WOLFSSL_EVP_PKEY *wolfSSL_EVP_PKEY_new(void);
    972 WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKEY_new_ex(void* heap);
    973 WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY* key);
    974 WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey);
    975 WOLFSSL_API int wolfSSL_EVP_PKEY_copy_parameters(WOLFSSL_EVP_PKEY *to, const WOLFSSL_EVP_PKEY *from);
    976 WOLFSSL_API int wolfSSL_EVP_PKEY_missing_parameters(WOLFSSL_EVP_PKEY *pkey);
    977 WOLFSSL_API int wolfSSL_EVP_PKEY_cmp(const WOLFSSL_EVP_PKEY *a, const WOLFSSL_EVP_PKEY *b);
    978 WOLFSSL_API int wolfSSL_EVP_PKEY_type(int type);
    979 WOLFSSL_API int wolfSSL_EVP_PKEY_id(const WOLFSSL_EVP_PKEY *pkey);
    980 WOLFSSL_API int wolfSSL_EVP_PKEY_base_id(const WOLFSSL_EVP_PKEY *pkey);
    981 WOLFSSL_API int wolfSSL_EVP_PKEY_get_default_digest_nid(WOLFSSL_EVP_PKEY *pkey, int *pnid);
    982 WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKCS82PKEY(const WOLFSSL_PKCS8_PRIV_KEY_INFO* p8);
    983 WOLFSSL_API WOLFSSL_PKCS8_PRIV_KEY_INFO* wolfSSL_EVP_PKEY2PKCS8(const WOLFSSL_EVP_PKEY* pkey);
    984 
    985 WOLFSSL_API int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret,
    986                   unsigned int *siglen, WOLFSSL_EVP_PKEY *pkey);
    987 WOLFSSL_API int wolfSSL_EVP_SignInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type);
    988 WOLFSSL_API int wolfSSL_EVP_SignUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len);
    989 WOLFSSL_API int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx,
    990         const unsigned char* sig, unsigned int sig_len, WOLFSSL_EVP_PKEY *pkey);
    991 WOLFSSL_API int wolfSSL_EVP_VerifyInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type);
    992 WOLFSSL_API int wolfSSL_EVP_VerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len);
    993 
    994 
    995 /* these next ones don't need real OpenSSL type, for OpenSSH compat only */
    996 WOLFSSL_API void* wolfSSL_EVP_X_STATE(const WOLFSSL_EVP_CIPHER_CTX* ctx);
    997 WOLFSSL_API int   wolfSSL_EVP_X_STATE_LEN(const WOLFSSL_EVP_CIPHER_CTX* ctx);
    998 
    999 WOLFSSL_API void  wolfSSL_3des_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, int doset,
   1000                                 unsigned char* iv, int len);
   1001 WOLFSSL_API void  wolfSSL_aes_ctr_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, int doset,
   1002                                 unsigned char* iv, int len);
   1003 
   1004 WOLFSSL_API int  wolfSSL_StoreExternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
   1005 WOLFSSL_API int  wolfSSL_SetInternalIV(WOLFSSL_EVP_CIPHER_CTX* ctx);
   1006 
   1007 WOLFSSL_API int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx);
   1008 WOLFSSL_API int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher);
   1009 WOLFSSL_API unsigned long WOLFSSL_EVP_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher);
   1010 WOLFSSL_API unsigned long WOLFSSL_CIPHER_mode(const WOLFSSL_EVP_CIPHER *cipher);
   1011 WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_flags(const WOLFSSL_EVP_CIPHER *cipher);
   1012 WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags);
   1013 WOLFSSL_API void wolfSSL_EVP_CIPHER_CTX_clear_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags);
   1014 WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_flags(const WOLFSSL_EVP_CIPHER_CTX *ctx);
   1015 WOLFSSL_API unsigned long wolfSSL_EVP_CIPHER_CTX_mode(const WOLFSSL_EVP_CIPHER_CTX *ctx);
   1016 WOLFSSL_API int  wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *c, int pad);
   1017 WOLFSSL_API int  wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest);
   1018 WOLFSSL_API int  wolfSSL_EVP_add_cipher(const WOLFSSL_EVP_CIPHER *cipher);
   1019 WOLFSSL_API void wolfSSL_EVP_cleanup(void);
   1020 WOLFSSL_API int  wolfSSL_add_all_algorithms(void);
   1021 WOLFSSL_API int  wolfSSL_OpenSSL_add_all_algorithms_conf(void);
   1022 WOLFSSL_API int  wolfSSL_OpenSSL_add_all_algorithms_noconf(void);
   1023 WOLFSSL_API int wolfSSL_EVP_read_pw_string(char*, int, const char*, int);
   1024 
   1025 WOLFSSL_API int wolfSSL_PKCS5_PBKDF2_HMAC_SHA1(const char * pass, int passlen,
   1026                                                const unsigned char * salt,
   1027                                                int saltlen, int iter,
   1028                                                int keylen, unsigned char *out);
   1029 
   1030 WOLFSSL_API int wolfSSL_PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
   1031                                            const unsigned char *salt,
   1032                                            int saltlen, int iter,
   1033                                            const WOLFSSL_EVP_MD *digest,
   1034                                            int keylen, unsigned char *out);
   1035 
   1036 #if defined(HAVE_SCRYPT) && defined(HAVE_PBKDF2) && !defined(NO_PWDBASED) && \
   1037                                                     !defined(NO_SHA256)
   1038 WOLFSSL_API int wolfSSL_EVP_PBE_scrypt(const char *pass, size_t passlen,
   1039                             const unsigned char *salt, size_t saltlen,
   1040                             word64 N, word64 r, word64 p,
   1041                             word64 maxmem, unsigned char *key, size_t keylen);
   1042 #endif /* HAVE_SCRYPT && HAVE_PBKDF2 && !NO_PWDBASED && !NO_SHA256 */
   1043 
   1044 WOLFSSL_LOCAL int wolfSSL_EVP_get_hashinfo(const WOLFSSL_EVP_MD* evp,
   1045                                            int* pHash, int* pHashSz);
   1046 
   1047 WOLFSSL_API void wolfSSL_EVP_MD_do_all(void (*fn) (const WOLFSSL_EVP_MD *md,
   1048                                                    const char* from, const char* to,
   1049                                                    void* xx), void* args);
   1050 
   1051 #ifdef HAVE_HKDF
   1052 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_hkdf_md(WOLFSSL_EVP_PKEY_CTX* ctx,
   1053                                                  const WOLFSSL_EVP_MD* md);
   1054 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set1_hkdf_salt(WOLFSSL_EVP_PKEY_CTX* ctx,
   1055                                                     const byte* salt,
   1056                                                     int saltSz);
   1057 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set1_hkdf_key(WOLFSSL_EVP_PKEY_CTX* ctx,
   1058                                                    const byte* key, int keySz);
   1059 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_add1_hkdf_info(WOLFSSL_EVP_PKEY_CTX* ctx,
   1060                                                     const byte* info,
   1061                                                     int infoSz);
   1062 WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_hkdf_mode(WOLFSSL_EVP_PKEY_CTX* ctx,
   1063                                                int mode);
   1064 #endif
   1065 
   1066 #define WOLFSSL_EVP_CIPH_MODE            0x0007
   1067 #define WOLFSSL_EVP_CIPH_STREAM_CIPHER      0x0
   1068 #define WOLFSSL_EVP_CIPH_ECB_MODE           0x1
   1069 #define WOLFSSL_EVP_CIPH_CBC_MODE           0x2
   1070 #define WOLFSSL_EVP_CIPH_CFB_MODE           0x3
   1071 #define WOLFSSL_EVP_CIPH_OFB_MODE           0x4
   1072 #define WOLFSSL_EVP_CIPH_CTR_MODE           0x5
   1073 #define WOLFSSL_EVP_CIPH_GCM_MODE           0x6
   1074 #define WOLFSSL_EVP_CIPH_CCM_MODE           0x7
   1075 #define WOLFSSL_EVP_CIPH_XTS_MODE          0x10
   1076 #define WOLFSSL_EVP_CIPH_FLAG_AEAD_CIPHER  0x20
   1077 #define WOLFSSL_EVP_CIPH_NO_PADDING       0x100
   1078 #define WOLFSSL_EVP_CIPH_VARIABLE_LENGTH  0x200
   1079 #define WOLFSSL_EVP_CIPH_LOW_LEVEL_INITED 0x400
   1080 #define WOLFSSL_EVP_CIPH_TYPE_INIT         0xff
   1081 
   1082 
   1083 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
   1084 
   1085 /* EVP ENGINE API's */
   1086 WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKEY_new_mac_key(int type, WOLFSSL_ENGINE* e,
   1087                                           const unsigned char* key, int keylen);
   1088 
   1089 WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKEY_new_CMAC_key(WOLFSSL_ENGINE* e,
   1090                                           const unsigned char* priv, size_t len,
   1091                                           const WOLFSSL_EVP_CIPHER* cipher);
   1092 
   1093 WOLFSSL_API int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
   1094                                      const WOLFSSL_EVP_MD* type,
   1095                                      WOLFSSL_ENGINE *impl);
   1096 
   1097 WOLFSSL_API int wolfSSL_EVP_DigestSignInit(WOLFSSL_EVP_MD_CTX *ctx,
   1098                                            WOLFSSL_EVP_PKEY_CTX **pctx,
   1099                                            const WOLFSSL_EVP_MD *type,
   1100                                            WOLFSSL_ENGINE *e,
   1101                                            WOLFSSL_EVP_PKEY *pkey);
   1102 WOLFSSL_API int wolfSSL_EVP_DigestVerifyInit(WOLFSSL_EVP_MD_CTX *ctx,
   1103                                              WOLFSSL_EVP_PKEY_CTX **pctx,
   1104                                              const WOLFSSL_EVP_MD *type,
   1105                                              WOLFSSL_ENGINE *e,
   1106                                              WOLFSSL_EVP_PKEY *pkey);
   1107 WOLFSSL_API int wolfSSL_EVP_Digest(const unsigned char* in, int inSz, unsigned char* out,
   1108                               unsigned int* outSz, const WOLFSSL_EVP_MD* evp,
   1109                               WOLFSSL_ENGINE* eng);
   1110 WOLFSSL_API const char* wolfSSL_EVP_CIPHER_type_string(unsigned int type);
   1111 WOLFSSL_API int  wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
   1112                                     const WOLFSSL_EVP_CIPHER* type,
   1113                                     WOLFSSL_ENGINE *impl,
   1114                                     const unsigned char* key,
   1115                                     const unsigned char* iv,
   1116                                     int enc);
   1117 WOLFSSL_API int  wolfSSL_EVP_EncryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
   1118                                     const WOLFSSL_EVP_CIPHER* type,
   1119                                     const unsigned char* key,
   1120                                     const unsigned char* iv);
   1121 WOLFSSL_API int  wolfSSL_EVP_EncryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
   1122                                     const WOLFSSL_EVP_CIPHER* type,
   1123                                     WOLFSSL_ENGINE *impl,
   1124                                     const unsigned char* key,
   1125                                     const unsigned char* iv);
   1126 WOLFSSL_API int  wolfSSL_EVP_DecryptInit(WOLFSSL_EVP_CIPHER_CTX* ctx,
   1127                                     const WOLFSSL_EVP_CIPHER* type,
   1128                                     const unsigned char* key,
   1129                                     const unsigned char* iv);
   1130 WOLFSSL_API int  wolfSSL_EVP_DecryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx,
   1131                                     const WOLFSSL_EVP_CIPHER* type,
   1132                                     WOLFSSL_ENGINE *impl,
   1133                                     const unsigned char* key,
   1134                                     const unsigned char* iv);
   1135 WOLFSSL_API WOLFSSL_EVP_PKEY_CTX *wolfSSL_EVP_PKEY_CTX_new(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_ENGINE *e);
   1136 WOLFSSL_API WOLFSSL_EVP_PKEY_CTX *wolfSSL_EVP_PKEY_CTX_new_id(int id, WOLFSSL_ENGINE *e);
   1137 WOLFSSL_API int wolfSSL_EVP_SignInit_ex(WOLFSSL_EVP_MD_CTX* ctx,
   1138                                      const WOLFSSL_EVP_MD* type,
   1139                                      WOLFSSL_ENGINE *impl);
   1140 
   1141 #define WOLFSSL_EVP_CTRL_INIT                  0x0
   1142 #define WOLFSSL_EVP_CTRL_SET_KEY_LENGTH        0x1
   1143 #define WOLFSSL_EVP_CTRL_SET_RC2_KEY_BITS      0x3  /* needed for qt compilation */
   1144 
   1145 #define WOLFSSL_EVP_CTRL_AEAD_SET_IVLEN        0x9
   1146 #define WOLFSSL_EVP_CTRL_AEAD_GET_TAG          0x10
   1147 #define WOLFSSL_EVP_CTRL_AEAD_SET_TAG          0x11
   1148 #define WOLFSSL_EVP_CTRL_AEAD_SET_IV_FIXED     0x12
   1149 #define WOLFSSL_EVP_CTRL_GCM_IV_GEN            0x13
   1150 #define WOLFSSL_EVP_CTRL_GCM_SET_IVLEN         WOLFSSL_EVP_CTRL_AEAD_SET_IVLEN
   1151 #define WOLFSSL_EVP_CTRL_GCM_GET_TAG           WOLFSSL_EVP_CTRL_AEAD_GET_TAG
   1152 #define WOLFSSL_EVP_CTRL_GCM_SET_TAG           WOLFSSL_EVP_CTRL_AEAD_SET_TAG
   1153 #define WOLFSSL_EVP_CTRL_GCM_SET_IV_FIXED      WOLFSSL_EVP_CTRL_AEAD_SET_IV_FIXED
   1154 #define WOLFSSL_EVP_CTRL_CCM_SET_IVLEN         WOLFSSL_EVP_CTRL_AEAD_SET_IVLEN
   1155 #define WOLFSSL_EVP_CTRL_CCM_GET_TAG           WOLFSSL_EVP_CTRL_AEAD_GET_TAG
   1156 #define WOLFSSL_EVP_CTRL_CCM_SET_TAG           WOLFSSL_EVP_CTRL_AEAD_SET_TAG
   1157 #define WOLFSSL_EVP_CTRL_CCM_SET_L             0x14
   1158 #define WOLFSSL_EVP_CTRL_CCM_SET_MSGLEN        0x15
   1159 #define WOLFSSL_EVP_MD_FLAG_XOF 0x2
   1160 
   1161 #define WOLFSSL_NO_PADDING_BLOCK_SIZE      1
   1162 
   1163 #ifndef OPENSSL_COEXIST
   1164 
   1165 #define EVP_CIPH_STREAM_CIPHER    WOLFSSL_EVP_CIPH_STREAM_CIPHER
   1166 #define EVP_CIPH_VARIABLE_LENGTH  WOLFSSL_EVP_CIPH_VARIABLE_LENGTH
   1167 #define EVP_CIPH_ECB_MODE         WOLFSSL_EVP_CIPH_ECB_MODE
   1168 #define EVP_CIPH_CBC_MODE         WOLFSSL_EVP_CIPH_CBC_MODE
   1169 #define EVP_CIPH_CFB_MODE         WOLFSSL_EVP_CIPH_CFB_MODE
   1170 #define EVP_CIPH_OFB_MODE         WOLFSSL_EVP_CIPH_OFB_MODE
   1171 #define EVP_CIPH_CTR_MODE         WOLFSSL_EVP_CIPH_CTR_MODE
   1172 #define EVP_CIPH_GCM_MODE         WOLFSSL_EVP_CIPH_GCM_MODE
   1173 #define EVP_CIPH_CCM_MODE         WOLFSSL_EVP_CIPH_CCM_MODE
   1174 #define EVP_CIPH_XTS_MODE         WOLFSSL_EVP_CIPH_XTS_MODE
   1175 
   1176 #define EVP_CIPH_FLAG_AEAD_CIPHER WOLFSSL_EVP_CIPH_FLAG_AEAD_CIPHER
   1177 
   1178 #ifndef NO_MD4
   1179     #define EVP_md4       wolfSSL_EVP_md4
   1180 #endif
   1181 #ifndef NO_MD5
   1182     #define EVP_md5       wolfSSL_EVP_md5
   1183 #endif
   1184 #define EVP_sha1          wolfSSL_EVP_sha1
   1185 #define EVP_mdc2          wolfSSL_EVP_mdc2
   1186 #define EVP_dds1          wolfSSL_EVP_sha1
   1187 #define EVP_sha224        wolfSSL_EVP_sha224
   1188 #define EVP_sha256        wolfSSL_EVP_sha256
   1189 #define EVP_sha384        wolfSSL_EVP_sha384
   1190 #define EVP_sha512        wolfSSL_EVP_sha512
   1191 #define EVP_sha512_224    wolfSSL_EVP_sha512_224
   1192 #define EVP_sha512_256    wolfSSL_EVP_sha512_256
   1193 #define EVP_ripemd160     wolfSSL_EVP_ripemd160
   1194 #define EVP_shake128      wolfSSL_EVP_shake128
   1195 #define EVP_shake256      wolfSSL_EVP_shake256
   1196 #define EVP_sm3           wolfSSL_EVP_sm3
   1197 #define EVP_set_pw_prompt wolfSSL_EVP_set_pw_prompt
   1198 
   1199 #define EVP_sha3_224    wolfSSL_EVP_sha3_224
   1200 #define EVP_sha3_256    wolfSSL_EVP_sha3_256
   1201 #define EVP_sha3_384    wolfSSL_EVP_sha3_384
   1202 #define EVP_sha3_512    wolfSSL_EVP_sha3_512
   1203 
   1204 #define EVP_aes_128_cbc       wolfSSL_EVP_aes_128_cbc
   1205 #define EVP_aes_192_cbc       wolfSSL_EVP_aes_192_cbc
   1206 #define EVP_aes_256_cbc       wolfSSL_EVP_aes_256_cbc
   1207 #define EVP_aes_128_cfb1      wolfSSL_EVP_aes_128_cfb1
   1208 #define EVP_aes_192_cfb1      wolfSSL_EVP_aes_192_cfb1
   1209 #define EVP_aes_256_cfb1      wolfSSL_EVP_aes_256_cfb1
   1210 #define EVP_aes_128_cfb8      wolfSSL_EVP_aes_128_cfb8
   1211 #define EVP_aes_192_cfb8      wolfSSL_EVP_aes_192_cfb8
   1212 #define EVP_aes_256_cfb8      wolfSSL_EVP_aes_256_cfb8
   1213 #define EVP_aes_128_cfb128    wolfSSL_EVP_aes_128_cfb128
   1214 #define EVP_aes_192_cfb128    wolfSSL_EVP_aes_192_cfb128
   1215 #define EVP_aes_256_cfb128    wolfSSL_EVP_aes_256_cfb128
   1216 #define EVP_aes_128_cfb       wolfSSL_EVP_aes_128_cfb128
   1217 #define EVP_aes_192_cfb       wolfSSL_EVP_aes_192_cfb128
   1218 #define EVP_aes_256_cfb       wolfSSL_EVP_aes_256_cfb128
   1219 #define EVP_aes_128_ofb       wolfSSL_EVP_aes_128_ofb
   1220 #define EVP_aes_192_ofb       wolfSSL_EVP_aes_192_ofb
   1221 #define EVP_aes_256_ofb       wolfSSL_EVP_aes_256_ofb
   1222 #define EVP_aes_128_xts       wolfSSL_EVP_aes_128_xts
   1223 #define EVP_aes_256_xts       wolfSSL_EVP_aes_256_xts
   1224 #define EVP_aes_128_gcm       wolfSSL_EVP_aes_128_gcm
   1225 #define EVP_aes_192_gcm       wolfSSL_EVP_aes_192_gcm
   1226 #define EVP_aes_256_gcm       wolfSSL_EVP_aes_256_gcm
   1227 #define EVP_aes_128_ccm       wolfSSL_EVP_aes_128_ccm
   1228 #define EVP_aes_192_ccm       wolfSSL_EVP_aes_192_ccm
   1229 #define EVP_aes_256_ccm       wolfSSL_EVP_aes_256_ccm
   1230 #define EVP_aes_128_ecb       wolfSSL_EVP_aes_128_ecb
   1231 #define EVP_aes_192_ecb       wolfSSL_EVP_aes_192_ecb
   1232 #define EVP_aes_256_ecb       wolfSSL_EVP_aes_256_ecb
   1233 #define EVP_aes_128_ctr       wolfSSL_EVP_aes_128_ctr
   1234 #define EVP_aes_192_ctr       wolfSSL_EVP_aes_192_ctr
   1235 #define EVP_aes_256_ctr       wolfSSL_EVP_aes_256_ctr
   1236 #define EVP_des_cbc           wolfSSL_EVP_des_cbc
   1237 #define EVP_des_ecb           wolfSSL_EVP_des_ecb
   1238 #define EVP_des_ede3_cbc      wolfSSL_EVP_des_ede3_cbc
   1239 #define EVP_des_ede3_ecb      wolfSSL_EVP_des_ede3_ecb
   1240 #define EVP_rc4               wolfSSL_EVP_rc4
   1241 #define EVP_chacha20          wolfSSL_EVP_chacha20
   1242 #define EVP_chacha20_poly1305 wolfSSL_EVP_chacha20_poly1305
   1243 #define EVP_aria_128_gcm      wolfSSL_EVP_aria_128_gcm
   1244 #define EVP_aria_192_gcm      wolfSSL_EVP_aria_192_gcm
   1245 #define EVP_aria_256_gcm      wolfSSL_EVP_aria_256_gcm
   1246 #define EVP_sm4_ecb           wolfSSL_EVP_sm4_ecb
   1247 #define EVP_sm4_cbc           wolfSSL_EVP_sm4_cbc
   1248 #define EVP_sm4_ctr           wolfSSL_EVP_sm4_ctr
   1249 #define EVP_sm4_gcm           wolfSSL_EVP_sm4_gcm
   1250 #define EVP_sm4_ccm           wolfSSL_EVP_sm4_ccm
   1251 #define EVP_enc_null          wolfSSL_EVP_enc_null
   1252 
   1253 #define EVP_MD_size             wolfSSL_EVP_MD_size
   1254 #define EVP_MD_pkey_type        wolfSSL_EVP_MD_pkey_type
   1255 #define EVP_MD_CTX_new          wolfSSL_EVP_MD_CTX_new
   1256 #define EVP_MD_CTX_create       wolfSSL_EVP_MD_CTX_new
   1257 #define EVP_MD_CTX_free         wolfSSL_EVP_MD_CTX_free
   1258 #define EVP_MD_CTX_destroy      wolfSSL_EVP_MD_CTX_free
   1259 #define EVP_MD_CTX_init         wolfSSL_EVP_MD_CTX_init
   1260 #define EVP_MD_CTX_cleanup      wolfSSL_EVP_MD_CTX_cleanup
   1261 #define EVP_MD_CTX_reset        wolfSSL_EVP_MD_CTX_cleanup
   1262 #define EVP_MD_CTX_md           wolfSSL_EVP_MD_CTX_md
   1263 #define EVP_MD_CTX_type         wolfSSL_EVP_MD_CTX_type
   1264 #define EVP_MD_CTX_size         wolfSSL_EVP_MD_CTX_size
   1265 #define EVP_MD_CTX_block_size   wolfSSL_EVP_MD_CTX_block_size
   1266 #define EVP_MD_block_size       wolfSSL_EVP_MD_block_size
   1267 #define EVP_MD_type             wolfSSL_EVP_MD_type
   1268 #ifndef NO_WOLFSSL_STUB
   1269 #define EVP_MD_CTX_set_flags(ctx, flags) WC_DO_NOTHING
   1270 #endif
   1271 
   1272 #define EVP_MD_FLAG_XOF WOLFSSL_EVP_MD_FLAG_XOF
   1273 
   1274 #define EVP_Digest             wolfSSL_EVP_Digest
   1275 #define EVP_DigestInit         wolfSSL_EVP_DigestInit
   1276 #define EVP_DigestInit_ex      wolfSSL_EVP_DigestInit_ex
   1277 #define EVP_DigestUpdate       wolfSSL_EVP_DigestUpdate
   1278 #define EVP_DigestFinal        wolfSSL_EVP_DigestFinal
   1279 #define EVP_DigestFinal_ex     wolfSSL_EVP_DigestFinal_ex
   1280 #define EVP_DigestFinalXOF     wolfSSL_EVP_DigestFinalXOF
   1281 #define EVP_DigestSignInit     wolfSSL_EVP_DigestSignInit
   1282 #define EVP_DigestSignUpdate   wolfSSL_EVP_DigestSignUpdate
   1283 #define EVP_DigestSignFinal    wolfSSL_EVP_DigestSignFinal
   1284 #define EVP_DigestVerifyInit   wolfSSL_EVP_DigestVerifyInit
   1285 #define EVP_DigestVerifyUpdate wolfSSL_EVP_DigestVerifyUpdate
   1286 #define EVP_DigestVerifyFinal  wolfSSL_EVP_DigestVerifyFinal
   1287 #define EVP_BytesToKey         wolfSSL_EVP_BytesToKey
   1288 
   1289 #define EVP_get_cipherbyname wolfSSL_EVP_get_cipherbyname
   1290 #define EVP_get_digestbyname wolfSSL_EVP_get_digestbyname
   1291 
   1292 #define EVP_CIPHER_CTX_init           wolfSSL_EVP_CIPHER_CTX_init
   1293 #define EVP_CIPHER_CTX_cleanup        wolfSSL_EVP_CIPHER_CTX_cleanup
   1294 #define EVP_CIPHER_CTX_iv_length      wolfSSL_EVP_CIPHER_CTX_iv_length
   1295 #define EVP_CIPHER_CTX_nid            wolfSSL_EVP_CIPHER_CTX_nid
   1296 #define EVP_CIPHER_CTX_key_length     wolfSSL_EVP_CIPHER_CTX_key_length
   1297 #define EVP_CIPHER_CTX_set_key_length wolfSSL_EVP_CIPHER_CTX_set_key_length
   1298 #define EVP_CIPHER_CTX_set_iv_length  wolfSSL_EVP_CIPHER_CTX_set_iv_length
   1299 #define EVP_CIPHER_CTX_mode           wolfSSL_EVP_CIPHER_CTX_mode
   1300 #define EVP_CIPHER_CTX_cipher         wolfSSL_EVP_CIPHER_CTX_cipher
   1301 
   1302 #define EVP_CIPHER_iv_length          wolfSSL_EVP_CIPHER_iv_length
   1303 #define EVP_CIPHER_key_length         wolfSSL_EVP_Cipher_key_length
   1304 
   1305 #define EVP_CipherInit                wolfSSL_EVP_CipherInit
   1306 #define EVP_CipherInit_ex             wolfSSL_EVP_CipherInit_ex
   1307 #define EVP_EncryptInit               wolfSSL_EVP_EncryptInit
   1308 #define EVP_EncryptInit_ex            wolfSSL_EVP_EncryptInit_ex
   1309 #define EVP_DecryptInit               wolfSSL_EVP_DecryptInit
   1310 #define EVP_DecryptInit_ex            wolfSSL_EVP_DecryptInit_ex
   1311 
   1312 #define EVP_Cipher                    wolfSSL_EVP_Cipher
   1313 #define EVP_CipherUpdate              wolfSSL_EVP_CipherUpdate
   1314 #define EVP_EncryptUpdate             wolfSSL_EVP_CipherUpdate
   1315 #define EVP_DecryptUpdate             wolfSSL_EVP_CipherUpdate
   1316 #define EVP_CipherFinal               wolfSSL_EVP_CipherFinal
   1317 #define EVP_CipherFinal_ex            wolfSSL_EVP_CipherFinal
   1318 #define EVP_EncryptFinal              wolfSSL_EVP_CipherFinal
   1319 #define EVP_EncryptFinal_ex           wolfSSL_EVP_CipherFinal
   1320 #define EVP_DecryptFinal              wolfSSL_EVP_CipherFinal
   1321 #define EVP_DecryptFinal_ex           wolfSSL_EVP_CipherFinal
   1322 
   1323 #define EVP_CIPHER_CTX_free           wolfSSL_EVP_CIPHER_CTX_free
   1324 #define EVP_CIPHER_CTX_reset          wolfSSL_EVP_CIPHER_CTX_reset
   1325 #define EVP_CIPHER_CTX_new            wolfSSL_EVP_CIPHER_CTX_new
   1326 
   1327 #define EVP_get_cipherbynid           wolfSSL_EVP_get_cipherbynid
   1328 #define EVP_get_digestbynid           wolfSSL_EVP_get_digestbynid
   1329 #define EVP_MD_nid                    wolfSSL_EVP_MD_type
   1330 #define EVP_MD_flags                  wolfSSL_EVP_MD_flags
   1331 
   1332 #define EVP_PKEY_assign                wolfSSL_EVP_PKEY_assign
   1333 #define EVP_PKEY_assign_RSA            wolfSSL_EVP_PKEY_assign_RSA
   1334 #define EVP_PKEY_assign_DSA            wolfSSL_EVP_PKEY_assign_DSA
   1335 #define EVP_PKEY_assign_DH             wolfSSL_EVP_PKEY_assign_DH
   1336 #define EVP_PKEY_assign_EC_KEY         wolfSSL_EVP_PKEY_assign_EC_KEY
   1337 #define EVP_PKEY_get1_DSA              wolfSSL_EVP_PKEY_get1_DSA
   1338 #define EVP_PKEY_set1_DSA              wolfSSL_EVP_PKEY_set1_DSA
   1339 #define EVP_PKEY_get0_RSA              wolfSSL_EVP_PKEY_get0_RSA
   1340 #define EVP_PKEY_get1_RSA              wolfSSL_EVP_PKEY_get1_RSA
   1341 #define EVP_PKEY_set1_RSA              wolfSSL_EVP_PKEY_set1_RSA
   1342 #define EVP_PKEY_set1_EC_KEY           wolfSSL_EVP_PKEY_set1_EC_KEY
   1343 #define EVP_PKEY_get1_EC_KEY           wolfSSL_EVP_PKEY_get1_EC_KEY
   1344 #define EVP_PKEY_set1_DH               wolfSSL_EVP_PKEY_set1_DH
   1345 #define EVP_PKEY_get0_DH               wolfSSL_EVP_PKEY_get0_DH
   1346 #define EVP_PKEY_get1_DH               wolfSSL_EVP_PKEY_get1_DH
   1347 #define EVP_PKEY_get0_EC_KEY           wolfSSL_EVP_PKEY_get0_EC_KEY
   1348 #define EVP_PKEY_get0_hmac             wolfSSL_EVP_PKEY_get0_hmac
   1349 #define EVP_PKEY_new_mac_key           wolfSSL_EVP_PKEY_new_mac_key
   1350 #define EVP_PKEY_new_CMAC_key          wolfSSL_EVP_PKEY_new_CMAC_key
   1351 #define EVP_MD_CTX_copy                wolfSSL_EVP_MD_CTX_copy
   1352 #define EVP_MD_CTX_copy_ex             wolfSSL_EVP_MD_CTX_copy_ex
   1353 #define EVP_PKEY_sign_init             wolfSSL_EVP_PKEY_sign_init
   1354 #define EVP_PKEY_sign                  wolfSSL_EVP_PKEY_sign
   1355 #define EVP_PKEY_verify_init           wolfSSL_EVP_PKEY_verify_init
   1356 #define EVP_PKEY_verify                wolfSSL_EVP_PKEY_verify
   1357 #define EVP_PKEY_paramgen_init         wolfSSL_EVP_PKEY_paramgen_init
   1358 #define EVP_PKEY_CTX_set_ec_param_enc  wolfSSL_EVP_PKEY_CTX_set_ec_param_enc
   1359 #define EVP_PKEY_CTX_set_ec_paramgen_curve_nid wolfSSL_EVP_PKEY_CTX_set_ec_paramgen_curve_nid
   1360 #define EVP_PKEY_paramgen              wolfSSL_EVP_PKEY_paramgen
   1361 #define EVP_PKEY_keygen                wolfSSL_EVP_PKEY_keygen
   1362 #define EVP_PKEY_keygen_init           wolfSSL_EVP_PKEY_keygen_init
   1363 #define EVP_PKEY_bits                  wolfSSL_EVP_PKEY_bits
   1364 #define EVP_PKEY_is_a                  wolfSSL_EVP_PKEY_is_a
   1365 #define EVP_PKEY_CTX_free              wolfSSL_EVP_PKEY_CTX_free
   1366 #define EVP_PKEY_CTX_new               wolfSSL_EVP_PKEY_CTX_new
   1367 #define EVP_PKEY_CTX_set_rsa_padding   wolfSSL_EVP_PKEY_CTX_set_rsa_padding
   1368 #define EVP_PKEY_CTX_set_signature_md  wolfSSL_EVP_PKEY_CTX_set_signature_md
   1369 #define EVP_PKEY_CTX_new_id            wolfSSL_EVP_PKEY_CTX_new_id
   1370 #define EVP_PKEY_CTX_set_rsa_keygen_bits wolfSSL_EVP_PKEY_CTX_set_rsa_keygen_bits
   1371 #define EVP_PKEY_CTX_set_rsa_mgf1_md   wolfSSL_EVP_PKEY_CTX_set_rsa_mgf1_md
   1372 #define EVP_PKEY_CTX_set_rsa_pss_saltlen wolfSSL_EVP_PKEY_CTX_set_rsa_pss_saltlen
   1373 #define EVP_PKEY_CTX_set_rsa_oaep_md   wolfSSL_EVP_PKEY_CTX_set_rsa_oaep_md
   1374 #define EVP_PKEY_derive_init           wolfSSL_EVP_PKEY_derive_init
   1375 #define EVP_PKEY_derive_set_peer       wolfSSL_EVP_PKEY_derive_set_peer
   1376 #define EVP_PKEY_derive                wolfSSL_EVP_PKEY_derive
   1377 #define EVP_PKEY_decrypt               wolfSSL_EVP_PKEY_decrypt
   1378 #define EVP_PKEY_decrypt_init          wolfSSL_EVP_PKEY_decrypt_init
   1379 #define EVP_PKEY_encrypt               wolfSSL_EVP_PKEY_encrypt
   1380 #define EVP_PKEY_encrypt_init          wolfSSL_EVP_PKEY_encrypt_init
   1381 #define EVP_PKEY_new                   wolfSSL_EVP_PKEY_new
   1382 #define EVP_PKEY_free                  wolfSSL_EVP_PKEY_free
   1383 #define EVP_PKEY_up_ref                wolfSSL_EVP_PKEY_up_ref
   1384 #define EVP_PKEY_size                  wolfSSL_EVP_PKEY_size
   1385 #define EVP_PKEY_copy_parameters       wolfSSL_EVP_PKEY_copy_parameters
   1386 #define EVP_PKEY_missing_parameters    wolfSSL_EVP_PKEY_missing_parameters
   1387 #define EVP_PKEY_cmp                   wolfSSL_EVP_PKEY_cmp
   1388 #define EVP_PKEY_type                  wolfSSL_EVP_PKEY_type
   1389 #define EVP_PKEY_base_id               wolfSSL_EVP_PKEY_base_id
   1390 #define EVP_PKEY_get_default_digest_nid wolfSSL_EVP_PKEY_get_default_digest_nid
   1391 #define EVP_PKEY_id                    wolfSSL_EVP_PKEY_id
   1392 #define EVP_PKEY_CTX_ctrl_str          wolfSSL_EVP_PKEY_CTX_ctrl_str
   1393 #define EVP_PKCS82PKEY                 wolfSSL_EVP_PKCS82PKEY
   1394 #define EVP_PKEY2PKCS8                 wolfSSL_EVP_PKEY2PKCS8
   1395 #define EVP_SignFinal                  wolfSSL_EVP_SignFinal
   1396 #define EVP_SignInit                   wolfSSL_EVP_SignInit
   1397 #define EVP_SignInit_ex                wolfSSL_EVP_SignInit_ex
   1398 #define EVP_SignUpdate                 wolfSSL_EVP_SignUpdate
   1399 #define EVP_VerifyFinal                wolfSSL_EVP_VerifyFinal
   1400 #define EVP_VerifyInit                 wolfSSL_EVP_VerifyInit
   1401 #define EVP_VerifyUpdate               wolfSSL_EVP_VerifyUpdate
   1402 
   1403 #define EVP_CIPHER_CTX_ctrl        wolfSSL_EVP_CIPHER_CTX_ctrl
   1404 #define EVP_CIPHER_CTX_block_size  wolfSSL_EVP_CIPHER_CTX_block_size
   1405 #define EVP_CIPHER_block_size      wolfSSL_EVP_CIPHER_block_size
   1406 #define EVP_CIPHER_flags           wolfSSL_EVP_CIPHER_flags
   1407 #define EVP_CIPHER_CTX_set_flags   wolfSSL_EVP_CIPHER_CTX_set_flags
   1408 #define EVP_CIPHER_CTX_clear_flags wolfSSL_EVP_CIPHER_CTX_clear_flags
   1409 #define EVP_CIPHER_CTX_set_padding wolfSSL_EVP_CIPHER_CTX_set_padding
   1410 #define EVP_CIPHER_CTX_flags       wolfSSL_EVP_CIPHER_CTX_flags
   1411 #define EVP_CIPHER_CTX_set_iv      wolfSSL_EVP_CIPHER_CTX_set_iv
   1412 #define EVP_CIPHER_CTX_get_iv      wolfSSL_EVP_CIPHER_CTX_get_iv
   1413 #define EVP_add_digest             wolfSSL_EVP_add_digest
   1414 #define EVP_add_cipher             wolfSSL_EVP_add_cipher
   1415 #define EVP_cleanup                wolfSSL_EVP_cleanup
   1416 #define EVP_read_pw_string         wolfSSL_EVP_read_pw_string
   1417 #define EVP_rc2_cbc                wolfSSL_EVP_rc2_cbc
   1418 
   1419 #define OpenSSL_add_all_digests()  wolfSSL_EVP_init()
   1420 #define OpenSSL_add_all_ciphers()  wolfSSL_EVP_init()
   1421 #define OpenSSL_add_all_algorithms wolfSSL_add_all_algorithms
   1422 #define OpenSSL_add_all_algorithms_noconf wolfSSL_OpenSSL_add_all_algorithms_noconf
   1423 #define OpenSSL_add_all_algorithms_conf   wolfSSL_OpenSSL_add_all_algorithms_conf
   1424 
   1425 #define wolfSSL_OPENSSL_add_all_algorithms_noconf wolfSSL_OpenSSL_add_all_algorithms_noconf
   1426 #define wolfSSL_OPENSSL_add_all_algorithms_conf   wolfSSL_OpenSSL_add_all_algorithms_conf
   1427 
   1428 /* provides older OpenSSL API compatibility  */
   1429 #define OPENSSL_add_all_algorithms        OpenSSL_add_all_algorithms
   1430 #define OPENSSL_add_all_algorithms_noconf OpenSSL_add_all_algorithms_noconf
   1431 #define OPENSSL_add_all_algorithms_conf   OpenSSL_add_all_algorithms_conf
   1432 
   1433 #define NO_PADDING_BLOCK_SIZE      WOLFSSL_NO_PADDING_BLOCK_SIZE
   1434 
   1435 #define PKCS5_PBKDF2_HMAC_SHA1     wolfSSL_PKCS5_PBKDF2_HMAC_SHA1
   1436 #define PKCS5_PBKDF2_HMAC          wolfSSL_PKCS5_PBKDF2_HMAC
   1437 #define EVP_PBE_scrypt             wolfSSL_EVP_PBE_scrypt
   1438 
   1439 /* OpenSSL compat. ctrl values */
   1440 #define EVP_CTRL_INIT                  0x0
   1441 #define EVP_CTRL_SET_KEY_LENGTH        0x1
   1442 #define EVP_CTRL_SET_RC2_KEY_BITS      0x3  /* needed for qt compilation */
   1443 
   1444 #define EVP_CTRL_AEAD_SET_IVLEN        WOLFSSL_EVP_CTRL_AEAD_SET_IVLEN
   1445 #define EVP_CTRL_AEAD_GET_TAG          WOLFSSL_EVP_CTRL_AEAD_GET_TAG
   1446 #define EVP_CTRL_AEAD_SET_TAG          WOLFSSL_EVP_CTRL_AEAD_SET_TAG
   1447 #define EVP_CTRL_AEAD_SET_IV_FIXED     WOLFSSL_EVP_CTRL_AEAD_SET_IV_FIXED
   1448 #define EVP_CTRL_GCM_IV_GEN            WOLFSSL_EVP_CTRL_GCM_IV_GEN
   1449 #define EVP_CTRL_GCM_SET_IVLEN         WOLFSSL_EVP_CTRL_GCM_SET_IVLEN
   1450 #define EVP_CTRL_GCM_GET_TAG           WOLFSSL_EVP_CTRL_GCM_GET_TAG
   1451 #define EVP_CTRL_GCM_SET_TAG           WOLFSSL_EVP_CTRL_GCM_SET_TAG
   1452 #define EVP_CTRL_GCM_SET_IV_FIXED      WOLFSSL_EVP_CTRL_GCM_SET_IV_FIXED
   1453 #define EVP_CTRL_CCM_SET_IVLEN         WOLFSSL_EVP_CTRL_CCM_SET_IVLEN
   1454 #define EVP_CTRL_CCM_GET_TAG           WOLFSSL_EVP_CTRL_CCM_GET_TAG
   1455 #define EVP_CTRL_CCM_SET_TAG           WOLFSSL_EVP_CTRL_CCM_SET_TAG
   1456 #define EVP_CTRL_CCM_SET_L             WOLFSSL_EVP_CTRL_CCM_SET_L
   1457 #define EVP_CTRL_CCM_SET_MSGLEN        WOLFSSL_EVP_CTRL_CCM_SET_MSGLEN
   1458 
   1459 #define EVP_PKEY_print_public           wolfSSL_EVP_PKEY_print_public
   1460 #define EVP_PKEY_print_private(arg1, arg2, arg3, arg4) WC_DO_NOTHING
   1461 
   1462 #ifndef EVP_MAX_MD_SIZE
   1463     #define EVP_MAX_MD_SIZE   64     /* sha512 */
   1464 #endif
   1465 
   1466 #ifndef EVP_MAX_KEY_LENGTH
   1467 #define EVP_MAX_KEY_LENGTH    64
   1468 #endif
   1469 
   1470 #ifndef EVP_MAX_IV_LENGTH
   1471 #define EVP_MAX_IV_LENGTH     16
   1472 #endif
   1473 
   1474 #ifndef EVP_MAX_BLOCK_LENGTH
   1475     #define EVP_MAX_BLOCK_LENGTH   32  /* 2 * blocklen(AES)? */
   1476     /* They define this as 32. Using the same value here. */
   1477 #endif
   1478 
   1479 #ifndef EVP_MAX_IV_LENGTH
   1480     #define EVP_MAX_IV_LENGTH       16
   1481 #endif
   1482 
   1483 
   1484 #define EVP_R_BAD_DECRYPT               (-WOLFSSL_EVP_R_BAD_DECRYPT_E)
   1485 #define EVP_R_BN_DECODE_ERROR           (-WOLFSSL_EVP_R_BN_DECODE_ERROR)
   1486 #define EVP_R_DECODE_ERROR              (-WOLFSSL_EVP_R_DECODE_ERROR)
   1487 #define EVP_R_PRIVATE_KEY_DECODE_ERROR  (-WOLFSSL_EVP_R_PRIVATE_KEY_DECODE_ERROR)
   1488 
   1489 #define EVP_CIPHER_mode                 WOLFSSL_EVP_CIPHER_mode
   1490 /* WOLFSSL_EVP_CIPHER is just the string name of the cipher */
   1491 #define EVP_CIPHER_name(x)              x
   1492 #define EVP_MD_CTX_reset                wolfSSL_EVP_MD_CTX_cleanup
   1493 /* WOLFSSL_EVP_MD is just the string name of the digest */
   1494 #define EVP_MD_name(x)                  x
   1495 #define EVP_CIPHER_nid                  wolfSSL_EVP_CIPHER_nid
   1496 
   1497 /* Base64 encoding/decoding APIs */
   1498 #if defined(WOLFSSL_BASE64_ENCODE) || defined(WOLFSSL_BASE64_DECODE)
   1499 #define EVP_ENCODE_CTX       WOLFSSL_EVP_ENCODE_CTX
   1500 #define EVP_ENCODE_CTX_new   wolfSSL_EVP_ENCODE_CTX_new
   1501 #define EVP_ENCODE_CTX_free  wolfSSL_EVP_ENCODE_CTX_free
   1502 #endif /* WOLFSSL_BASE64_ENCODE || WOLFSSL_BASE64_DECODE*/
   1503 #if defined(WOLFSSL_BASE64_ENCODE)
   1504 #define EVP_EncodeInit       wolfSSL_EVP_EncodeInit
   1505 #define EVP_EncodeUpdate     wolfSSL_EVP_EncodeUpdate
   1506 #define EVP_EncodeFinal      wolfSSL_EVP_EncodeFinal
   1507 #define EVP_EncodeBlock      wolfSSL_EVP_EncodeBlock
   1508 #define EVP_DecodeBlock      wolfSSL_EVP_DecodeBlock
   1509 #endif /* WOLFSSL_BASE64_ENCODE */
   1510 #if defined(WOLFSSL_BASE64_DECODE)
   1511 #define EVP_DecodeInit       wolfSSL_EVP_DecodeInit
   1512 #define EVP_DecodeUpdate     wolfSSL_EVP_DecodeUpdate
   1513 #define EVP_DecodeFinal      wolfSSL_EVP_DecodeFinal
   1514 #endif /* WOLFSSL_BASE64_DECODE */
   1515 
   1516 #define EVP_blake2b512       wolfSSL_EVP_blake2b512
   1517 #define EVP_blake2s256       wolfSSL_EVP_blake2s256
   1518 #define EVP_MD_do_all        wolfSSL_EVP_MD_do_all
   1519 
   1520 #ifdef HAVE_HKDF
   1521 #define EVP_PKEY_CTX_set_hkdf_md    wolfSSL_EVP_PKEY_CTX_set_hkdf_md
   1522 #define EVP_PKEY_CTX_set1_hkdf_salt wolfSSL_EVP_PKEY_CTX_set1_hkdf_salt
   1523 #define EVP_PKEY_CTX_set1_hkdf_key  wolfSSL_EVP_PKEY_CTX_set1_hkdf_key
   1524 #define EVP_PKEY_CTX_add1_hkdf_info wolfSSL_EVP_PKEY_CTX_add1_hkdf_info
   1525 #define EVP_PKEY_CTX_hkdf_mode      wolfSSL_EVP_PKEY_CTX_hkdf_mode
   1526 #endif
   1527 
   1528 WOLFSSL_API void printPKEY(WOLFSSL_EVP_PKEY *k);
   1529 
   1530 #endif /* !OPENSSL_COEXIST */
   1531 
   1532 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
   1533 
   1534 #ifdef __cplusplus
   1535     } /* extern "C" */
   1536 #endif
   1537 
   1538 #include <wolfssl/openssl/objects.h>
   1539 
   1540 #endif /* WOLFSSL_EVP_H_ */