Ignore:
Timestamp:
Feb 7, 2019, 8:36:33 AM (5 years ago)
Author:
coas-nagasima
Message:

wolfsslを3.15.7にバージョンアップ

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_arm/trunk/wolfssl-3.12.2/wolfssl/ssl.h

    r352 r372  
    1919 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
    2020 */
    21 
    22 
     21/*!
     22    \file ../wolfssl/ssl.h
     23    \brief Header file containing key wolfSSL API
     24*/
    2325
    2426/* wolfSSL API */
     
    3133#include <wolfssl/wolfcrypt/settings.h>
    3234#include <wolfssl/version.h>
     35#include <wolfssl/wolfcrypt/logging.h>
     36#include <wolfssl/wolfcrypt/asn_public.h>
    3337
    3438#ifdef HAVE_WOLF_EVENT
     
    8488    #endif
    8589
    86 #elif defined(OPENSSL_EXTRA)
     90#elif (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL))
    8791    #include <wolfssl/openssl/bn.h>
    8892    #include <wolfssl/openssl/hmac.h>
     
    118122typedef struct WOLFSSL_X509_NAME_ENTRY  WOLFSSL_X509_NAME_ENTRY;
    119123typedef struct WOLFSSL_X509_CHAIN WOLFSSL_X509_CHAIN;
     124typedef struct WC_PKCS12          WOLFSSL_X509_PKCS12;
    120125
    121126typedef struct WOLFSSL_CERT_MANAGER WOLFSSL_CERT_MANAGER;
    122127typedef struct WOLFSSL_SOCKADDR     WOLFSSL_SOCKADDR;
    123128typedef struct WOLFSSL_CRL          WOLFSSL_CRL;
     129
     130typedef void  *WOLFSSL_X509_STORE_CTX_verify_cb; /* verify callback */
    124131
    125132/* redeclare guard */
     
    159166typedef struct WOLFSSL_X509_LOOKUP    WOLFSSL_X509_LOOKUP;
    160167typedef struct WOLFSSL_X509_LOOKUP_METHOD WOLFSSL_X509_LOOKUP_METHOD;
    161 typedef struct WOLFSSL_X509_CRL       WOLFSSL_X509_CRL;
     168typedef struct WOLFSSL_CRL            WOLFSSL_X509_CRL;
    162169typedef struct WOLFSSL_X509_STORE     WOLFSSL_X509_STORE;
     170typedef struct WOLFSSL_X509_VERIFY_PARAM  WOLFSSL_X509_VERIFY_PARAM;
    163171typedef struct WOLFSSL_BIO            WOLFSSL_BIO;
    164172typedef struct WOLFSSL_BIO_METHOD     WOLFSSL_BIO_METHOD;
     
    172180typedef struct WOLFSSL_DH               WOLFSSL_DH;
    173181typedef struct WOLFSSL_ASN1_BIT_STRING  WOLFSSL_ASN1_BIT_STRING;
    174 typedef unsigned char*                  WOLFSSL_BUF_MEM;
    175182
    176183#define WOLFSSL_ASN1_UTCTIME          WOLFSSL_ASN1_TIME
    177184#define WOLFSSL_ASN1_GENERALIZEDTIME  WOLFSSL_ASN1_TIME
    178185
     186#define WOLFSSL_ASN1_INTEGER_MAX 20
    179187struct WOLFSSL_ASN1_INTEGER {
    180188    /* size can be increased set at 20 for tag, length then to hold at least 16
    181189     * byte type */
    182     unsigned char data[20];
     190    unsigned char  intData[WOLFSSL_ASN1_INTEGER_MAX];
    183191    /* ASN_INTEGER | LENGTH | hex of number */
     192    unsigned char  negative;   /* negative number flag */
     193
     194    unsigned char* data;
     195    unsigned int   dataMax;   /* max size of data buffer */
     196    unsigned int   isDynamic:1; /* flag for if data pointer dynamic (1 is yes 0 is no) */
    184197};
    185198
     
    190203};
    191204
    192 #ifndef WOLFSSL_EVP_PKEY_TYPE_DEFINED /* guard on redeclaration */
     205struct WOLFSSL_ASN1_STRING {
     206    int length;
     207    int type; /* type of string i.e. CTC_UTF8 */
     208    char* data;
     209    long flags;
     210};
     211
     212#define WOLFSSL_MAX_SNAME 40
     213struct WOLFSSL_ASN1_OBJECT {
     214    void*  heap;
     215    const unsigned char* obj;
     216    /* sName is short name i.e sha256 rather than oid (null terminated) */
     217    char   sName[WOLFSSL_MAX_SNAME];
     218    int    type; /* oid */
     219    int    grp;  /* type of OID, i.e. oidCertPolicyType */
     220    int    nid;
     221    unsigned int  objSz;
     222    unsigned char dynamic; /* if 1 then obj was dynamiclly created, 0 otherwise */
     223    #define WOLFSSL_ASN1_DYNAMIC 0x1
     224    #define WOLFSSL_ASN1_DYNAMIC_DATA 0x2
     225    struct d { /* derefrenced */
     226        WOLFSSL_ASN1_STRING  ia5_internal;
     227        WOLFSSL_ASN1_STRING* ia5; /* points to ia5_internal */
     228        WOLFSSL_ASN1_STRING* dNSName;
     229        WOLFSSL_ASN1_STRING* iPAddress;
     230    } d;
     231};
     232
     233struct WOLFSSL_EVP_PKEY {
     234    void* heap;
     235    int type;         /* openssh dereference */
     236    int save_type;    /* openssh dereference */
     237    int pkey_sz;
     238    union {
     239        char* ptr; /* der format of key / or raw for NTRU */
     240    } pkey;
     241    #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL))
     242    #ifndef NO_RSA
     243        WOLFSSL_RSA* rsa;
     244        byte      ownRsa; /* if struct owns RSA and should free it */
     245    #endif
     246    #ifdef HAVE_ECC
     247        WOLFSSL_EC_KEY* ecc;
     248        byte      ownEcc; /* if struct owns ECC and should free it */
     249    #endif
     250    WC_RNG rng;
     251    #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
     252    #ifdef HAVE_ECC
     253        int pkey_curve;
     254    #endif
     255};
     256typedef struct WOLFSSL_EVP_PKEY WOLFSSL_PKCS8_PRIV_KEY_INFO;
     257
     258#ifndef WOLFSSL_EVP_TYPE_DEFINED /* guard on redeclaration */
    193259typedef struct WOLFSSL_EVP_PKEY     WOLFSSL_EVP_PKEY;
    194 #define WOLFSSL_EVP_PKEY_TYPE_DEFINED
    195 #endif
    196 
    197 typedef struct WOLFSSL_MD4_CTX {
    198     int buffer[32];      /* big enough to hold, check size in Init */
    199 } WOLFSSL_MD4_CTX;
    200 
     260typedef char   WOLFSSL_EVP_MD;
     261#define WOLFSSL_EVP_TYPE_DEFINED
     262#endif
     263
     264#define WOLFSSL_EVP_PKEY_DEFAULT EVP_PKEY_RSA /* default key type */
     265
     266
     267enum BIO_TYPE {
     268    WOLFSSL_BIO_BUFFER = 1,
     269    WOLFSSL_BIO_SOCKET = 2,
     270    WOLFSSL_BIO_SSL    = 3,
     271    WOLFSSL_BIO_MEMORY = 4,
     272    WOLFSSL_BIO_BIO    = 5,
     273    WOLFSSL_BIO_FILE   = 6,
     274    WOLFSSL_BIO_BASE64 = 7
     275};
     276
     277enum BIO_FLAGS {
     278    WOLFSSL_BIO_FLAG_BASE64_NO_NL = 0x01,
     279    WOLFSSL_BIO_FLAG_READ         = 0x02,
     280    WOLFSSL_BIO_FLAG_WRITE        = 0x04,
     281    WOLFSSL_BIO_FLAG_IO_SPECIAL   = 0x08,
     282    WOLFSSL_BIO_FLAG_RETRY        = 0x10
     283};
     284
     285typedef struct WOLFSSL_BUF_MEM {
     286    char*  data;   /* dereferenced */
     287    size_t length; /* current length */
     288    size_t max;    /* maximum length */
     289} WOLFSSL_BUF_MEM;
    201290
    202291typedef struct WOLFSSL_COMP_METHOD {
     
    219308    int                   isDynamic;
    220309#endif
    221 };
     310#if defined(OPENSSL_EXTRA) && defined(HAVE_CRL)
     311    WOLFSSL_X509_CRL *crl;
     312#endif
     313};
     314
     315#ifdef OPENSSL_EXTRA
     316#define WOLFSSL_USE_CHECK_TIME 0x2
     317#define WOLFSSL_NO_CHECK_TIME  0x200000
     318#define WOLFSSL_NO_WILDCARDS   0x4
     319struct WOLFSSL_X509_VERIFY_PARAM {
     320    time_t  check_time;
     321    unsigned long flags;
     322};
     323#endif
    222324
    223325typedef struct WOLFSSL_ALERT {
     
    251353typedef struct WOLFSSL_X509_STORE_CTX {
    252354    WOLFSSL_X509_STORE* store;    /* Store full of a CA cert chain */
    253     WOLFSSL_X509* current_cert;   /* stunnel dereference */
     355    WOLFSSL_X509* current_cert;   /* current X509 (OPENSSL_EXTRA) */
     356#ifdef WOLFSSL_ASIO
     357    WOLFSSL_X509* current_issuer; /* asio dereference */
     358#endif
     359    WOLFSSL_X509_CHAIN* sesChain; /* pointer to WOLFSSL_SESSION peer chain */
    254360    WOLFSSL_STACK* chain;
     361#ifdef OPENSSL_EXTRA
     362    WOLFSSL_X509_VERIFY_PARAM* param; /* certificate validation parameter */
     363#endif
    255364    char* domain;                /* subject CN domain name */
    256365    void* ex_data;               /* external data, for fortress build */
    257366    void* userCtx;               /* user ctx */
    258367    int   error;                 /* current error */
    259     int   error_depth;           /* cert depth for this error */
     368    int   error_depth;           /* index of cert depth for this error */
    260369    int   discardSessionCerts;   /* so verify callback can flag for discard */
    261370    int   totalCerts;            /* number of peer cert buffers */
    262371    WOLFSSL_BUFFER_INFO* certs;  /* peer certs */
     372    WOLFSSL_X509_STORE_CTX_verify_cb verify_cb; /* verify callback */
    263373} WOLFSSL_X509_STORE_CTX;
    264374
    265375typedef char* WOLFSSL_STRING;
    266376
    267 /* Valid Alert types from page 16/17 */
     377/* Valid Alert types from page 16/17
     378 * Add alert string to the function wolfSSL_alert_type_string_long in src/ssl.c
     379 */
    268380enum AlertDescription {
    269381    close_notify                    =   0,
     
    289401    #endif
    290402    no_renegotiation                = 100,
     403    unsupported_extension           = 110, /**< RFC 5246, section 7.2.2 */
    291404    unrecognized_name               = 112, /**< RFC 6066, section 3 */
    292405    bad_certificate_status_response = 113, /**< RFC 6066, section 8 */
     406    unknown_psk_identity            = 115, /**< RFC 4279, section 2 */
    293407    no_application_protocol         = 120
    294408};
     
    302416/* Maximum master key length (SECRET_LEN) */
    303417#define WOLFSSL_MAX_MASTER_KEY_LENGTH 48
     418/* Maximum number of groups that can be set */
     419#define WOLFSSL_MAX_GROUP_COUNT       10
    304420
    305421typedef WOLFSSL_METHOD* (*wolfSSL_method_func)(void* heap);
     422
     423/* CTX Method EX Constructor Functions */
    306424WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method_ex(void* heap);
    307425WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method_ex(void* heap);
     426WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method_ex(void* heap);
    308427WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method_ex(void* heap);
    309428WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method_ex(void* heap);
     429WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method_ex(void* heap);
    310430WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method_ex(void* heap);
    311431WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method_ex(void* heap);
     432WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method_ex(void* heap);
    312433WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method_ex(void* heap);
    313434WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method_ex(void* heap);
    314435#ifdef WOLFSSL_TLS13
     436    WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_method_ex(void* heap);
    315437    WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method_ex(void* heap);
    316438    WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method_ex(void* heap);
    317439#endif
     440
     441WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method_ex(void* heap);
    318442WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method_ex(void* heap);
    319443WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_client_method_ex(void* heap);
    320444
    321445#ifdef WOLFSSL_DTLS
     446    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_method_ex(void* heap);
     447    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_client_method_ex(void* heap);
     448    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method_ex(void* heap);
     449    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_method_ex(void* heap);
    322450    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method_ex(void* heap);
    323451    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method_ex(void* heap);
     452    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_method_ex(void* heap);
    324453    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap);
    325454    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap);
    326455#endif
     456
     457/* CTX Method Constructor Functions */
    327458WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method(void);
    328459WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void);
    329460WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void);
     461WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_method(void);
    330462WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void);
    331463WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method(void);
     464WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_method(void);
    332465WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method(void);
    333466WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
     467WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method(void);
    334468WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
    335469WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
     
    340474
    341475#ifdef WOLFSSL_DTLS
     476    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_method(void);
     477    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_server_method(void);
     478    WOLFSSL_API WOLFSSL_METHOD *wolfDTLS_client_method(void);
     479    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_method(void);
    342480    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method(void);
    343481    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method(void);
     482    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_method(void);
    344483    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method(void);
    345484    WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void);
     
    352491#ifdef WOLFSSL_SESSION_EXPORT
    353492#ifdef WOLFSSL_DTLS
     493
     494#ifndef WOLFSSL_DTLS_EXPORT_TYPES
    354495typedef int (*wc_dtls_export)(WOLFSSL* ssl,
    355496                   unsigned char* exportBuffer, unsigned int sz, void* userCtx);
     497#define WOLFSSL_DTLS_EXPORT_TYPES
     498#endif /* WOLFSSL_DTLS_EXPORT_TYPES */
     499
    356500WOLFSSL_API int wolfSSL_dtls_import(WOLFSSL* ssl, unsigned char* buf,
    357501                                                               unsigned int sz);
     
    384528WOLFSSL_API int wolfSSL_CTX_use_certificate_file(WOLFSSL_CTX*, const char*, int);
    385529WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_file(WOLFSSL_CTX*, const char*, int);
     530
     531#define WOLFSSL_LOAD_FLAG_NONE          0x00000000
     532#define WOLFSSL_LOAD_FLAG_IGNORE_ERR    0x00000001
     533#define WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY 0x00000002
     534#define WOLFSSL_LOAD_FLAG_PEM_CA_ONLY   0x00000004
     535WOLFSSL_API int wolfSSL_CTX_load_verify_locations_ex(WOLFSSL_CTX*, const char*,
     536                                                const char*, unsigned int);
    386537WOLFSSL_API int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX*, const char*,
    387538                                                const char*);
     
    391542WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_file(WOLFSSL_CTX *,
    392543                                                     const char *file);
     544WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_file_format(WOLFSSL_CTX *,
     545                                                  const char *file, int format);
    393546WOLFSSL_API int wolfSSL_CTX_use_RSAPrivateKey_file(WOLFSSL_CTX*, const char*, int);
    394547
    395548WOLFSSL_API long wolfSSL_get_verify_depth(WOLFSSL* ssl);
    396549WOLFSSL_API long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx);
     550WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
    397551WOLFSSL_API int wolfSSL_use_certificate_file(WOLFSSL*, const char*, int);
    398552WOLFSSL_API int wolfSSL_use_PrivateKey_file(WOLFSSL*, const char*, int);
    399553WOLFSSL_API int wolfSSL_use_certificate_chain_file(WOLFSSL*, const char *file);
     554WOLFSSL_API int wolfSSL_use_certificate_chain_file_format(WOLFSSL*,
     555                                                  const char *file, int format);
    400556WOLFSSL_API int wolfSSL_use_RSAPrivateKey_file(WOLFSSL*, const char*, int);
    401557
     
    410566#endif
    411567
    412 #ifndef WOLFSSL_PEMCERT_TODER_DEFINED
    413     WOLFSSL_API int wolfSSL_PemCertToDer(const char*, unsigned char*, int);
    414     #define WOLFSSL_PEMCERT_TODER_DEFINED
    415 #endif
    416 
    417568#endif /* !NO_FILESYSTEM && !NO_CERTS */
    418569
    419570WOLFSSL_API WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD*);
    420571WOLFSSL_API WOLFSSL* wolfSSL_new(WOLFSSL_CTX*);
     572WOLFSSL_API WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl);
    421573WOLFSSL_API int  wolfSSL_is_server(WOLFSSL*);
    422574WOLFSSL_API WOLFSSL* wolfSSL_write_dup(WOLFSSL*);
     
    428580WOLFSSL_API int  wolfSSL_get_ciphers(char*, int);
    429581WOLFSSL_API const char* wolfSSL_get_cipher_name(WOLFSSL* ssl);
     582WOLFSSL_API const char* wolfSSL_get_cipher_name_from_suite(const unsigned char,
     583    const unsigned char);
    430584WOLFSSL_API const char* wolfSSL_get_shared_ciphers(WOLFSSL* ssl, char* buf,
    431585    int len);
    432586WOLFSSL_API const char* wolfSSL_get_curve_name(WOLFSSL* ssl);
    433587WOLFSSL_API int  wolfSSL_get_fd(const WOLFSSL*);
    434 WOLFSSL_API void wolfSSL_set_using_nonblock(WOLFSSL*, int);
    435 WOLFSSL_API int  wolfSSL_get_using_nonblock(WOLFSSL*);
    436588/* please see note at top of README if you get an error from connect */
    437589WOLFSSL_API int  wolfSSL_connect(WOLFSSL*);
     
    452604WOLFSSL_API int  wolfSSL_request_certificate(WOLFSSL* ssl);
    453605
     606WOLFSSL_API int  wolfSSL_preferred_group(WOLFSSL* ssl);
     607WOLFSSL_API int  wolfSSL_CTX_set_groups(WOLFSSL_CTX* ctx, int* groups,
     608                                        int count);
     609WOLFSSL_API int  wolfSSL_set_groups(WOLFSSL* ssl, int* groups, int count);
     610
    454611WOLFSSL_API int  wolfSSL_connect_TLSv13(WOLFSSL*);
    455612WOLFSSL_API int  wolfSSL_accept_TLSv13(WOLFSSL*);
     
    475632WOLFSSL_API int  wolfSSL_get_alert_history(WOLFSSL*, WOLFSSL_ALERT_HISTORY *);
    476633
    477 WOLFSSL_API int        wolfSSL_set_session(WOLFSSL* ssl,WOLFSSL_SESSION* session);
    478 WOLFSSL_API long       wolfSSL_SSL_SESSION_set_timeout(WOLFSSL_SESSION* session, long t);
    479 WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get_session(WOLFSSL* ssl);
    480 WOLFSSL_API void       wolfSSL_flush_sessions(WOLFSSL_CTX *ctx, long tm);
    481 WOLFSSL_API int        wolfSSL_SetServerID(WOLFSSL* ssl, const unsigned char*,
    482                                          int, int);
     634WOLFSSL_API int  wolfSSL_set_session(WOLFSSL*, WOLFSSL_SESSION*);
     635WOLFSSL_API long wolfSSL_SSL_SESSION_set_timeout(WOLFSSL_SESSION*, long);
     636WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get_session(WOLFSSL*);
     637WOLFSSL_API void wolfSSL_flush_sessions(WOLFSSL_CTX*, long);
     638WOLFSSL_API int  wolfSSL_SetServerID(WOLFSSL*, const unsigned char*, int, int);
     639
     640#if defined(OPENSSL_ALL) || defined(WOLFSSL_ASIO)
     641WOLFSSL_API int  wolfSSL_BIO_new_bio_pair(WOLFSSL_BIO**, size_t,
     642                     WOLFSSL_BIO**, size_t);
     643
     644WOLFSSL_API WOLFSSL_RSA* wolfSSL_d2i_RSAPrivateKey_bio(WOLFSSL_BIO*, WOLFSSL_RSA**);
     645WOLFSSL_API int wolfSSL_CTX_use_certificate_ASN1(WOLFSSL_CTX*,
     646                                           int, const unsigned char*);
     647WOLFSSL_API int wolfSSL_CTX_use_RSAPrivateKey(WOLFSSL_CTX*, WOLFSSL_RSA*);
     648WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey_bio(WOLFSSL_BIO*, WOLFSSL_EVP_PKEY**);
     649#endif /* OPENSSL_ALL || WOLFSSL_ASIO */
    483650
    484651#ifdef SESSION_INDEX
     
    493660
    494661typedef int (*VerifyCallback)(int, WOLFSSL_X509_STORE_CTX*);
    495 typedef int (pem_password_cb)(char*, int, int, void*);
     662#ifdef OPENSSL_EXTRA
     663typedef void (CallbackInfoState)(const WOLFSSL*, int, int);
     664
     665typedef struct WOLFSSL_CRYPTO_EX_DATA {
     666    WOLFSSL_STACK* data;
     667} WOLFSSL_CRYPTO_EX_DATA;
     668
     669typedef int  (WOLFSSL_CRYPTO_EX_new)(void* p, void* ptr,
     670        WOLFSSL_CRYPTO_EX_DATA* a, int idx, long argValue, void* arg);
     671typedef int  (WOLFSSL_CRYPTO_EX_dup)(WOLFSSL_CRYPTO_EX_DATA* out,
     672        WOLFSSL_CRYPTO_EX_DATA* in, void* inPtr, int idx, long argV, void* arg);
     673typedef void (WOLFSSL_CRYPTO_EX_free)(void* p, void* ptr,
     674        WOLFSSL_CRYPTO_EX_DATA* a, int idx, long argValue, void* arg);
     675
     676WOLFSSL_API int  wolfSSL_get_ex_new_index(long argValue, void* arg,
     677        WOLFSSL_CRYPTO_EX_new* a, WOLFSSL_CRYPTO_EX_dup* b,
     678        WOLFSSL_CRYPTO_EX_free* c);
     679#endif
    496680
    497681WOLFSSL_API void wolfSSL_CTX_set_verify(WOLFSSL_CTX*, int,
     
    531715
    532716/* Nonblocking DTLS helper functions */
     717WOLFSSL_API void wolfSSL_dtls_set_using_nonblock(WOLFSSL*, int);
     718WOLFSSL_API int  wolfSSL_dtls_get_using_nonblock(WOLFSSL*);
     719#define wolfSSL_set_using_nonblock wolfSSL_dtls_set_using_nonblock
     720#define wolfSSL_get_using_nonblock wolfSSL_dtls_get_using_nonblock
     721    /* The old names are deprecated. */
    533722WOLFSSL_API int  wolfSSL_dtls_get_current_timeout(WOLFSSL* ssl);
    534723WOLFSSL_API int  wolfSSL_dtls_set_timeout_init(WOLFSSL* ssl, int);
     
    585774WOLFSSL_API WOLFSSL_X509* wolfSSL_sk_X509_pop(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk);
    586775WOLFSSL_API void wolfSSL_sk_X509_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk);
     776WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_sk_GENERAL_NAME_value(
     777        WOLFSSL_STACK* sk, int i);
     778WOLFSSL_API int wolfSSL_sk_GENERAL_NAME_num(WOLFSSL_STACK* sk);
     779WOLFSSL_API void wolfSSL_sk_GENERAL_NAME_pop_free(WOLFSSL_STACK* sk,
     780        void f (WOLFSSL_ASN1_OBJECT*));
    587781WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_new(void);
    588782WOLFSSL_API void wolfSSL_ASN1_OBJECT_free(WOLFSSL_ASN1_OBJECT* obj);
     
    617811                           /* what's ref count */
    618812
    619 WOLFSSL_API void wolfSSL_X509_free(WOLFSSL_X509*);
    620 WOLFSSL_API void wolfSSL_OPENSSL_free(void*);
     813WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_new(void);
    621814
    622815WOLFSSL_API int wolfSSL_OCSP_parse_url(char* url, char** host, char** port,
     
    627820WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_server_method(void);
    628821
    629 WOLFSSL_API void wolfSSL_MD4_Init(WOLFSSL_MD4_CTX*);
    630 WOLFSSL_API void wolfSSL_MD4_Update(WOLFSSL_MD4_CTX*, const void*, unsigned long);
    631 WOLFSSL_API void wolfSSL_MD4_Final(unsigned char*, WOLFSSL_MD4_CTX*);
    632 
    633 
    634822WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new(WOLFSSL_BIO_METHOD*);
    635823WOLFSSL_API int  wolfSSL_BIO_free(WOLFSSL_BIO*);
    636824WOLFSSL_API int  wolfSSL_BIO_free_all(WOLFSSL_BIO*);
     825WOLFSSL_API int wolfSSL_BIO_gets(WOLFSSL_BIO* bio, char* buf, int sz);
     826WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_next(WOLFSSL_BIO* bio);
     827WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_find_type(WOLFSSL_BIO* bio, int type);
    637828WOLFSSL_API int  wolfSSL_BIO_read(WOLFSSL_BIO*, void*, int);
    638829WOLFSSL_API int  wolfSSL_BIO_write(WOLFSSL_BIO*, const void*, int);
     
    659850WOLFSSL_API long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int flag);
    660851WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
    661 WOLFSSL_API int  wolfSSL_add_all_algorithms(void);
    662852
    663853#ifndef NO_FILESYSTEM
     
    690880WOLFSSL_API int         wolfSSL_RAND_egd(const char*);
    691881WOLFSSL_API int         wolfSSL_RAND_seed(const void*, int);
     882WOLFSSL_API void        wolfSSL_RAND_Cleanup(void);
    692883WOLFSSL_API void        wolfSSL_RAND_add(const void*, int, double);
     884WOLFSSL_API int         wolfSSL_RAND_poll(void);
    693885
    694886WOLFSSL_API WOLFSSL_COMP_METHOD* wolfSSL_COMP_zlib(void);
     
    696888WOLFSSL_API int wolfSSL_COMP_add_compression_method(int, void*);
    697889
    698 WOLFSSL_API int wolfSSL_get_ex_new_index(long, void*, void*, void*, void*);
    699 
     890WOLFSSL_API unsigned long wolfSSL_thread_id(void);
    700891WOLFSSL_API void wolfSSL_set_id_callback(unsigned long (*f)(void));
    701892WOLFSSL_API void wolfSSL_set_locking_callback(void (*f)(int, int, const char*,
     
    714905WOLFSSL_API int   wolfSSL_X509_STORE_CTX_get_error_depth(WOLFSSL_X509_STORE_CTX*);
    715906
     907WOLFSSL_API void  wolfSSL_X509_STORE_CTX_set_verify_cb(WOLFSSL_X509_STORE_CTX *ctx,
     908                                  WOLFSSL_X509_STORE_CTX_verify_cb verify_cb);
     909WOLFSSL_API int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* n,
     910                                                           unsigned char** out);
     911WOLFSSL_API int wolfSSL_X509_print(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
    716912WOLFSSL_API char*       wolfSSL_X509_NAME_oneline(WOLFSSL_X509_NAME*, char*, int);
    717913WOLFSSL_API WOLFSSL_X509_NAME*  wolfSSL_X509_get_issuer_name(WOLFSSL_X509*);
     
    727923WOLFSSL_API unsigned char* wolfSSL_X509_get_subjectKeyID(
    728924                                            WOLFSSL_X509*, unsigned char*, int*);
     925
     926WOLFSSL_API int wolfSSL_X509_set_subject_name(WOLFSSL_X509*,
     927                                              WOLFSSL_X509_NAME*);
     928WOLFSSL_API int wolfSSL_X509_set_pubkey(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*);
     929
    729930WOLFSSL_API int wolfSSL_X509_NAME_entry_count(WOLFSSL_X509_NAME*);
    730931WOLFSSL_API int wolfSSL_X509_NAME_get_text_by_NID(
     
    733934                                           WOLFSSL_X509_NAME*, int, int);
    734935WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_X509_NAME_ENTRY_get_data(WOLFSSL_X509_NAME_ENTRY*);
    735 WOLFSSL_API char* wolfSSL_ASN1_STRING_data(WOLFSSL_ASN1_STRING*);
     936
     937WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_new(void);
     938WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_type_new(int type);
     939WOLFSSL_API void wolfSSL_ASN1_STRING_free(WOLFSSL_ASN1_STRING* asn1);
     940WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1,
     941                                                  const void* data, int dataSz);
     942WOLFSSL_API unsigned char* wolfSSL_ASN1_STRING_data(WOLFSSL_ASN1_STRING*);
    736943WOLFSSL_API int wolfSSL_ASN1_STRING_length(WOLFSSL_ASN1_STRING*);
    737944WOLFSSL_API int         wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX*);
     
    770977WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*);
    771978WOLFSSL_API int       wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKEY*);
    772 WOLFSSL_API void      wolfSSL_X509_STORE_CTX_set_error(WOLFSSL_X509_STORE_CTX*,
    773                                                      int);
    774979WOLFSSL_API void      wolfSSL_X509_OBJECT_free_contents(WOLFSSL_X509_OBJECT*);
     980WOLFSSL_API WOLFSSL_PKCS8_PRIV_KEY_INFO* wolfSSL_d2i_PKCS8_PKEY_bio(
     981        WOLFSSL_BIO* bio, WOLFSSL_PKCS8_PRIV_KEY_INFO** pkey);
     982WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY_bio(WOLFSSL_BIO* bio,
     983                                         WOLFSSL_EVP_PKEY** out);
     984WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** key,
     985        unsigned char** in, long inSz);
    775986WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey(int type,
    776987        WOLFSSL_EVP_PKEY** out, const unsigned char **in, long inSz);
     988WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey_EVP(WOLFSSL_EVP_PKEY** key,
     989        unsigned char** in, long inSz);
     990WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new_ex(void* heap);
    777991WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new(void);
    778 WOLFSSL_API void      wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*);
    779992WOLFSSL_API int       wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*);
    780993WOLFSSL_API int       wolfSSL_sk_X509_REVOKED_num(WOLFSSL_X509_REVOKED*);
    781 
     994#ifdef OPENSSL_EXTRA
     995WOLFSSL_API void      wolfSSL_X509_STORE_CTX_set_time(WOLFSSL_X509_STORE_CTX*,
     996                                                      unsigned long flags,
     997                                                      time_t t);
     998#endif
    782999WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_X509_CRL_get_REVOKED(WOLFSSL_X509_CRL*);
    7831000WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_sk_X509_REVOKED_value(
    7841001                                                      WOLFSSL_X509_REVOKED*,int);
    7851002WOLFSSL_API WOLFSSL_ASN1_INTEGER* wolfSSL_X509_get_serialNumber(WOLFSSL_X509*);
     1003WOLFSSL_API void wolfSSL_ASN1_INTEGER_free(WOLFSSL_ASN1_INTEGER*);
     1004WOLFSSL_API WOLFSSL_ASN1_INTEGER* wolfSSL_ASN1_INTEGER_new(void);
    7861005
    7871006WOLFSSL_API int wolfSSL_ASN1_TIME_print(WOLFSSL_BIO*, const WOLFSSL_ASN1_TIME*);
    7881007
     1008WOLFSSL_API char* wolfSSL_ASN1_TIME_to_string(WOLFSSL_ASN1_TIME* t,
     1009                                                            char* buf, int len);
    7891010WOLFSSL_API int  wolfSSL_ASN1_INTEGER_cmp(const WOLFSSL_ASN1_INTEGER*,
    7901011                                       const WOLFSSL_ASN1_INTEGER*);
     
    7941015WOLFSSL_API WOLFSSL_BIGNUM *wolfSSL_ASN1_INTEGER_to_BN(const WOLFSSL_ASN1_INTEGER *ai,
    7951016                                       WOLFSSL_BIGNUM *bn);
     1017WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_ASN1_TIME_adj(WOLFSSL_ASN1_TIME*, time_t,
     1018                                                     int, long);
     1019#endif
     1020
    7961021WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_load_client_CA_file(const char*);
    797 #endif
    798 
    7991022WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_SSL_CTX_get_client_CA_list(
    8001023        const WOLFSSL_CTX *s);
     
    8031026WOLFSSL_API void* wolfSSL_X509_STORE_CTX_get_ex_data(WOLFSSL_X509_STORE_CTX*, int);
    8041027WOLFSSL_API int   wolfSSL_get_ex_data_X509_STORE_CTX_idx(void);
     1028WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_error(
     1029                                           WOLFSSL_X509_STORE_CTX* ctx, int er);
    8051030WOLFSSL_API void* wolfSSL_get_ex_data(const WOLFSSL*, int);
    8061031
     
    8091034WOLFSSL_API void wolfSSL_CTX_set_default_passwd_cb(WOLFSSL_CTX*,
    8101035                                                   pem_password_cb*);
    811 
     1036WOLFSSL_API pem_password_cb* wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX *ctx);
     1037WOLFSSL_API void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx);
    8121038
    8131039WOLFSSL_API void wolfSSL_CTX_set_info_callback(WOLFSSL_CTX*,
     
    8171043WOLFSSL_API int           wolfSSL_GET_REASON(int);
    8181044
    819 WOLFSSL_API char* wolfSSL_alert_type_string_long(int);
    820 WOLFSSL_API char* wolfSSL_alert_desc_string_long(int);
    821 WOLFSSL_API char* wolfSSL_state_string_long(const WOLFSSL*);
     1045WOLFSSL_API const char* wolfSSL_alert_type_string_long(int);
     1046WOLFSSL_API const char* wolfSSL_alert_desc_string_long(int);
     1047WOLFSSL_API const char* wolfSSL_state_string_long(const WOLFSSL*);
    8221048
    8231049WOLFSSL_API WOLFSSL_RSA* wolfSSL_RSA_generate_key(int, unsigned long,
    8241050                                               void(*)(int, int, void*), void*);
     1051WOLFSSL_API WOLFSSL_RSA *wolfSSL_d2i_RSAPublicKey(WOLFSSL_RSA **r,
     1052                                            const unsigned char **pp, long len);
     1053WOLFSSL_API WOLFSSL_RSA *wolfSSL_d2i_RSAPrivateKey(WOLFSSL_RSA**,
     1054                                            const unsigned char**, long);
     1055WOLFSSL_API int wolfSSL_i2d_RSAPublicKey(WOLFSSL_RSA *r, const unsigned char **pp);
     1056WOLFSSL_API int wolfSSL_i2d_RSAPrivateKey(WOLFSSL_RSA *r, unsigned char **pp);
    8251057WOLFSSL_API void wolfSSL_CTX_set_tmp_rsa_callback(WOLFSSL_CTX*,
    8261058                                             WOLFSSL_RSA*(*)(WOLFSSL*, int, int));
     
    8511083WOLFSSL_API long wolfSSL_CTX_set_tlsext_opaque_prf_input_callback_arg(
    8521084        WOLFSSL_CTX*, void* arg);
    853 
    854 WOLFSSL_API unsigned long wolfSSL_set_options(WOLFSSL *s, unsigned long op);
    855 WOLFSSL_API unsigned long wolfSSL_get_options(const WOLFSSL *s);
     1085WOLFSSL_API int  wolfSSL_CTX_add_client_CA(WOLFSSL_CTX*, WOLFSSL_X509*);
     1086WOLFSSL_API int  wolfSSL_CTX_set_srp_password(WOLFSSL_CTX*, char*);
     1087WOLFSSL_API int  wolfSSL_CTX_set_srp_username(WOLFSSL_CTX*, char*);
     1088
     1089WOLFSSL_API long wolfSSL_set_options(WOLFSSL *s, long op);
     1090WOLFSSL_API long wolfSSL_get_options(const WOLFSSL *s);
     1091WOLFSSL_API long wolfSSL_clear_options(WOLFSSL *s,  long op);
    8561092WOLFSSL_API long wolfSSL_clear_num_renegotiations(WOLFSSL *s);
    8571093WOLFSSL_API long wolfSSL_total_renegotiations(WOLFSSL *s);
     
    8701106
    8711107#define WOLFSSL_DEFAULT_CIPHER_LIST ""   /* default all */
    872 #define WOLFSSL_RSA_F4 0x10001L
    8731108
    8741109enum {
     
    8811116};
    8821117
    883 #ifdef OPENSSL_EXTRA
     1118#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
    8841119/* seperated out from other enums because of size */
    8851120enum {
     
    9461181    SSL_ST_CONNECT = 0x1000,
    9471182    SSL_ST_ACCEPT  = 0x2000,
     1183    SSL_ST_MASK    = 0x0FFF,
    9481184
    9491185    SSL_CB_LOOP = 0x01,
     
    9601196    SSL_CB_CONNECT_LOOP = (SSL_ST_CONNECT | SSL_CB_LOOP),
    9611197    SSL_CB_CONNECT_EXIT = (SSL_ST_CONNECT | SSL_CB_EXIT),
     1198        SSL_CB_MODE_READ = 1,
     1199        SSL_CB_MODE_WRITE = 2,
    9621200
    9631201    SSL_MODE_ENABLE_PARTIAL_WRITE = 2,
     
    9661204    BIO_CLOSE   = 1,
    9671205    BIO_NOCLOSE = 0,
    968 
    969     NID_undef = 0,
    9701206
    9711207    X509_FILETYPE_PEM = 8,
     
    10201256    X509_V_ERR_UNNESTED_RESOURCE,
    10211257
     1258    X509_R_CERT_ALREADY_IN_HASH_TABLE,
     1259
    10221260    XN_FLAG_SPC_EQ  = (1 << 23),
    10231261    XN_FLAG_ONELINE = 0,
     
    10371275   since not using thread storage error queue */
    10381276#include <stdio.h>
    1039 WOLFSSL_API void  wolfSSL_ERR_print_errors_fp(FILE*, int err);
     1277WOLFSSL_API void  wolfSSL_ERR_print_errors_fp(XFILE, int err);
    10401278#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
    1041 WOLFSSL_API void wolfSSL_ERR_dump_errors_fp(FILE* fp);
     1279WOLFSSL_API void wolfSSL_ERR_dump_errors_fp(XFILE fp);
    10421280#endif
    10431281#endif
     
    11671405    WOLFSSL_API void wolfSSL_set_psk_client_callback(WOLFSSL*,
    11681406                                                    wc_psk_client_callback);
     1407#ifdef WOLFSSL_TLS13
     1408    typedef unsigned int (*wc_psk_client_tls13_callback)(WOLFSSL*, const char*,
     1409               char*, unsigned int, unsigned char*, unsigned int, const char**);
     1410    WOLFSSL_API void wolfSSL_CTX_set_psk_client_tls13_callback(WOLFSSL_CTX*,
     1411                                                  wc_psk_client_tls13_callback);
     1412    WOLFSSL_API void wolfSSL_set_psk_client_tls13_callback(WOLFSSL*,
     1413                                                  wc_psk_client_tls13_callback);
     1414#endif
    11691415
    11701416    WOLFSSL_API const char* wolfSSL_get_psk_identity_hint(const WOLFSSL*);
     
    11801426    WOLFSSL_API void wolfSSL_set_psk_server_callback(WOLFSSL*,
    11811427                                                    wc_psk_server_callback);
     1428#ifdef WOLFSSL_TLS13
     1429    typedef unsigned int (*wc_psk_server_tls13_callback)(WOLFSSL*, const char*,
     1430                          unsigned char*, unsigned int, const char**);
     1431    WOLFSSL_API void wolfSSL_CTX_set_psk_server_tls13_callback(WOLFSSL_CTX*,
     1432                                                  wc_psk_server_tls13_callback);
     1433    WOLFSSL_API void wolfSSL_set_psk_server_tls13_callback(WOLFSSL*,
     1434                                                  wc_psk_server_tls13_callback);
     1435#endif
    11821436
    11831437    #define PSK_TYPES_DEFINED
     
    12021456    WOLFSSL_BIO_SIZE  = 17000 /* default BIO write size if not set */
    12031457};
    1204 
    1205 #endif
    1206 
     1458#endif
     1459
     1460WOLFSSL_API void wolfSSL_ERR_put_error(int lib, int fun, int err,
     1461                                       const char* file, int line);
     1462WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line(const char**, int*);
    12071463WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*,
    12081464                                                 const char**, int *);
     
    12131469
    12141470WOLFSSL_API int  wolfSSL_RAND_status(void);
     1471WOLFSSL_API int  wolfSSL_RAND_pseudo_bytes(unsigned char* buf, int num);
    12151472WOLFSSL_API int  wolfSSL_RAND_bytes(unsigned char* buf, int num);
    12161473WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method(void);
    12171474WOLFSSL_API long wolfSSL_CTX_set_options(WOLFSSL_CTX*, long);
     1475WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
     1476WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
     1477
    12181478#ifndef NO_CERTS
    1219   WOLFSSL_API int  wolfSSL_CTX_check_private_key(WOLFSSL_CTX*);
     1479  WOLFSSL_API int  wolfSSL_CTX_check_private_key(const WOLFSSL_CTX*);
    12201480#endif /* !NO_CERTS */
    12211481
    12221482WOLFSSL_API void wolfSSL_ERR_free_strings(void);
    12231483WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long);
    1224 WOLFSSL_API void wolfSSL_EVP_cleanup(void);
    12251484WOLFSSL_API int  wolfSSL_clear(WOLFSSL* ssl);
    12261485WOLFSSL_API int  wolfSSL_state(WOLFSSL* ssl);
     
    12371496                                            const unsigned char*, unsigned int);
    12381497WOLFSSL_API WOLFSSL_X509* wolfSSL_get_peer_certificate(WOLFSSL* ssl);
     1498WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
    12391499
    12401500WOLFSSL_API int wolfSSL_want_read(WOLFSSL*);
     
    12461506WOLFSSL_API int wolfSSL_ASN1_GENERALIZEDTIME_print(WOLFSSL_BIO*,
    12471507                                         const WOLFSSL_ASN1_GENERALIZEDTIME*);
    1248 WOLFSSL_API int   wolfSSL_sk_num(WOLFSSL_X509_REVOKED*);
    1249 WOLFSSL_API void* wolfSSL_sk_value(WOLFSSL_X509_REVOKED*, int);
     1508WOLFSSL_API void wolfSSL_ASN1_GENERALIZEDTIME_free(WOLFSSL_ASN1_GENERALIZEDTIME*);
     1509WOLFSSL_API int   wolfSSL_sk_num(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)*);
     1510WOLFSSL_API void* wolfSSL_sk_value(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)*, int);
    12501511
    12511512/* stunnel 4.28 needs */
     
    12861547WOLFSSL_API unsigned int wolfSSL_lib_version_hex(void);
    12871548
    1288 /* turn logging on, only if compiled in */
    1289 WOLFSSL_API int  wolfSSL_Debugging_ON(void);
    1290 /* turn logging off */
    1291 WOLFSSL_API void wolfSSL_Debugging_OFF(void);
    1292 
    12931549/* do accept or connect depedning on side */
    12941550WOLFSSL_API int wolfSSL_negotiate(WOLFSSL* ssl);
     
    13151571WOLFSSL_API WOLFSSL_X509* wolfSSL_get_chain_X509(WOLFSSL_X509_CHAIN*, int idx);
    13161572/* free X509 */
    1317 WOLFSSL_API void wolfSSL_FreeX509(WOLFSSL_X509*);
     1573#define wolfSSL_FreeX509(x509) wolfSSL_X509_free((x509))
     1574WOLFSSL_API void wolfSSL_X509_free(WOLFSSL_X509*);
    13181575/* get index cert in PEM */
    13191576WOLFSSL_API int  wolfSSL_get_chain_cert_pem(WOLFSSL_X509_CHAIN*, int idx,
     
    13311588WOLFSSL_API char* wolfSSL_X509_get_next_altname(WOLFSSL_X509*);
    13321589
     1590WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509(WOLFSSL_X509** x509,
     1591        const unsigned char** in, int len);
    13331592WOLFSSL_API WOLFSSL_X509*
    13341593    wolfSSL_X509_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len);
     1594WOLFSSL_API int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out);
     1595WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL **crl,
     1596                                                   const unsigned char *in, int len);
     1597#ifndef NO_FILESYSTEM
     1598WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(XFILE file, WOLFSSL_X509_CRL **crl);
     1599#endif
     1600WOLFSSL_API void wolfSSL_X509_CRL_free(WOLFSSL_X509_CRL *crl);
     1601
    13351602#ifndef NO_FILESYSTEM
    13361603    #ifndef NO_STDIO_FILESYSTEM
    13371604    WOLFSSL_API WOLFSSL_X509*
    1338         wolfSSL_X509_d2i_fp(WOLFSSL_X509** x509, FILE* file);
     1605        wolfSSL_X509_d2i_fp(WOLFSSL_X509** x509, XFILE file);
    13391606    #endif
    13401607WOLFSSL_API WOLFSSL_X509*
     
    13621629WOLFSSL_API WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio,
    13631630                                       WC_PKCS12** pkcs12);
     1631#ifndef NO_FILESYSTEM
     1632WOLFSSL_API WOLFSSL_X509_PKCS12* wolfSSL_d2i_PKCS12_fp(XFILE fp,
     1633                                       WOLFSSL_X509_PKCS12** pkcs12);
     1634#endif
    13641635WOLFSSL_API int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
    1365      WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert, WOLF_STACK_OF(WOLFSSL_X509)** ca);
     1636     WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert,
     1637     WOLF_STACK_OF(WOLFSSL_X509)** ca);
     1638WOLFSSL_API WC_PKCS12* wolfSSL_PKCS12_create(char* pass, char* name,
     1639        WOLFSSL_EVP_PKEY* pkey, WOLFSSL_X509* cert,
     1640        WOLF_STACK_OF(WOLFSSL_X509)* ca,
     1641        int keyNID, int certNID, int itt, int macItt, int keytype);
    13661642WOLFSSL_API void wolfSSL_PKCS12_PBE_add(void);
    13671643
     
    13741650WOLFSSL_API int  wolfSSL_SetTmpDH_buffer(WOLFSSL*, const unsigned char* b, long sz,
    13751651                                       int format);
     1652WOLFSSL_API int wolfSSL_SetEnableDhKeyTest(WOLFSSL*, int);
    13761653#ifndef NO_FILESYSTEM
    13771654    WOLFSSL_API int  wolfSSL_SetTmpDH_file(WOLFSSL*, const char* f, int format);
     
    13911668WOLFSSL_API int wolfSSL_CTX_SetMinDhKey_Sz(WOLFSSL_CTX*, unsigned short);
    13921669WOLFSSL_API int wolfSSL_SetMinDhKey_Sz(WOLFSSL*, unsigned short);
     1670WOLFSSL_API int wolfSSL_CTX_SetMaxDhKey_Sz(WOLFSSL_CTX*, unsigned short);
     1671WOLFSSL_API int wolfSSL_SetMaxDhKey_Sz(WOLFSSL*, unsigned short);
    13931672WOLFSSL_API int wolfSSL_GetDhKey_Sz(WOLFSSL*);
    13941673#endif /* NO_DH */
     
    14261705        #elif !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) && \
    14271706              !defined(WOLFSSL_PICOTCP) && !defined(WOLFSSL_ROWLEY_ARM) && \
    1428               !defined(WOLFSSL_EMBOS) && !defined(WOLFSSL_FROSTED)
     1707              !defined(WOLFSSL_EMBOS) && !defined(WOLFSSL_FROSTED) && \
     1708              !defined(WOLFSSL_CHIBIOS) && !defined(WOLFSSL_CONTIKI)
    14291709            #include <sys/uio.h>
    14301710        #endif
     
    14451725#endif
    14461726    WOLFSSL_API int wolfSSL_CTX_load_verify_buffer(WOLFSSL_CTX*,
     1727                                               const unsigned char*, long, int);
     1728    WOLFSSL_API int wolfSSL_CTX_load_verify_chain_buffer_format(WOLFSSL_CTX*,
    14471729                                               const unsigned char*, long, int);
    14481730    WOLFSSL_API int wolfSSL_CTX_use_certificate_buffer(WOLFSSL_CTX*,
     
    14581740    WOLFSSL_API int wolfSSL_use_certificate_buffer(WOLFSSL*, const unsigned char*,
    14591741                                               long, int);
     1742    WOLFSSL_API int wolfSSL_use_certificate_ASN1(WOLFSSL* ssl, unsigned char* der,
     1743                                                                     int derSz);
    14601744    WOLFSSL_API int wolfSSL_use_PrivateKey_buffer(WOLFSSL*, const unsigned char*,
    14611745                                               long, int);
     
    15141798    WOLFSSL_TLSV1_1  = 2,
    15151799    WOLFSSL_TLSV1_2  = 3,
     1800    WOLFSSL_TLSV1_3  = 4,
    15161801    WOLFSSL_USER_CA  = 1,          /* user added as trusted */
    15171802    WOLFSSL_CHAIN_CA = 2           /* added to cache from trusted chain */
     
    15271812WOLFSSL_API int wolfSSL_GetOutputSize(WOLFSSL*, int);
    15281813WOLFSSL_API int wolfSSL_GetMaxOutputSize(WOLFSSL*);
     1814WOLFSSL_API int wolfSSL_GetVersion(WOLFSSL* ssl);
    15291815WOLFSSL_API int wolfSSL_SetVersion(WOLFSSL* ssl, int version);
    1530 WOLFSSL_API int wolfSSL_KeyPemToDer(const unsigned char*, int,
    1531                                     unsigned char*, int, const char*);
    1532 WOLFSSL_API int wolfSSL_CertPemToDer(const unsigned char*, int,
    1533                                      unsigned char*, int, int);
    1534 #if defined(WOLFSSL_CERT_EXT) || defined(WOLFSSL_PUB_PEM_TO_DER)
    1535     #ifndef WOLFSSL_PEMPUBKEY_TODER_DEFINED
    1536         #ifndef NO_FILESYSTEM
    1537             WOLFSSL_API int wolfSSL_PemPubKeyToDer(const char* fileName,
    1538                                                    unsigned char* derBuf, int derSz);
    1539         #endif
    1540         WOLFSSL_API int wolfSSL_PubKeyPemToDer(const unsigned char*, int,
    1541                                                unsigned char*, int);
    1542         #define WOLFSSL_PEMPUBKEY_TODER_DEFINED
    1543     #endif /* WOLFSSL_PEMPUBKEY_TODER_DEFINED */
    1544 #endif /* WOLFSSL_CERT_EXT || WOLFSSL_PUB_PEM_TO_DER*/
     1816
     1817/* moved to asn.c, old names kept for backwards compatability */
     1818#define wolfSSL_KeyPemToDer    wc_KeyPemToDer
     1819#define wolfSSL_CertPemToDer   wc_CertPemToDer
     1820#define wolfSSL_PemPubKeyToDer wc_PemPubKeyToDer
     1821#define wolfSSL_PubKeyPemToDer wc_PubKeyPemToDer
     1822#define wolfSSL_PemCertToDer   wc_PemCertToDer
     1823
    15451824
    15461825typedef void (*CallbackCACache)(unsigned char* der, int sz, int type);
     
    16091888    wolfssl_triple_des,             /* leading 3 (3des) not valid identifier */
    16101889    wolfssl_des40,
     1890#ifdef HAVE_IDEA
    16111891    wolfssl_idea,
     1892#endif
    16121893    wolfssl_aes,
    16131894    wolfssl_aes_gcm,
     
    16291910
    16301911/* Public Key Callback support */
     1912#ifdef HAVE_PK_CALLBACKS
     1913#ifdef HAVE_ECC
     1914
     1915struct ecc_key;
     1916
     1917typedef int (*CallbackEccKeyGen)(WOLFSSL* ssl, struct ecc_key* key,
     1918    unsigned int keySz, int ecc_curve, void* ctx);
     1919WOLFSSL_API void  wolfSSL_CTX_SetEccKeyGenCb(WOLFSSL_CTX*, CallbackEccKeyGen);
     1920WOLFSSL_API void  wolfSSL_SetEccKeyGenCtx(WOLFSSL* ssl, void *ctx);
     1921WOLFSSL_API void* wolfSSL_GetEccKeyGenCtx(WOLFSSL* ssl);
     1922
    16311923typedef int (*CallbackEccSign)(WOLFSSL* ssl,
    16321924       const unsigned char* in, unsigned int inSz,
     
    16471939WOLFSSL_API void* wolfSSL_GetEccVerifyCtx(WOLFSSL* ssl);
    16481940
    1649 struct ecc_key;
    16501941typedef int (*CallbackEccSharedSecret)(WOLFSSL* ssl, struct ecc_key* otherKey,
    16511942        unsigned char* pubKeyDer, unsigned int* pubKeySz,
     
    16551946WOLFSSL_API void  wolfSSL_SetEccSharedSecretCtx(WOLFSSL* ssl, void *ctx);
    16561947WOLFSSL_API void* wolfSSL_GetEccSharedSecretCtx(WOLFSSL* ssl);
    1657 
     1948#endif
     1949
     1950#ifndef NO_DH
     1951/* Public DH Key Callback support */
     1952struct DhKey;
     1953typedef int (*CallbackDhAgree)(WOLFSSL* ssl, struct DhKey* key,
     1954        const unsigned char* priv, unsigned int privSz,
     1955        const unsigned char* otherPubKeyDer, unsigned int otherPubKeySz,
     1956        unsigned char* out, unsigned int* outlen,
     1957        void* ctx);
     1958WOLFSSL_API void  wolfSSL_CTX_SetDhAgreeCb(WOLFSSL_CTX*, CallbackDhAgree);
     1959WOLFSSL_API void  wolfSSL_SetDhAgreeCtx(WOLFSSL* ssl, void *ctx);
     1960WOLFSSL_API void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl);
     1961#endif /* !NO_DH */
     1962
     1963#ifdef HAVE_ED25519
    16581964struct ed25519_key;
    16591965typedef int (*CallbackEd25519Sign)(WOLFSSL* ssl,
     
    16761982WOLFSSL_API void  wolfSSL_SetEd25519VerifyCtx(WOLFSSL* ssl, void *ctx);
    16771983WOLFSSL_API void* wolfSSL_GetEd25519VerifyCtx(WOLFSSL* ssl);
    1678 
     1984#endif
     1985
     1986#ifdef HAVE_CURVE25519
    16791987struct curve25519_key;
     1988
     1989typedef int (*CallbackX25519KeyGen)(WOLFSSL* ssl, struct curve25519_key* key,
     1990    unsigned int keySz, void* ctx);
     1991WOLFSSL_API void  wolfSSL_CTX_SetX25519KeyGenCb(WOLFSSL_CTX*, CallbackX25519KeyGen);
     1992WOLFSSL_API void  wolfSSL_SetX25519KeyGenCtx(WOLFSSL* ssl, void *ctx);
     1993WOLFSSL_API void* wolfSSL_GetX25519KeyGenCtx(WOLFSSL* ssl);
     1994
    16801995typedef int (*CallbackX25519SharedSecret)(WOLFSSL* ssl,
    16811996        struct curve25519_key* otherKey,
     
    16882003WOLFSSL_API void  wolfSSL_SetX25519SharedSecretCtx(WOLFSSL* ssl, void *ctx);
    16892004WOLFSSL_API void* wolfSSL_GetX25519SharedSecretCtx(WOLFSSL* ssl);
    1690 
     2005#endif
     2006
     2007#ifndef NO_RSA
    16912008typedef int (*CallbackRsaSign)(WOLFSSL* ssl,
    16922009       const unsigned char* in, unsigned int inSz,
     
    17042021       void* ctx);
    17052022WOLFSSL_API void  wolfSSL_CTX_SetRsaVerifyCb(WOLFSSL_CTX*, CallbackRsaVerify);
     2023WOLFSSL_API void  wolfSSL_CTX_SetRsaSignCheckCb(WOLFSSL_CTX*, CallbackRsaVerify);
    17062024WOLFSSL_API void  wolfSSL_SetRsaVerifyCtx(WOLFSSL* ssl, void *ctx);
    17072025WOLFSSL_API void* wolfSSL_GetRsaVerifyCtx(WOLFSSL* ssl);
     
    17262044WOLFSSL_API void  wolfSSL_CTX_SetRsaPssVerifyCb(WOLFSSL_CTX*,
    17272045                                                CallbackRsaPssVerify);
     2046WOLFSSL_API void  wolfSSL_CTX_SetRsaPssSignCheckCb(WOLFSSL_CTX*,
     2047                                                    CallbackRsaPssVerify);
    17282048WOLFSSL_API void  wolfSSL_SetRsaPssVerifyCtx(WOLFSSL* ssl, void *ctx);
    17292049WOLFSSL_API void* wolfSSL_GetRsaPssVerifyCtx(WOLFSSL* ssl);
     
    17492069WOLFSSL_API void  wolfSSL_SetRsaDecCtx(WOLFSSL* ssl, void *ctx);
    17502070WOLFSSL_API void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl);
    1751 
     2071#endif
     2072#endif /* HAVE_PK_CALLBACKS */
    17522073
    17532074#ifndef NO_CERTS
     
    18552176
    18562177/* async additions */
    1857 WOLFSSL_API int wolfSSL_UseAsync(WOLFSSL*, int devId);
    1858 WOLFSSL_API int wolfSSL_CTX_UseAsync(WOLFSSL_CTX*, int devId);
     2178#define wolfSSL_UseAsync wolfSSL_SetDevId
     2179#define wolfSSL_CTX_UseAsync wolfSSL_CTX_SetDevId
     2180WOLFSSL_API int wolfSSL_SetDevId(WOLFSSL*, int devId);
     2181WOLFSSL_API int wolfSSL_CTX_SetDevId(WOLFSSL_CTX*, int devId);
    18592182
    18602183/* helpers to get device id and heap */
     
    18962219WOLFSSL_API void wolfSSL_CTX_SNI_SetOptions(WOLFSSL_CTX* ctx,
    18972220                                     unsigned char type, unsigned char options);
     2221WOLFSSL_API int wolfSSL_SNI_GetFromBuffer(
     2222                 const unsigned char* clientHello, unsigned int helloSz,
     2223                 unsigned char type, unsigned char* sni, unsigned int* inOutSz);
     2224
     2225#endif /* NO_WOLFSSL_SERVER */
    18982226
    18992227/* SNI status */
     
    19092237WOLFSSL_API unsigned short wolfSSL_SNI_GetRequest(WOLFSSL *ssl,
    19102238                                               unsigned char type, void** data);
    1911 WOLFSSL_API int wolfSSL_SNI_GetFromBuffer(
    1912                  const unsigned char* clientHello, unsigned int helloSz,
    1913                  unsigned char type, unsigned char* sni, unsigned int* inOutSz);
    1914 
    1915 #endif
    1916 #endif
     2239
     2240#endif /* HAVE_SNI */
    19172241
    19182242/* Application-Layer Protocol Negotiation */
     
    19322256};
    19332257
    1934 #if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2258#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    19352259typedef int (*CallbackALPNSelect)(WOLFSSL* ssl, const unsigned char** out,
    19362260    unsigned char* outLen, const unsigned char* in, unsigned int inLen,
     
    19592283    WOLFSSL_MFL_2_11 = 3, /* 2048 bytes */
    19602284    WOLFSSL_MFL_2_12 = 4, /* 4096 bytes */
    1961     WOLFSSL_MFL_2_13 = 5  /* 8192 bytes *//* wolfSSL ONLY!!! */
     2285    WOLFSSL_MFL_2_13 = 5, /* 8192 bytes *//* wolfSSL ONLY!!! */
     2286    WOLFSSL_MFL_2_8  = 6, /*  256 bytes *//* wolfSSL ONLY!!! */
     2287    WOLFSSL_MFL_MIN  = WOLFSSL_MFL_2_9,
     2288    WOLFSSL_MFL_MAX  = WOLFSSL_MFL_2_8,
    19622289};
    19632290
     
    19682295
    19692296#endif
    1970 #endif
     2297#endif /* HAVE_MAX_FRAGMENT */
    19712298
    19722299/* Truncated HMAC */
     
    21172444#endif /* NO_WOLFSSL_CLIENT */
    21182445
    2119 #ifndef NO_WOLFSSL_SERVER
    21202446
    21212447#define WOLFSSL_TICKET_NAME_SZ 16
     
    21292455    WOLFSSL_TICKET_RET_CREATE        /* existing ticket ok and create new one */
    21302456};
     2457
     2458#ifndef NO_WOLFSSL_SERVER
    21312459
    21322460typedef int (*SessionTicketEncCb)(WOLFSSL*,
     
    22322560#endif
    22332561
    2234 #if defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    2235 WOLFSSL_API char* wolfSSL_ASN1_TIME_to_string(WOLFSSL_ASN1_TIME* time,
    2236                                                             char* buf, int len);
    2237 #endif /* WOLFSSL_MYSQL_COMPATIBLE */
    2238 
    2239 #ifdef OPENSSL_EXTRA
    2240 
    2241 #ifndef NO_FILESYSTEM
    2242 WOLFSSL_API long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c);
    2243 WOLFSSL_API long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp);
    2244 #endif
     2562#if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
     2563/* Smaller subset of X509 compatibility functions. Avoid increasing the size of
     2564 * this subset and its memory usage */
     2565
     2566#include <wolfssl/openssl/asn1.h>
     2567struct WOLFSSL_X509_NAME_ENTRY {
     2568    WOLFSSL_ASN1_OBJECT  object;  /* static object just for keeping grp, type */
     2569    WOLFSSL_ASN1_STRING  data;
     2570    WOLFSSL_ASN1_STRING* value;  /* points to data, for lighttpd port */
     2571    int nid; /* i.e. ASN_COMMON_NAME */
     2572    int set;
     2573    int size;
     2574};
     2575#endif /* OPENSSL_ALL || OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
     2576
     2577
     2578#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
     2579
     2580enum {
     2581    WOLFSSL_SYS_ACCEPT = 0,
     2582    WOLFSSL_SYS_BIND,
     2583    WOLFSSL_SYS_CONNECT,
     2584    WOLFSSL_SYS_FOPEN,
     2585    WOLFSSL_SYS_FREAD,
     2586    WOLFSSL_SYS_GETADDRINFO,
     2587    WOLFSSL_SYS_GETSOCKOPT,
     2588    WOLFSSL_SYS_GETSOCKNAME,
     2589    WOLFSSL_SYS_GETHOSTBYNAME,
     2590    WOLFSSL_SYS_GETNAMEINFO,
     2591    WOLFSSL_SYS_GETSERVBYNAME,
     2592    WOLFSSL_SYS_IOCTLSOCKET,
     2593    WOLFSSL_SYS_LISTEN,
     2594    WOLFSSL_SYS_OPENDIR,
     2595    WOLFSSL_SYS_SETSOCKOPT,
     2596    WOLFSSL_SYS_SOCKET
     2597};
     2598
     2599/* Object functions */
     2600WOLFSSL_API const char *  wolfSSL_OBJ_nid2sn(int n);
     2601WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
     2602WOLFSSL_API int wolfSSL_OBJ_sn2nid(const char *sn);
     2603
     2604WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n);
     2605WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn);
     2606
     2607WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int n);
     2608WOLFSSL_LOCAL WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj_ex(int n, WOLFSSL_ASN1_OBJECT *arg_obj);
     2609WOLFSSL_API int wolfSSL_OBJ_obj2txt(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a, int no_name);
     2610
     2611WOLFSSL_API void wolfSSL_OBJ_cleanup(void);
     2612/* end of object functions */
    22452613
    22462614WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error_line(const char **file, int *line);
     
    22492617
    22502618#ifndef NO_CERTS
     2619WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_NID(
     2620            WOLFSSL_X509_NAME_ENTRY** out, int nid, int type,
     2621            unsigned char* data, int dataSz);
     2622WOLFSSL_API int wolfSSL_X509_NAME_add_entry(WOLFSSL_X509_NAME* name,
     2623                              WOLFSSL_X509_NAME_ENTRY* entry, int idx, int set);
     2624WOLFSSL_API int wolfSSL_X509_NAME_add_entry_by_txt(WOLFSSL_X509_NAME *name,
     2625    const char *field, int type, const unsigned char *bytes, int len, int loc,
     2626    int set);
     2627WOLFSSL_API int wolfSSL_X509_NAME_cmp(const WOLFSSL_X509_NAME* x,
     2628            const WOLFSSL_X509_NAME* y);
     2629WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new(void);
    22512630WOLFSSL_API int wolfSSL_check_private_key(const WOLFSSL* ssl);
    22522631WOLFSSL_API void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509,
     
    22552634        const WOLFSSL_EVP_MD* digest, unsigned char* buf, unsigned int* len);
    22562635WOLFSSL_API int wolfSSL_use_certificate(WOLFSSL* ssl, WOLFSSL_X509* x509);
    2257 WOLFSSL_API int wolfSSL_use_certificate_ASN1(WOLFSSL* ssl, unsigned char* der,
    2258                                                                      int derSz);
    22592636WOLFSSL_API int wolfSSL_use_PrivateKey(WOLFSSL* ssl, WOLFSSL_EVP_PKEY* pkey);
    22602637WOLFSSL_API int wolfSSL_use_PrivateKey_ASN1(int pri, WOLFSSL* ssl,
     
    22752652WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
    22762653                                                       WOLFSSL_X509_STORE* str);
    2277 WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509** x509);
     2654WOLFSSL_API int wolfSSL_i2d_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
     2655#if !defined(NO_FILESYSTEM)
     2656WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_fp(XFILE fp,
     2657                                               WOLFSSL_X509** x509);
     2658#endif
     2659WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio,
     2660                                               WOLFSSL_X509** x509);
    22782661WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx);
    22792662
     2663WOLFSSL_API size_t wolfSSL_BIO_wpending(const WOLFSSL_BIO *bio);
    22802664WOLFSSL_API size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *b);
    22812665WOLFSSL_API size_t wolfSSL_get_server_random(const WOLFSSL *ssl,
     
    22832667WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
    22842668                                              unsigned char* out, size_t outSz);
    2285 WOLFSSL_API pem_password_cb* wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX *ctx);
    2286 WOLFSSL_API void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx);
    22872669WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
    22882670WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
    22892671WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX
    22902672        (WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
     2673#ifndef NO_FILESYSTEM
     2674WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_PEM_read_X509_CRL(XFILE fp,
     2675        WOLFSSL_X509_CRL **x, pem_password_cb *cb, void *u);
     2676#endif
     2677WOLFSSL_API int wolfSSL_PEM_get_EVP_CIPHER_INFO(char* header,
     2678                                                EncryptedInfo* cipher);
     2679WOLFSSL_API int wolfSSL_PEM_do_header(EncryptedInfo* cipher,
     2680                                      unsigned char* data, long* len,
     2681                                      pem_password_cb* callback, void* ctx);
    22912682
    22922683/*lighttp compatibility */
    22932684
    2294 #include <wolfssl/openssl/asn1.h>
    2295 struct WOLFSSL_X509_NAME_ENTRY {
    2296     WOLFSSL_ASN1_OBJECT* object; /* not defined yet */
    2297     WOLFSSL_ASN1_STRING  data;
    2298     WOLFSSL_ASN1_STRING* value;  /* points to data, for lighttpd port */
    2299     int set;
    2300     int size;
    2301 };
    2302 
    2303 #if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) \
     2685struct WOLFSSL_ASN1_BIT_STRING {
     2686    int length;
     2687    int type;
     2688    char* data;
     2689    long flags;
     2690};
     2691
     2692
     2693#if    defined(OPENSSL_EXTRA) \
     2694    || defined(OPENSSL_ALL) \
     2695    || defined(HAVE_LIGHTY) \
     2696    || defined(WOLFSSL_MYSQL_COMPATIBLE) \
    23042697                         || defined(HAVE_STUNNEL) \
    23052698                         || defined(WOLFSSL_NGINX) \
    2306                          || defined(WOLFSSL_HAPROXY) \
    2307                          || defined(OPENSSL_EXTRA)
     2699    || defined(WOLFSSL_HAPROXY)
     2700WOLFSSL_API void wolfSSL_X509_NAME_ENTRY_free(WOLFSSL_X509_NAME_ENTRY* ne);
     2701WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_new(void);
    23082702WOLFSSL_API void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME *name);
    23092703WOLFSSL_API char wolfSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x);
    23102704WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name);
    23112705/* These are to be merged shortly */
    2312 WOLFSSL_API const char *  wolfSSL_OBJ_nid2sn(int n);
    2313 WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
    2314 WOLFSSL_API int wolfSSL_OBJ_sn2nid(const char *sn);
    2315 WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
    23162706WOLFSSL_API void wolfSSL_set_verify_depth(WOLFSSL *ssl,int depth);
    23172707WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl);
     
    23212711WOLFSSL_API void wolfSSL_sk_X509_NAME_pop_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk, void f (WOLFSSL_X509_NAME*));
    23222712WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md);
     2713WOLFSSL_API unsigned char *wolfSSL_SHA256(const unsigned char *d, size_t n, unsigned char *md);
     2714WOLFSSL_API unsigned char *wolfSSL_SHA384(const unsigned char *d, size_t n, unsigned char *md);
     2715WOLFSSL_API unsigned char *wolfSSL_SHA512(const unsigned char *d, size_t n, unsigned char *md);
    23232716WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*);
    23242717WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( WOLF_STACK_OF(WOLFSSL_X509_NAME) *sk );
    2325 
    2326 /* end lighttpd*/
    2327 #endif
    2328 #endif
    2329 
    2330 #if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
     2718WOLFSSL_API int wolfSSL_X509_check_ca(WOLFSSL_X509 *x509);
     2719
     2720#ifndef NO_FILESYSTEM
     2721WOLFSSL_API long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c);
     2722WOLFSSL_API long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp);
     2723#endif
     2724
     2725#endif /* OPENSSL_EXTRA || OPENSSL_ALL || HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
     2726
     2727#endif /* OPENSSL_EXTRA || OPENSSL_ALL */
     2728
     2729
     2730#if defined(OPENSSL_ALL) \
     2731    || defined(HAVE_STUNNEL) \
     2732    || defined(HAVE_LIGHTY) \
    23312733                          || defined(WOLFSSL_MYSQL_COMPATIBLE) \
    23322734                          || defined(WOLFSSL_HAPROXY) \
    23332735                          || defined(OPENSSL_EXTRA)
    23342736
    2335 WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n);
    2336 WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn);
    23372737WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
    23382738WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*);
     
    23412741WOLFSSL_API WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp,
    23422742    WOLFSSL_DSA **x, pem_password_cb *cb, void *u);
     2743WOLFSSL_API int wolfSSL_PEM_write_bio_X509_REQ(WOLFSSL_BIO *bp,WOLFSSL_X509 *x);
     2744WOLFSSL_API int wolfSSL_PEM_write_bio_X509_AUX(WOLFSSL_BIO *bp,WOLFSSL_X509 *x);
    23432745WOLFSSL_API int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
    2344 WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
    2345 
    2346 
    23472746
    23482747#endif /* HAVE_STUNNEL || HAVE_LIGHTY */
    23492748
    2350 
    2351 #if defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2749#ifdef OPENSSL_ALL
     2750WOLFSSL_API int wolfSSL_i2d_X509_REQ(WOLFSSL_X509* req, unsigned char** out);
     2751WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_REQ_new(void);
     2752WOLFSSL_API void wolfSSL_X509_REQ_free(WOLFSSL_X509* req);
     2753WOLFSSL_API int wolfSSL_X509_REQ_sign(WOLFSSL_X509 *req, WOLFSSL_EVP_PKEY *pkey,
     2754                                      const WOLFSSL_EVP_MD *md);
     2755WOLFSSL_API int wolfSSL_X509_REQ_set_subject_name(WOLFSSL_X509 *req,
     2756                                                  WOLFSSL_X509_NAME *name);
     2757WOLFSSL_API int wolfSSL_X509_REQ_set_pubkey(WOLFSSL_X509 *req,
     2758                                            WOLFSSL_EVP_PKEY *pkey);
     2759#endif
     2760
     2761
     2762#if defined(OPENSSL_ALL) \
     2763    || defined(HAVE_STUNNEL) \
     2764    || defined(WOLFSSL_NGINX) \
     2765    || defined(WOLFSSL_HAPROXY) \
     2766    || defined(OPENSSL_EXTRA) \
     2767    || defined(HAVE_LIGHTY)
    23522768
    23532769#include <wolfssl/openssl/crypto.h>
     
    23592775    void *(*r) (void *, size_t, const char *, int), void (*f) (void *));
    23602776
     2777WOLFSSL_API void wolfSSL_CRYPTO_cleanup_all_ex_data(void);
     2778
     2779WOLFSSL_API WOLFSSL_BIGNUM* wolfSSL_DH_1536_prime(WOLFSSL_BIGNUM* bn);
    23612780WOLFSSL_API WOLFSSL_DH *wolfSSL_DH_generate_parameters(int prime_len, int generator,
    23622781    void (*callback) (int, int, void *), void *cb_arg);
     
    23792798WOLFSSL_API int wolfSSL_sk_X509_NAME_num(const WOLF_STACK_OF(WOLFSSL_X509_NAME) *s);
    23802799
     2800WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_new(void);
    23812801WOLFSSL_API int wolfSSL_sk_X509_num(const WOLF_STACK_OF(WOLFSSL_X509) *s);
    23822802
     
    23892809WOLFSSL_API int        wolfSSL_CTX_add_session(WOLFSSL_CTX*, WOLFSSL_SESSION*);
    23902810
    2391 WOLFSSL_API WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl);
    2392 
    23932811WOLFSSL_API int  wolfSSL_version(WOLFSSL*);
    23942812
     
    23982816
    23992817WOLFSSL_API void* wolfSSL_sk_X509_value(WOLF_STACK_OF(WOLFSSL_X509)*, int);
    2400 
    2401 WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*);
    24022818
    24032819WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
     
    24212837
    24222838WOLFSSL_API VerifyCallback wolfSSL_CTX_get_verify_callback(WOLFSSL_CTX*);
     2839
     2840WOLFSSL_API VerifyCallback wolfSSL_get_verify_callback(WOLFSSL*);
    24232841
    24242842WOLFSSL_API void wolfSSL_CTX_set_servername_callback(WOLFSSL_CTX *,
     
    24292847WOLFSSL_API void wolfSSL_CTX_set_servername_arg(WOLFSSL_CTX *, void*);
    24302848
    2431 WOLFSSL_API void WOLFSSL_ERR_remove_thread_state(void*);
     2849WOLFSSL_API void wolfSSL_ERR_remove_thread_state(void*);
     2850
     2851/* support for depricated old name */
     2852#define WOLFSSL_ERR_remove_thread_state wolfSSL_ERR_remove_thread_state
    24322853
    24332854#ifndef NO_FILESYSTEM
    2434 WOLFSSL_API void wolfSSL_print_all_errors_fp(XFILE *fp);
    2435 #endif
    2436 
    2437 WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
     2855WOLFSSL_API void wolfSSL_print_all_errors_fp(XFILE fp);
     2856#endif
    24382857
    24392858WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*));
     
    24452864
    24462865WOLFSSL_API void wolfSSL_sk_X509_pop_free(WOLF_STACK_OF(WOLFSSL_X509)* sk, void f (WOLFSSL_X509*));
    2447 #endif /* HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
    2448 
    2449 #if defined(HAVE_STUNNEL) || defined(WOLFSSL_MYSQL_COMPATIBLE) \
    2450                           || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2866#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_LIGHTY */
     2867
     2868#if defined(OPENSSL_ALL) || \
     2869    defined(HAVE_STUNNEL) || defined(WOLFSSL_MYSQL_COMPATIBLE) || \
     2870    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    24512871
    24522872WOLFSSL_API int wolfSSL_CTX_get_verify_mode(WOLFSSL_CTX* ctx);
     
    24762896WOLFSSL_API int wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg);
    24772897WOLFSSL_API int wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg);
    2478 #endif
    2479 
    2480 #ifdef OPENSSL_EXTRA
    24812898WOLFSSL_API unsigned long wolfSSL_ERR_peek_error_line_data(const char **file,
    24822899    int *line, const char **data, int *flags);
    2483 #endif
    2484 
    2485 #if defined WOLFSSL_NGINX || defined WOLFSSL_HAPROXY
     2900WOLFSSL_API int wolfSSL_CTX_set_alpn_protos(WOLFSSL_CTX *ctx,
     2901    const unsigned char *protos, unsigned int protos_len);
     2902WOLFSSL_API void *wolfSSL_OPENSSL_memdup(const void *data,
     2903    size_t siz, const char* file, int line);
     2904WOLFSSL_API void wolfSSL_ERR_load_BIO_strings(void);
     2905#endif
     2906
     2907#if defined(OPENSSL_ALL) \
     2908    || defined(WOLFSSL_NGINX) \
     2909    || defined(WOLFSSL_HAPROXY) \
     2910    || defined(OPENSSL_EXTRA)
     2911WOLFSSL_API void wolfSSL_OPENSSL_config(char *config_name);
     2912#endif
     2913
     2914#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    24862915/* Not an OpenSSL API. */
    24872916WOLFSSL_LOCAL int wolfSSL_get_ocsp_response(WOLFSSL* ssl, byte** response);
     
    24902919/* Not an OpenSSL API. */
    24912920WOLFSSL_API int wolfSSL_set_ocsp_url(WOLFSSL* ssl, char* url);
    2492 
     2921#endif
     2922
     2923#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
     2924    || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
    24932925WOLFSSL_API WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl);
    2494 WOLFSSL_API void wolfSSL_OPENSSL_config(char *config_name);
    24952926WOLFSSL_API int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a,
    24962927    void *b, void *c);
     
    25272958#endif
    25282959
    2529 #ifdef HAVE_OCSP
     2960#if defined(HAVE_OCSP) || defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL) || \
     2961    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    25302962WOLFSSL_API int wolfSSL_CTX_get_extra_chain_certs(WOLFSSL_CTX* ctx,
    25312963    WOLF_STACK_OF(X509)** chain);
     
    25512983    WOLFSSL_X509 *cert);
    25522984
    2553 #endif /* WOLFSSL_NGINX */
     2985#endif /* OPENSSL_ALL || WOLFSSL_NGINX || WOLFSSL_HAPROXY ||
     2986    OPENSSL_EXTRA || HAVE_LIGHTY*/
    25542987
    25552988WOLFSSL_API void wolfSSL_get0_alpn_selected(const WOLFSSL *ssl,
     
    25843017
    25853018#ifdef OPENSSL_EXTRA
    2586 #if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     3019#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    25873020WOLFSSL_API const unsigned char *SSL_SESSION_get0_id_context(
    25883021        const WOLFSSL_SESSION *sess, unsigned int *sid_ctx_length);
     
    25973030WOLFSSL_API void *X509_get_X509_PUBKEY(void * x);
    25983031WOLFSSL_API int X509_PUBKEY_get0_param(WOLFSSL_ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, void **pa, WOLFSSL_EVP_PKEY *pub);
    2599 WOLFSSL_API int EVP_PKEY_bits(WOLFSSL_EVP_PKEY *pkey);
    2600 WOLFSSL_API int i2d_X509(WOLFSSL_X509 *x, unsigned char **out);
    26013032WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a);
    26023033WOLFSSL_API void SSL_CTX_set_tmp_dh_callback(WOLFSSL_CTX *ctx, WOLFSSL_DH *(*dh) (WOLFSSL *ssl, int is_export, int keylength));
    26033034WOLFSSL_API WOLF_STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
    26043035WOLFSSL_API int X509_STORE_load_locations(WOLFSSL_X509_STORE *ctx, const char *file, const char *dir);
     3036WOLFSSL_API int wolfSSL_X509_STORE_add_crl(WOLFSSL_X509_STORE *ctx, WOLFSSL_X509_CRL *x);
    26053037WOLFSSL_API int wolfSSL_sk_SSL_CIPHER_num(const void * p);
    26063038WOLFSSL_API int wolfSSL_sk_SSL_COMP_zero(WOLFSSL_STACK* st);
    26073039WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_sk_SSL_CIPHER_value(void *ciphers, int idx);
    26083040WOLFSSL_API void ERR_load_SSL_strings(void);
     3041WOLFSSL_API void wolfSSL_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p);
     3042
     3043WOLFSSL_API const char *wolfSSL_ASN1_tag2str(int tag);
     3044WOLFSSL_API int wolfSSL_ASN1_STRING_print_ex(WOLFSSL_BIO *out, WOLFSSL_ASN1_STRING *str, unsigned long flags);
     3045WOLFSSL_API int wolfSSL_ASN1_TIME_get_length(WOLFSSL_ASN1_TIME *t);
     3046WOLFSSL_API unsigned char* wolfSSL_ASN1_TIME_get_data(WOLFSSL_ASN1_TIME *t);
     3047WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_to_generalizedtime(WOLFSSL_ASN1_TIME *t,
     3048                                                                WOLFSSL_ASN1_TIME **out);
     3049WOLFSSL_API int wolfSSL_i2c_ASN1_INTEGER(WOLFSSL_ASN1_INTEGER *a, unsigned char **pp);
     3050WOLFSSL_API int wolfSSL_X509_CA_num(WOLFSSL_X509_STORE *store);
     3051WOLFSSL_API long wolfSSL_X509_get_version(const WOLFSSL_X509 *x);
     3052WOLFSSL_API int wolfSSL_X509_get_signature_nid(const WOLFSSL_X509* x);
     3053
     3054WOLFSSL_API int wolfSSL_PEM_write_bio_PKCS8PrivateKey(WOLFSSL_BIO* bio,
     3055    WOLFSSL_EVP_PKEY* pkey, const WOLFSSL_EVP_CIPHER* enc, char* passwd,
     3056    int passwdSz, pem_password_cb* cb, void* ctx);
     3057WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PKCS8PrivateKey_bio(WOLFSSL_BIO* bio,
     3058    WOLFSSL_EVP_PKEY** pkey, pem_password_cb* cb, void* u);
     3059WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_AutoPrivateKey(
     3060    WOLFSSL_EVP_PKEY** pkey, const unsigned char** data, long length);
     3061
    26093062#endif /* OPENSSL_EXTRA */
     3063
     3064#ifdef HAVE_PK_CALLBACKS
     3065WOLFSSL_API int wolfSSL_CTX_IsPrivatePkSet(WOLFSSL_CTX* ctx);
     3066#endif
    26103067
    26113068#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.