Ignore:
Timestamp:
Jun 22, 2021, 9:00:19 PM (3 years ago)
Author:
coas-nagasima
Message:

WolfSSLとAzure IoT SDKを更新

Location:
azure_iot_hub_f767zi/trunk/wolfssl-4.7.0
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/ssl.h

    r457 r464  
    4141#endif
    4242
     43 #ifdef WOLF_CRYPTO_CB
     44    #include <wolfssl/wolfcrypt/cryptocb.h>
     45#endif
     46
    4347/* used internally by wolfSSL while OpenSSL types aren't */
    4448#include <wolfssl/callbacks.h>
     
    99103#endif
    100104
     105/* LHASH is implemented as a stack */
     106typedef struct WOLFSSL_STACK WOLFSSL_LHASH;
     107#ifndef WOLF_LHASH_OF
     108    #define WOLF_LHASH_OF(x) WOLFSSL_LHASH
     109#endif
     110
     111#ifndef WOLF_STACK_OF
     112    #define WOLF_STACK_OF(x) WOLFSSL_STACK
     113#endif
     114#ifndef DECLARE_STACK_OF
     115    #define DECLARE_STACK_OF(x) WOLF_STACK_OF(x);
     116#endif
     117
    101118#ifndef WOLFSSL_WOLFSSL_TYPE_DEFINED
    102119#define WOLFSSL_WOLFSSL_TYPE_DEFINED
     
    172189typedef struct WOLFSSL_BIO_METHOD     WOLFSSL_BIO_METHOD;
    173190typedef struct WOLFSSL_X509_EXTENSION WOLFSSL_X509_EXTENSION;
    174 typedef struct WOLFSSL_CONF_VALUE     WOLFSSL_CONF_VALUE;
    175191typedef struct WOLFSSL_ASN1_OBJECT    WOLFSSL_ASN1_OBJECT;
    176192typedef struct WOLFSSL_ASN1_OTHERNAME WOLFSSL_ASN1_OTHERNAME;
     
    186202typedef struct WOLFSSL_ASN1_BIT_STRING  WOLFSSL_ASN1_BIT_STRING;
    187203typedef struct WOLFSSL_ASN1_TYPE        WOLFSSL_ASN1_TYPE;
     204typedef struct WOLFSSL_X509_ATTRIBUTE   WOLFSSL_X509_ATTRIBUTE;
    188205
    189206typedef struct WOLFSSL_GENERAL_NAME WOLFSSL_GENERAL_NAME;
     
    192209typedef struct WOLFSSL_ACCESS_DESCRIPTION WOLFSSL_ACCESS_DESCRIPTION;
    193210
    194 #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA)
     211#if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    195212
    196213struct WOLFSSL_AUTHORITY_KEYID {
     
    275292    WOLFSSL_ASN1_INTEGER *pathlen;
    276293#endif
    277     unsigned char dynamic; /* if 1 then obj was dynamically created, 0 otherwise */
     294    unsigned char dynamic; /* Use WOLFSSL_ASN1_DYNAMIC and WOLFSSL_ASN1_DYNAMIC_DATA
     295                            * to determine what needs to be freed. */
    278296
    279297#if defined(WOLFSSL_APACHE_HTTPD)
     
    312330        WOLFSSL_ASN1_STRING*     sequence;
    313331    } value;
     332};
     333
     334struct WOLFSSL_X509_ATTRIBUTE {
     335    WOLFSSL_ASN1_OBJECT *object;
     336    WOLFSSL_ASN1_TYPE *value;
     337    WOLF_STACK_OF(WOLFSSL_ASN1_TYPE) *set;
    314338};
    315339
     
    468492    void*        ptr;           /* WOLFSSL, file descriptor, MD, or mem buf */
    469493    void*        usrCtx;        /* user set pointer */
     494    const char*  ip;            /* IP address for wolfIO_TcpConnect */
     495    word16       port;          /* Port for wolfIO_TcpConnect */
    470496    char*        infoArg;       /* BIO callback argument */
    471497    wolf_bio_info_cb infoCb;    /* BIO callback */
     
    495521} WOLFSSL_COMP;
    496522
     523#define WOLFSSL_X509_L_FILE_LOAD  0x1
     524#define WOLFSSL_X509_L_ADD_DIR    0x2
     525#define WOLFSSL_X509_L_ADD_STORE  0x3
     526#define WOLFSSL_X509_L_LOAD_STORE 0x4
     527
    497528struct WOLFSSL_X509_LOOKUP_METHOD {
    498529    int type;
     
    507538    WOLFSSL_CERT_MANAGER* cm;
    508539    WOLFSSL_X509_LOOKUP   lookup;
    509 #ifdef OPENSSL_EXTRA
     540#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    510541    int                   isDynamic;
    511542    WOLFSSL_X509_VERIFY_PARAM* param;    /* certificate validation parameter */
     
    517548    WOLFSSL_CRYPTO_EX_DATA ex_data;
    518549#endif
    519 #if defined(OPENSSL_EXTRA) && defined(HAVE_CRL)
    520     WOLFSSL_X509_CRL *crl;
    521 #endif
    522 };
    523 
    524 #ifdef OPENSSL_EXTRA
     550#if (defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)) && defined(HAVE_CRL)
     551    WOLFSSL_X509_CRL *crl; /* points to cm->crl */
     552#endif
     553};
     554
     555#define WOLFSSL_NO_WILDCARDS   0x4
     556
     557#if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \
     558    defined(WOLFSSL_WPAS_SMALL) || defined(WOLFSSL_IP_ALT_NAME)
     559    #define WOLFSSL_MAX_IPSTR 46 /* max ip size IPv4 mapped IPv6 */
     560#endif /* OPENSSL_ALL || WOLFSSL_IP_ALT_NAME */
     561
     562#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    525563#define WOLFSSL_USE_CHECK_TIME 0x2
    526564#define WOLFSSL_NO_CHECK_TIME  0x200000
    527 #define WOLFSSL_NO_WILDCARDS   0x4
    528565#define WOLFSSL_HOST_NAME_MAX  256
    529 #define WOLFSSL_MAX_IPSTR 46 /* max ip size IPv4 mapped IPv6 */
    530566struct WOLFSSL_X509_VERIFY_PARAM {
    531567    time_t         check_time;
     
    535571    char ipasc[WOLFSSL_MAX_IPSTR];
    536572};
    537 #endif
     573#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
    538574
    539575typedef struct WOLFSSL_ALERT {
     
    710746WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void);
    711747WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_method(void);
    712 WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
     748WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void);
    713749WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void);
    714750#ifdef WOLFSSL_TLS13
    715751    WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_method(void);
    716     WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
     752    WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void);
    717753    WOLFSSL_ABI WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method(void);
    718754#endif
     
    743779#endif /* WOLFSSL_DTLS_EXPORT_TYPES */
    744780
    745 WOLFSSL_API int wolfSSL_dtls_import(WOLFSSL* ssl, unsigned char* buf,
     781WOLFSSL_API int wolfSSL_dtls_import(WOLFSSL* ssl, const unsigned char* buf,
    746782                                                               unsigned int sz);
    747783WOLFSSL_API int wolfSSL_CTX_dtls_set_export(WOLFSSL_CTX* ctx,
     
    789825#define WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS WOLFSSL_LOAD_FLAG_NONE
    790826#endif
     827
     828WOLFSSL_API long wolfSSL_get_verify_depth(WOLFSSL* ssl);
     829WOLFSSL_API long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx);
     830WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
    791831#endif /* !NO_CERTS */
     832
     833#define WOLFSSL_CIPHER_SUITE_FLAG_NONE          0x0
     834#define WOLFSSL_CIPHER_SUITE_FLAG_NAMEALIAS     0x1
    792835
    793836#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS)
     
    806849WOLFSSL_API int wolfSSL_CTX_use_RSAPrivateKey_file(WOLFSSL_CTX*, const char*, int);
    807850
    808 WOLFSSL_API long wolfSSL_get_verify_depth(WOLFSSL* ssl);
    809 WOLFSSL_API long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx);
    810 WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
    811851WOLFSSL_ABI WOLFSSL_API int wolfSSL_use_certificate_file(WOLFSSL*, const char*,
    812852                                                                           int);
     
    853893WOLFSSL_API const char* wolfSSL_get_cipher_name_iana_from_suite(
    854894    const unsigned char, const unsigned char);
     895WOLFSSL_API int wolfSSL_get_cipher_suite_from_name(const char* name,
     896    byte* cipherSuite0, byte* cipherSuite, int* flags);
    855897WOLFSSL_API const char* wolfSSL_get_shared_ciphers(WOLFSSL* ssl, char* buf,
    856898    int len);
     
    862904WOLFSSL_ABI WOLFSSL_API int  wolfSSL_read(WOLFSSL*, void*, int);
    863905WOLFSSL_API int  wolfSSL_peek(WOLFSSL*, void*, int);
    864 WOLFSSL_API int  wolfSSL_accept(WOLFSSL*);
     906WOLFSSL_ABI WOLFSSL_API int  wolfSSL_accept(WOLFSSL*);
    865907WOLFSSL_API int  wolfSSL_CTX_mutual_auth(WOLFSSL_CTX* ctx, int req);
    866908WOLFSSL_API int  wolfSSL_mutual_auth(WOLFSSL* ssl, int req);
     
    885927WOLFSSL_API int  wolfSSL_set_groups(WOLFSSL* ssl, int* groups, int count);
    886928
     929#ifdef OPENSSL_EXTRA
     930WOLFSSL_API int  wolfSSL_CTX_set1_groups(WOLFSSL_CTX* ctx, int* groups,
     931                                        int count);
     932WOLFSSL_API int  wolfSSL_set1_groups(WOLFSSL* ssl, int* groups, int count);
     933#endif
     934
    887935WOLFSSL_API int  wolfSSL_connect_TLSv13(WOLFSSL*);
    888936WOLFSSL_API int  wolfSSL_accept_TLSv13(WOLFSSL*);
     
    892940                                                unsigned int sz);
    893941WOLFSSL_API int  wolfSSL_set_max_early_data(WOLFSSL* ssl, unsigned int sz);
    894 WOLFSSL_API int  wolfSSL_write_early_data(WOLFSSL*, const void*, int, int*);
    895 WOLFSSL_API int  wolfSSL_read_early_data(WOLFSSL*, void*, int, int*);
    896 #endif
    897 #endif
     942WOLFSSL_API int  wolfSSL_write_early_data(WOLFSSL* ssl, const void* data,
     943                                          int sz, int* outSz);
     944WOLFSSL_API int  wolfSSL_read_early_data(WOLFSSL* ssl, void* data, int sz,
     945                                         int* outSz);
     946#endif /* WOLFSSL_EARLY_DATA */
     947#endif /* WOLFSSL_TLS13 */
    898948WOLFSSL_ABI WOLFSSL_API void wolfSSL_CTX_free(WOLFSSL_CTX*);
    899949WOLFSSL_ABI WOLFSSL_API void wolfSSL_free(WOLFSSL*);
     
    919969                     WOLFSSL_BIO**, size_t);
    920970
    921 WOLFSSL_API int wolfSSL_RSA_padding_add_PKCS1_PSS(WOLFSSL_RSA *rsa, unsigned char *EM,
     971WOLFSSL_API int wolfSSL_RSA_padding_add_PKCS1_PSS(WOLFSSL_RSA *rsa,
     972                                                  unsigned char *EM,
    922973                                                  const unsigned char *mHash,
    923                                                   const WOLFSSL_EVP_MD *Hash, int saltLen);
     974                                                  const WOLFSSL_EVP_MD *hashAlg,
     975                                                  int saltLen);
    924976WOLFSSL_API int wolfSSL_RSA_verify_PKCS1_PSS(WOLFSSL_RSA *rsa, const unsigned char *mHash,
    925977                                          const WOLFSSL_EVP_MD *hashAlg,
     
    9701022WOLFSSL_API void wolfSSL_set_verify(WOLFSSL*, int, VerifyCallback verify_callback);
    9711023WOLFSSL_API void wolfSSL_set_verify_result(WOLFSSL*, long);
     1024
     1025#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
     1026    defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH)
     1027WOLFSSL_API int wolfSSL_verify_client_post_handshake(WOLFSSL*);
     1028WOLFSSL_API int wolfSSL_CTX_set_post_handshake_auth(WOLFSSL_CTX*, int);
     1029WOLFSSL_API int wolfSSL_set_post_handshake_auth(WOLFSSL*, int);
     1030#endif
     1031
    9721032WOLFSSL_API void wolfSSL_SetCertCbCtx(WOLFSSL*, void*);
    9731033
     
    10081068WOLFSSL_API int  wolfSSL_CTX_set_cipher_list(WOLFSSL_CTX*, const char*);
    10091069WOLFSSL_API int  wolfSSL_set_cipher_list(WOLFSSL*, const char*);
     1070
     1071#ifdef HAVE_KEYING_MATERIAL
     1072/* Keying Material Exporter for TLS */
     1073WOLFSSL_API int wolfSSL_export_keying_material(WOLFSSL *ssl,
     1074        unsigned char *out, size_t outLen,
     1075        const char *label, size_t labelLen,
     1076        const unsigned char *context, size_t contextLen,
     1077        int use_context);
     1078#endif /* HAVE_KEYING_MATERIAL */
    10101079
    10111080/* Nonblocking DTLS helper functions */
     
    10661135/* extras */
    10671136
    1068 
    1069 /* for now LHASH is not implemented */
    1070 typedef int WOLFSSL_LHASH;
    1071 #ifndef WOLF_LHASH_OF
    1072     #define WOLF_LHASH_OF(x) WOLFSSL_LHASH
    1073 #endif
    1074 
    1075 #ifndef WOLF_STACK_OF
    1076     #define WOLF_STACK_OF(x) WOLFSSL_STACK
    1077 #endif
    1078 #ifndef DECLARE_STACK_OF
    1079     #define DECLARE_STACK_OF(x) WOLF_STACK_OF(x);
    1080 #endif
    1081 
    10821137WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_new_node(void* heap);
    10831138WOLFSSL_API void wolfSSL_sk_free(WOLFSSL_STACK* sk);
    10841139WOLFSSL_API void wolfSSL_sk_free_node(WOLFSSL_STACK* in);
     1140WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_dup(WOLFSSL_STACK* sk);
    10851141WOLFSSL_API int wolfSSL_sk_push_node(WOLFSSL_STACK** stack, WOLFSSL_STACK* in);
    10861142WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_get_node(WOLFSSL_STACK* sk, int idx);
     
    11031159                                                            WOLFSSL_X509* x509);
    11041160WOLFSSL_API WOLFSSL_X509* wolfSSL_sk_X509_pop(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk);
    1105 WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_X509_dup(WOLFSSL_STACK* sk);
    11061161WOLFSSL_API void wolfSSL_sk_X509_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk);
    11071162WOLFSSL_API WOLFSSL_GENERAL_NAME* wolfSSL_GENERAL_NAME_new(void);
    11081163WOLFSSL_API void wolfSSL_GENERAL_NAME_free(WOLFSSL_GENERAL_NAME* gn);
    1109 WOLFSSL_API int wolfSSL_sk_GENERAL_NAME_push(WOLF_STACK_OF(WOLFSSL_GENERAL_NAME)* sk,
    1110                                                       WOLFSSL_GENERAL_NAME* gn);
     1164WOLFSSL_API WOLFSSL_GENERAL_NAMES* wolfSSL_GENERAL_NAMES_dup(
     1165                                             WOLFSSL_GENERAL_NAMES* gns);
     1166WOLFSSL_API int wolfSSL_sk_GENERAL_NAME_push(WOLFSSL_GENERAL_NAMES* sk,
     1167                                             WOLFSSL_GENERAL_NAME* gn);
    11111168WOLFSSL_API WOLFSSL_GENERAL_NAME* wolfSSL_sk_GENERAL_NAME_value(
    11121169        WOLFSSL_STACK* sk, int i);
     
    11301187WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* wolfSSL_sk_X509_EXTENSION_new_null(void);
    11311188WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_new(void);
     1189WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_dup(WOLFSSL_ASN1_OBJECT* obj);
    11321190WOLFSSL_API void wolfSSL_ASN1_OBJECT_free(WOLFSSL_ASN1_OBJECT* obj);
    11331191WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_new_asn1_obj(void);
     
    11411199                void (*f)(WOLFSSL_ASN1_OBJECT*));
    11421200WOLFSSL_API int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *in);
     1201WOLFSSL_API int wolfSSL_ASN1_UNIVERSALSTRING_to_string(WOLFSSL_ASN1_STRING *s);
    11431202WOLFSSL_API int wolfSSL_sk_X509_EXTENSION_num(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk);
    11441203WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_sk_X509_EXTENSION_value(
     
    11541213WOLFSSL_API void wolfSSL_set_accept_state(WOLFSSL*);
    11551214WOLFSSL_API int  wolfSSL_session_reused(WOLFSSL*);
     1215WOLFSSL_API int wolfSSL_SESSION_up_ref(WOLFSSL_SESSION* session);
    11561216WOLFSSL_API WOLFSSL_SESSION* wolfSSL_SESSION_dup(WOLFSSL_SESSION* session);
     1217WOLFSSL_API WOLFSSL_SESSION* wolfSSL_SESSION_new(void);
    11571218WOLFSSL_API void wolfSSL_SESSION_free(WOLFSSL_SESSION* session);
    11581219WOLFSSL_API int  wolfSSL_is_init_finished(WOLFSSL*);
    11591220
    1160 WOLFSSL_API const char*  wolfSSL_get_version(WOLFSSL*);
     1221WOLFSSL_API const char*  wolfSSL_get_version(const WOLFSSL*);
    11611222WOLFSSL_API int  wolfSSL_get_current_cipher_suite(WOLFSSL* ssl);
    11621223WOLFSSL_API WOLFSSL_CIPHER*  wolfSSL_get_current_cipher(WOLFSSL*);
     
    12541315#ifndef NO_FILESYSTEM
    12551316WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_file(void);
     1317WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_fd(int fd, int close_flag);
    12561318#endif
    12571319
    12581320WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void);
    12591321WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_socket(void);
     1322
     1323WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_connect(const char *str);
     1324WOLFSSL_API long wolfSSL_BIO_set_conn_port(WOLFSSL_BIO *b, char* port);
     1325WOLFSSL_API long wolfSSL_BIO_do_connect(WOLFSSL_BIO *b);
    12601326
    12611327WOLFSSL_API long wolfSSL_BIO_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, void *parg);
     
    13131379WOLFSSL_API int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* n,
    13141380                                                           unsigned char** out);
     1381WOLFSSL_API WOLFSSL_X509_NAME *wolfSSL_d2i_X509_NAME(WOLFSSL_X509_NAME **name,
     1382                                              unsigned char **in, long length);
    13151383#ifndef NO_RSA
    13161384WOLFSSL_API int wolfSSL_RSA_print(WOLFSSL_BIO* bio, WOLFSSL_RSA* rsa, int offset);
     
    13181386WOLFSSL_API int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509,
    13191387    unsigned long nmflags, unsigned long cflag);
     1388#ifndef NO_FILESYSTEM
     1389WOLFSSL_API int wolfSSL_X509_print_fp(XFILE fp, WOLFSSL_X509 *x509);
     1390#endif
     1391WOLFSSL_API int wolfSSL_X509_signature_print(WOLFSSL_BIO *bp,
     1392        const WOLFSSL_X509_ALGOR *sigalg, const WOLFSSL_ASN1_STRING *sig);
     1393WOLFSSL_API void wolfSSL_X509_get0_signature(const WOLFSSL_ASN1_BIT_STRING **psig,
     1394        const WOLFSSL_X509_ALGOR **palg, const WOLFSSL_X509 *x509);
    13201395WOLFSSL_API int wolfSSL_X509_print(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
    13211396WOLFSSL_ABI WOLFSSL_API char* wolfSSL_X509_NAME_oneline(WOLFSSL_X509_NAME*,
     
    13261401WOLFSSL_ABI WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_issuer_name(
    13271402                                                                 WOLFSSL_X509*);
     1403WOLFSSL_API unsigned long  wolfSSL_X509_issuer_name_hash(const WOLFSSL_X509* x509);
    13281404WOLFSSL_ABI WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_subject_name(
    13291405                                                                 WOLFSSL_X509*);
     1406WOLFSSL_API unsigned long  wolfSSL_X509_subject_name_hash(const WOLFSSL_X509* x509);
    13301407WOLFSSL_API int  wolfSSL_X509_ext_isSet_by_NID(WOLFSSL_X509*, int);
    13311408WOLFSSL_API int  wolfSSL_X509_ext_get_critical_by_NID(WOLFSSL_X509*, int);
     
    13401417
    13411418WOLFSSL_API int wolfSSL_X509_verify(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey);
     1419#ifdef WOLFSSL_CERT_REQ
     1420WOLFSSL_API int wolfSSL_X509_REQ_verify(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey);
     1421#endif
    13421422WOLFSSL_API int wolfSSL_X509_set_subject_name(WOLFSSL_X509*,
    13431423                                              WOLFSSL_X509_NAME*);
     
    13561436WOLFSSL_API int wolfSSL_X509_sign(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey,
    13571437        const WOLFSSL_EVP_MD* md);
     1438WOLFSSL_API int wolfSSL_X509_sign_ctx(WOLFSSL_X509 *x509, WOLFSSL_EVP_MD_CTX *ctx);
    13581439
    13591440
     
    13661447
    13671448WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_new(void);
     1449WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_dup(WOLFSSL_ASN1_STRING* asn1);
    13681450WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_type_new(int type);
    13691451WOLFSSL_API int wolfSSL_ASN1_STRING_type(const WOLFSSL_ASN1_STRING* asn1);
    13701452WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_DISPLAYTEXT(WOLFSSL_ASN1_STRING **asn, const unsigned char **in, long len);
     1453WOLFSSL_API int wolfSSL_ASN1_STRING_cmp(const WOLFSSL_ASN1_STRING *a, const WOLFSSL_ASN1_STRING *b);
    13711454WOLFSSL_API void wolfSSL_ASN1_STRING_free(WOLFSSL_ASN1_STRING* asn1);
    13721455WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1,
     
    13871470WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_hash_dir(void);
    13881471WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_file(void);
     1472WOLFSSL_API int wolfSSL_X509_LOOKUP_ctrl(WOLFSSL_X509_LOOKUP *ctx, int cmd,
     1473        const char *argc, long argl, char **ret);
    13891474
    13901475WOLFSSL_API WOLFSSL_X509_LOOKUP* wolfSSL_X509_STORE_add_lookup(WOLFSSL_X509_STORE*,
     
    13981483WOLFSSL_API WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get1_chain(
    13991484                                                   WOLFSSL_X509_STORE_CTX* ctx);
     1485WOLFSSL_API WOLFSSL_X509_STORE_CTX *wolfSSL_X509_STORE_CTX_get0_parent_ctx(
     1486                                                   WOLFSSL_X509_STORE_CTX *ctx);
    14001487WOLFSSL_API int wolfSSL_X509_STORE_set_flags(WOLFSSL_X509_STORE* store,
    14011488                                                            unsigned long flag);
     
    14081495WOLFSSL_API void wolfSSL_X509_STORE_CTX_free(WOLFSSL_X509_STORE_CTX*);
    14091496WOLFSSL_API void wolfSSL_X509_STORE_CTX_cleanup(WOLFSSL_X509_STORE_CTX*);
     1497WOLFSSL_API void wolfSSL_X509_STORE_CTX_trusted_stack(WOLFSSL_X509_STORE_CTX *ctx,
     1498        WOLF_STACK_OF(WOLFSSL_X509) *sk);
    14101499
    14111500WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_lastUpdate(WOLFSSL_X509_CRL*);
    14121501WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_nextUpdate(WOLFSSL_X509_CRL*);
    1413 WOLFSSL_ASN1_TIME* wolfSSL_X509_gmtime_adj(WOLFSSL_ASN1_TIME *s, long adj);
     1502WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_gmtime_adj(WOLFSSL_ASN1_TIME *s, long adj);
    14141503
    14151504WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*);
     
    14221511WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** key,
    14231512        const unsigned char** in, long inSz);
     1513WOLFSSL_API int wolfSSL_i2d_PUBKEY(const WOLFSSL_EVP_PKEY *key, unsigned char **der);
    14241514WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey(int type,
    14251515        WOLFSSL_EVP_PKEY** out, const unsigned char **in, long inSz);
    14261516WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey_EVP(WOLFSSL_EVP_PKEY** key,
    14271517        unsigned char** in, long inSz);
    1428 WOLFSSL_API int wolfSSL_i2d_PrivateKey(WOLFSSL_EVP_PKEY* key,
     1518WOLFSSL_API int wolfSSL_i2d_PrivateKey(const WOLFSSL_EVP_PKEY* key,
    14291519        unsigned char** der);
    14301520WOLFSSL_API int       wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*);
     
    14401530                                                      unsigned long flags,
    14411531                                                      time_t t);
     1532WOLFSSL_API WOLFSSL_X509_VERIFY_PARAM* wolfSSL_X509_VERIFY_PARAM_new(void);
     1533WOLFSSL_API void wolfSSL_X509_VERIFY_PARAM_free(WOLFSSL_X509_VERIFY_PARAM *param);
     1534WOLFSSL_API int wolfSSL_X509_VERIFY_PARAM_set_flags(WOLFSSL_X509_VERIFY_PARAM *param,
     1535        unsigned long flags);
     1536WOLFSSL_API int wolfSSL_X509_VERIFY_PARAM_get_flags(WOLFSSL_X509_VERIFY_PARAM *param);
     1537WOLFSSL_API int wolfSSL_X509_VERIFY_PARAM_clear_flags(WOLFSSL_X509_VERIFY_PARAM *param,
     1538        unsigned long flags);
    14421539WOLFSSL_API void wolfSSL_X509_VERIFY_PARAM_set_hostflags(
    14431540                WOLFSSL_X509_VERIFY_PARAM* param, unsigned int flags);
     
    15651662WOLFSSL_API int  wolfSSL_CTX_set_srp_password(WOLFSSL_CTX*, char*);
    15661663WOLFSSL_API int  wolfSSL_CTX_set_srp_username(WOLFSSL_CTX*, char*);
     1664WOLFSSL_API int  wolfSSL_CTX_set_srp_strength(WOLFSSL_CTX *ctx, int strength);
     1665
     1666WOLFSSL_API char* wolfSSL_get_srp_username(WOLFSSL *ssl);
    15671667
    15681668WOLFSSL_API long wolfSSL_set_options(WOLFSSL *s, long op);
     
    15721672WOLFSSL_API long wolfSSL_total_renegotiations(WOLFSSL *s);
    15731673WOLFSSL_API long wolfSSL_num_renegotiations(WOLFSSL* s);
     1674WOLFSSL_API int  wolfSSL_SSL_renegotiate_pending(WOLFSSL *s);
    15741675WOLFSSL_API long wolfSSL_set_tmp_dh(WOLFSSL *s, WOLFSSL_DH *dh);
    15751676WOLFSSL_API long wolfSSL_set_tlsext_debug_arg(WOLFSSL *s, void *arg);
     
    15981699};
    15991700
    1600 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \
    1601     defined(HAVE_WEBSERVER)
    16021701/* Separated out from other enums because of size */
    16031702enum {
     
    16461745};
    16471746
     1747#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \
     1748    defined(HAVE_WEBSERVER)
    16481749/* for compatibility these must be macros */
    16491750#define SSL_OP_NO_SSLv2   WOLFSSL_OP_NO_SSLv2
     
    17141815    SSL_MODE_RELEASE_BUFFERS = -1, /* For libwebsockets build. No current use. */
    17151816
    1716     BIO_FLAGS_BASE64_NO_NL = 1,
    17171817    BIO_CLOSE   = 1,
    17181818    BIO_NOCLOSE = 0,
     
    17721872    X509_R_CERT_ALREADY_IN_HASH_TABLE,
    17731873
    1774     XN_FLAG_SPC_EQ  = (1 << 23),
    1775     XN_FLAG_SEP_CPLUS_SPC = (2 << 16),
    1776     XN_FLAG_ONELINE = 0,
    1777     XN_FLAG_RFC2253 = 1,
    1778     XN_FLAG_DN_REV = (1 << 20),
    1779 
    17801874    CRYPTO_LOCK = 1,
    17811875    CRYPTO_NUM_LOCKS = 10,
     
    17901884/* wolfSSL extension, provide last error from SSL_get_error
    17911885   since not using thread storage error queue */
    1792 #include <stdio.h>
     1886#ifdef FUSION_RTOS
     1887    #include <fclstdio.h>
     1888#else
     1889    #include <stdio.h>
     1890#endif
    17931891WOLFSSL_API void  wolfSSL_ERR_print_errors_fp(XFILE, int err);
    17941892#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
     
    19512049                                                  wc_psk_server_tls13_callback);
    19522050#endif
     2051    WOLFSSL_API void* wolfSSL_get_psk_callback_ctx(WOLFSSL*);
     2052    WOLFSSL_API int   wolfSSL_set_psk_callback_ctx(WOLFSSL*, void*);
     2053
     2054    WOLFSSL_API void* wolfSSL_CTX_get_psk_callback_ctx(WOLFSSL_CTX*);
     2055    WOLFSSL_API int   wolfSSL_CTX_set_psk_callback_ctx(WOLFSSL_CTX*, void*);
    19532056
    19542057    #define PSK_TYPES_DEFINED
     
    19932096WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long);
    19942097
    1995 #ifndef NO_CERTS
     2098#if !defined(NO_CHECK_PRIVATE_KEY)
    19962099  WOLFSSL_API int  wolfSSL_CTX_check_private_key(const WOLFSSL_CTX*);
    1997 #endif /* !NO_CERTS */
    1998 
     2100#endif
    19992101WOLFSSL_API void wolfSSL_ERR_free_strings(void);
    20002102WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long);
     
    20412143#ifdef OPENSSL_EXTRA
    20422144WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t);
    2043 #endif
    2044 
    2045 WOLFSSL_API int wolfSSL_sk_num(WOLFSSL_STACK* sk);
    2046 WOLFSSL_API void* wolfSSL_sk_value(WOLFSSL_STACK* sk, int i);
    2047 
    2048 #if defined(HAVE_EX_DATA) || defined(FORTRESS)
     2145WOLFSSL_API int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *s, const char *str);
     2146#endif
     2147
     2148WOLFSSL_API int wolfSSL_sk_num(const WOLFSSL_STACK* sk);
     2149WOLFSSL_API void* wolfSSL_sk_value(const WOLFSSL_STACK* sk, int i);
     2150
     2151#if (defined(HAVE_EX_DATA) || defined(FORTRESS)) && \
     2152    (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || defined(WOLFSSL_WPAS_SMALL))
    20492153WOLFSSL_API void* wolfSSL_CRYPTO_get_ex_data(const WOLFSSL_CRYPTO_EX_DATA* ex_data,
    20502154                                            int idx);
     
    20882192/* which library version do we have */
    20892193WOLFSSL_API const char* wolfSSL_lib_version(void);
     2194WOLFSSL_API const char* wolfSSL_OpenSSL_version(void);
    20902195/* which library version do we have in hex */
    20912196WOLFSSL_API word32 wolfSSL_lib_version_hex(void);
     
    21352240
    21362241WOLFSSL_ABI WOLFSSL_API char* wolfSSL_X509_get_next_altname(WOLFSSL_X509*);
     2242WOLFSSL_API int wolfSSL_X509_add_altname_ex(WOLFSSL_X509*, const char*, word32, int);
    21372243WOLFSSL_API int wolfSSL_X509_add_altname(WOLFSSL_X509*, const char*, int);
    21382244
     
    21412247WOLFSSL_API WOLFSSL_X509*
    21422248    wolfSSL_X509_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len);
     2249#ifdef WOLFSSL_CERT_REQ
     2250WOLFSSL_API WOLFSSL_X509*
     2251    wolfSSL_X509_REQ_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len);
     2252#endif
    21432253WOLFSSL_API int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out);
    21442254WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL **crl,
    21452255                                                   const unsigned char *in, int len);
    2146 #ifndef NO_FILESYSTEM
     2256#if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
    21472257WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(XFILE file, WOLFSSL_X509_CRL **crl);
    21482258#endif
     
    21592269WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_load_certificate_buffer(
    21602270    const unsigned char* buf, int sz, int format);
     2271#ifdef WOLFSSL_CERT_REQ
     2272WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_REQ_load_certificate_buffer(
     2273    const unsigned char* buf, int sz, int format);
     2274#endif
    21612275
    21622276#ifdef WOLFSSL_SEP
     
    21792293                                       WC_PKCS12** pkcs12);
    21802294WOLFSSL_API int wolfSSL_i2d_PKCS12_bio(WOLFSSL_BIO *bio, WC_PKCS12 *pkcs12);
    2181 #ifndef NO_FILESYSTEM
     2295#if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
    21822296WOLFSSL_API WOLFSSL_X509_PKCS12* wolfSSL_d2i_PKCS12_fp(XFILE fp,
    21832297                                       WOLFSSL_X509_PKCS12** pkcs12);
     
    21862300     WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert,
    21872301     WOLF_STACK_OF(WOLFSSL_X509)** ca);
     2302WOLFSSL_API int wolfSSL_PKCS12_verify_mac(WC_PKCS12 *pkcs12, const char *psw,
     2303        int pswLen);
    21882304WOLFSSL_API WC_PKCS12* wolfSSL_PKCS12_create(char* pass, char* name,
    21892305        WOLFSSL_EVP_PKEY* pkey, WOLFSSL_X509* cert,
     
    22872403                                               const unsigned char*, long, int);
    22882404    WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_id(WOLFSSL_CTX*,
    2289                                          const unsigned char*, long, int, long);
     2405                                                  const unsigned char*, long,
     2406                                                  int, long);
     2407    WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_Id(WOLFSSL_CTX*,
     2408                                                  const unsigned char*, long,
     2409                                                  int);
     2410    WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_Label(WOLFSSL_CTX*, const char*,
     2411                                                     int);
    22902412    WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_buffer_format(WOLFSSL_CTX*,
    22912413                                               const unsigned char*, long, int);
     
    23012423                                               long, int);
    23022424    WOLFSSL_API int wolfSSL_use_PrivateKey_id(WOLFSSL*, const unsigned char*,
    2303                                                                long, int, long);
     2425                                              long, int, long);
     2426    WOLFSSL_API int wolfSSL_use_PrivateKey_Id(WOLFSSL*, const unsigned char*,
     2427                                              long, int);
     2428    WOLFSSL_API int wolfSSL_use_PrivateKey_Label(WOLFSSL*, const char*, int);
    23042429    WOLFSSL_API int wolfSSL_use_certificate_chain_buffer_format(WOLFSSL*,
    23052430                                               const unsigned char*, long, int);
     
    23112436        defined(KEEP_OUR_CERT)
    23122437        WOLFSSL_API WOLFSSL_X509* wolfSSL_get_certificate(WOLFSSL* ssl);
     2438        WOLFSSL_API WOLFSSL_X509* wolfSSL_CTX_get0_certificate(WOLFSSL_CTX* ctx);
    23132439    #endif
    23142440#endif
     
    23692495WOLFSSL_API int wolfSSL_GetOutputSize(WOLFSSL*, int);
    23702496WOLFSSL_API int wolfSSL_GetMaxOutputSize(WOLFSSL*);
    2371 WOLFSSL_API int wolfSSL_GetVersion(WOLFSSL* ssl);
     2497WOLFSSL_API int wolfSSL_GetVersion(const WOLFSSL* ssl);
    23722498WOLFSSL_API int wolfSSL_SetVersion(WOLFSSL* ssl, int version);
    23732499
     
    24252551
    24262552WOLFSSL_API const unsigned char* wolfSSL_GetMacSecret(WOLFSSL*, int);
     2553WOLFSSL_API const unsigned char* wolfSSL_GetDtlsMacSecret(WOLFSSL*, int, int);
    24272554WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteKey(WOLFSSL*);
    24282555WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteIV(WOLFSSL*);
     
    25282655        const unsigned char* priv, unsigned int privSz,
    25292656        const unsigned char* otherPubKeyDer, unsigned int otherPubKeySz,
    2530         unsigned char* out, unsigned int* outlen,
     2657        unsigned char* out, word32* outlen,
    25312658        void* ctx);
    25322659WOLFSSL_API void  wolfSSL_CTX_SetDhAgreeCb(WOLFSSL_CTX*, CallbackDhAgree);
     
    26262753typedef int (*CallbackRsaSign)(WOLFSSL* ssl,
    26272754       const unsigned char* in, unsigned int inSz,
    2628        unsigned char* out, unsigned int* outSz,
     2755       unsigned char* out, word32* outSz,
    26292756       const unsigned char* keyDer, unsigned int keySz,
    26302757       void* ctx);
     
    26712798typedef int (*CallbackRsaEnc)(WOLFSSL* ssl,
    26722799       const unsigned char* in, unsigned int inSz,
    2673        unsigned char* out, unsigned int* outSz,
     2800       unsigned char* out, word32* outSz,
    26742801       const unsigned char* keyDer, unsigned int keySz,
    26752802       void* ctx);
     
    26982825    WOLFSSL_API WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew(void);
    26992826    WOLFSSL_API void wolfSSL_CertManagerFree(WOLFSSL_CERT_MANAGER*);
     2827    WOLFSSL_API int wolfSSL_CertManager_up_ref(WOLFSSL_CERT_MANAGER*);
    27002828
    27012829    WOLFSSL_API int wolfSSL_CertManagerLoadCA(WOLFSSL_CERT_MANAGER*, const char* f,
     
    27482876    WOLFSSL_API int wolfSSL_CertManagerDisableOCSPStapling(
    27492877                                                      WOLFSSL_CERT_MANAGER* cm);
     2878    WOLFSSL_API int wolfSSL_CertManagerEnableOCSPMustStaple(
     2879                                                      WOLFSSL_CERT_MANAGER* cm);
     2880    WOLFSSL_API int wolfSSL_CertManagerDisableOCSPMustStaple(
     2881                                                      WOLFSSL_CERT_MANAGER* cm);
    27502882#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_SIGNER_DER_CERT) && !defined(NO_FILESYSTEM)
    27512883WOLFSSL_API WOLFSSL_STACK* wolfSSL_CertManagerGetCerts(WOLFSSL_CERT_MANAGER* cm);
     
    27842916    WOLFSSL_API int wolfSSL_CTX_EnableOCSPStapling(WOLFSSL_CTX*);
    27852917    WOLFSSL_API int wolfSSL_CTX_DisableOCSPStapling(WOLFSSL_CTX*);
     2918    WOLFSSL_API int wolfSSL_CTX_EnableOCSPMustStaple(WOLFSSL_CTX*);
     2919    WOLFSSL_API int wolfSSL_CTX_DisableOCSPMustStaple(WOLFSSL_CTX*);
    27862920#endif /* !NO_CERTS */
    27872921
     
    28993033};
    29003034
    2901 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     3035#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
    29023036typedef int (*CallbackALPNSelect)(WOLFSSL* ssl, const unsigned char** out,
    29033037    unsigned char* outLen, const unsigned char* in, unsigned int inLen,
     
    30323166    WOLFSSL_ECC_X25519    = 29,
    30333167    WOLFSSL_ECC_X448      = 30,
     3168    WOLFSSL_ECC_MAX       = 30,
    30343169
    30353170    WOLFSSL_FFDHE_2048    = 256,
     
    30493184
    30503185#ifdef HAVE_SUPPORTED_CURVES
    3051 #ifndef NO_WOLFSSL_CLIENT
    3052 
    30533186WOLFSSL_API int wolfSSL_UseSupportedCurve(WOLFSSL* ssl, word16 name);
    30543187WOLFSSL_API int wolfSSL_CTX_UseSupportedCurve(WOLFSSL_CTX* ctx,
    30553188                                                           word16 name);
    3056 
    3057 #endif
    30583189#endif
    30593190
     
    30783209/* Session Ticket */
    30793210#ifdef HAVE_SESSION_TICKET
     3211
     3212#if !defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && !defined(WOLFSSL_NO_SERVER)
     3213    #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && \
     3214        !defined(WOLFSSL_TICKET_ENC_AES128_GCM) && \
     3215        !defined(WOLFSSL_TICKET_ENC_AES256_GCM)
     3216        #define WOLFSSL_TICKET_KEY_SZ       CHACHA20_POLY1305_AEAD_KEYSIZE
     3217    #elif defined(WOLFSSL_TICKET_ENC_AES256_GCM)
     3218        #define WOLFSSL_TICKET_KEY_SZ       AES_256_KEY_SIZE
     3219    #else
     3220        #define WOLFSSL_TICKET_KEY_SZ       AES_128_KEY_SIZE
     3221    #endif
     3222
     3223    #define WOLFSSL_TICKET_KEYS_SZ     (WOLFSSL_TICKET_NAME_SZ +    \
     3224                                        2 * WOLFSSL_TICKET_KEY_SZ + \
     3225                                        sizeof(word32) * 2)
     3226#endif
    30803227
    30813228#ifndef NO_WOLFSSL_CLIENT
     
    31023249
    31033250#ifndef NO_WOLFSSL_SERVER
     3251
     3252WOLFSSL_API int wolfSSL_CTX_NoTicketTLSv12(WOLFSSL_CTX* ctx);
     3253WOLFSSL_API int wolfSSL_NoTicketTLSv12(WOLFSSL* ssl);
    31043254
    31053255typedef int (*SessionTicketEncCb)(WOLFSSL*,
     
    32083358#include <wolfssl/openssl/asn1.h>
    32093359struct WOLFSSL_X509_NAME_ENTRY {
    3210     WOLFSSL_ASN1_OBJECT  object;  /* static object just for keeping grp, type */
    3211     WOLFSSL_ASN1_STRING  data;
     3360    WOLFSSL_ASN1_OBJECT* object;  /* static object just for keeping grp, type */
    32123361    WOLFSSL_ASN1_STRING* value;  /* points to data, for lighttpd port */
    32133362    int nid; /* i.e. ASN_COMMON_NAME */
     
    32203369                                                   int idx);
    32213370
    3222 #endif /* OPENSSL_ALL || OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
    3223 
    3224 
    3225 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
     3371
    32263372
    32273373enum {
     
    32693415
    32703416WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error_line(const char **file, int *line);
    3271 WOLFSSL_API long wolfSSL_ctrl(WOLFSSL* ssl, int cmd, long opt, void* pt);
    32723417WOLFSSL_API long wolfSSL_CTX_ctrl(WOLFSSL_CTX* ctx, int cmd, long opt,void* pt);
    32733418WOLFSSL_API long wolfSSL_CTX_callback_ctrl(WOLFSSL_CTX* ctx, int cmd, void (*fp)(void));
     
    32893434                                           int type, const unsigned char *bytes,
    32903435                                           int len, int loc, int set);
     3436WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_delete_entry(
     3437        WOLFSSL_X509_NAME *name, int loc);
    32913438WOLFSSL_API int wolfSSL_X509_NAME_cmp(const WOLFSSL_X509_NAME* x,
    32923439            const WOLFSSL_X509_NAME* y);
     
    32943441WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_dup(WOLFSSL_X509*);
    32953442WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_dup(WOLFSSL_X509_NAME*);
     3443WOLFSSL_API int wolfSSL_X509_NAME_copy(WOLFSSL_X509_NAME*, WOLFSSL_X509_NAME*);
    32963444WOLFSSL_API int wolfSSL_check_private_key(const WOLFSSL* ssl);
     3445#endif /* !NO_CERTS */
     3446#endif /* OPENSSL_ALL || OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
     3447
     3448#if defined(OPENSSL_ALL) || defined(WOLFSSL_ASIO) || defined(WOLFSSL_HAPROXY) \
     3449    || defined(WOLFSSL_NGINX) || defined(WOLFSSL_QT)
     3450WOLFSSL_API long wolfSSL_ctrl(WOLFSSL* ssl, int cmd, long opt, void* pt);
     3451#endif
     3452
     3453#ifdef WOLFSSL_WPAS_SMALL
     3454    /* WPA Supplicant requires GEN_ values */
     3455    #include <wolfssl/openssl/x509v3.h>
     3456#endif
     3457
     3458#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    32973459WOLFSSL_API void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509,
    32983460                                                     int nid, int* c, int* idx);
     3461#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
     3462
     3463#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
     3464#ifndef NO_CERTS
    32993465WOLFSSL_API int wolfSSL_X509_get_ext_count(const WOLFSSL_X509* passedCert);
    33003466WOLFSSL_API int wolfSSL_X509_get_ext_by_NID(const WOLFSSL_X509 *x, int nid, int lastpos);
    33013467WOLFSSL_API int wolfSSL_X509_add_ext(WOLFSSL_X509 *x, WOLFSSL_X509_EXTENSION *ex, int loc);
     3468WOLFSSL_API WOLFSSL_X509_EXTENSION *wolfSSL_X509V3_EXT_i2d(int nid, int crit,
     3469                                                           void *data);
     3470WOLFSSL_API WOLFSSL_X509_EXTENSION *wolfSSL_X509_delete_ext(WOLFSSL_X509 *x509, int loc);
    33023471WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509V3_EXT_conf_nid(
    33033472        WOLF_LHASH_OF(CONF_VALUE)* conf, WOLFSSL_X509V3_CTX* ctx, int nid,
     
    33233492#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
    33243493WOLFSSL_API int wolfSSL_X509_cmp(const WOLFSSL_X509* a, const WOLFSSL_X509* b);
     3494WOLFSSL_API const WOLFSSL_STACK *wolfSSL_X509_get0_extensions(const WOLFSSL_X509 *x);
     3495WOLFSSL_API const WOLFSSL_STACK *wolfSSL_X509_REQ_get_extensions(const WOLFSSL_X509 *x);
    33253496WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509_get_ext(const WOLFSSL_X509* x, int loc);
     3497WOLFSSL_API int wolfSSL_X509_get_ext_by_OBJ(const WOLFSSL_X509 *x,
     3498        const WOLFSSL_ASN1_OBJECT *obj, int lastpos);
    33263499WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x, int loc);
    33273500WOLFSSL_API int wolfSSL_X509_EXTENSION_get_critical(const WOLFSSL_X509_EXTENSION* ex);
     
    33363509WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_X509_EXTENSION_get_object(WOLFSSL_X509_EXTENSION* ext);
    33373510WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_X509_EXTENSION_get_data(WOLFSSL_X509_EXTENSION* ext);
    3338 #endif /* NO_CERTS */
     3511#endif /* !NO_CERTS */
    33393512
    33403513WOLFSSL_API WOLFSSL_DH *wolfSSL_DSA_dup_DH(const WOLFSSL_DSA *r);
     
    33443517WOLFSSL_API int wolfSSL_SESSION_get_master_key_length(const WOLFSSL_SESSION* ses);
    33453518
    3346 WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
    3347                                                        WOLFSSL_X509_STORE* str);
    33483519WOLFSSL_API int wolfSSL_i2d_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
     3520#ifdef WOLFSSL_CERT_REQ
     3521WOLFSSL_API int wolfSSL_i2d_X509_REQ_bio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
     3522#endif
    33493523#if !defined(NO_FILESYSTEM)
    33503524WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_fp(XFILE fp,
     
    33543528WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio,
    33553529                                               WOLFSSL_X509** x509);
     3530#ifdef WOLFSSL_CERT_REQ
     3531WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_REQ_bio(WOLFSSL_BIO* bio,
     3532                                               WOLFSSL_X509** x509);
     3533#endif
     3534#endif /* OPENSSL_EXTRA || OPENSSL_ALL */
     3535
     3536#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
     3537WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
     3538                                                       WOLFSSL_X509_STORE* str);
    33563539WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx);
    3357 
     3540WOLFSSL_API size_t wolfSSL_get_server_random(const WOLFSSL *ssl,
     3541                                             unsigned char *out, size_t outlen);
     3542WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
     3543                                              unsigned char* out, size_t outSz);
     3544#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
     3545
     3546#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
    33583547WOLFSSL_API size_t wolfSSL_BIO_wpending(const WOLFSSL_BIO *bio);
    33593548WOLFSSL_API size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *b);
    33603549
    3361 WOLFSSL_API size_t wolfSSL_get_server_random(const WOLFSSL *ssl,
    3362                                              unsigned char *out, size_t outlen);
    33633550WOLFSSL_API int wolfSSL_get_server_tmp_key(const WOLFSSL*, WOLFSSL_EVP_PKEY**);
    33643551
     
    33663553WOLFSSL_API int wolfSSL_CTX_set_max_proto_version(WOLFSSL_CTX*, int);
    33673554
    3368 WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
    3369                                               unsigned char* out, size_t outSz);
    33703555WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
    33713556WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
     3557#ifdef WOLFSSL_CERT_REQ
     3558WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_REQ(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
     3559#endif
    33723560WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_PEM_read_bio_X509_CRL(WOLFSSL_BIO *bp,
    33733561        WOLFSSL_X509_CRL **x, pem_password_cb *cb, void *u);
     
    33863574                                      unsigned char* data, long* len,
    33873575                                      pem_password_cb* callback, void* ctx);
     3576#endif /* OPENSSL_EXTRA || OPENSSL_ALL */
    33883577
    33893578/*lighttp compatibility */
    33903579
     3580#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) || \
     3581    defined(OPENSSL_EXTRA_X509_SMALL)
    33913582struct WOLFSSL_ASN1_BIT_STRING {
    33923583    int length;
     
    33963587};
    33973588
     3589WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc);
     3590#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
     3591
     3592#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)|| \
     3593    defined(OPENSSL_EXTRA_X509_SMALL)
    33983594
    33993595#if    defined(OPENSSL_EXTRA) \
     
    34033599    || defined(HAVE_STUNNEL) \
    34043600    || defined(WOLFSSL_NGINX) \
    3405     || defined(WOLFSSL_HAPROXY)
     3601    || defined(WOLFSSL_HAPROXY) \
     3602    || defined(OPENSSL_EXTRA_X509_SMALL)
    34063603WOLFSSL_API void wolfSSL_X509_NAME_ENTRY_free(WOLFSSL_X509_NAME_ENTRY* ne);
    34073604WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_new(void);
     
    34153612WOLFSSL_API int wolfSSL_set_app_data(WOLFSSL *ssl, void *arg);
    34163613WOLFSSL_API WOLFSSL_ASN1_OBJECT * wolfSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne);
    3417 WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc);
    34183614WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md);
    34193615WOLFSSL_API unsigned char *wolfSSL_SHA256(const unsigned char *d, size_t n, unsigned char *md);
     
    34413637    || defined(WOLFSSL_HAPROXY) \
    34423638    || defined(OPENSSL_EXTRA)
     3639#define X509_BUFFER_SZ 8192
    34433640
    34443641WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
     
    34603657WOLFSSL_API int wolfSSL_X509_REQ_sign(WOLFSSL_X509 *req, WOLFSSL_EVP_PKEY *pkey,
    34613658                                      const WOLFSSL_EVP_MD *md);
     3659WOLFSSL_API int wolfSSL_X509_REQ_sign_ctx(WOLFSSL_X509 *req,
     3660                                          WOLFSSL_EVP_MD_CTX* md_ctx);
    34623661WOLFSSL_API int wolfSSL_X509_REQ_add_extensions(WOLFSSL_X509* req,
    3463         WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* ext);
     3662        WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* ext_sk);
    34643663WOLFSSL_API int wolfSSL_X509_REQ_set_subject_name(WOLFSSL_X509 *req,
    34653664                                                  WOLFSSL_X509_NAME *name);
    34663665WOLFSSL_API int wolfSSL_X509_REQ_set_pubkey(WOLFSSL_X509 *req,
    34673666                                            WOLFSSL_EVP_PKEY *pkey);
    3468 #endif
    3469 
    3470 
    3471 #if defined(OPENSSL_ALL) \
    3472     || defined(HAVE_STUNNEL) \
    3473     || defined(WOLFSSL_NGINX) \
    3474     || defined(WOLFSSL_HAPROXY) \
    3475     || defined(OPENSSL_EXTRA) \
    3476     || defined(HAVE_LIGHTY)
     3667WOLFSSL_API int wolfSSL_X509_REQ_add1_attr_by_NID(WOLFSSL_X509 *req,
     3668                                                  int nid, int type,
     3669                                                  const unsigned char *bytes,
     3670                                                  int len);
     3671WOLFSSL_API int wolfSSL_X509_REQ_get_attr_by_NID(const WOLFSSL_X509 *req,
     3672        int nid, int lastpos);
     3673WOLFSSL_API int wolfSSL_X509_REQ_add1_attr_by_txt(WOLFSSL_X509 *req,
     3674                              const char *attrname, int type,
     3675                              const unsigned char *bytes, int len);
     3676WOLFSSL_API WOLFSSL_X509_ATTRIBUTE *wolfSSL_X509_REQ_get_attr(
     3677        const WOLFSSL_X509 *req, int loc);
     3678WOLFSSL_API WOLFSSL_X509_ATTRIBUTE* wolfSSL_X509_ATTRIBUTE_new(void);
     3679WOLFSSL_API void wolfSSL_X509_ATTRIBUTE_free(WOLFSSL_X509_ATTRIBUTE* attr);
     3680WOLFSSL_API WOLFSSL_ASN1_TYPE *wolfSSL_X509_ATTRIBUTE_get0_type(
     3681        WOLFSSL_X509_ATTRIBUTE *attr, int idx);
     3682WOLFSSL_API WOLFSSL_X509 *wolfSSL_X509_to_X509_REQ(WOLFSSL_X509 *x,
     3683        WOLFSSL_EVP_PKEY *pkey, const WOLFSSL_EVP_MD *md);
     3684#endif
     3685
     3686
     3687#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) \
     3688    || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
    34773689
    34783690#include <wolfssl/openssl/crypto.h>
    3479 
    3480 /* SNI received callback type */
    3481 typedef int (*CallbackSniRecv)(WOLFSSL *ssl, int *ret, void* exArg);
    34823691
    34833692WOLFSSL_API int wolfSSL_CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int),
     
    34853694
    34863695WOLFSSL_API void wolfSSL_CRYPTO_cleanup_all_ex_data(void);
     3696
     3697WOLFSSL_API int wolfSSL_CRYPTO_memcmp(const void *a, const void *b, size_t size);
    34873698
    34883699WOLFSSL_API WOLFSSL_BIGNUM* wolfSSL_DH_768_prime(WOLFSSL_BIGNUM* bn);
     
    35303741WOLFSSL_API void wolfSSL_sk_X509_INFO_free(WOLF_STACK_OF(WOLFSSL_X509_INFO)*);
    35313742
    3532 typedef int (*wolf_sk_compare_cb)(const void* const *a,
    3533                                   const void* const *b);
     3743typedef int (*wolf_sk_compare_cb)(const void* a,
     3744                                  const void* b);
     3745typedef unsigned long (*wolf_sk_hash_cb) (const void *v);
    35343746WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_sk_X509_NAME_new(
    35353747    wolf_sk_compare_cb);
     
    35513763WOLFSSL_API int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO*,WOLFSSL_X509_NAME*,int,
    35523764        unsigned long);
    3553 
     3765#ifndef NO_FILESYSTEM
     3766WOLFSSL_API int wolfSSL_X509_NAME_print_ex_fp(XFILE,WOLFSSL_X509_NAME*,int,
     3767        unsigned long);
     3768#endif
     3769
     3770WOLFSSL_API WOLFSSL_STACK *wolfSSL_sk_CONF_VALUE_new(wolf_sk_compare_cb compFunc);
     3771WOLFSSL_API void wolfSSL_sk_CONF_VALUE_free(struct WOLFSSL_STACK *sk);
     3772WOLFSSL_API int wolfSSL_sk_CONF_VALUE_num(const WOLFSSL_STACK *sk);
     3773WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_sk_CONF_VALUE_value(
     3774        const struct WOLFSSL_STACK *sk, int i);
     3775WOLFSSL_API int wolfSSL_sk_CONF_VALUE_push(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk,
     3776        WOLFSSL_CONF_VALUE* val);
     3777#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || OPENSSL_EXTRA || HAVE_LIGHTY */
     3778
     3779#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    35543780WOLFSSL_API WOLFSSL_ASN1_BIT_STRING* wolfSSL_ASN1_BIT_STRING_new(void);
    35553781WOLFSSL_API void wolfSSL_ASN1_BIT_STRING_free(WOLFSSL_ASN1_BIT_STRING*);
     
    35603786WOLFSSL_API int wolfSSL_ASN1_BIT_STRING_set_bit(
    35613787                            WOLFSSL_ASN1_BIT_STRING*, int, int);
     3788#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
     3789
     3790#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) \
     3791    || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
    35623792
    35633793WOLFSSL_API int        wolfSSL_CTX_add_session(WOLFSSL_CTX*, WOLFSSL_SESSION*);
     
    35723802
    35733803WOLFSSL_API void* wolfSSL_sk_X509_OBJECT_value(WOLF_STACK_OF(WOLFSSL_X509_OBJECT)*, int);
    3574 
     3804#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || OPENSSL_EXTRA || HAVE_LIGHTY */
     3805
     3806#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    35753807WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int);
    35763808
    35773809WOLFSSL_API int   wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*);
     3810#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
     3811
     3812#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) \
     3813    || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
    35783814
    35793815WOLFSSL_API int wolfSSL_SESSION_get_ex_new_index(long,void*,void*,void*,
     
    35823818WOLFSSL_API int wolfSSL_X509_NAME_get_sz(WOLFSSL_X509_NAME*);
    35833819
    3584 
    35853820WOLFSSL_API const unsigned char* wolfSSL_SESSION_get_id(WOLFSSL_SESSION*,
    35863821        unsigned int*);
     
    35973832
    35983833WOLFSSL_API VerifyCallback wolfSSL_get_verify_callback(WOLFSSL*);
     3834
     3835#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_LIGHTY */
     3836
     3837#ifdef HAVE_SNI
     3838/* SNI received callback type */
     3839typedef int (*CallbackSniRecv)(WOLFSSL *ssl, int *ret, void* exArg);
    35993840
    36003841WOLFSSL_API void wolfSSL_CTX_set_servername_callback(WOLFSSL_CTX *,
     
    36043845
    36053846WOLFSSL_API int  wolfSSL_CTX_set_servername_arg(WOLFSSL_CTX *, void*);
     3847#endif
     3848
     3849#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) \
     3850    || defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
    36063851
    36073852WOLFSSL_API void wolfSSL_ERR_remove_thread_state(void*);
     
    36253870        wolfSSL_sk_X509_OBJECT_delete(WOLF_STACK_OF(WOLFSSL_X509_OBJECT)* sk, int i);
    36263871WOLFSSL_API void wolfSSL_X509_OBJECT_free(WOLFSSL_X509_OBJECT *a);
    3627 
     3872#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_LIGHTY */
     3873
     3874#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
     3875#include <wolfssl/openssl/stack.h>
    36283876WOLFSSL_API void wolfSSL_sk_X509_pop_free(WOLF_STACK_OF(WOLFSSL_X509)* sk, void (*f) (WOLFSSL_X509*));
    3629 #endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_LIGHTY */
     3877#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
    36303878
    36313879#if defined(OPENSSL_EXTRA) && defined(HAVE_ECC)
     
    36383886    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    36393887
    3640 WOLFSSL_API int wolfSSL_CTX_get_verify_mode(WOLFSSL_CTX* ctx);
     3888WOLFSSL_API int wolfSSL_get_verify_mode(const WOLFSSL* ssl);
     3889WOLFSSL_API int wolfSSL_CTX_get_verify_mode(const WOLFSSL_CTX* ctx);
    36413890
    36423891#endif
     
    36703919WOLFSSL_API void *wolfSSL_OPENSSL_memdup(const void *data,
    36713920    size_t siz, const char* file, int line);
     3921WOLFSSL_API void wolfSSL_OPENSSL_cleanse(void *ptr, size_t len);
    36723922WOLFSSL_API void wolfSSL_ERR_load_BIO_strings(void);
     3923#endif
     3924
     3925#if defined(HAVE_OCSP) && !defined(NO_ASN_TIME)
     3926    WOLFSSL_API int wolfSSL_get_ocsp_producedDate(
     3927        WOLFSSL *ssl,
     3928        byte *producedDate,
     3929        size_t producedDate_space,
     3930        int *producedDateFormat);
     3931    WOLFSSL_API int wolfSSL_get_ocsp_producedDate_tm(WOLFSSL *ssl,
     3932        struct tm *produced_tm);
    36733933#endif
    36743934
     
    36893949#endif
    36903950
     3951#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) \
     3952    || defined(WOLFSSL_WPAS_SMALL)
     3953WOLFSSL_API void *wolfSSL_X509_get_ex_data(WOLFSSL_X509 *x509, int idx);
     3954WOLFSSL_API int wolfSSL_X509_set_ex_data(WOLFSSL_X509 *x509, int idx,
     3955    void *data);
     3956#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL || WOLFSSL_WPAS_SMALL */
     3957
    36913958#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
    36923959    || defined(OPENSSL_EXTRA) || defined(HAVE_LIGHTY)
     
    36943961WOLFSSL_API int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a,
    36953962    void *b, void *c);
    3696 WOLFSSL_API void *wolfSSL_X509_get_ex_data(WOLFSSL_X509 *x509, int idx);
    3697 WOLFSSL_API int wolfSSL_X509_set_ex_data(WOLFSSL_X509 *x509, int idx,
    3698     void *data);
    36993963WOLFSSL_API int wolfSSL_X509_NAME_digest(const WOLFSSL_X509_NAME *data,
    37003964    const WOLFSSL_EVP_MD *type, unsigned char *md, unsigned int *len);
     
    37163980    WOLFSSL_API WOLFSSL_SESSION *wolfSSL_SSL_get0_session(const WOLFSSL *s);
    37173981#endif
    3718 WOLFSSL_API int wolfSSL_X509_check_host(WOLFSSL_X509 *x, const char *chk,
    3719     size_t chklen, unsigned int flags, char **peername);
    37203982
    37213983WOLFSSL_API int wolfSSL_i2a_ASN1_INTEGER(WOLFSSL_BIO *bp,
     
    37444006    WOLFSSL_X509 *subject);
    37454007
    3746 WOLFSSL_API char* wolfSSL_sk_WOLFSSL_STRING_value(
     4008WOLFSSL_API WOLF_STACK_OF(WOLFSSL_STRING)* wolfSSL_sk_WOLFSSL_STRING_new(void);
     4009WOLFSSL_API void wolfSSL_sk_WOLFSSL_STRING_free(WOLF_STACK_OF(WOLFSSL_STRING)* sk);
     4010WOLFSSL_API WOLFSSL_STRING wolfSSL_sk_WOLFSSL_STRING_value(
    37474011    WOLF_STACK_OF(WOLFSSL_STRING)* strings, int idx);
    3748 #endif /* HAVE_OCSP */
     4012WOLFSSL_API int wolfSSL_sk_WOLFSSL_STRING_num(
     4013    WOLF_STACK_OF(WOLFSSL_STRING)* strings);
     4014#endif /* HAVE_OCSP || OPENSSL_EXTRA || OPENSSL_ALL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
    37494015
    37504016WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bio,
     
    37524018
    37534019#endif /* OPENSSL_ALL || WOLFSSL_NGINX || WOLFSSL_HAPROXY ||
    3754     OPENSSL_EXTRA || HAVE_LIGHTY*/
     4020    OPENSSL_EXTRA || HAVE_LIGHTY */
     4021
     4022#if defined(HAVE_SESSION_TICKET) && !defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && \
     4023    !defined(NO_WOLFSSL_SERVER)
     4024WOLFSSL_API long wolfSSL_CTX_get_tlsext_ticket_keys(WOLFSSL_CTX *ctx,
     4025     unsigned char *keys, int keylen);
     4026WOLFSSL_API long wolfSSL_CTX_set_tlsext_ticket_keys(WOLFSSL_CTX *ctx,
     4027     unsigned char *keys, int keylen);
     4028#endif
    37554029
    37564030WOLFSSL_API void wolfSSL_get0_alpn_selected(const WOLFSSL *ssl,
     
    37834057        unsigned *len);
    37844058
    3785 
    3786 #ifdef OPENSSL_EXTRA
     4059#ifndef NO_ASN
     4060WOLFSSL_API int wolfSSL_X509_check_host(WOLFSSL_X509 *x, const char *chk,
     4061    size_t chklen, unsigned int flags, char **peername);
     4062WOLFSSL_API int wolfSSL_X509_check_ip_asc(WOLFSSL_X509 *x, const char *ipasc,
     4063        unsigned int flags);
     4064#endif
     4065
     4066#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    37874067#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
    37884068WOLFSSL_API const unsigned char *SSL_SESSION_get0_id_context(
    37894069        const WOLFSSL_SESSION *sess, unsigned int *sid_ctx_length);
    3790 WOLFSSL_API size_t SSL_get_finished(const WOLFSSL *s, void *buf, size_t count);
    3791 WOLFSSL_API size_t SSL_get_peer_finished(const WOLFSSL *s, void *buf, size_t count);
     4070WOLFSSL_API size_t wolfSSL_get_finished(const WOLFSSL *ssl, void *buf, size_t count);
     4071WOLFSSL_API size_t wolfSSL_get_peer_finished(const WOLFSSL *ssl, void *buf, size_t count);
    37924072#endif
    37934073
     
    38084088WOLFSSL_API int wolfSSL_X509_PUBKEY_set(WOLFSSL_X509_PUBKEY **x, WOLFSSL_EVP_PKEY *key);
    38094089WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a);
     4090WOLFSSL_API WOLFSSL_ASN1_OBJECT *wolfSSL_d2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a,
     4091                                                         const unsigned char **der,
     4092                                                         long length);
    38104093WOLFSSL_API int wolfSSL_i2a_ASN1_OBJECT(WOLFSSL_BIO *bp, WOLFSSL_ASN1_OBJECT *a);
     4094WOLFSSL_API int wolfSSL_i2d_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT *a, unsigned char **pp);
    38114095WOLFSSL_API void SSL_CTX_set_tmp_dh_callback(WOLFSSL_CTX *ctx, WOLFSSL_DH *(*dh) (WOLFSSL *ssl, int is_export, int keylength));
    38124096WOLFSSL_API WOLF_STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
     
    38164100WOLFSSL_API int wolfSSL_sk_SSL_CIPHER_find(
    38174101        WOLF_STACK_OF(WOLFSSL_CIPHER)* sk, const WOLFSSL_CIPHER* toFind);
    3818 WOLFSSL_API WOLF_STACK_OF(WOLFSSL_CIPHER)* wolfSSL_sk_SSL_CIPHER_dup(
    3819         WOLF_STACK_OF(WOLFSSL_CIPHER)* in);
    38204102WOLFSSL_API void wolfSSL_sk_SSL_CIPHER_free(WOLF_STACK_OF(WOLFSSL_CIPHER)* sk);
    38214103WOLFSSL_API int wolfSSL_sk_SSL_COMP_zero(WOLFSSL_STACK* st);
    38224104WOLFSSL_API int wolfSSL_sk_SSL_COMP_num(WOLF_STACK_OF(WOLFSSL_COMP)* sk);
    3823 WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_sk_SSL_CIPHER_value(void *ciphers, int idx);
     4105WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_sk_SSL_CIPHER_value(WOLFSSL_STACK* sk, int i);
    38244106WOLFSSL_API void ERR_load_SSL_strings(void);
    38254107WOLFSSL_API void wolfSSL_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p);
     
    38334115                                                                WOLFSSL_ASN1_TIME **out);
    38344116WOLFSSL_API int wolfSSL_i2c_ASN1_INTEGER(WOLFSSL_ASN1_INTEGER *a, unsigned char **pp);
     4117WOLFSSL_API int wolfSSL_a2i_ASN1_INTEGER(WOLFSSL_BIO *bio, WOLFSSL_ASN1_INTEGER *asn1,
     4118        char *buf, int size);
    38354119WOLFSSL_API int wolfSSL_X509_CA_num(WOLFSSL_X509_STORE *store);
    38364120WOLFSSL_API long wolfSSL_X509_get_version(const WOLFSSL_X509 *x);
     
    38444128WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_AutoPrivateKey(
    38454129    WOLFSSL_EVP_PKEY** pkey, const unsigned char** data, long length);
    3846 WOLFSSL_API unsigned long  wolfSSL_X509_subject_name_hash(const WOLFSSL_X509* x509);
    3847 
    3848 
    3849 #endif /* OPENSSL_EXTRA */
     4130
     4131
     4132#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
    38504133
    38514134#ifdef HAVE_PK_CALLBACKS
     
    38594142#endif
    38604143
     4144/* This feature is used to set a fixed ephemeral key and is for testing only */
     4145/* Currently allows ECDHE and DHE only */
     4146#ifdef WOLFSSL_STATIC_EPHEMERAL
     4147WOLFSSL_API int wolfSSL_CTX_set_ephemeral_key(WOLFSSL_CTX* ctx, int keyAlgo,
     4148    const char* key, unsigned int keySz, int format);
     4149WOLFSSL_API int wolfSSL_set_ephemeral_key(WOLFSSL* ssl, int keyAlgo,
     4150    const char* key, unsigned int keySz, int format);
     4151#endif
     4152
    38614153#ifdef __cplusplus
    38624154    }  /* extern "C" */
Note: See TracChangeset for help on using the changeset viewer.