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:
2 added
52 edited
1 moved

Legend:

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

    r457 r464  
    168168    SSL_SHUTDOWN_ALREADY_DONE_E  = -437,   /* Shutdown called redundantly */
    169169    TLS13_SECRET_CB_E            = -438,   /* TLS1.3 secret Cb fcn failure */
     170    DTLS_SIZE_ERROR              = -439,   /* Trying to send too much data */
     171    NO_CERT_ERROR                = -440,   /* TLS1.3 - no cert set error */
     172    APP_DATA_READY               = -441,   /* DTLS1.2 application data ready for read */
    170173
    171174    /* add strings to wolfSSL_ERR_reason_error_string in internal.c !!!!! */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/internal.h

    r457 r464  
    7373    #include <wolfssl/wolfcrypt/sha256.h>
    7474#endif
     75#if defined(WOLFSSL_SHA384)
     76    #include <wolfssl/wolfcrypt/sha512.h>
     77#endif
    7578#ifdef HAVE_OCSP
    7679    #include <wolfssl/ocsp.h>
     
    111114#ifdef HAVE_CURVE448
    112115    #include <wolfssl/wolfcrypt/curve448.h>
     116#endif
     117#ifndef WOLFSSL_NO_DEF_TICKET_ENC_CB
     118    #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) && \
     119        !defined(WOLFSSL_TICKET_ENC_AES128_GCM) && \
     120        !defined(WOLFSSL_TICKET_ENC_AES256_GCM)
     121        #include <wolfssl/wolfcrypt/chacha20_poly1305.h>
     122    #else
     123        #include <wolfssl/wolfcrypt/aes.h>
     124    #endif
    113125#endif
    114126
     
    143155    /* do nothing, just don't pick Unix */
    144156#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS)
     157    /* do nothing */
     158#elif defined(RTTHREAD)
    145159    /* do nothing */
    146160#elif defined(EBSNET)
     
    184198#else
    185199    #ifndef SINGLE_THREADED
    186         #define WOLFSSL_PTHREADS
    187         #include <pthread.h>
     200        #if defined(WOLFSSL_LINUXKM)
     201            #define WOLFSSL_KTHREADS
     202            #include <linux/kthread.h>
     203        #elif defined(WOLFSSL_USER_MUTEX)
     204            /* do nothing */
     205        #else
     206            #define WOLFSSL_PTHREADS
     207            #include <pthread.h>
     208        #endif
    188209    #endif
    189210    #if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM)
    190         #include <unistd.h>      /* for close of BIO */
     211        #ifdef FUSION_RTOS
     212           #include <fclunistd.h>
     213        #else
     214            #include <unistd.h>      /* for close of BIO */
     215        #endif
    191216    #endif
    192217#endif
     
    859884#if defined(BUILD_TLS_RSA_WITH_AES_128_GCM_SHA256) || \
    860885    defined(BUILD_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256) || \
     886    defined(BUILD_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) || \
    861887    defined(BUILD_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) || \
    862888    defined(BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256) || \
     
    864890    defined(BUILD_TLS_RSA_WITH_AES_256_GCM_SHA384) || \
    865891    defined(BUILD_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) || \
     892    defined(BUILD_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) || \
    866893    defined(BUILD_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) || \
    867894    defined(BUILD_TLS_PSK_WITH_AES_256_GCM_SHA384) || \
     
    907934#endif
    908935
    909 #if defined(NO_AES) || defined(NO_AES_DECRYPT)
     936#if defined(NO_AES) || !defined(HAVE_AES_DECRYPT)
    910937    #define AES_BLOCK_SIZE 16
    911938    #undef  BUILD_AES
     
    11501177#ifndef WOLFSSL_MAX_DHKEY_BITS
    11511178    #if (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS >= 16384)
    1152         #define WOLFSSL_MAX_DHKEY_BITS 8192
     1179        #define WOLFSSL_MAX_DHKEY_BITS (FP_MAX_BITS / 2)
    11531180    #else
    11541181        #define WOLFSSL_MAX_DHKEY_BITS 4096
     
    11661193    /* max psk identity/hint supported */
    11671194    #if defined(WOLFSSL_TLS13)
    1168         #define MAX_PSK_ID_LEN 256
     1195        /* OpenSSL has a 1472 byte sessiont ticket */
     1196        #define MAX_PSK_ID_LEN 1536
    11691197    #else
    11701198        #define MAX_PSK_ID_LEN 128
     
    11751203    /* maximum early data size */
    11761204    #define MAX_EARLY_DATA_SZ  4096
     1205#endif
     1206
     1207#ifndef WOLFSSL_MAX_RSA_BITS
     1208    #if (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS >= 16384)
     1209        #define WOLFSSL_MAX_RSA_BITS (FP_MAX_BITS / 2)
     1210    #else
     1211        #define WOLFSSL_MAX_RSA_BITS 4096
     1212    #endif
     1213#endif
     1214#if (WOLFSSL_MAX_RSA_BITS % 8)
     1215    #error RSA maximum bit size must be multiple of 8
    11771216#endif
    11781217
     
    11971236    TLSv1_3_MINOR   = 4,        /* TLSv1_3 minor version number */
    11981237    TLS_DRAFT_MAJOR = 0x7f,     /* Draft TLS major version number */
    1199 #ifdef WOLFSSL_TLS13_DRAFT
    1200 #ifdef WOLFSSL_TLS13_DRAFT_18
    1201     TLS_DRAFT_MINOR = 0x12,     /* Minor version number of TLS draft */
    1202 #elif defined(WOLFSSL_TLS13_DRAFT_22)
    1203     TLS_DRAFT_MINOR = 0x16,     /* Minor version number of TLS draft */
    1204 #elif defined(WOLFSSL_TLS13_DRAFT_23)
    1205     TLS_DRAFT_MINOR = 0x17,     /* Minor version number of TLS draft */
    1206 #elif defined(WOLFSSL_TLS13_DRAFT_26)
    1207     TLS_DRAFT_MINOR = 0x1a,     /* Minor version number of TLS draft */
    1208 #else
    1209     TLS_DRAFT_MINOR = 0x1c,     /* Minor version number of TLS draft */
    1210 #endif
    1211 #endif
    12121238    OLD_HELLO_ID    = 0x01,     /* SSLv2 Client Hello Indicator */
    12131239    INVALID_BYTE    = 0xff,     /* Used to initialize cipher specs values */
     
    12191245                                /* pre RSA and all master */
    12201246#if defined(WOLFSSL_MYSQL_COMPATIBLE) || \
    1221     (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS > 8192)
     1247    (defined(USE_FAST_MATH) && defined(FP_MAX_BITS) && FP_MAX_BITS >= 16384)
    12221248#ifndef NO_PSK
    1223     ENCRYPT_LEN     = 1024 + MAX_PSK_ID_LEN + 2,   /* 8192 bit static buffer */
     1249    ENCRYPT_LEN     = (FP_MAX_BITS / 2 / 8) + MAX_PSK_ID_LEN + 2,
    12241250#else
    12251251    ENCRYPT_LEN     = 1024,     /* allow 8192 bit static buffer */
     
    13451371    MAX_SYM_KEY_SIZE    = AES_256_KEY_SIZE,
    13461372#else
    1347     MAX_SYM_KEY_SIZE    = WC_MAX_SYM_KEY_SIZE,
    1348 #endif
    1349 
    1350 #ifdef HAVE_SELFTEST
     1373    #if defined(HAVE_NULL_CIPHER) && defined(WOLFSSL_TLS13)
     1374        #if defined(WOLFSSL_SHA384) && WC_MAX_SYM_KEY_SIZE < 48
     1375            MAX_SYM_KEY_SIZE    = WC_SHA384_DIGEST_SIZE,
     1376        #elif !defined(NO_SHA256) && WC_MAX_SYM_KEY_SIZE < 32
     1377            MAX_SYM_KEY_SIZE    = WC_SHA256_DIGEST_SIZE,
     1378        #else
     1379            MAX_SYM_KEY_SIZE    = WC_MAX_SYM_KEY_SIZE,
     1380        #endif
     1381    #else
     1382        MAX_SYM_KEY_SIZE    = WC_MAX_SYM_KEY_SIZE,
     1383    #endif
     1384#endif
     1385
     1386#if defined(HAVE_SELFTEST) && \
     1387    (!defined(HAVE_SELFTEST_VERSION) || (HAVE_SELFTEST_VERSION < 2))
    13511388    #ifndef WOLFSSL_AES_KEY_SIZE_ENUM
    13521389    #define WOLFSSL_AES_KEY_SIZE_ENUM
     
    14191456
    14201457#ifndef NO_RSA
    1421     MAX_CERT_VERIFY_SZ = 4096 / 8, /* max RSA - default 4096-bits */
     1458    MAX_CERT_VERIFY_SZ = WOLFSSL_MAX_RSA_BITS / 8, /* max RSA bytes */
    14221459#elif defined(HAVE_ECC)
    14231460    MAX_CERT_VERIFY_SZ = ECC_MAX_SIG_SIZE, /* max ECC  */
     
    14921529/* number of items in the signature algo list */
    14931530#ifndef WOLFSSL_MAX_SIGALGO
    1494     #define WOLFSSL_MAX_SIGALGO 32
     1531    #define WOLFSSL_MAX_SIGALGO 36
    14951532#endif
    14961533
     
    15621599#endif
    15631600
     1601#if !defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && !defined(WOLFSSL_NO_SERVER)
     1602    /* Check chosen encryption is available. */
     1603    #if !(defined(HAVE_CHACHA) && defined(HAVE_POLY1305)) && \
     1604        defined(WOLFSSL_TICKET_ENC_CHACHA20_POLY1305)
     1605        #error "ChaCha20-Poly1305 not availble for default ticket encryption"
     1606    #endif
     1607    #if !defined(HAVE_AESGCM) && (defined(WOLFSSL_TICKET_ENC_AES128_GCM) || \
     1608        defined(WOLFSSL_TICKET_ENC_AES256_GCM))
     1609        #error "AES-GCM not availble for default ticket encryption"
     1610    #endif
     1611
     1612    #ifndef WOLFSSL_TICKET_KEY_LIFETIME
     1613        /* Default lifetime is 1 hour from issue of first ticket with key. */
     1614        #define WOLFSSL_TICKET_KEY_LIFETIME       (60 * 60)
     1615    #endif
     1616    #if WOLFSSL_TICKET_KEY_LIFETIME <= SESSION_TICKET_HINT_DEFAULT
     1617        #error "Ticket Key lifetime must be longer than ticket life hint."
     1618    #endif
     1619#endif
     1620
    15641621
    15651622/* don't use extra 3/4k stack space unless need to */
     
    15801637    SERVER_ENCRYPTED_EXTENSIONS_COMPLETE,
    15811638    SERVER_CERT_COMPLETE,
     1639    SERVER_CERT_VERIFY_COMPLETE,
    15821640    SERVER_KEYEXCHANGE_COMPLETE,
    15831641    SERVER_HELLODONE_COMPLETE,
     
    16121670
    16131671    #ifdef WOLFSSL_SESSION_EXPORT
    1614     WOLFSSL_LOCAL int wolfSSL_dtls_import_internal(WOLFSSL* ssl, byte* buf,
     1672    WOLFSSL_LOCAL int wolfSSL_dtls_import_internal(WOLFSSL* ssl, const byte* buf,
    16151673                                                                     word32 sz);
    16161674    WOLFSSL_LOCAL int wolfSSL_dtls_export_internal(WOLFSSL* ssl, byte* buf,
     
    16191677                                                          byte* buf, word32 sz);
    16201678    WOLFSSL_LOCAL int wolfSSL_dtls_import_state_internal(WOLFSSL* ssl,
    1621                                                           byte* buf, word32 sz);
     1679                                                    const byte* buf, word32 sz);
    16221680    WOLFSSL_LOCAL int wolfSSL_send_session(WOLFSSL* ssl);
    16231681    #endif
     
    16471705WOLFSSL_LOCAL int DoFinished(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
    16481706                            word32 size, word32 totalSz, int sniff);
     1707#ifdef WOLFSSL_TLS13
     1708WOLFSSL_LOCAL int DoTls13Finished(WOLFSSL* ssl, const byte* input, word32* inOutIdx,
     1709                           word32 size, word32 totalSz, int sniff);
     1710#endif
    16491711WOLFSSL_LOCAL int DoApplicationData(WOLFSSL* ssl, byte* input, word32* inOutIdx);
    16501712/* TLS v1.3 needs these */
     
    16661728WOLFSSL_LOCAL int  PickHashSigAlgo(WOLFSSL* ssl, const byte* hashSigAlgo,
    16671729                                   word32 hashSigAlgoSz);
     1730#ifdef WOLF_CRYPTO_CB
     1731WOLFSSL_LOCAL int  CreateDevPrivateKey(void** pkey, byte* buffer, word32 length,
     1732                                       int hsType, int label, int id,
     1733                                       void* heap, int devId);
     1734#endif
    16681735WOLFSSL_LOCAL int  DecodePrivateKey(WOLFSSL *ssl, word16* length);
    16691736#ifdef HAVE_PK_CALLBACKS
     
    16781745WOLFSSL_LOCAL int  MatchDomainName(const char* pattern, int len, const char* str);
    16791746#ifndef NO_CERTS
    1680 WOLFSSL_LOCAL int  CheckAltNames(DecodedCert* dCert, char* domain);
    1681 #ifdef OPENSSL_EXTRA
    1682 WOLFSSL_LOCAL int  CheckIPAddr(DecodedCert* dCert, char* ipasc);
    1683 #endif
     1747WOLFSSL_LOCAL int  CheckForAltNames(DecodedCert* dCert, const char* domain, int* checkCN);
     1748WOLFSSL_LOCAL int  CheckIPAddr(DecodedCert* dCert, const char* ipasc);
    16841749#endif
    16851750WOLFSSL_LOCAL int  CreateTicket(WOLFSSL* ssl);
    1686 WOLFSSL_LOCAL int  HashOutputRaw(WOLFSSL* ssl, const byte* output, int sz);
     1751WOLFSSL_LOCAL int  HashRaw(WOLFSSL* ssl, const byte* output, int sz);
    16871752WOLFSSL_LOCAL int  HashOutput(WOLFSSL* ssl, const byte* output, int sz,
    16881753                              int ivSz);
    16891754WOLFSSL_LOCAL int  HashInput(WOLFSSL* ssl, const byte* input, int sz);
    1690 #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     1755
     1756#ifdef HAVE_SNI
     1757#ifndef NO_WOLFSSL_SERVER
    16911758WOLFSSL_LOCAL int SNI_Callback(WOLFSSL* ssl);
     1759#endif
    16921760#endif
    16931761#ifdef WOLFSSL_TLS13
     
    17021770                                     word32* inOutIdx, word32 helloSz,
    17031771                                     byte* extMsgType);
     1772WOLFSSL_LOCAL int RestartHandshakeHash(WOLFSSL* ssl);
    17041773#endif
    17051774int TimingPadVerify(WOLFSSL* ssl, const byte* input, int padLen, int t,
     
    18301899#define MAX_DESCRIPTION_SZ 255
    18311900#endif
    1832 /* wolfSSL Cipher type just points back to SSL */
    18331901struct WOLFSSL_CIPHER {
    18341902    byte cipherSuite0;
    18351903    byte cipherSuite;
    1836     WOLFSSL* ssl;
     1904    const WOLFSSL* ssl;
    18371905#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
    18381906    char description[MAX_DESCRIPTION_SZ];
     
    19742042    VerifyCallback  verifyCallback;      /* Verify callback */
    19752043#endif
    1976     CallbackCACache caCacheCallback;     /* CA cache addition callback */
    1977     CbMissingCRL    cbMissingCRL;        /* notify through cb of missing crl */
    1978     CbOCSPIO        ocspIOCb;            /* I/O callback for OCSP lookup */
    1979     CbOCSPRespFree  ocspRespFreeCb;      /* Frees OCSP Response from IO Cb */
    1980     wolfSSL_Mutex   caLock;              /* CA list lock */
    1981     byte            crlEnabled;          /* is CRL on ? */
    1982     byte            crlCheckAll;         /* always leaf, but all ? */
    1983     byte            ocspEnabled;         /* is OCSP on ? */
    1984     byte            ocspCheckAll;        /* always leaf, but all ? */
    1985     byte            ocspSendNonce;       /* send the OCSP nonce ? */
    1986     byte            ocspUseOverrideURL;  /* ignore cert's responder, override */
    1987     byte            ocspStaplingEnabled; /* is OCSP Stapling on ? */
     2044    CallbackCACache caCacheCallback;       /* CA cache addition callback */
     2045    CbMissingCRL    cbMissingCRL;          /* notify thru cb of missing crl */
     2046    CbOCSPIO        ocspIOCb;              /* I/O callback for OCSP lookup */
     2047    CbOCSPRespFree  ocspRespFreeCb;        /* Frees OCSP Response from IO Cb */
     2048    wolfSSL_Mutex   caLock;                /* CA list lock */
     2049    byte            crlEnabled:1;          /* is CRL on ? */
     2050    byte            crlCheckAll:1;         /* always leaf, but all ? */
     2051    byte            ocspEnabled:1;         /* is OCSP on ? */
     2052    byte            ocspCheckAll:1;        /* always leaf, but all ? */
     2053    byte            ocspSendNonce:1;       /* send the OCSP nonce ? */
     2054    byte            ocspUseOverrideURL:1;  /* ignore cert responder, override */
     2055    byte            ocspStaplingEnabled:1; /* is OCSP Stapling on ? */
     2056#if defined(HAVE_CERTIFICATE_STATUS_REQUEST) \
     2057||  defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2)
     2058    byte            ocspMustStaple:1;      /* server must respond with staple */
     2059#endif
    19882060
    19892061#ifndef NO_RSA
     
    19932065    short           minEccKeySz;         /* minimum allowed ECC key size */
    19942066#endif
     2067    wolfSSL_Mutex   refMutex;   /* reference count mutex */
     2068    int             refCount;         /* reference count */
    19952069};
    19962070
     
    20052079
    20062080#ifndef NO_CERTS
    2007 #if !defined NOCERTS &&\
    2008     (!defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH))
     2081#if !defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH)
    20092082typedef struct ProcPeerCertArgs {
    20102083    buffer*      certs;
     
    21222195#endif
    21232196#ifdef WOLFSSL_RENESAS_TSIP_TLS
    2124     byte tsip_client_write_MAC_secret[TSIP_TLS_HMAC_KEY_INDEX_WORDSIZE];
    2125     byte tsip_server_write_MAC_secret[TSIP_TLS_HMAC_KEY_INDEX_WORDSIZE];
     2197
     2198    tsip_hmac_sha_key_index_t tsip_client_write_MAC_secret;
     2199    tsip_hmac_sha_key_index_t tsip_server_write_MAC_secret;
     2200
    21262201#endif
    21272202} Keys;
     
    21332208
    21342209typedef enum {
     2210#ifdef HAVE_SNI
    21352211    TLSX_SERVER_NAME                = 0x0000, /* a.k.a. SNI  */
     2212#endif
    21362213    TLSX_MAX_FRAGMENT_LENGTH        = 0x0001,
    21372214    TLSX_TRUSTED_CA_KEYS            = 0x0003,
     
    21402217    TLSX_SUPPORTED_GROUPS           = 0x000a, /* a.k.a. Supported Curves */
    21412218    TLSX_EC_POINT_FORMATS           = 0x000b,
    2142 #if !defined(WOLFSSL_NO_SIGALG)
    2143     TLSX_SIGNATURE_ALGORITHMS       = 0x000d,
     2219#if !defined(NO_CERTS) && !defined(WOLFSSL_NO_SIGALG)
     2220    TLSX_SIGNATURE_ALGORITHMS       = 0x000d, /* HELLO_EXT_SIG_ALGO */
    21442221#endif
    21452222    TLSX_APPLICATION_LAYER_PROTOCOL = 0x0010, /* a.k.a. ALPN */
     
    21482225    TLSX_ENCRYPT_THEN_MAC           = 0x0016, /* RFC 7366 */
    21492226#endif
     2227    TLSX_EXTENDED_MASTER_SECRET     = 0x0017, /* HELLO_EXT_EXTMS */
    21502228    TLSX_QUANTUM_SAFE_HYBRID        = 0x0018, /* a.k.a. QSH  */
    21512229    TLSX_SESSION_TICKET             = 0x0023,
     
    21582236    #endif
    21592237    TLSX_SUPPORTED_VERSIONS         = 0x002b,
     2238    #ifdef WOLFSSL_SEND_HRR_COOKIE
    21602239    TLSX_COOKIE                     = 0x002c,
     2240    #endif
    21612241    #if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
    21622242    TLSX_PSK_KEY_EXCHANGE_MODES     = 0x002d,
     
    21652245    TLSX_POST_HANDSHAKE_AUTH        = 0x0031,
    21662246    #endif
    2167     #if defined(WOLFSSL_TLS13_DRAFT_18) || defined(WOLFSSL_TLS13_DRAFT_22)
    2168     TLSX_KEY_SHARE                  = 0x0028,
    2169     #else
     2247    #if !defined(NO_CERTS) && !defined(WOLFSSL_NO_SIGALG)
    21702248    TLSX_SIGNATURE_ALGORITHMS_CERT  = 0x0032,
     2249    #endif
    21712250    TLSX_KEY_SHARE                  = 0x0033,
    2172     #endif
    21732251#endif
    21742252    TLSX_RENEGOTIATION_INFO         = 0xff01
     
    23122390        OcspRequest ocsp;
    23132391    } request;
    2314 #if defined(WOLFSSL_TLS13) && !defined(NO_WOLFSSL_SERVER)
     2392#if defined(WOLFSSL_TLS13)
    23152393    buffer response;
    23162394#endif
     
    24292507} SessionTicket;
    24302508
     2509#if !defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && !defined(WOLFSSL_NO_SERVER)
     2510
     2511/* Data passed to default SessionTicket enc/dec callback. */
     2512typedef struct TicketEncCbCtx {
     2513    /* Name for this context. */
     2514    byte name[WOLFSSL_TICKET_NAME_SZ];
     2515    /* Current keys - current and next. */
     2516    byte key[2][WOLFSSL_TICKET_KEY_SZ];
     2517    /* Expirary date of keys. */
     2518    word32 expirary[2];
     2519    /* Random number generator to use for generating name, keys and IV. */
     2520    WC_RNG rng;
     2521#ifndef SINGLE_THREADED
     2522    /* Mutex for access to changing keys. */
     2523    wolfSSL_Mutex mutex;
     2524#endif
     2525    /* Pointer back to SSL_CTX. */
     2526    WOLFSSL_CTX* ctx;
     2527} TicketEncCbCtx;
     2528
     2529#endif /* !WOLFSSL_NO_DEF_TICKET_ENC_CB && !WOLFSSL_NO_SERVER */
     2530
    24312531WOLFSSL_LOCAL int  TLSX_UseSessionTicket(TLSX** extensions,
    24322532                                             SessionTicket* ticket, void* heap);
     
    25122612
    25132613#if defined(HAVE_SESSION_TICKET) || !defined(NO_PSK)
    2514 #ifndef WOLFSSL_TLS13_DRAFT_18
    25152614/* Ticket nonce - for deriving PSK.
    25162615 * Length allowed to be: 1..255. Only support 4 bytes.
     
    25202619    byte data[MAX_TICKET_NONCE_SZ];
    25212620} TicketNonce;
    2522 #endif
    25232621
    25242622/* The PreSharedKey extension information - entry in a linked list. */
     
    25762674};
    25772675
     2676WOLFSSL_LOCAL int DeriveEarlySecret(WOLFSSL* ssl);
     2677WOLFSSL_LOCAL int DeriveHandshakeSecret(WOLFSSL* ssl);
     2678WOLFSSL_LOCAL int DeriveTls13Keys(WOLFSSL* ssl, int secret, int side, int store);
     2679WOLFSSL_LOCAL int DeriveMasterSecret(WOLFSSL* ssl);
     2680WOLFSSL_LOCAL int DeriveResumptionPSK(WOLFSSL* ssl, byte* nonce, byte nonceLen, byte* secret);
     2681WOLFSSL_LOCAL int DeriveResumptionSecret(WOLFSSL* ssl, byte* key);
     2682
     2683WOLFSSL_LOCAL int Tls13_Exporter(WOLFSSL* ssl, unsigned char *out, size_t outLen,
     2684        const char *label, size_t labelLen,
     2685        const unsigned char *context, size_t contextLen);
     2686
    25782687/* The key update request values for KeyUpdate message. */
    25792688enum KeyUpdateRequest {
     
    25922701#endif
    25932702
     2703#ifdef WOLFSSL_STATIC_EPHEMERAL
     2704/* contains static ephemeral keys */
     2705typedef struct {
     2706#ifndef NO_DH
     2707    DerBuffer* dhKey;
     2708#endif
     2709#ifdef HAVE_ECC
     2710    DerBuffer* ecKey;
     2711#endif
     2712} StaticKeyExchangeInfo_t;
     2713#endif
     2714
     2715
    25942716/* wolfSSL context type */
    25952717struct WOLFSSL_CTX {
     
    26092731    DerBuffer*  certChain;
    26102732                 /* chain after self, in DER, with leading size for each cert */
    2611     #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_EXTRA)
     2733    #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_EXTRA) || defined(HAVE_LIGHTY)
    26122734    WOLF_STACK_OF(WOLFSSL_X509_NAME)* ca_names;
    26132735    #endif
     
    26212743#endif
    26222744    DerBuffer*  privateKey;
    2623     byte        privateKeyType:7;
     2745    byte        privateKeyType:6;
    26242746    byte        privateKeyId:1;
     2747    byte        privateKeyLabel:1;
    26252748    int         privateKeySz;
    26262749    int         privateKeyDevId;
     
    26562779    byte        haveEMS:1;        /* have extended master secret extension */
    26572780    byte        useClientOrder:1; /* Use client's cipher preference order */
     2781#if defined(HAVE_SESSION_TICKET)
     2782    byte        noTicketTls12:1;  /* TLS 1.2 server won't send ticket */
     2783#endif
    26582784#ifdef WOLFSSL_TLS13
    2659     byte        noTicketTls13:1;  /* Server won't create new Ticket */
     2785    byte        noTicketTls13:1;  /* TLS 1.3 Server won't create new Ticket */
    26602786    byte        noPskDheKe:1;     /* Don't use (EC)DHE with PSK */
    26612787#endif
     
    27002826    short       minEccKeySz;      /* minimum ECC key size */
    27012827#endif
    2702 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
    27032828    unsigned long     mask;             /* store SSL_OP_ flags */
    2704 #endif
    27052829#ifdef OPENSSL_EXTRA
    27062830    byte              sessionCtx[ID_LEN]; /* app session context ID */
     
    27452869    wc_psk_server_tls13_callback server_psk_tls13_cb;  /* server callback */
    27462870#endif
     2871    void*       psk_ctx;
    27472872    char        server_hint[MAX_PSK_ID_LEN + NULL_TERM_LEN];
    27482873#endif /* HAVE_SESSION_TICKET || !NO_PSK */
     
    27612886    void*            passwd_userdata;
    27622887#endif
    2763 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
     2888#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) || defined(WOLFSSL_WPAS_SMALL)
    27642889    WOLFSSL_X509_STORE x509_store; /* points to ctx->cm */
    27652890    WOLFSSL_X509_STORE* x509_store_pt; /* take ownership of external store */
     
    27702895    WOLFSSL_CRYPTO_EX_DATA ex_data;
    27712896#endif
    2772 #if defined(HAVE_ALPN) && (defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY))
     2897#if defined(HAVE_ALPN) && (defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY))
    27732898    CallbackALPNSelect alpnSelect;
    27742899    void*              alpnSelectArg;
    27752900#endif
    2776 #if defined(OPENSSL_ALL) || (defined(OPENSSL_EXTRA) && (defined(HAVE_STUNNEL) || \
    2777                              defined(WOLFSSL_NGINX) || defined(HAVE_LIGHTY) || \
    2778                              defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_OPENSSH) ))
     2901#ifdef HAVE_SNI
    27792902    CallbackSniRecv sniRecvCb;
    27802903    void*           sniRecvCbArg;
     
    28052928        void*              ticketEncCtx;  /* session encrypt context */
    28062929        int                ticketHint;    /* ticket hint in seconds */
     2930        #ifndef WOLFSSL_NO_DEF_TICKET_ENC_CB
     2931            TicketEncCbCtx ticketKeyCtx;
     2932        #endif
    28072933    #endif
    28082934    #ifdef HAVE_SUPPORTED_CURVES
     
    28662992#endif /* HAVE_PK_CALLBACKS */
    28672993#ifdef HAVE_WOLF_EVENT
    2868         WOLF_EVENT_QUEUE event_queue;
     2994    WOLF_EVENT_QUEUE event_queue;
    28692995#endif /* HAVE_WOLF_EVENT */
    28702996#ifdef HAVE_EXT_CACHE
    2871         WOLFSSL_SESSION*(*get_sess_cb)(WOLFSSL*, unsigned char*, int, int*);
    2872         int (*new_sess_cb)(WOLFSSL*, WOLFSSL_SESSION*);
    2873         void (*rem_sess_cb)(WOLFSSL_CTX*, WOLFSSL_SESSION*);
     2997    WOLFSSL_SESSION*(*get_sess_cb)(WOLFSSL*, unsigned char*, int, int*);
     2998    int (*new_sess_cb)(WOLFSSL*, WOLFSSL_SESSION*);
     2999    void (*rem_sess_cb)(WOLFSSL_CTX*, WOLFSSL_SESSION*);
    28743000#endif
    28753001#if defined(OPENSSL_EXTRA) && defined(WOLFCRYPT_HAVE_SRP) && !defined(NO_SHA256)
    2876         Srp*  srp;  /* TLS Secure Remote Password Protocol*/
    2877         byte* srp_password;
     3002    Srp*  srp;  /* TLS Secure Remote Password Protocol*/
     3003    byte* srp_password;
     3004#endif
     3005#ifdef WOLFSSL_STATIC_EPHEMERAL
     3006    StaticKeyExchangeInfo_t staticKE;
    28783007#endif
    28793008};
     
    29403069};
    29413070
    2942 
    29433071/* Supported Authentication Schemes */
    29443072enum SignatureAlgorithm {
     
    29993127#endif
    30003128
     3129#if defined(WOLFSSL_DTLS) && defined(HAVE_SECURE_RENEGOTIATION)
     3130enum CipherSrc {
     3131    KEYS_NOT_SET = 0,
     3132    KEYS,     /* keys from ssl->keys are loaded */
     3133    SCR       /* keys from ssl->secure_renegotiation->tmp_keys are loaded */
     3134};
     3135#endif
    30013136
    30023137/* cipher for now */
     
    30383173    byte    state;
    30393174    byte    setup;       /* have we set it up flag for detection */
     3175#if defined(WOLFSSL_DTLS) && defined(HAVE_SECURE_RENEGOTIATION)
     3176    enum CipherSrc src;  /* DTLS uses this to determine which keys
     3177                          * are currently loaded */
     3178#endif
    30403179} Ciphers;
    30413180
     
    31393278    byte               sessionCtxSz;              /* sessionCtx length        */
    31403279    byte               sessionCtx[ID_LEN];        /* app specific context id  */
     3280    wolfSSL_Mutex      refMutex;                  /* ref count mutex */
     3281    int                refCount;                  /* reference count */
    31413282#endif
    31423283#ifdef WOLFSSL_TLS13
     
    31473288    word32             ticketSeen;                /* Time ticket seen (ms) */
    31483289    word32             ticketAdd;                 /* Added by client */
    3149         #ifndef WOLFSSL_TLS13_DRAFT_18
    31503290    TicketNonce        ticketNonce;               /* Nonce used to derive PSK */
    3151         #endif
    31523291    #endif
    31533292    #ifdef WOLFSSL_EARLY_DATA
     
    31613300    byte               isDynamic;
    31623301#endif
    3163 #ifdef HAVE_EXT_CACHE
     3302#if defined(HAVE_EXT_CACHE) || defined(OPENSSL_EXTRA)
    31643303    byte               isAlloced;
    31653304#endif
     
    31673306    WOLFSSL_CRYPTO_EX_DATA ex_data;
    31683307#endif
     3308    byte               side;                      /* Either WOLFSSL_CLIENT_END or
     3309                                                     WOLFSSL_SERVER_END */
    31693310};
    31703311
    31713312
    3172 WOLFSSL_LOCAL
    3173 WOLFSSL_SESSION* GetSession(WOLFSSL*, byte*, byte);
    3174 WOLFSSL_LOCAL
    3175 int          SetSession(WOLFSSL*, WOLFSSL_SESSION*);
    3176 
    3177 typedef int (*hmacfp) (WOLFSSL*, byte*, const byte*, word32, int, int, int);
     3313WOLFSSL_LOCAL WOLFSSL_SESSION* GetSession(WOLFSSL*, byte*, byte);
     3314WOLFSSL_LOCAL int              SetSession(WOLFSSL*, WOLFSSL_SESSION*);
     3315WOLFSSL_LOCAL void             FreeSession(WOLFSSL_SESSION*, int);
     3316
     3317typedef int (*hmacfp) (WOLFSSL*, byte*, const byte*, word32, int, int, int, int);
    31783318
    31793319#ifndef NO_CLIENT_CACHE
     3320    WOLFSSL_LOCAL
    31803321    WOLFSSL_SESSION* GetSessionClient(WOLFSSL*, const byte*, int);
    31813322#endif
     
    32653406    DerBuffer*      certificate;           /* WOLFSSL_CTX owns, unless we own */
    32663407    DerBuffer*      key;                   /* WOLFSSL_CTX owns, unless we own */
    3267     byte            keyType:7;             /* Type of key: RSA, ECC, Ed25519 */
     3408    byte            keyType:6;             /* Type of key: RSA, ECC, Ed25519 */
    32683409    byte            keyId:1;               /* Key data is an id not data */
     3410    byte            keyLabel:1;            /* Key data is a label not data */
    32693411    int             keySz;                 /* Size of RSA key */
    32703412    int             keyDevId;              /* Device Id for key */
     
    33363478    wc_psk_server_tls13_callback server_psk_tls13_cb;  /* server callback */
    33373479#endif
     3480    void*             psk_ctx;
    33383481#endif /* NO_PSK */
    3339 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
     3482#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) || defined(WOLFSSL_WPAS_SMALL)
    33403483    unsigned long     mask; /* store SSL_OP_ flags */
    33413484#endif
     
    33993542    word16            useTicket:1;        /* Use Ticket not session cache */
    34003543    word16            rejectTicket:1;     /* Callback rejected ticket */
     3544    word16            noTicketTls12:1;    /* TLS 1.2 server won't send ticket */
    34013545#ifdef WOLFSSL_TLS13
    34023546    word16            noTicketTls13:1;    /* Server won't create new Ticket */
     
    35113655    byte            secret[SECRET_LEN];
    35123656#endif
     3657#ifdef HAVE_KEYING_MATERIAL
     3658    byte            exporterSecret[WC_MAX_DIGEST_SIZE];
     3659#endif
    35133660    byte            masterSecret[SECRET_LEN];
    35143661#if defined(WOLFSSL_RENESAS_TSIP_TLS) && \
     
    35493696    #if defined(OPENSSL_ALL)
    35503697    wolf_sk_compare_cb comp;
     3698    wolf_sk_hash_cb hash_fn;
     3699    unsigned long hash;
    35513700    #endif
    35523701
     
    35603709        WOLFSSL_ACCESS_DESCRIPTION* access;
    35613710        WOLFSSL_X509_EXTENSION* ext;
     3711#ifdef OPENSSL_EXTRA
    35623712        WOLFSSL_CONF_VALUE*    conf;
     3713#endif
    35633714        void*                  generic;
    35643715        char*                  string;
     
    35773728#if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \
    35783729    !defined(NO_ASN)
    3579     DecodedName fullName;
    3580     WOLFSSL_X509_NAME_ENTRY cnEntry;
    3581     WOLFSSL_X509_NAME_ENTRY extra[MAX_NAME_ENTRIES]; /* extra entries added */
     3730    int   entrySz; /* number of entries */
     3731    WOLFSSL_X509_NAME_ENTRY entry[MAX_NAME_ENTRIES]; /* all entries i.e. CN */
    35823732    WOLFSSL_X509*           x509;   /* x509 that struct belongs to */
    35833733#endif /* OPENSSL_EXTRA */
    3584 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX)
     3734#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(HAVE_LIGHTY)
    35853735    byte  raw[ASN_NAME_MAX];
    35863736    int   rawLen;
    35873737#endif
     3738    void* heap;
    35883739};
    35893740
     
    36143765#if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
    36153766    WOLFSSL_STACK* ext_sk; /* Store X509_EXTENSIONS from wolfSSL_X509_get_ext */
     3767    WOLFSSL_STACK* ext_sk_full; /* Store X509_EXTENSIONS from wolfSSL_X509_get0_extensions */
    36163768    WOLFSSL_STACK* ext_d2i;/* Store d2i extensions from wolfSSL_X509_get_ext_d2i */
    36173769#endif /* WOLFSSL_QT || OPENSSL_ALL */
    3618 #ifdef OPENSSL_EXTRA
     3770#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL)
    36193771    WOLFSSL_ASN1_INTEGER* serialNumber; /* Stores SN from wolfSSL_X509_get_serialNumber */
    36203772#endif
     
    36833835    byte             authKeyIdSet:1;
    36843836    byte             authKeyIdCrit:1;
     3837    byte             issuerSet:1;
    36853838#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */
     3839#ifdef WOLFSSL_CERT_REQ
     3840    byte             isCSR:1;
     3841#endif
    36863842    byte             serial[EXTERNAL_SERIAL_SIZE];
    36873843    char             subjectCN[ASN_NAME_MAX];        /* common name short cut */
    36883844#ifdef WOLFSSL_CERT_REQ
     3845#ifdef OPENSSL_ALL
     3846    WOLFSSL_X509_ATTRIBUTE* challengePwAttr;
     3847#endif
    36893848    char             challengePw[CTC_NAME_SIZE]; /* for REQ certs */
    36903849#endif
     
    36953854    WOLFSSL_X509_PUBKEY key;
    36963855#endif
    3697     byte issuerSet:1;
     3856#if defined(OPENSSL_ALL) || defined(KEEP_OUR_CERT) || defined(KEEP_PEER_CERT) || \
     3857    defined(SESSION_CERTS)
     3858    byte            notBeforeData[CTC_DATE_SIZE];
     3859    byte            notAfterData[CTC_DATE_SIZE];
     3860#endif
    36983861};
    36993862
     
    37313894    DtlsFrag*       fragList;
    37323895    word32          fragSz;    /* Length of fragments received */
     3896    word16          epoch;     /* Epoch that this message belongs to */
    37333897    word32          seq;       /* Handshake sequence number    */
    37343898    word32          sz;        /* Length of whole message      */
     
    38003964
    38013965
     3966#ifndef WOLFSSL_NO_TLS12
     3967/* Persistable BuildMessage arguments */
     3968typedef struct BuildMsgArgs {
     3969    word32 digestSz;
     3970    word32 sz;
     3971    word32 pad;
     3972    word32 idx;
     3973    word32 headerSz;
     3974    word16 size;
     3975    word32 ivSz;      /* TLSv1.1  IV */
     3976    byte*  iv;
     3977} BuildMsgArgs;
     3978#endif
     3979
    38023980#ifdef WOLFSSL_ASYNC_CRYPT
    38033981    #define MAX_ASYNC_ARGS 18
     
    38083986        FreeArgsCb    freeArgs; /* function pointer to cleanup args */
    38093987        word32        args[MAX_ASYNC_ARGS]; /* holder for current args */
     3988        BuildMsgArgs  buildArgs; /* holder for current BuildMessage args */
    38103989    };
    38113990#endif
     
    39614140    word16          pssAlgo;
    39624141#ifdef WOLFSSL_TLS13
    3963     #if !defined(WOLFSSL_TLS13_DRAFT_18) && !defined(WOLFSSL_TLS13_DRAFT_22)
    39644142    word16          certHashSigAlgoSz;  /* SigAlgoCert ext length in bytes */
    39654143    byte            certHashSigAlgo[WOLFSSL_MAX_SIGALGO]; /* cert sig/algo to
    39664144                                                           * offer */
    3967     #endif /* !WOLFSSL_TLS13_DRAFT_18 && !WOLFSSL_TLS13_DRAFT_22 */
    39684145#endif
    39694146#ifdef HAVE_NTRU
     
    40154192    int             dtls_timeout_max;   /* maximum timeout value */
    40164193    int             dtls_timeout;       /* current timeout value, changes */
     4194#ifndef NO_ASN_TIME
     4195    word32          dtls_start_timeout;
     4196#endif /* !NO_ASN_TIME */
    40174197    word32          dtls_tx_msg_list_sz;
    40184198    word32          dtls_rx_msg_list_sz;
     
    41054285#ifdef HAVE_OCSP
    41064286        void*       ocspIOCtx;
     4287        byte ocspProducedDate[MAX_DATE_SZ];
     4288        int ocspProducedDateFormat;
    41074289    #ifdef OPENSSL_EXTRA
    41084290        byte*       ocspResp;
     
    41924374    WOLFSSL_STACK* peerCertChain;    /* Used in wolfSSL_get_peer_cert_chain */
    41934375#endif
     4376#ifdef WOLFSSL_STATIC_EPHEMERAL
     4377    StaticKeyExchangeInfo_t staticKE;
     4378#endif
     4379#if defined(OPENSSL_ALL) || defined(WOLFSSL_HAPROXY)
     4380    /* Added in libest port: allow applications to get the 'tls-unique' Channel
     4381     * Binding Type (https://tools.ietf.org/html/rfc5929#section-3). This is
     4382     * used in the EST protocol to bind an enrollment to a TLS session through
     4383     * 'proof-of-possession' (https://tools.ietf.org/html/rfc7030#section-3.4
     4384     * and https://tools.ietf.org/html/rfc7030#section-3.5). */
     4385    byte clientFinished[TLS_FINISHED_SZ];
     4386    byte serverFinished[TLS_FINISHED_SZ];
     4387#endif
    41944388};
    41954389
     
    42114405                                WOLFSSL_CRL* crl, int verify);
    42124406
    4213     #ifdef OPENSSL_EXTRA
    4214     WOLFSSL_LOCAL int CheckHostName(DecodedCert* dCert, char *domainName,
     4407    WOLFSSL_LOCAL int CheckHostName(DecodedCert* dCert, const char *domainName,
    42154408                                    size_t domainNameLen);
    4216     #endif
    42174409#endif
    42184410
     
    42994491
    43004492
    4301 static const byte client[SIZEOF_SENDER] = { 0x43, 0x4C, 0x4E, 0x54 };
    4302 static const byte server[SIZEOF_SENDER] = { 0x53, 0x52, 0x56, 0x52 };
     4493static const byte client[SIZEOF_SENDER+1] = { 0x43, 0x4C, 0x4E, 0x54, 0x00 }; /* CLNT */
     4494static const byte server[SIZEOF_SENDER+1] = { 0x53, 0x52, 0x56, 0x52, 0x00 }; /* SRVR */
    43034495
    43044496static const byte tls_client[FINISHED_LABEL_SZ + 1] = "client finished";
     
    43234515WOLFSSL_LOCAL int SendData(WOLFSSL*, const void*, int);
    43244516#ifdef WOLFSSL_TLS13
    4325 #ifdef WOLFSSL_TLS13_DRAFT_18
    4326 WOLFSSL_LOCAL int SendTls13HelloRetryRequest(WOLFSSL*);
    4327 #else
    43284517WOLFSSL_LOCAL int SendTls13ServerHello(WOLFSSL*, byte);
    4329 #endif
    43304518#endif
    43314519WOLFSSL_LOCAL int SendCertificate(WOLFSSL*);
     
    43574545WOLFSSL_LOCAL int IsAtLeastTLSv1_2(const WOLFSSL* ssl);
    43584546WOLFSSL_LOCAL int IsAtLeastTLSv1_3(const ProtocolVersion pv);
     4547WOLFSSL_LOCAL int TLSv1_3_Capable(WOLFSSL* ssl);
    43594548
    43604549WOLFSSL_LOCAL void FreeHandshakeResources(WOLFSSL* ssl);
     
    44544643#ifndef WOLFSSL_AEAD_ONLY
    44554644    WOLFSSL_LOCAL int  TLS_hmac(WOLFSSL* ssl, byte* digest, const byte* in,
    4456                                 word32 sz, int padSz, int content, int verify);
     4645                                word32 sz, int padSz, int content, int verify, int epochOrder);
    44574646#endif
    44584647#endif
     
    44764665    WOLFSSL_LOCAL void DtlsMsgDelete(DtlsMsg*, void*);
    44774666    WOLFSSL_LOCAL void DtlsMsgListDelete(DtlsMsg*, void*);
    4478     WOLFSSL_LOCAL int  DtlsMsgSet(DtlsMsg*, word32, const byte*, byte,
     4667    WOLFSSL_LOCAL void DtlsTxMsgListClean(WOLFSSL* ssl);
     4668    WOLFSSL_LOCAL int  DtlsMsgSet(DtlsMsg*, word32, word16, const byte*, byte,
    44794669                                                       word32, word32, void*);
    4480     WOLFSSL_LOCAL DtlsMsg* DtlsMsgFind(DtlsMsg*, word32);
    4481     WOLFSSL_LOCAL void DtlsMsgStore(WOLFSSL*, word32, const byte*, word32,
     4670    WOLFSSL_LOCAL DtlsMsg* DtlsMsgFind(DtlsMsg*, word32, word32);
     4671    WOLFSSL_LOCAL void DtlsMsgStore(WOLFSSL*, word32, word32, const byte*, word32,
    44824672                                                byte, word32, word32, void*);
    44834673    WOLFSSL_LOCAL DtlsMsg* DtlsMsgInsert(DtlsMsg*, DtlsMsg*);
    44844674
    4485     WOLFSSL_LOCAL int  DtlsMsgPoolSave(WOLFSSL*, const byte*, word32);
     4675    WOLFSSL_LOCAL int  DtlsMsgPoolSave(WOLFSSL*, const byte*, word32, enum HandShakeType);
    44864676    WOLFSSL_LOCAL int  DtlsMsgPoolTimeout(WOLFSSL*);
    44874677    WOLFSSL_LOCAL int  VerifyForDtlsMsgPoolSend(WOLFSSL*, byte, word32);
     4678    WOLFSSL_LOCAL int  VerifyForTxDtlsMsgDelete(WOLFSSL* ssl, DtlsMsg* head);
    44884679    WOLFSSL_LOCAL void DtlsMsgPoolReset(WOLFSSL*);
    44894680    WOLFSSL_LOCAL int  DtlsMsgPoolSend(WOLFSSL*, int);
    44904681#endif /* WOLFSSL_DTLS */
    44914682
    4492 #ifndef NO_TLS
    4493 
    4494 
    4495 #endif /* NO_TLS */
     4683#if defined(HAVE_SECURE_RENEGOTIATION) && defined(WOLFSSL_DTLS)
     4684    WOLFSSL_LOCAL int DtlsSCRKeysSet(WOLFSSL* ssl);
     4685    WOLFSSL_LOCAL int IsDtlsMsgSCRKeys(WOLFSSL* ssl);
     4686    WOLFSSL_LOCAL int DtlsUseSCRKeys(WOLFSSL* ssl);
     4687    WOLFSSL_LOCAL int DtlsCheckOrder(WOLFSSL* ssl, int order);
     4688#endif
     4689    WOLFSSL_LOCAL int IsSCR(WOLFSSL* ssl);
     4690
     4691    WOLFSSL_LOCAL void WriteSEQ(WOLFSSL* ssl, int verifyOrder, byte* out);
    44964692
    44974693#if defined(WOLFSSL_TLS13) && (defined(HAVE_SESSION_TICKET) || !defined(NO_PSK))
     
    45014697
    45024698#ifndef NO_CERTS
    4503     WOLFSSL_LOCAL void InitX509Name(WOLFSSL_X509_NAME*, int);
    4504     WOLFSSL_LOCAL void FreeX509Name(WOLFSSL_X509_NAME* name, void* heap);
     4699    WOLFSSL_LOCAL void InitX509Name(WOLFSSL_X509_NAME*, int, void*);
     4700    WOLFSSL_LOCAL void FreeX509Name(WOLFSSL_X509_NAME* name);
    45054701    WOLFSSL_LOCAL void InitX509(WOLFSSL_X509*, int, void* heap);
    45064702    WOLFSSL_LOCAL void FreeX509(WOLFSSL_X509*);
     
    45254721    byte cipherSuite0;
    45264722    byte cipherSuite;
    4527 #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
     4723#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
     4724    defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
    45284725    byte minor;
    45294726    byte major;
    45304727#endif
     4728    byte flags;
    45314729} CipherSuiteInfo;
    45324730
     
    45504748WOLFSSL_LOCAL const char* wolfSSL_get_cipher_name_iana(WOLFSSL* ssl);
    45514749WOLFSSL_LOCAL int GetCipherSuiteFromName(const char* name, byte* cipherSuite0,
    4552                                          byte* cipherSuite);
     4750                                         byte* cipherSuite, int* flags);
     4751
    45534752
    45544753enum encrypt_side {
     
    45884787WOLFSSL_LOCAL void FreeHandshakeHashes(WOLFSSL* ssl);
    45894788
     4789
     4790#ifndef WOLFSSL_NO_TLS12
     4791WOLFSSL_LOCAL void FreeBuildMsgArgs(WOLFSSL* ssl, BuildMsgArgs* args);
     4792#endif
    45904793WOLFSSL_LOCAL int BuildMessage(WOLFSSL* ssl, byte* output, int outSz,
    45914794                        const byte* input, int inSz, int type, int hashOutput,
    4592                         int sizeOnly, int asyncOkay);
     4795                        int sizeOnly, int asyncOkay, int epochOrder);
    45934796
    45944797#ifdef WOLFSSL_TLS13
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/ocsp.h

    r457 r464  
    3939
    4040#if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || defined(WOLFSSL_NGINX) ||\
    41     defined(WOLFSSL_HAPROXY)
     41    defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
    4242typedef struct OcspResponse WOLFSSL_OCSP_BASICRESP;
    4343
    44 typedef struct OcspRequest WOLFSSL_OCSP_CERTID;
     44typedef struct OcspEntry WOLFSSL_OCSP_CERTID;
     45
     46typedef struct OcspEntry WOLFSSL_OCSP_SINGLERESP;
    4547
    4648typedef struct OcspRequest WOLFSSL_OCSP_ONEREQ;
     
    6365
    6466#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \
    65     defined(WOLFSSL_APACHE_HTTPD)
     67    defined(WOLFSSL_APACHE_HTTPD) || defined(HAVE_LIGHTY)
    6668
    6769    WOLFSSL_API int wolfSSL_OCSP_resp_find_status(WOLFSSL_OCSP_BASICRESP *bs,
     
    8385
    8486WOLFSSL_API void wolfSSL_OCSP_RESPONSE_free(OcspResponse* response);
     87#ifndef NO_BIO
    8588WOLFSSL_API OcspResponse* wolfSSL_d2i_OCSP_RESPONSE_bio(WOLFSSL_BIO* bio,
    8689    OcspResponse** response);
     90#endif
    8791WOLFSSL_API OcspResponse* wolfSSL_d2i_OCSP_RESPONSE(OcspResponse** response,
    8892    const unsigned char** data, int len);
     
    101105    WOLFSSL_OCSP_CERTID *cid);
    102106WOLFSSL_API WOLFSSL_OCSP_CERTID* wolfSSL_OCSP_CERTID_dup(WOLFSSL_OCSP_CERTID*);
     107#ifndef NO_BIO
    103108WOLFSSL_API int wolfSSL_i2d_OCSP_REQUEST_bio(WOLFSSL_BIO* out,
    104109    WOLFSSL_OCSP_REQUEST *req);
     110#endif
     111
     112WOLFSSL_API int wolfSSL_i2d_OCSP_CERTID(WOLFSSL_OCSP_CERTID *, unsigned char **);
     113WOLFSSL_API const WOLFSSL_OCSP_CERTID* wolfSSL_OCSP_SINGLERESP_get0_id(const WOLFSSL_OCSP_SINGLERESP *single);
     114WOLFSSL_API int wolfSSL_OCSP_single_get0_status(WOLFSSL_OCSP_SINGLERESP *single,
     115                                                int *reason,
     116                                                WOLFSSL_ASN1_TIME **revtime,
     117                                                WOLFSSL_ASN1_TIME **thisupd,
     118                                                WOLFSSL_ASN1_TIME **nextupd);
     119WOLFSSL_API int wolfSSL_OCSP_resp_count(WOLFSSL_OCSP_BASICRESP *bs);
     120WOLFSSL_API WOLFSSL_OCSP_SINGLERESP* wolfSSL_OCSP_resp_get0(WOLFSSL_OCSP_BASICRESP *bs, int idx);
    105121
    106122#endif
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/aes.h

    r457 r464  
    4343 * to need the size of the structure. */
    4444typedef struct WOLFSSL_AES_KEY {
    45     /* aligned and big enough for Aes from wolfssl/wolfcrypt/aes.h */
    46     ALIGN16 void* holder[(376 + WC_ASYNC_DEV_SIZE)/ sizeof(void*)];
    47     #ifdef GCM_TABLE
    48     /* key-based fast multiplication table. */
    49     ALIGN16 void* M0[4096 / sizeof(void*)];
    50     #endif /* GCM_TABLE */
    51     #if defined(WOLFSSL_DEVCRYPTO) && \
    52         (defined(WOLFSSL_DEVCRYPTO_AES) || defined(WOLFSSL_DEVCRYPTO_CBC))
    53     /* large enough for additional devcrypto information */
    54     void* devKey[288 / sizeof(void*)];
    55     #endif
    56     #ifdef WOLFSSL_AFALG
    57     void* afalg_holder[288 / sizeof(void*)];
    58     #endif
    59     #ifdef HAVE_PKCS11
    60     void* pkcs11_holder[(AES_MAX_ID_LEN + sizeof(int)) / sizeof(void*)];
    61     #endif
    62     #if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
    63     void* async_holder[128 / sizeof(void*)];
    64     #endif
     45    ALIGN16 void *buf[(sizeof(Aes) / sizeof(void *)) + 1];
    6546} WOLFSSL_AES_KEY;
    6647typedef WOLFSSL_AES_KEY AES_KEY;
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/asn1.h

    r457 r464  
    3232#define ASN1_STRING_set      wolfSSL_ASN1_STRING_set
    3333#define ASN1_STRING_free     wolfSSL_ASN1_STRING_free
     34
     35#define ASN1_get_object      wolfSSL_ASN1_get_object
     36#define d2i_ASN1_OBJECT      wolfSSL_d2i_ASN1_OBJECT
     37#define c2i_ASN1_OBJECT      wolfSSL_c2i_ASN1_OBJECT
    3438
    3539#define V_ASN1_INTEGER                   0x02
     
    6771#define ASN1_TIME_set                   wolfSSL_ASN1_TIME_set
    6872
     73#define V_ASN1_EOC                      0
    6974#define V_ASN1_OBJECT                   6
     75#define V_ASN1_UTF8STRING               12
     76#define V_ASN1_SEQUENCE                 16
     77#define V_ASN1_SET                      17
     78#define V_ASN1_PRINTABLESTRING          19
     79#define V_ASN1_T61STRING                20
     80#define V_ASN1_IA5STRING                22
    7081#define V_ASN1_UTCTIME                  23
    7182#define V_ASN1_GENERALIZEDTIME          24
     83#define V_ASN1_UNIVERSALSTRING          28
     84#define V_ASN1_BMPSTRING                30
     85
     86
     87#define V_ASN1_CONSTRUCTED              0x20
    7288
    7389#define ASN1_STRING_FLAG_BITS_LEFT       0x008
     
    8298
    8399WOLFSSL_API void wolfSSL_ASN1_TYPE_set(WOLFSSL_ASN1_TYPE *a, int type, void *value);
     100
     101WOLFSSL_API int wolfSSL_ASN1_get_object(const unsigned char **in, long *len, int *tag,
     102                                        int *cls, long inLen);
     103
     104WOLFSSL_API WOLFSSL_ASN1_OBJECT *wolfSSL_c2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a,
     105        const unsigned char **pp, long len);
    84106
    85107#ifdef OPENSSL_ALL
     
    108130
    109131#define ASN1_SEQUENCE(type) \
    110     static const type __##type##_dummy_struct;\
     132    static type __##type##_dummy_struct;\
    111133    static const WOLFSSL_ASN1_TEMPLATE type##_member_data[]
    112134
     
    124146    };
    125147
    126 WOLFSSL_API void *wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM *template);
    127 WOLFSSL_API void wolfSSL_ASN1_item_free(void *val, const WOLFSSL_ASN1_ITEM *template);
     148WOLFSSL_API void *wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM *tpl);
     149WOLFSSL_API void wolfSSL_ASN1_item_free(void *val, const WOLFSSL_ASN1_ITEM *tpl);
    128150WOLFSSL_API int wolfSSL_ASN1_item_i2d(const void *src, byte **dest,
    129                                       const WOLFSSL_ASN1_ITEM *template);
     151                                      const WOLFSSL_ASN1_ITEM *tpl);
    130152
    131153/* Need function declaration otherwise compiler complains */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/bio.h

    r457 r464  
    3434
    3535
    36 #define BIO_FLAG_BASE64_NO_NL WOLFSSL_BIO_FLAG_BASE64_NO_NL
    37 #define BIO_FLAG_READ         WOLFSSL_BIO_FLAG_READ
    38 #define BIO_FLAG_WRITE        WOLFSSL_BIO_FLAG_WRITE
    39 #define BIO_FLAG_IO_SPECIAL   WOLFSSL_BIO_FLAG_IO_SPECIAL
    40 #define BIO_FLAG_RETRY        WOLFSSL_BIO_FLAG_RETRY
     36#define BIO_FLAGS_BASE64_NO_NL WOLFSSL_BIO_FLAG_BASE64_NO_NL
     37#define BIO_FLAGS_READ         WOLFSSL_BIO_FLAG_READ
     38#define BIO_FLAGS_WRITE        WOLFSSL_BIO_FLAG_WRITE
     39#define BIO_FLAGS_IO_SPECIAL   WOLFSSL_BIO_FLAG_IO_SPECIAL
     40#define BIO_FLAGS_SHOULD_RETRY WOLFSSL_BIO_FLAG_RETRY
    4141
    4242#define BIO_new_fp                      wolfSSL_BIO_new_fp
     43#if defined(OPENSSL_ALL) \
     44    || defined(HAVE_STUNNEL) \
     45    || defined(HAVE_LIGHTY) \
     46    || defined(WOLFSSL_MYSQL_COMPATIBLE) \
     47    || defined(WOLFSSL_HAPROXY) \
     48    || defined(OPENSSL_EXTRA)
    4349#define BIO_new_file                    wolfSSL_BIO_new_file
     50#endif
    4451#define BIO_new_fp                      wolfSSL_BIO_new_fp
    4552#define BIO_ctrl                        wolfSSL_BIO_ctrl
     
    5865#define BIO_make_bio_pair               wolfSSL_BIO_make_bio_pair
    5966
     67#define BIO_new_fd                      wolfSSL_BIO_new_fd
    6068#define BIO_set_fp                      wolfSSL_BIO_set_fp
    6169#define BIO_get_fp                      wolfSSL_BIO_get_fp
     
    124132#define BIO_meth_set_destroy       wolfSSL_BIO_meth_set_destroy
    125133
     134#define BIO_snprintf               XSNPRINTF
    126135
    127136/* BIO CTRL */
     
    150159#define BIO_CTRL_DGRAM_QUERY_MTU   40
    151160
     161#define BIO_FP_TEXT                0x00
    152162#define BIO_NOCLOSE                0x00
    153163#define BIO_CLOSE                  0x01
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/bn.h

    r457 r464  
    4141    int neg;        /* openssh deference */
    4242    void *internal; /* our big num */
    43 #ifdef WOLFSSL_SP_MATH
     43#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
    4444    sp_int fp;
    4545#elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
     
    5050
    5151#define BN_ULONG WOLFSSL_BN_ULONG
    52 #define WOLFSSL_BN_ULONG mp_digit
     52#define WOLFSSL_BN_ULONG unsigned long
    5353
    5454typedef struct WOLFSSL_BN_CTX WOLFSSL_BN_CTX;
     
    114114WOLFSSL_API int wolfSSL_BN_clear_bit(WOLFSSL_BIGNUM*, int);
    115115WOLFSSL_API int wolfSSL_BN_set_word(WOLFSSL_BIGNUM*, WOLFSSL_BN_ULONG);
    116 WOLFSSL_API unsigned long wolfSSL_BN_get_word(const WOLFSSL_BIGNUM*);
     116WOLFSSL_API WOLFSSL_BN_ULONG wolfSSL_BN_get_word(const WOLFSSL_BIGNUM*);
    117117
    118118WOLFSSL_API int wolfSSL_BN_add(WOLFSSL_BIGNUM*, WOLFSSL_BIGNUM*,
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/buffer.h

    r457 r464  
    3535WOLFSSL_API int wolfSSL_BUF_MEM_grow(WOLFSSL_BUF_MEM* buf, size_t len);
    3636WOLFSSL_API void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf);
     37WOLFSSL_API size_t wolfSSL_strlcpy(char *dst, const char *src, size_t dstSize);
     38WOLFSSL_API size_t wolfSSL_strlcat(char *dst, const char *src, size_t dstSize);
    3739
    3840
     
    4143#define BUF_MEM_free wolfSSL_BUF_MEM_free
    4244
     45#define BUF_strdup strdup
     46#define BUF_strlcpy wolfSSL_strlcpy
     47#define BUF_strlcat wolfSSL_strlcat
     48
    4349#ifdef __cplusplus
    4450    }  /* extern "C" */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/conf.h

    r457 r464  
    2929#endif
    3030
    31 struct WOLFSSL_CONF_VALUE {
     31#include <wolfssl/wolfcrypt/settings.h>
     32#include <wolfssl/version.h>
     33
     34typedef struct WOLFSSL_CONF_VALUE {
    3235    char *section;
    3336    char *name;
    3437    char *value;
    35 };
     38} WOLFSSL_CONF_VALUE;
    3639
    37 struct WOLFSSL_INIT_SETTINGS {
    38     char* appname;
    39 };
     40/* ssl.h requires WOLFSSL_CONF_VALUE */
     41#include <wolfssl/ssl.h>
    4042
    41 typedef struct WOLFSSL_CONF_VALUE CONF_VALUE;
    42 typedef struct WOLFSSL_INIT_SETTINGS OPENSSL_INIT_SETTINGS;
     43typedef struct WOLFSSL_CONF {
     44    void *meth_data;
     45    WOLF_LHASH_OF(WOLFSSL_CONF_VALUE) *data;
     46} WOLFSSL_CONF;
     47
     48typedef WOLFSSL_CONF CONF;
     49typedef WOLFSSL_CONF_VALUE CONF_VALUE;
     50
     51#ifdef OPENSSL_EXTRA
     52
     53WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_VALUE_new(void);
     54WOLFSSL_API int wolfSSL_CONF_add_string(WOLFSSL_CONF *conf,
     55        WOLFSSL_CONF_VALUE *section, WOLFSSL_CONF_VALUE *value);
     56WOLFSSL_API void wolfSSL_X509V3_conf_free(WOLFSSL_CONF_VALUE *val);
     57
     58WOLFSSL_API WOLFSSL_CONF *wolfSSL_NCONF_new(void *meth);
     59WOLFSSL_API char *wolfSSL_NCONF_get_string(const WOLFSSL_CONF *conf,
     60        const char *group, const char *name);
     61WOLFSSL_API int wolfSSL_NCONF_get_number(const CONF *conf, const char *group,
     62        const char *name, long *result);
     63WOLFSSL_API WOLFSSL_STACK *wolfSSL_NCONF_get_section(
     64        const WOLFSSL_CONF *conf, const char *section);
     65WOLFSSL_API int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline);
     66WOLFSSL_API void wolfSSL_NCONF_free(WOLFSSL_CONF *conf);
     67
     68WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve(
     69        WOLF_LHASH_OF(WOLFSSL_CONF_VALUE) *sk, WOLFSSL_CONF_VALUE *data);
     70
     71WOLFSSL_API int wolfSSL_CONF_modules_load(const WOLFSSL_CONF *cnf, const char *appname,
     72                      unsigned long flags);
     73WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_new_section(WOLFSSL_CONF *conf,
     74        const char *section);
     75WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_get_section(WOLFSSL_CONF *conf,
     76        const char *section);
     77
     78#define sk_CONF_VALUE_new               wolfSSL_sk_CONF_VALUE_new
     79#define sk_CONF_VALUE_free              wolfSSL_sk_CONF_VALUE_free
     80#define sk_CONF_VALUE_pop_free(a,b)     wolfSSL_sk_CONF_VALUE_free(a)
     81#define sk_CONF_VALUE_num               wolfSSL_sk_CONF_VALUE_num
     82#define sk_CONF_VALUE_value             wolfSSL_sk_CONF_VALUE_value
     83
     84#define lh_CONF_VALUE_retrieve          wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve
     85#define lh_CONF_VALUE_insert            wolfSSL_sk_CONF_VALUE_push
     86
     87#define NCONF_new                       wolfSSL_NCONF_new
     88#define NCONF_free                      wolfSSL_NCONF_free
     89#define NCONF_get_string                wolfSSL_NCONF_get_string
     90#define NCONF_get_section               wolfSSL_NCONF_get_section
     91#define NCONF_get_number                wolfSSL_NCONF_get_number
     92#define NCONF_load                      wolfSSL_NCONF_load
     93
     94#define CONF_modules_load               wolfSSL_CONF_modules_load
     95#define _CONF_new_section               wolfSSL_CONF_new_section
     96#define _CONF_get_section               wolfSSL_CONF_get_section
     97
     98#define X509V3_conf_free                wolfSSL_X509V3_conf_free
     99
     100#endif /* OPENSSL_EXTRA */
    43101
    44102#ifdef  __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/crypto.h

    r457 r464  
    2525#define WOLFSSL_CRYPTO_H_
    2626
     27#include <wolfssl/wolfcrypt/settings.h>
     28
    2729#include <wolfssl/openssl/opensslv.h>
    28 
    29 #include <wolfssl/wolfcrypt/settings.h>
     30#include <wolfssl/openssl/conf.h>
    3031
    3132#ifdef WOLFSSL_PREFIX
     
    3334#endif
    3435
     36typedef struct WOLFSSL_INIT_SETTINGS {
     37    char* appname;
     38} WOLFSSL_INIT_SETTINGS;
     39
     40typedef WOLFSSL_INIT_SETTINGS OPENSSL_INIT_SETTINGS;
    3541
    3642WOLFSSL_API const char*   wolfSSLeay_version(int type);
     
    4147WOLFSSL_API void wolfSSL_OPENSSL_free(void*);
    4248WOLFSSL_API void *wolfSSL_OPENSSL_malloc(size_t a);
     49
     50WOLFSSL_API int wolfSSL_OPENSSL_init_crypto(word64 opts, const OPENSSL_INIT_SETTINGS *settings);
    4351#endif
    4452
     
    6371#define OPENSSL_malloc wolfSSL_OPENSSL_malloc
    6472
    65 #ifdef WOLFSSL_QT
    66     #define OPENSSL_INIT_ADD_ALL_CIPHERS    0x00000004L
    67     #define OPENSSL_INIT_ADD_ALL_DIGESTS    0x00000008L
    68     #define OPENSSL_INIT_LOAD_CONFIG        0x00000040L
    69 #endif
     73#define OPENSSL_INIT_ENGINE_ALL_BUILTIN 0x00000001L
     74#define OPENSSL_INIT_ADD_ALL_CIPHERS    0x00000004L
     75#define OPENSSL_INIT_ADD_ALL_DIGESTS    0x00000008L
     76#define OPENSSL_INIT_LOAD_CONFIG        0x00000040L
     77
     78#define OPENSSL_init_crypto wolfSSL_OPENSSL_init_crypto
     79
    7080
    7181#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || \
    72     defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA)
     82    defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) || defined(HAVE_EX_DATA)
    7383#define CRYPTO_set_mem_ex_functions      wolfSSL_CRYPTO_set_mem_ex_functions
    7484#define FIPS_mode                        wolfSSL_FIPS_mode
     
    8797#define CRYPTO_THREAD_unlock wc_UnLockMutex
    8898
    89 #endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
     99#endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_EX_DATA */
    90100
    91101#endif /* header */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/dh.h

    r457 r464  
    2727
    2828#include <wolfssl/openssl/bn.h>
     29#include <wolfssl/openssl/opensslv.h>
    2930
    3031#ifdef __cplusplus
     
    5960WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_new(void);
    6061WOLFSSL_API void        wolfSSL_DH_free(WOLFSSL_DH*);
     62WOLFSSL_API WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh);
    6163
    6264WOLFSSL_API int wolfSSL_DH_check(const WOLFSSL_DH *dh, int *codes);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/dsa.h

    r457 r464  
    8181                                      WOLFSSL_DSA* dsa, int *dsacheck);
    8282
     83WOLFSSL_API int wolfSSL_DSA_bits(const WOLFSSL_DSA *d);
     84
    8385WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_DSA_SIG_new(void);
    8486WOLFSSL_API void wolfSSL_DSA_SIG_free(WOLFSSL_DSA_SIG *sig);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/ec.h

    r457 r464  
    2626
    2727#include <wolfssl/openssl/bn.h>
     28#include <wolfssl/wolfcrypt/asn.h>
    2829#include <wolfssl/wolfcrypt/ecc.h>
    2930
     
    6970#endif
    7071
     72#ifdef HAVE_ED448
     73    NID_ED448 = ED448k,
     74#endif
     75#ifdef HAVE_ED25519
     76    NID_ED25519 = ED25519k,
     77#endif
     78
    7179    OPENSSL_EC_NAMED_CURVE  = 0x001
    7280};
     
    149157int wolfSSL_i2o_ECPublicKey(const WOLFSSL_EC_KEY *in, unsigned char **out);
    150158WOLFSSL_API
     159WOLFSSL_EC_KEY *wolfSSL_d2i_ECPrivateKey(WOLFSSL_EC_KEY **key, const unsigned char **in,
     160                                         long len);
     161WOLFSSL_API
     162int wolfSSL_i2d_ECPrivateKey(const WOLFSSL_EC_KEY *in, unsigned char **out);
     163WOLFSSL_API
    151164void wolfSSL_EC_KEY_set_conv_form(WOLFSSL_EC_KEY *eckey, char form);
    152165WOLFSSL_API
     
    155168                                          char form,
    156169                                          WOLFSSL_BIGNUM *in, WOLFSSL_BN_CTX *ctx);
     170WOLFSSL_API
     171int wolfSSL_EC_POINT_is_on_curve(const WOLFSSL_EC_GROUP *group,
     172                                 const WOLFSSL_EC_POINT *point,
     173                                 WOLFSSL_BN_CTX *ctx);
    157174
    158175WOLFSSL_API
     
    199216                         WOLFSSL_BN_CTX *ctx);
    200217WOLFSSL_API
     218WOLFSSL_EC_GROUP *wolfSSL_EC_GROUP_dup(const WOLFSSL_EC_GROUP *src);
     219WOLFSSL_API
    201220int wolfSSL_EC_GROUP_get_curve_name(const WOLFSSL_EC_GROUP *group);
    202221WOLFSSL_API
     
    229248                                                WOLFSSL_BN_CTX *ctx);
    230249WOLFSSL_API
     250int wolfSSL_EC_POINT_add(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
     251                         const WOLFSSL_EC_POINT *p1,
     252                         const WOLFSSL_EC_POINT *p2, WOLFSSL_BN_CTX *ctx);
     253WOLFSSL_API
    231254int wolfSSL_EC_POINT_mul(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *r,
    232255                         const WOLFSSL_BIGNUM *n,
    233256                         const WOLFSSL_EC_POINT *q, const WOLFSSL_BIGNUM *m,
    234257                         WOLFSSL_BN_CTX *ctx);
     258WOLFSSL_API
     259int wolfSSL_EC_POINT_invert(const WOLFSSL_EC_GROUP *group, WOLFSSL_EC_POINT *a,
     260                            WOLFSSL_BN_CTX *ctx);
    235261WOLFSSL_API
    236262void wolfSSL_EC_POINT_clear_free(WOLFSSL_EC_POINT *point);
     
    278304#define EC_GROUP_new_by_curve_name      wolfSSL_EC_GROUP_new_by_curve_name
    279305#define EC_GROUP_cmp                    wolfSSL_EC_GROUP_cmp
     306#define EC_GROUP_dup                    wolfSSL_EC_GROUP_dup
    280307#define EC_GROUP_get_curve_name         wolfSSL_EC_GROUP_get_curve_name
    281308#define EC_GROUP_get_degree             wolfSSL_EC_GROUP_get_degree
     
    283310#define EC_GROUP_order_bits             wolfSSL_EC_GROUP_order_bits
    284311#define EC_GROUP_method_of              wolfSSL_EC_GROUP_method_of
     312#ifndef NO_WOLFSSL_STUB
     313#define EC_GROUP_set_point_conversion_form(...)
     314#endif
    285315
    286316#define EC_METHOD_get_field_type        wolfSSL_EC_METHOD_get_field_type
     
    292322#define EC_POINT_set_affine_coordinates_GFp \
    293323                                     wolfSSL_EC_POINT_set_affine_coordinates_GFp
     324#define EC_POINT_add                    wolfSSL_EC_POINT_add
    294325#define EC_POINT_mul                    wolfSSL_EC_POINT_mul
     326#define EC_POINT_invert                 wolfSSL_EC_POINT_invert
    295327#define EC_POINT_clear_free             wolfSSL_EC_POINT_clear_free
    296328#define EC_POINT_cmp                    wolfSSL_EC_POINT_cmp
     
    305337#define EC_POINT_oct2point              wolfSSL_EC_POINT_oct2point
    306338#define EC_POINT_point2bn               wolfSSL_EC_POINT_point2bn
     339#define EC_POINT_is_on_curve            wolfSSL_EC_POINT_is_on_curve
    307340#define i2o_ECPublicKey                 wolfSSL_i2o_ECPublicKey
     341#define i2d_EC_PUBKEY                   wolfSSL_i2o_ECPublicKey
     342#define d2i_ECPrivateKey                wolfSSL_d2i_ECPrivateKey
     343#define i2d_ECPrivateKey                wolfSSL_i2d_ECPrivateKey
    308344#define EC_KEY_set_conv_form            wolfSSL_EC_KEY_set_conv_form
    309345
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/evp.h

    r457 r464  
    186186    #endif
    187187    } hash;
    188     int macType;
     188    enum wc_HashType macType;
    189189    WOLFSSL_EVP_PKEY_CTX *pctx;
     190#ifndef NO_HMAC
     191    unsigned int isHMAC;
     192#endif
    190193};
    191194
     
    351354#define HAVE_WOLFSSL_EVP_CIPHER_CTX_IV
    352355    int    ivSz;
     356#ifdef HAVE_AESGCM
     357    byte*   gcmBuffer;
     358    int     gcmBufferLen;
    353359    ALIGN16 unsigned char authTag[AES_BLOCK_SIZE];
    354360    int     authTagSz;
     361    byte*   gcmAuthIn;
     362    int     gcmAuthInSz;
     363#endif
    355364#endif
    356365};
     
    515524WOLFSSL_API int wolfSSL_EVP_PKEY_assign_DH(EVP_PKEY* pkey, WOLFSSL_DH* key);
    516525WOLFSSL_API WOLFSSL_RSA* wolfSSL_EVP_PKEY_get0_RSA(struct WOLFSSL_EVP_PKEY *pkey);
     526WOLFSSL_API WOLFSSL_DSA* wolfSSL_EVP_PKEY_get0_DSA(struct WOLFSSL_EVP_PKEY *pkey);
    517527WOLFSSL_API WOLFSSL_RSA* wolfSSL_EVP_PKEY_get1_RSA(WOLFSSL_EVP_PKEY*);
    518528WOLFSSL_API WOLFSSL_DSA* wolfSSL_EVP_PKEY_get1_DSA(WOLFSSL_EVP_PKEY*);
     
    548558WOLFSSL_API int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
    549559
     560WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_ctrl_str(WOLFSSL_EVP_PKEY_CTX *ctx,
     561                          const char *name, const char *value);
     562
    550563WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
    551564                     unsigned char *out, size_t *outlen,
     
    560573WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*);
    561574WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey);
     575WOLFSSL_API int wolfSSL_EVP_PKEY_copy_parameters(WOLFSSL_EVP_PKEY *to, const WOLFSSL_EVP_PKEY *from);
    562576WOLFSSL_API int wolfSSL_EVP_PKEY_missing_parameters(WOLFSSL_EVP_PKEY *pkey);
    563577WOLFSSL_API int wolfSSL_EVP_PKEY_cmp(const WOLFSSL_EVP_PKEY *a, const WOLFSSL_EVP_PKEY *b);
    564578WOLFSSL_API int wolfSSL_EVP_PKEY_type(int type);
    565 WOLFSSL_API int wolfSSL_EVP_PKEY_id(const EVP_PKEY *pkey);
    566 WOLFSSL_API int wolfSSL_EVP_PKEY_base_id(const EVP_PKEY *pkey);
     579WOLFSSL_API int wolfSSL_EVP_PKEY_id(const WOLFSSL_EVP_PKEY *pkey);
     580WOLFSSL_API int wolfSSL_EVP_PKEY_base_id(const WOLFSSL_EVP_PKEY *pkey);
     581WOLFSSL_API int wolfSSL_EVP_PKEY_get_default_digest_nid(WOLFSSL_EVP_PKEY *pkey, int *pnid);
    567582WOLFSSL_API int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret,
    568583                  unsigned int *siglen, WOLFSSL_EVP_PKEY *pkey);
     
    631646#define EVP_CIPH_XTS_MODE WOLFSSL_EVP_CIPH_XTS_MODE
    632647
     648#define EVP_CIPH_FLAG_AEAD_CIPHER WOLFSSL_EVP_CIPH_FLAG_AEAD_CIPHER
     649
    633650#define WOLFSSL_EVP_CIPH_MODE           0x0007
    634651#define WOLFSSL_EVP_CIPH_STREAM_CIPHER      0x0
     
    641658#define WOLFSSL_EVP_CIPH_CCM_MODE           0x7
    642659#define WOLFSSL_EVP_CIPH_XTS_MODE          0x10
     660#define WOLFSSL_EVP_CIPH_FLAG_AEAD_CIPHER  0x20
    643661#define WOLFSSL_EVP_CIPH_NO_PADDING       0x100
    644662#define EVP_CIPH_VARIABLE_LENGTH          0x200
     
    817835#define EVP_PKEY_up_ref                wolfSSL_EVP_PKEY_up_ref
    818836#define EVP_PKEY_size                  wolfSSL_EVP_PKEY_size
     837#define EVP_PKEY_copy_parameters       wolfSSL_EVP_PKEY_copy_parameters
    819838#define EVP_PKEY_missing_parameters    wolfSSL_EVP_PKEY_missing_parameters
    820839#define EVP_PKEY_cmp                   wolfSSL_EVP_PKEY_cmp
    821840#define EVP_PKEY_type                  wolfSSL_EVP_PKEY_type
    822841#define EVP_PKEY_base_id               wolfSSL_EVP_PKEY_base_id
     842#define EVP_PKEY_get_default_digest_nid wolfSSL_EVP_PKEY_get_default_digest_nid
    823843#define EVP_PKEY_id                    wolfSSL_EVP_PKEY_id
     844#define EVP_PKEY_CTX_ctrl_str          wolfSSL_EVP_PKEY_CTX_ctrl_str
    824845#define EVP_SignFinal                  wolfSSL_EVP_SignFinal
    825846#define EVP_SignInit                   wolfSSL_EVP_SignInit
     
    909930
    910931#define EVP_PKEY_NONE                   NID_undef
    911 #define EVP_PKEY_RSA                    6
    912 #define EVP_PKEY_RSA2                   19
    913932#define EVP_PKEY_DH                     28
    914933#define EVP_CIPHER_mode                 WOLFSSL_CIPHER_mode
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/hmac.h

    r457 r464  
    7373                                  unsigned int* len);
    7474WOLFSSL_API int wolfSSL_HMAC_cleanup(WOLFSSL_HMAC_CTX* ctx);
     75WOLFSSL_API void wolfSSL_HMAC_CTX_cleanup(WOLFSSL_HMAC_CTX* ctx);
    7576WOLFSSL_API void wolfSSL_HMAC_CTX_free(WOLFSSL_HMAC_CTX* ctx);
    7677WOLFSSL_API size_t wolfSSL_HMAC_size(const WOLFSSL_HMAC_CTX *ctx);
     
    8485#define HMAC_CTX_copy wolfSSL_HMAC_CTX_copy
    8586#define HMAC_CTX_free wolfSSL_HMAC_CTX_free
     87#define HMAC_CTX_cleanup wolfSSL_HMAC_CTX_cleanup
    8688#define HMAC_CTX_reset wolfSSL_HMAC_cleanup
    8789#define HMAC_Init_ex  wolfSSL_HMAC_Init_ex
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/ocsp.h

    r457 r464  
    3131#define OCSP_RESPONSE             OcspResponse
    3232#define OCSP_BASICRESP            WOLFSSL_OCSP_BASICRESP
     33#define OCSP_SINGLERESP           WOLFSSL_OCSP_SINGLERESP
    3334#define OCSP_CERTID               WOLFSSL_OCSP_CERTID
    3435#define OCSP_ONEREQ               WOLFSSL_OCSP_ONEREQ
     
    7778#define i2d_OCSP_REQUEST_bio      wolfSSL_i2d_OCSP_REQUEST_bio
    7879
     80#define i2d_OCSP_CERTID           wolfSSL_i2d_OCSP_CERTID
     81#define OCSP_SINGLERESP_get0_id   wolfSSL_OCSP_SINGLERESP_get0_id
     82#define OCSP_single_get0_status   wolfSSL_OCSP_single_get0_status
     83#define OCSP_resp_count           wolfSSL_OCSP_resp_count
     84#define OCSP_resp_get0            wolfSSL_OCSP_resp_get0
     85
    7986#endif /* HAVE_OCSP */
    8087
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/opensslv.h

    r457 r464  
    2727
    2828/* api version compatibility */
    29 #if defined(WOLFSSL_APACHE_HTTPD)
     29#if defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER == 0x0090810fL) ||\
     30    defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER == 0x10100000L) ||\
     31    defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER == 0x10001040L) 
     32     /* valid version */
     33#elif defined(WOLFSSL_APACHE_HTTPD) || defined(HAVE_LIBEST)
    3034    /* For Apache httpd, Use 1.1.0 compatibility */
    3135     #define OPENSSL_VERSION_NUMBER 0x10100000L
    3236#elif defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) || \
    3337    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \
    34     defined(WOLFSSL_OPENSSH) || defined(WOLFSSL_QT)
     38    defined(WOLFSSL_OPENSSH) || defined(WOLFSSL_QT) || defined(WOLFSSL_OPENVPN)
    3539     /* version number can be increased for Lighty after compatibility for ECDH
    3640        is added */
    37      #define OPENSSL_VERSION_NUMBER 0x1000100fL
     41     #define OPENSSL_VERSION_NUMBER 0x10001040L
    3842#else
    3943     #define OPENSSL_VERSION_NUMBER 0x0090810fL
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/pem.h

    r457 r464  
    243243#define PEM_read_bio_ECPrivateKey       wolfSSL_PEM_read_bio_ECPrivateKey
    244244#define PEM_read_bio_EC_PUBKEY          wolfSSL_PEM_read_bio_EC_PUBKEY
     245#ifndef NO_WOLFSSL_STUB
     246#define PEM_write_bio_ECPKParameters(...) 0
     247#endif
    245248/* EVP_KEY */
    246249#define PEM_read_bio_PrivateKey         wolfSSL_PEM_read_bio_PrivateKey
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/rsa.h

    r457 r464  
    118118                               unsigned int mLen, unsigned char* sigRet,
    119119                               unsigned int* sigLen, WOLFSSL_RSA*, int);
     120WOLFSSL_API int wolfSSL_RSA_sign_generic_padding(int type, const unsigned char* m,
     121                               unsigned int mLen, unsigned char* sigRet,
     122                               unsigned int* sigLen, WOLFSSL_RSA*, int, int);
    120123WOLFSSL_API int wolfSSL_RSA_verify(int type, const unsigned char* m,
    121124                               unsigned int mLen, const unsigned char* sig,
    122125                               unsigned int sigLen, WOLFSSL_RSA*);
     126WOLFSSL_API int wolfSSL_RSA_verify_ex(int type, const unsigned char* m,
     127                               unsigned int mLen, const unsigned char* sig,
     128                               unsigned int sigLen, WOLFSSL_RSA* rsa,
     129                               int padding);
    123130WOLFSSL_API int wolfSSL_RSA_public_decrypt(int flen, const unsigned char* from,
    124131                                  unsigned char* to, WOLFSSL_RSA*, int padding);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/ssl.h

    r457 r464  
    5454#include <wolfssl/wolfcrypt/asn.h>
    5555
     56#include <wolfssl/openssl/x509.h>
     57
    5658#ifdef __cplusplus
    5759    extern "C" {
     
    6870#endif
    6971
     72#ifdef OPENSSL_EXTRA
     73WOLFSSL_API int wolfSSL_OPENSSL_init_ssl(word64 opts, const OPENSSL_INIT_SETTINGS *settings);
     74#endif
    7075
    7176typedef WOLFSSL          SSL;
     
    8085typedef WOLFSSL_X509_CHAIN X509_CHAIN;
    8186
     87/* STACK_OF(ASN1_OBJECT) */
    8288typedef WOLFSSL_STACK      EXTENDED_KEY_USAGE;
    8389
     
    100106typedef WOLFSSL_ASN1_STRING    ASN1_STRING;
    101107typedef WOLFSSL_ASN1_TYPE      ASN1_TYPE;
     108typedef WOLFSSL_X509_ATTRIBUTE X509_ATTRIBUTE;
    102109typedef WOLFSSL_ASN1_BIT_STRING ASN1_BIT_STRING;
    103110typedef WOLFSSL_dynlock_value  CRYPTO_dynlock_value;
     
    105112typedef WOLFSSL_GENERAL_NAMES  GENERAL_NAMES;
    106113typedef WOLFSSL_GENERAL_NAME GENERAL_NAME;
     114
     115#define X509_L_FILE_LOAD  WOLFSSL_X509_L_FILE_LOAD
     116#define X509_L_ADD_DIR    WOLFSSL_X509_L_ADD_DIR
     117#define X509_L_ADD_STORE  WOLFSSL_X509_L_ADD_STORE
     118#define X509_L_LOAD_STORE WOLFSSL_X509_L_LOAD_STORE
    107119
    108120#define ASN1_UTCTIME         WOLFSSL_ASN1_TIME
     
    126138typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
    127139
    128 #ifdef WOLFSSL_QT
    129     #if defined(NO_WOLFSSL_MEMORY)
    130         #define CRYPTO_free(xp)         XFREE(xp, NULL, NULL);
    131     #else
    132         #define CRYPTO_free(xp) { if((xp)) wolfSSL_Free((xp));}
    133     #endif
    134 #else
    135   #define CRYPTO_free                     XFREE
    136 #endif
    137 
    138 #define CRYPTO_malloc                   XMALLOC
     140#define CRYPTO_free(xp)                 XFREE(xp, NULL, DYNAMIC_TYPE_TMP_BUFFER)
     141#define CRYPTO_malloc(sz)               XMALLOC(sz, NULL, DYNAMIC_TYPE_TMP_BUFFER)
    139142#define CRYPTO_EX_new                   WOLFSSL_CRYPTO_EX_new
    140143#define CRYPTO_EX_dup                   WOLFSSL_CRYPTO_EX_dup
     
    161164#define set_ex_data                     wolfSSL_CRYPTO_set_ex_data
    162165#define get_ex_data                     wolfSSL_CRYPTO_get_ex_data
     166#define CRYPTO_memcmp                   wolfSSL_CRYPTO_memcmp
    163167
    164168/* this function was used to set the default malloc, free, and realloc */
     
    175179/* at the moment only returns ok */
    176180#define SSL_get_verify_result           wolfSSL_get_verify_result
    177 #define SSL_get_verify_mode             wolfSSL_SSL_get_mode
     181#define SSL_get_verify_mode             wolfSSL_get_verify_mode
    178182#define SSL_get_verify_depth            wolfSSL_get_verify_depth
    179183#define SSL_CTX_get_verify_mode         wolfSSL_CTX_get_verify_mode
    180184#define SSL_CTX_get_verify_depth        wolfSSL_CTX_get_verify_depth
    181185#define SSL_get_certificate             wolfSSL_get_certificate
     186#define SSL_CTX_get0_certificate        wolfSSL_CTX_get0_certificate
    182187#define SSL_use_certificate             wolfSSL_use_certificate
    183188#define SSL_use_certificate_ASN1        wolfSSL_use_certificate_ASN1
    184189#define d2i_PKCS8_PRIV_KEY_INFO_bio     wolfSSL_d2i_PKCS8_PKEY_bio
    185190#define d2i_PKCS8PrivateKey_bio         wolfSSL_d2i_PKCS8PrivateKey_bio
     191#define i2d_PKCS8PrivateKey_bio         wolfSSL_PEM_write_bio_PKCS8PrivateKey
    186192#define PKCS8_PRIV_KEY_INFO_free        wolfSSL_EVP_PKEY_free
    187193#define d2i_PKCS12_fp                   wolfSSL_d2i_PKCS12_fp
    188194
     195#define i2d_PUBKEY                      wolfSSL_i2d_PUBKEY
    189196#define d2i_PUBKEY                      wolfSSL_d2i_PUBKEY
    190197#define d2i_PUBKEY_bio                  wolfSSL_d2i_PUBKEY_bio
    191198#define d2i_PrivateKey                  wolfSSL_d2i_PrivateKey
    192199#define d2i_AutoPrivateKey              wolfSSL_d2i_AutoPrivateKey
    193 #define i2d_PrivateKey                  wolfSSL_i2d_PrivateKey
    194200#define SSL_use_PrivateKey              wolfSSL_use_PrivateKey
    195201#define SSL_use_PrivateKey_ASN1         wolfSSL_use_PrivateKey_ASN1
     
    286292#define SSL_set_verify                  wolfSSL_set_verify
    287293#define SSL_set_verify_result           wolfSSL_set_verify_result
     294#define SSL_verify_client_post_handshake wolfSSL_verify_client_post_handshake
     295#define SSL_set_post_handshake_auth     wolfSSL_set_post_handshake_auth
     296#define SSL_CTX_set_post_handshake_auth wolfSSL_CTX_set_post_handshake_auth
    288297#define SSL_pending                     wolfSSL_pending
    289298#define SSL_load_error_strings          wolfSSL_load_error_strings
    290299#define SSL_library_init                wolfSSL_library_init
     300#define OPENSSL_init_ssl                wolfSSL_OPENSSL_init_ssl
    291301#define OpenSSL_add_ssl_algorithms      wolfSSL_library_init
    292302#define SSL_CTX_set_session_cache_mode  wolfSSL_CTX_set_session_cache_mode
     
    297307#define SSL_CTX_set_security_level(...)
    298308/* wolfSSL does not support exporting keying material */
    299 #define SSL_export_keying_material(...) 0
     309#define SSL_export_keying_material      wolfSSL_export_keying_material
     310
     311#define SSL_CTX_set1_groups             wolfSSL_CTX_set1_groups
     312#define SSL_set1_groups                 wolfSSL_set1_groups
    300313
    301314#define SSL_CTX_set1_groups_list        wolfSSL_CTX_set1_groups_list
     
    304317#define SSL_set_ex_data                 wolfSSL_set_ex_data
    305318#define SSL_get_shutdown                wolfSSL_get_shutdown
     319#define SSL_get_finished                wolfSSL_get_finished
     320#define SSL_get_peer_finished           wolfSSL_get_peer_finished
    306321#define SSL_set_rfd                     wolfSSL_set_rfd
    307322#define SSL_set_wfd                     wolfSSL_set_wfd
     
    311326#define SSL_set_accept_state            wolfSSL_set_accept_state
    312327#define SSL_session_reused              wolfSSL_session_reused
     328#define SSL_SESSION_up_ref              wolfSSL_SESSION_up_ref
    313329#define SSL_SESSION_dup                 wolfSSL_SESSION_dup
    314330#define SSL_SESSION_free                wolfSSL_SESSION_free
     
    339355    #define ASN1_BOOLEAN                WOLFSSL_ASN1_BOOLEAN
    340356    #define X509_get_ext                wolfSSL_X509_get_ext
     357    #define X509_get_ext_by_OBJ         wolfSSL_X509_get_ext_by_OBJ
    341358    #define X509_cmp                    wolfSSL_X509_cmp
    342359    #define X509_EXTENSION_get_object   wolfSSL_X509_EXTENSION_get_object
     
    350367#define DSA_dup_DH                      wolfSSL_DSA_dup_DH
    351368/* wolfSSL does not support DSA as the cert public key */
    352 #define EVP_PKEY_get0_DSA(...)          NULL
    353 #define DSA_bits(...)                   0
     369#define EVP_PKEY_get0_DSA               wolfSSL_EVP_PKEY_get0_DSA
     370#define DSA_bits                        wolfSSL_DSA_bits
    354371
    355372#define i2d_X509_bio                    wolfSSL_i2d_X509_bio
     373#define i2d_X509_REQ_bio                wolfSSL_i2d_X509_REQ_bio
    356374#define d2i_X509_bio                    wolfSSL_d2i_X509_bio
     375#define d2i_X509_REQ_bio                wolfSSL_d2i_X509_REQ_bio
    357376#define d2i_X509_fp                     wolfSSL_d2i_X509_fp
    358377#define i2d_X509                        wolfSSL_i2d_X509
    359378#define d2i_X509                        wolfSSL_d2i_X509
    360379#define PEM_read_bio_X509               wolfSSL_PEM_read_bio_X509
     380#define PEM_read_bio_X509_REQ           wolfSSL_PEM_read_bio_X509_REQ
    361381#define PEM_read_bio_X509_CRL           wolfSSL_PEM_read_bio_X509_CRL
    362382#define PEM_read_bio_X509_AUX           wolfSSL_PEM_read_bio_X509_AUX
     
    369389
    370390#define i2d_X509_REQ                    wolfSSL_i2d_X509_REQ
     391#define d2i_X509_REQ                    wolfSSL_d2i_X509_REQ
    371392#define X509_REQ_new                    wolfSSL_X509_REQ_new
    372393#define X509_REQ_free                   wolfSSL_X509_REQ_free
    373394#define X509_REQ_sign                   wolfSSL_X509_REQ_sign
     395#define X509_REQ_sign_ctx               wolfSSL_X509_REQ_sign_ctx
    374396#define X509_REQ_add_extensions         wolfSSL_X509_REQ_add_extensions
     397#define X509_REQ_add1_attr_by_NID       wolfSSL_X509_REQ_add1_attr_by_NID
     398#define X509_REQ_add1_attr_by_txt       wolfSSL_X509_REQ_add1_attr_by_txt
     399#define X509_REQ_get_attr_by_NID        wolfSSL_X509_REQ_get_attr_by_NID
     400#define X509_REQ_get_attr               wolfSSL_X509_REQ_get_attr
     401#define X509_ATTRIBUTE_get0_type        wolfSSL_X509_ATTRIBUTE_get0_type
     402#define X509_to_X509_REQ                wolfSSL_X509_to_X509_REQ
    375403#define X509_REQ_set_subject_name       wolfSSL_X509_REQ_set_subject_name
    376404#define X509_REQ_set_pubkey             wolfSSL_X509_REQ_set_pubkey
     
    384412#define X509_get_ext_count              wolfSSL_X509_get_ext_count
    385413#define X509_get_ext_d2i                wolfSSL_X509_get_ext_d2i
     414#define X509V3_EXT_i2d                  wolfSSL_X509V3_EXT_i2d
     415#define X509_get0_extensions            wolfSSL_X509_get0_extensions
     416#define X509_get_extensions             wolfSSL_X509_get0_extensions
     417#define X509_REQ_get_extensions         wolfSSL_X509_REQ_get_extensions
    386418#define X509_get_ext                    wolfSSL_X509_get_ext
    387419#define X509_get_ext_by_NID             wolfSSL_X509_get_ext_by_NID
    388420#define X509_get_issuer_name            wolfSSL_X509_get_issuer_name
     421#define X509_issuer_name_hash           wolfSSL_X509_issuer_name_hash
     422#define X509_subject_name_hash          wolfSSL_X509_subject_name_hash
    389423#define X509_get_subject_name           wolfSSL_X509_get_subject_name
     424#define X509_REQ_get_subject_name       wolfSSL_X509_get_subject_name
    390425#define X509_get_pubkey                 wolfSSL_X509_get_pubkey
    391426#define X509_get0_pubkey                wolfSSL_X509_get_pubkey
     427#define X509_REQ_get_pubkey             wolfSSL_X509_get_pubkey
    392428#define X509_get_notBefore              wolfSSL_X509_get_notBefore
     429#define X509_get0_notBefore             wolfSSL_X509_get_notBefore
    393430#define X509_get_notAfter               wolfSSL_X509_get_notAfter
     431#define X509_get0_notAfter              wolfSSL_X509_get_notAfter
    394432#define X509_get_serialNumber           wolfSSL_X509_get_serialNumber
    395433#define X509_get0_pubkey_bitstr         wolfSSL_X509_get0_pubkey_bitstr
     
    409447#define X509_set_serialNumber           wolfSSL_X509_set_serialNumber
    410448#define X509_set_version                wolfSSL_X509_set_version
     449#define X509_REQ_set_version            wolfSSL_X509_set_version
    411450#define X509_sign                       wolfSSL_X509_sign
     451#define X509_sign_ctx                   wolfSSL_X509_sign_ctx
    412452#define X509_print                      wolfSSL_X509_print
     453#define X509_REQ_print                  wolfSSL_X509_print
    413454#define X509_print_ex                   wolfSSL_X509_print_ex
     455#define X509_print_fp                   wolfSSL_X509_print_fp
     456#define X509_REQ_print_fp               wolfSSL_X509_print_fp
     457#define X509_signature_print            wolfSSL_X509_signature_print
     458#define X509_get0_signature             wolfSSL_X509_get0_signature
    414459#define X509_verify_cert_error_string   wolfSSL_X509_verify_cert_error_string
    415460#define X509_verify_cert                wolfSSL_X509_verify_cert
     461#define X509_verify                     wolfSSL_X509_verify
     462#define X509_REQ_verify                 wolfSSL_X509_REQ_verify
    416463#define X509_check_private_key          wolfSSL_X509_check_private_key
     464#define X509_REQ_check_private_key      wolfSSL_X509_check_private_key
    417465#define X509_check_ca                   wolfSSL_X509_check_ca
    418466#define X509_check_host                 wolfSSL_X509_check_host
     467#define X509_check_ip_asc               wolfSSL_X509_check_ip_asc
    419468#define X509_email_free                 wolfSSL_X509_email_free
    420469#define X509_check_issued               wolfSSL_X509_check_issued
    421470#define X509_dup                        wolfSSL_X509_dup
     471#define X509_add_ext                    wolfSSL_X509_add_ext
     472#define X509_delete_ext                 wolfSSL_X509_delete_ext
    422473
    423474#define X509_EXTENSION_get_object       wolfSSL_X509_EXTENSION_get_object
     
    432483#define sk_X509_pop                     wolfSSL_sk_X509_pop
    433484#define sk_X509_pop_free                wolfSSL_sk_X509_pop_free
    434 #define sk_X509_dup                     wolfSSL_sk_X509_dup
     485#define sk_X509_dup                     wolfSSL_sk_dup
    435486#define sk_X509_free                    wolfSSL_sk_X509_free
    436487
     
    440491#define sk_X509_EXTENSION_pop_free      wolfSSL_sk_X509_EXTENSION_pop_free
    441492#define sk_X509_EXTENSION_push          wolfSSL_sk_X509_EXTENSION_push
    442 #define X509_EXTENSION_free             wolfSSL_X509_EXTENSION_free
    443493
    444494#define X509_INFO_new                   wolfSSL_X509_INFO_new
     
    452502#define sk_X509_INFO_pop_free           wolfSSL_sk_X509_INFO_pop_free
    453503#define sk_X509_INFO_free               wolfSSL_sk_X509_INFO_free
     504#define sk_X509_INFO_shift              wolfSSL_sk_X509_INFO_pop
    454505
    455506#define i2d_X509_NAME                   wolfSSL_i2d_X509_NAME
     507#define d2i_X509_NAME                   wolfSSL_d2i_X509_NAME
    456508#define X509_NAME_new                   wolfSSL_X509_NAME_new
    457509#define X509_NAME_free                  wolfSSL_X509_NAME_free
     
    467519#define X509_NAME_add_entry_by_txt      wolfSSL_X509_NAME_add_entry_by_txt
    468520#define X509_NAME_add_entry_by_NID      wolfSSL_X509_NAME_add_entry_by_NID
     521#define X509_NAME_delete_entry          wolfSSL_X509_NAME_delete_entry
    469522#define X509_NAME_oneline               wolfSSL_X509_NAME_oneline
    470523#define X509_NAME_get_index_by_NID      wolfSSL_X509_NAME_get_index_by_NID
    471524#define X509_NAME_print_ex              wolfSSL_X509_NAME_print_ex
     525#define X509_NAME_print_ex_fp           wolfSSL_X509_NAME_print_ex_fp
    472526#define X509_NAME_digest                wolfSSL_X509_NAME_digest
    473527#define X509_cmp_current_time           wolfSSL_X509_cmp_current_time
     
    510564#define X509_STORE_CTX_get_chain        wolfSSL_X509_STORE_CTX_get_chain
    511565#define X509_STORE_CTX_get1_chain       wolfSSL_X509_STORE_CTX_get1_chain
     566#define X509_STORE_CTX_get0_parent_ctx  wolfSSL_X509_STORE_CTX_get0_parent_ctx
    512567#define X509_STORE_CTX_get_error        wolfSSL_X509_STORE_CTX_get_error
    513568#define X509_STORE_CTX_get_error_depth  wolfSSL_X509_STORE_CTX_get_error_depth
     
    524579#define X509_STORE_CTX_get0_store       wolfSSL_X509_STORE_CTX_get0_store
    525580#define X509_STORE_CTX_get0_cert        wolfSSL_X509_STORE_CTX_get0_cert
     581#define X509_STORE_CTX_trusted_stack    wolfSSL_X509_STORE_CTX_trusted_stack
    526582
    527583#define X509_STORE_set_verify_cb(s, c) \
     
    541597#define X509_STORE_CTX_get1_issuer      wolfSSL_X509_STORE_CTX_get1_issuer
    542598#define X509_STORE_CTX_set_time         wolfSSL_X509_STORE_CTX_set_time
     599#define X509_VERIFY_PARAM_new           wolfSSL_X509_VERIFY_PARAM_new
     600#define X509_VERIFY_PARAM_free          wolfSSL_X509_VERIFY_PARAM_free
     601#define X509_VERIFY_PARAM_set_flags     wolfSSL_X509_VERIFY_PARAM_set_flags
     602#define X509_VERIFY_PARAM_get_flags     wolfSSL_X509_VERIFY_PARAM_get_flags
     603#define X509_VERIFY_PARAM_clear_flags   wolfSSL_X509_VERIFY_PARAM_clear_flags
    543604#define X509_VERIFY_PARAM_set_hostflags wolfSSL_X509_VERIFY_PARAM_set_hostflags
    544605#define X509_VERIFY_PARAM_set1_host     wolfSSL_X509_VERIFY_PARAM_set1_host
     
    550611#define X509_LOOKUP_hash_dir            wolfSSL_X509_LOOKUP_hash_dir
    551612#define X509_LOOKUP_file                wolfSSL_X509_LOOKUP_file
     613#define X509_LOOKUP_ctrl                wolfSSL_X509_LOOKUP_ctrl
    552614
    553615#define d2i_X509_CRL                    wolfSSL_d2i_X509_CRL
     
    562624
    563625#define X509_get_X509_PUBKEY            wolfSSL_X509_get_X509_PUBKEY
     626#define X509_REQ_get_X509_PUBKEY        wolfSSL_X509_get_X509_PUBKEY
    564627#define X509_get0_tbs_sigalg            wolfSSL_X509_get0_tbs_sigalg
    565628#define X509_PUBKEY_get0_param          wolfSSL_X509_PUBKEY_get0_param
     
    578641
    579642#define X509_OBJECT_free_contents       wolfSSL_X509_OBJECT_free_contents
    580 #define X509_subject_name_hash          wolfSSL_X509_subject_name_hash
    581643
    582644#define X509_check_purpose(...)         0
     
    610672#define BIO_f_ssl                       wolfSSL_BIO_f_ssl
    611673#define BIO_new_socket                  wolfSSL_BIO_new_socket
     674#ifndef NO_WOLFSSL_STUB
     675#define BIO_new_connect                 wolfSSL_BIO_new_connect
     676#define BIO_set_conn_port               wolfSSL_BIO_set_conn_port
     677#define BIO_do_connect                  wolfSSL_BIO_do_connect
     678#endif
    612679#define SSL_set_bio                     wolfSSL_set_bio
    613680#define BIO_set_ssl                     wolfSSL_BIO_set_ssl
     
    652719#define sk_ASN1_OBJECT_free             wolfSSL_sk_ASN1_OBJECT_free
    653720
     721#define ASN1_TIME_new                   wolfSSL_ASN1_TIME_new
     722#define ASN1_UTCTIME_new                wolfSSL_ASN1_TIME_new
    654723#define ASN1_TIME_free                  wolfSSL_ASN1_TIME_free
     724#define ASN1_UTCTIME_free               wolfSSL_ASN1_TIME_free
    655725#define ASN1_TIME_adj                   wolfSSL_ASN1_TIME_adj
    656726#define ASN1_TIME_print                 wolfSSL_ASN1_TIME_print
    657727#define ASN1_TIME_to_generalizedtime    wolfSSL_ASN1_TIME_to_generalizedtime
     728#define ASN1_TIME_set                   wolfSSL_ASN1_TIME_set
     729#define ASN1_TIME_set_string            wolfSSL_ASN1_TIME_set_string
     730#define ASN1_TIME_to_string             wolfSSL_ASN1_TIME_to_string
    658731#define ASN1_GENERALIZEDTIME_print      wolfSSL_ASN1_GENERALIZEDTIME_print
    659732#define ASN1_GENERALIZEDTIME_free       wolfSSL_ASN1_GENERALIZEDTIME_free
     
    661734#define ASN1_tag2str                    wolfSSL_ASN1_tag2str
    662735
     736#define a2i_ASN1_INTEGER                wolfSSL_a2i_ASN1_INTEGER
    663737#define i2a_ASN1_INTEGER                wolfSSL_i2a_ASN1_INTEGER
    664738#define i2c_ASN1_INTEGER                wolfSSL_i2c_ASN1_INTEGER
     
    671745
    672746#define i2a_ASN1_OBJECT                 wolfSSL_i2a_ASN1_OBJECT
    673 
     747#define i2d_ASN1_OBJECT                 wolfSSL_i2d_ASN1_OBJECT
     748
     749#define ASN1_STRING_new                 wolfSSL_ASN1_STRING_new
     750#define ASN1_STRING_free                wolfSSL_ASN1_STRING_free
     751#define ASN1_STRING_cmp                 wolfSSL_ASN1_STRING_cmp
    674752#define ASN1_STRING_data                wolfSSL_ASN1_STRING_data
    675753#define ASN1_STRING_get0_data           wolfSSL_ASN1_STRING_data
    676754#define ASN1_STRING_length              wolfSSL_ASN1_STRING_length
    677755#define ASN1_STRING_to_UTF8             wolfSSL_ASN1_STRING_to_UTF8
     756#define ASN1_UNIVERSALSTRING_to_string  wolfSSL_ASN1_UNIVERSALSTRING_to_string
    678757#define ASN1_STRING_print_ex            wolfSSL_ASN1_STRING_print_ex
    679758#define ASN1_STRING_print(x, y)         wolfSSL_ASN1_STRING_print ((WOLFSSL_BIO*)(x), (WOLFSSL_ASN1_STRING*)(y))
    680759#define d2i_DISPLAYTEXT                 wolfSSL_d2i_DISPLAYTEXT
     760#ifndef NO_WOLFSSL_STUB
     761#define ASN1_STRING_set_default_mask_asc(...) 1
     762#endif
     763
     764#define ASN1_PRINTABLE_type(...)        V_ASN1_PRINTABLESTRING
    681765
    682766#define ASN1_UTCTIME_pr                 wolfSSL_ASN1_UTCTIME_pr
     
    799883                                        NULL, __LINE__, __FILE__, NULL)
    800884#endif
     885#ifndef WOLFCRYPT_ONLY
     886#define EVPerr(func, reason)            wolfSSL_ERR_put_error(ERR_LIB_EVP, \
     887                                        (func), (reason), __FILE__, __LINE__)
     888#else
     889#define EVPerr(func, reason)            WOLFSSL_ERROR_LINE((reason), \
     890                                        NULL, __LINE__, __FILE__, NULL)
     891#endif
    801892
    802893#define SSLv23_server_method            wolfSSLv23_server_method
     
    860951#define CONF_modules_free()
    861952#define ENGINE_cleanup()
    862 #define HMAC_CTX_cleanup                wolfSSL_HMAC_cleanup
    863953#define SSL_CTX_need_tmp_RSA(ctx)       0
    864954#define SSL_CTX_set_tmp_rsa(ctx,rsa)    1
     
    897987#define sk_X509_NAME_find               wolfSSL_sk_X509_NAME_find
    898988
    899 enum {
    900     GEN_DNS   = 0x02, /* ASN_DNS_TYPE */
    901     GEN_EMAIL = 0x01, /* ASN_RFC822_TYPE */
    902     GEN_URI   = 0x06, /* ASN_URI_TYPE */
    903     GEN_IPADD = 0x07,
    904     GEN_RID   = 0x08, /* Registered ID, not supported */
    905 };
    906 
     989#define DHparams_dup                    wolfSSL_DH_dup
    907990#define PEM_read_bio_DHparams           wolfSSL_PEM_read_bio_DHparams
    908991#define PEM_read_bio_DSAparams          wolfSSL_PEM_read_bio_DSAparams
     
    9201003#define sk_SSL_CIPHER_value             wolfSSL_sk_SSL_CIPHER_value
    9211004#endif /* OPENSSL_ALL || WOLFSSL_HAPROXY */
    922 #define sk_SSL_CIPHER_dup               wolfSSL_sk_SSL_CIPHER_dup
     1005#define sk_SSL_CIPHER_dup               wolfSSL_sk_dup
    9231006#define sk_SSL_CIPHER_free              wolfSSL_sk_SSL_CIPHER_free
    9241007#define sk_SSL_CIPHER_find              wolfSSL_sk_SSL_CIPHER_find
     
    9291012
    9301013#define SSL_CTRL_CHAIN       88
    931 #define GEN_IPADD            7
    9321014#define ERR_LIB_SSL          20
    9331015#define SSL_R_SHORT_READ     10
    9341016#define ERR_R_PEM_LIB        9
    935 #define V_ASN1_IA5STRING     22
    936 #define V_ASN1_UTF8STRING    12
    9371017#define SSL_CTRL_MODE        33
    9381018
     
    9691049#define SSL_renegotiate                 wolfSSL_Rehandshake
    9701050#define SSL_get_secure_renegotiation_support wolfSSL_SSL_get_secure_renegotiation_support
     1051#define SSL_renegotiate_pending         wolfSSL_SSL_renegotiate_pending
    9711052#define SSL_set_tlsext_debug_arg        wolfSSL_set_tlsext_debug_arg
    9721053#define SSL_set_tlsext_status_type      wolfSSL_set_tlsext_status_type
     
    9921073
    9931074#define SSL_get_tlsext_status_exts      wolfSSL_get_tlsext_status_exts
     1075
     1076#define SSL_CTX_get_tlsext_ticket_keys  wolfSSL_CTX_get_tlsext_ticket_keys
     1077#define SSL_CTX_set_tlsext_ticket_keys  wolfSSL_CTX_set_tlsext_ticket_keys
    9941078
    9951079#define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS         11
     
    10991183
    11001184#endif /* HAVE_STUNNEL || WOLFSSL_NGINX */
     1185
     1186#ifndef NO_WOLFSSL_STUB
     1187#define b2i_PrivateKey_bio(...)         NULL
     1188#define b2i_PVK_bio(...)                NULL
     1189#endif
     1190
    11011191#define SSL_CTX_get_default_passwd_cb   wolfSSL_CTX_get_default_passwd_cb
    11021192#define SSL_CTX_get_default_passwd_cb_userdata wolfSSL_CTX_get_default_passwd_cb_userdata
     
    11361226
    11371227#define OPENSSL_STRING    WOLFSSL_STRING
     1228#define OPENSSL_CSTRING   WOLFSSL_STRING
    11381229
    11391230#define TLSEXT_TYPE_application_layer_protocol_negotiation    16
     
    11721263#define OPENSSL_config                  wolfSSL_OPENSSL_config
    11731264#define OPENSSL_memdup                  wolfSSL_OPENSSL_memdup
     1265#define OPENSSL_cleanse                 wolfSSL_OPENSSL_cleanse
    11741266#define SSL_CTX_get_timeout             wolfSSL_SSL_CTX_get_timeout
    11751267#define SSL_CTX_set_tmp_ecdh            wolfSSL_SSL_CTX_set_tmp_ecdh
     1268#define SSL_CTX_set_ecdh_auto(...)
    11761269#define SSL_CTX_remove_session          wolfSSL_SSL_CTX_remove_session
    11771270#define SSL_get_rbio                    wolfSSL_SSL_get_rbio
     
    11841277#define SSL_CTX_set_tlsext_status_cb    wolfSSL_CTX_set_tlsext_status_cb
    11851278#define SSL_CTX_get_extra_chain_certs   wolfSSL_CTX_get_extra_chain_certs
     1279#define sk_OPENSSL_STRING_num           wolfSSL_sk_WOLFSSL_STRING_num
    11861280#define sk_OPENSSL_STRING_value         wolfSSL_sk_WOLFSSL_STRING_value
     1281#define sk_OPENSSL_PSTRING_num          wolfSSL_sk_WOLFSSL_STRING_num
     1282#define sk_OPENSSL_PSTRING_value        (WOLFSSL_STRING*)wolfSSL_sk_WOLFSSL_STRING_value
     1283#define sk_OPENSSL_STRING_free          wolfSSL_sk_free
    11871284#define SSL_get0_alpn_selected          wolfSSL_get0_alpn_selected
    11881285#define SSL_select_next_proto           wolfSSL_select_next_proto
     
    12061303#define SSL_CTX_set_srp_password        wolfSSL_CTX_set_srp_password
    12071304#define SSL_CTX_set_srp_username        wolfSSL_CTX_set_srp_username
     1305#define SSL_CTX_set_srp_strength        wolfSSL_CTX_set_srp_strength
    12081306#define SSL_get_SSL_CTX                 wolfSSL_get_SSL_CTX
    12091307#define SSL_get0_param                  wolfSSL_get0_param
     1308#define SSL_get_srp_username            wolfSSL_get_srp_username
    12101309
    12111310#define ERR_NUM_ERRORS                  16
     
    12371336#define X509_OBJECT_get_type(x)         0
    12381337
    1239 #define OpenSSL_version(x)              wolfSSL_lib_version()
     1338#define OpenSSL_version(x)              wolfSSL_OpenSSL_version()
     1339
     1340#ifndef NO_WOLFSSL_STUB
     1341#define OBJ_create_objects(...)
     1342#endif
    12401343
    12411344#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/stack.h

    r457 r464  
    3535WOLFSSL_API int wolfSSL_sk_GENERIC_push(WOLFSSL_STACK *sk, void *data);
    3636WOLFSSL_API void wolfSSL_sk_pop_free(WOLFSSL_STACK *st, void (*func) (void *));
    37 WOLFSSL_API void wolfSSL_sk_CONF_VALUE_free(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk);
    3837WOLFSSL_API WOLFSSL_STACK *wolfSSL_sk_new_null(void);
    3938
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/x509.h

    r457 r464  
    66#include <wolfssl/openssl/ec.h>
    77#include <wolfssl/openssl/ecdsa.h>
     8#include <wolfssl/openssl/pkcs7.h>
    89
    910/* wolfSSL_X509_print_ex flags */
     
    2425
    2526#define XN_FLAG_FN_SN           0
    26 #define XN_FLAG_SEP_CPLUS_SPC   2
     27#define XN_FLAG_ONELINE         0
     28#define XN_FLAG_COMPAT          0
     29#define XN_FLAG_RFC2253         1
     30#define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)
     31#define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)
     32#define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)
     33#define XN_FLAG_SEP_MULTILINE   (4 << 16)
     34#define XN_FLAG_SEP_MASK        (0xF << 16)
     35#define XN_FLAG_DN_REV          (1 << 20)
     36#define XN_FLAG_FN_LN           (1 << 21)
     37#define XN_FLAG_FN_OID          (2 << 21)
     38#define XN_FLAG_FN_NONE         (3 << 21)
     39#define XN_FLAG_FN_MASK         (3 << 21)
     40#define XN_FLAG_SPC_EQ          (1 << 23)
     41#define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)
     42#define XN_FLAG_FN_ALIGN        (1 << 25)
     43
     44#define XN_FLAG_MULTILINE       0xFFFF
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/openssl/x509v3.h

    r457 r464  
    4141
    4242typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);
     43typedef int (*X509V3_EXT_I2D) (void *, unsigned char **);
    4344typedef STACK_OF(CONF_VALUE) *(*X509V3_EXT_I2V) (
    4445                                struct WOLFSSL_v3_ext_method *method,
     
    5455    void *usr_data;
    5556    X509V3_EXT_D2I d2i;
     57    X509V3_EXT_I2D i2d;
    5658    X509V3_EXT_I2V i2v;
    5759    X509V3_EXT_I2S i2s;
     
    6264    WOLFSSL_ASN1_OBJECT *obj;
    6365    WOLFSSL_ASN1_BOOLEAN crit;
    64     WOLFSSL_ASN1_STRING value;
     66    ASN1_OCTET_STRING value; /* DER format of extension */
    6567    WOLFSSL_v3_ext_method ext_method;
    6668    WOLFSSL_STACK* ext_sk; /* For extension specific data */
     
    8284#define X509V3_CTX         WOLFSSL_X509V3_CTX
    8385
     86#define CTX_TEST           0x1
     87
    8488typedef struct WOLFSSL_AUTHORITY_KEYID AUTHORITY_KEYID;
    8589typedef struct WOLFSSL_BASIC_CONSTRAINTS BASIC_CONSTRAINTS;
     
    8791typedef WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION) WOLFSSL_AUTHORITY_INFO_ACCESS;
    8892
     93WOLFSSL_API WOLFSSL_BASIC_CONSTRAINTS* wolfSSL_BASIC_CONSTRAINTS_new(void);
    8994WOLFSSL_API void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc);
     95WOLFSSL_API WOLFSSL_AUTHORITY_KEYID* wolfSSL_AUTHORITY_KEYID_new(void);
    9096WOLFSSL_API void wolfSSL_AUTHORITY_KEYID_free(WOLFSSL_AUTHORITY_KEYID *id);
    9197WOLFSSL_API const WOLFSSL_v3_ext_method* wolfSSL_X509V3_EXT_get(
     
    96102WOLFSSL_API int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out,
    97103        WOLFSSL_X509_EXTENSION *ext, unsigned long flag, int indent);
     104WOLFSSL_API int wolfSSL_X509V3_EXT_add_nconf(WOLFSSL_CONF *conf, WOLFSSL_X509V3_CTX *ctx,
     105        const char *section, WOLFSSL_X509 *cert);
    98106
    99107#define BASIC_CONSTRAINTS_free    wolfSSL_BASIC_CONSTRAINTS_free
     
    104112#define X509V3_EXT_get            wolfSSL_X509V3_EXT_get
    105113#define X509V3_EXT_d2i            wolfSSL_X509V3_EXT_d2i
     114#define X509V3_EXT_add_nconf      wolfSSL_X509V3_EXT_add_nconf
     115#ifndef NO_WOLFSSL_STUB
     116#define X509V3_parse_list(...)    NULL
     117#endif
    106118#define i2s_ASN1_OCTET_STRING     wolfSSL_i2s_ASN1_STRING
    107119#define X509V3_EXT_print          wolfSSL_X509V3_EXT_print
    108 #define X509V3_EXT_conf_nid wolfSSL_X509V3_EXT_conf_nid
    109 #define X509V3_set_ctx      wolfSSL_X509V3_set_ctx
    110 #define X509V3_set_ctx_nodb wolfSSL_X509V3_set_ctx_nodb
     120#define X509V3_EXT_conf_nid       wolfSSL_X509V3_EXT_conf_nid
     121#define X509V3_set_ctx            wolfSSL_X509V3_set_ctx
     122#ifndef NO_WOLFSSL_STUB
     123#define X509V3_set_nconf(...)
     124#endif
     125#define X509V3_set_ctx_test(ctx)  wolfSSL_X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
     126#define X509V3_set_ctx_nodb       wolfSSL_X509V3_set_ctx_nodb
     127#define X509v3_get_ext_count      wolfSSL_sk_num
    111128
    112129#ifdef  __cplusplus
  • 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" */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/test.h

    r457 r464  
    44#define wolfSSL_TEST_H
    55
    6 #include <stdio.h>
    7 #include <stdlib.h>
     6#ifdef FUSION_RTOS
     7    #include <fclstdio.h>
     8    #include <fclstdlib.h>
     9#else
     10    #include <stdio.h>
     11    #include <stdlib.h>
     12#endif
    813#include <assert.h>
    914#include <ctype.h>
     
    5661    #define SOCKET_T SOCKET
    5762    #define SNPRINTF _snprintf
     63    #define XSLEEP_MS(t) Sleep(t)
    5864#elif defined(WOLFSSL_MDK_ARM) || defined(WOLFSSL_KEIL_TCP_NET)
    5965    #include <string.h>
     
    7076    }
    7177    #if defined(HAVE_KEIL_RTX)
    72         #define sleep(t) os_dly_wait(t/1000+1);
     78        #define XSLEEP_MS(t)  os_dly_wait(t)
    7379    #elif defined(WOLFSSL_CMSIS_RTOS) || defined(WOLFSSL_CMSIS_RTOSv2)
    74         #define sleep(t) osDelay(t/1000+1);
     80        #define XSLEEP_MS(t)  osDelay(t)
    7581    #endif
    7682#elif defined(WOLFSSL_TIRTOS)
     
    8995    };
    9096    #define SOCKET_T int
     97    #define XSLEEP_MS(t) Task_sleep(t/1000)
    9198#elif defined(WOLFSSL_VXWORKS)
    9299    #include <hostLib.h>
     
    144151    #endif
    145152#endif
     153    #ifdef FREESCALE_MQX
     154        typedef int socklen_t ;
     155    #endif
    146156    #define SOCKET_T int
    147157    #ifndef SO_NOSIGPIPE
     
    149159    #endif
    150160    #define SNPRINTF snprintf
     161
     162    #define XSELECT_WAIT(x,y) do { \
     163        struct timeval tv = {(x),(y)}; \
     164        select(0, NULL, NULL, NULL, &tv); \
     165    } while (0)
     166    #define XSLEEP_US(u) XSELECT_WAIT(0,u)
     167    #define XSLEEP_MS(m) XSELECT_WAIT(0,(m)*1000)
    151168#endif /* USE_WINDOWS_API */
     169
     170#ifndef XSLEEP_MS
     171    #define XSLEEP_MS(t) sleep(t/1000)
     172#endif
    152173
    153174#ifdef WOLFSSL_ASYNC_CRYPT
     
    231252        #define INFINITE -1
    232253        #define WAIT_OBJECT_0 0L
    233     #elif defined(WOLFSSL_MDK_ARM)|| defined(WOLFSSL_KEIL_TCP_NET)
     254    #elif defined(WOLFSSL_MDK_ARM)|| defined(WOLFSSL_KEIL_TCP_NET) || defined(FREESCALE_MQX)
    234255        typedef unsigned int  THREAD_RETURN;
    235256        typedef int           THREAD_TYPE;
     
    287308    #define DEFAULT_MIN_RSAKEY_BITS 2048
    288309#else
     310    #ifndef DEFAULT_MIN_RSAKEY_BITS
    289311    #define DEFAULT_MIN_RSAKEY_BITS 1024
     312    #endif
    290313#endif
    291314#if !defined(NO_FILESYSTEM) && defined(WOLFSSL_MAX_STRENGTH)
    292315    #define DEFAULT_MIN_ECCKEY_BITS 256
    293316#else
     317    #ifndef DEFAULT_MIN_ECCKEY_BITS
    294318    #define DEFAULT_MIN_ECCKEY_BITS 224
     319    #endif
    295320#endif
    296321
     
    410435    ssl_callback on_result;
    411436    WOLFSSL_CTX* ctx;
     437    unsigned char isSharedCtx:1;
    412438} callback_functions;
    413439
     
    472498err_sys(const char* msg)
    473499{
    474     printf("wolfSSL error: %s\n", msg);
    475 
    476500#if !defined(__GNUC__)
    477501    /* scan-build (which pretends to be gnuc) can get confused and think the
     
    484508#endif
    485509    {
     510        printf("wolfSSL error: %s\n", msg);
     511
     512        XEXIT_T(EXIT_FAILURE);
     513    }
     514}
     515
     516static WC_INLINE
     517#if defined(WOLFSSL_FORCE_MALLOC_FAIL_TEST) || defined(WOLFSSL_ZEPHYR)
     518THREAD_RETURN
     519#else
     520WC_NORETURN void
     521#endif
     522err_sys_with_errno(const char* msg)
     523{
     524#if !defined(__GNUC__)
     525    /* scan-build (which pretends to be gnuc) can get confused and think the
     526     * msg pointer can be null even when hardcoded and then it won't exit,
     527     * making null pointer checks above the err_sys() call useless.
     528     * We could just always exit() but some compilers will complain about no
     529     * possible return, with gcc we know the attribute to handle that with
     530     * WC_NORETURN. */
     531    if (msg)
     532#endif
     533    {
     534#if defined(HAVE_STRING_H) && defined(HAVE_ERRNO_H)
     535        printf("wolfSSL error: %s: %s\n", msg, strerror(errno));
     536#else
     537        printf("wolfSSL error: %s\n", msg);
     538#endif
     539
    486540        XEXIT_T(EXIT_FAILURE);
    487541    }
     
    492546extern char* myoptarg;
    493547
     548/**
     549 *
     550 * @param argc Number of argv strings
     551 * @param argv Array of string arguments
     552 * @param optstring String containing the supported alphanumeric arguments.
     553 *                  A ':' following a character means that it requires a
     554 *                  value in myoptarg to be set. A ';' means that the
     555 *                  myoptarg is optional. myoptarg is set to "" if not
     556 *                  present.
     557 * @return Option letter in argument
     558 */
    494559static WC_INLINE int mygetopt(int argc, char** argv, const char* optstring)
    495560{
     
    541606    cp = (char*)strchr(optstring, c);
    542607
    543     if (cp == NULL || c == ':')
     608    if (cp == NULL || c == ':' || c == ';')
    544609        return '?';
    545610
     
    557622        else
    558623            return '?';
     624    }
     625    else if (*cp == ';') {
     626        myoptarg = (char*)"";
     627        if (*next != '\0') {
     628            myoptarg = next;
     629            next     = NULL;
     630        }
     631        else if (myoptind < argc) {
     632            /* Check if next argument is not a parameter argument */
     633            if (argv[myoptind] && argv[myoptind][0] != '-') {
     634                myoptarg = argv[myoptind];
     635                myoptind++;
     636            }
     637        }
    559638    }
    560639
     
    9351014
    9361015    if(WOLFSSL_SOCKET_IS_INVALID(*sockfd)) {
    937         err_sys("socket failed\n");
     1016        err_sys_with_errno("socket failed\n");
    9381017    }
    9391018
     
    9451024        int       res = setsockopt(*sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, len);
    9461025        if (res < 0)
    947             err_sys("setsockopt SO_NOSIGPIPE failed\n");
     1026            err_sys_with_errno("setsockopt SO_NOSIGPIPE failed\n");
    9481027    }
    9491028#elif defined(WOLFSSL_MDK_ARM) || defined (WOLFSSL_TIRTOS) ||\
     
    9611040        int       res = setsockopt(*sockfd, IPPROTO_TCP, TCP_NODELAY, &on, len);
    9621041        if (res < 0)
    963             err_sys("setsockopt TCP_NODELAY failed\n");
     1042            err_sys_with_errno("setsockopt TCP_NODELAY failed\n");
    9641043    }
    9651044#endif
     
    9791058    if (!udp) {
    9801059        if (connect(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
    981             err_sys("tcp connect failed");
     1060            err_sys_with_errno("tcp connect failed");
    9821061    }
    9831062}
     
    9871066{
    9881067    if (connect(*sockfd, (const struct sockaddr*)addr, addrSz) != 0)
    989         err_sys("tcp connect failed");
     1068        err_sys_with_errno("tcp connect failed");
    9901069}
    9911070
     
    10851164        res = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &on, len);
    10861165        if (res < 0)
    1087             err_sys("setsockopt SO_REUSEADDR failed\n");
    1088     }
     1166            err_sys_with_errno("setsockopt SO_REUSEADDR failed\n");
     1167    }
     1168#ifdef SO_REUSEPORT
     1169    {
     1170        int       res, on  = 1;
     1171        socklen_t len = sizeof(on);
     1172        res = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEPORT, &on, len);
     1173        if (res < 0)
     1174            err_sys_with_errno("setsockopt SO_REUSEPORT failed\n");
     1175    }
     1176#endif
    10891177#endif
    10901178
    10911179    if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
    1092         err_sys("tcp bind failed");
     1180        err_sys_with_errno("tcp bind failed");
    10931181    if (!udp) {
    10941182        #ifdef WOLFSSL_KEIL_TCP_NET
     
    10981186        #endif
    10991187        if (listen(*sockfd, SOCK_LISTEN_MAX_QUEUE) != 0)
    1100                 err_sys("tcp listen failed");
     1188                err_sys_with_errno("tcp listen failed");
    11011189    }
    11021190    #if !defined(USE_WINDOWS_API) && !defined(WOLFSSL_TIRTOS) \
     
    11551243        res = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &on, len);
    11561244        if (res < 0)
    1157             err_sys("setsockopt SO_REUSEADDR failed\n");
    1158     }
     1245            err_sys_with_errno("setsockopt SO_REUSEADDR failed\n");
     1246    }
     1247#ifdef SO_REUSEPORT
     1248    {
     1249        int       res, on  = 1;
     1250        socklen_t len = sizeof(on);
     1251        res = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEPORT, &on, len);
     1252        if (res < 0)
     1253            err_sys_with_errno("setsockopt SO_REUSEPORT failed\n");
     1254    }
     1255#endif
    11591256#endif
    11601257
    11611258    if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
    1162         err_sys("tcp bind failed");
     1259        err_sys_with_errno("tcp bind failed");
    11631260
    11641261    #if (defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)) && !defined(WOLFSSL_TIRTOS)
     
    12011298                              int udp, int sctp, int ready_file, int do_listen)
    12021299{
    1203     SOCKADDR_IN_T client;
    1204     socklen_t client_len = sizeof(client);
     1300    SOCKADDR_IN_T client_addr;
     1301    socklen_t client_len = sizeof(client_addr);
    12051302    tcp_ready* ready = NULL;
    12061303
     
    12591356    }
    12601357
    1261     *clientfd = accept(*sockfd, (struct sockaddr*)&client,
     1358    *clientfd = accept(*sockfd, (struct sockaddr*)&client_addr,
    12621359                      (ACCEPT_THIRD_T)&client_len);
    12631360    if(WOLFSSL_SOCKET_IS_INVALID(*clientfd)) {
    1264         err_sys("tcp accept failed");
     1361        err_sys_with_errno("tcp accept failed");
    12651362    }
    12661363}
     
    12731370        int ret = ioctlsocket(*sockfd, FIONBIO, &blocking);
    12741371        if (ret == SOCKET_ERROR)
    1275             err_sys("ioctlsocket failed");
     1372            err_sys_with_errno("ioctlsocket failed");
    12761373    #elif defined(WOLFSSL_MDK_ARM) || defined(WOLFSSL_KEIL_TCP_NET) \
    12771374        || defined (WOLFSSL_TIRTOS)|| defined(WOLFSSL_VXWORKS) \
     
    12811378        int flags = fcntl(*sockfd, F_GETFL, 0);
    12821379        if (flags < 0)
    1283             err_sys("fcntl get failed");
     1380            err_sys_with_errno("fcntl get failed");
    12841381        flags = fcntl(*sockfd, F_SETFL, flags | O_NONBLOCK);
    12851382        if (flags < 0)
    1286             err_sys("fcntl set failed");
     1383            err_sys_with_errno("fcntl set failed");
    12871384    #endif
    12881385}
     
    13031400
    13041401    /* see internal.h MAX_PSK_ID_LEN for PSK identity limit */
    1305     strncpy(identity, kIdentityStr, id_max_len);
     1402    XSTRNCPY(identity, kIdentityStr, id_max_len);
    13061403
    13071404    if (wolfSSL_GetVersion(ssl) < WOLFSSL_TLSV1_3) {
     
    13371434
    13381435    /* see internal.h MAX_PSK_ID_LEN for PSK identity limit */
    1339     if (strncmp(identity, kIdentityStr, strlen(kIdentityStr)) != 0)
     1436    if (XSTRNCMP(identity, kIdentityStr, XSTRLEN(kIdentityStr)) != 0)
    13401437        return 0;
    13411438
     
    13711468    int i;
    13721469    int b = 0x01;
     1470    const char* userCipher = (const char*)wolfSSL_get_psk_callback_ctx(ssl);
    13731471
    13741472    (void)ssl;
     
    13771475
    13781476    /* see internal.h MAX_PSK_ID_LEN for PSK identity limit */
    1379     strncpy(identity, kIdentityStr, id_max_len);
     1477    XSTRNCPY(identity, kIdentityStr, id_max_len);
    13801478
    13811479    for (i = 0; i < 32; i++, b += 0x22) {
     
    13851483    }
    13861484
    1387     *ciphersuite = "TLS13-AES128-GCM-SHA256";
     1485    *ciphersuite = userCipher ? userCipher : "TLS13-AES128-GCM-SHA256";
    13881486
    13891487    return 32;   /* length of key in octets or 0 for error */
     
    13971495    int i;
    13981496    int b = 0x01;
     1497    const char* userCipher = (const char*)wolfSSL_get_psk_callback_ctx(ssl);
    13991498
    14001499    (void)ssl;
     
    14021501
    14031502    /* see internal.h MAX_PSK_ID_LEN for PSK identity limit */
    1404     if (strncmp(identity, kIdentityStr, strlen(kIdentityStr)) != 0)
     1503    if (XSTRNCMP(identity, kIdentityStr, XSTRLEN(kIdentityStr)) != 0)
    14051504        return 0;
    14061505
     
    14111510    }
    14121511
    1413     *ciphersuite = "TLS13-AES128-GCM-SHA256";
     1512    *ciphersuite = userCipher ? userCipher : "TLS13-AES128-GCM-SHA256";
    14141513
    14151514    return 32;   /* length of key in octets or 0 for error */
    14161515}
    14171516
    1418 #endif /* NO_PSK */
     1517#endif /* !NO_PSK */
    14191518
    14201519
     
    14991598static WC_INLINE void OCSPRespFreeCb(void* ioCtx, unsigned char* response)
    15001599{
    1501     (void)ioCtx;
    1502     (void)response;
     1600    return EmbedOcspRespFree(ioCtx, response);
    15031601}
    15041602#endif
     
    15131611        int ret;
    15141612        long int fileSz;
    1515         XFILE file;
     1613        XFILE lFile;
    15161614
    15171615        if (fname == NULL || buf == NULL || bufLen == NULL)
     
    15231621
    15241622        /* open file (read-only binary) */
    1525         file = XFOPEN(fname, "rb");
    1526         if (!file) {
     1623        lFile = XFOPEN(fname, "rb");
     1624        if (!lFile) {
    15271625            printf("Error loading %s\n", fname);
    15281626            return BAD_PATH_ERROR;
    15291627        }
    15301628
    1531         fseek(file, 0, SEEK_END);
    1532         fileSz = (int)ftell(file);
    1533         rewind(file);
     1629        fseek(lFile, 0, SEEK_END);
     1630        fileSz = (int)ftell(lFile);
     1631        rewind(lFile);
    15341632        if (fileSz  > 0) {
    15351633            *bufLen = (size_t)fileSz;
     
    15401638            }
    15411639            else {
    1542                 size_t readLen = fread(*buf, *bufLen, 1, file);
     1640                size_t readLen = fread(*buf, *bufLen, 1, lFile);
    15431641
    15441642                /* check response code */
     
    15491647            ret = BUFFER_E;
    15501648        }
    1551         fclose(file);
     1649        fclose(lFile);
    15521650
    15531651        return ret;
     
    16761774#endif /* !NO_CERTS */
    16771775
    1678 static int myVerifyFail = 0;
     1776enum {
     1777    VERIFY_OVERRIDE_ERROR,
     1778    VERIFY_FORCE_FAIL,
     1779    VERIFY_USE_PREVERFIY,
     1780    VERIFY_OVERRIDE_DATE_ERR,
     1781};
     1782static THREAD_LS_T int myVerifyAction = VERIFY_OVERRIDE_ERROR;
    16791783
    16801784/* The verify callback is called for every certificate only when
     
    17281832        XFREE(issuer,  0, DYNAMIC_TYPE_OPENSSL);
    17291833#if defined(SHOW_CERTS) && !defined(NO_FILESYSTEM)
    1730 /* avoid printing duplicate certs */
     1834        /* avoid printing duplicate certs */
    17311835        if (store->depth == 1) {
    17321836            /* retrieve x509 certs and display them on stdout */
     
    17631867
    17641868    /* Testing forced fail case by return zero */
    1765     if (myVerifyFail) {
     1869    if (myVerifyAction == VERIFY_FORCE_FAIL) {
    17661870        return 0; /* test failure case */
    17671871    }
    17681872
     1873    if (myVerifyAction == VERIFY_OVERRIDE_DATE_ERR &&
     1874        (store->error == ASN_BEFORE_DATE_E || store->error == ASN_AFTER_DATE_E)) {
     1875        printf("Overriding cert date error as example for bad clock testing\n");
     1876        return 1;
     1877    }
     1878
    17691879    /* If error indicate we are overriding it for testing purposes */
    1770     if (store->error != 0) {
     1880    if (store->error != 0 && myVerifyAction == VERIFY_OVERRIDE_ERROR) {
    17711881        printf("\tAllowing failed certificate check, testing only "
    17721882            "(shouldn't do this in production)\n");
     
    17741884
    17751885    /* A non-zero return code indicates failure override */
    1776     return 1;
    1777 }
    1778 
    1779 
    1780 static WC_INLINE int myDateCb(int preverify, WOLFSSL_X509_STORE_CTX* store)
    1781 {
    1782     char buffer[WOLFSSL_MAX_ERROR_SZ];
    1783     (void)preverify;
    1784 
    1785     printf("In verification callback, error = %d, %s\n", store->error,
    1786                                  wolfSSL_ERR_error_string(store->error, buffer));
    1787     printf("Subject's domain name is %s\n", store->domain);
    1788 
    1789     if (store->error == ASN_BEFORE_DATE_E || store->error == ASN_AFTER_DATE_E) {
    1790         printf("Overriding cert date error as example for bad clock testing\n");
    1791         return 1;
    1792     }
    1793     printf("Cert error is not date error, not overriding\n");
    1794 
    1795     return 0;
     1886    return (myVerifyAction == VERIFY_OVERRIDE_ERROR) ? 1 : preverify;
    17961887}
    17971888
     
    19172008        #if !defined(NO_FILESYSTEM) || defined(FORCE_BUFFER_TEST)
    19182009            int depth, res;
    1919             XFILE file;
     2010            XFILE keyFile;
    19202011            for(depth = 0; depth <= MAX_WOLF_ROOT_DEPTH; depth++) {
    1921                 file = XFOPEN(ntruKeyFile, "rb");
    1922                 if (file != NULL) {
    1923                     fclose(file);
     2012                keyFile = XFOPEN(ntruKeyFile, "rb");
     2013                if (keyFile != NULL) {
     2014                    fclose(keyFile);
    19242015                    return depth;
    19252016                }
     
    19482039#define STACK_CHECK_VAL 0x01
    19492040
     2041struct stack_size_debug_context {
     2042  unsigned char *myStack;
     2043  size_t stackSize;
     2044#ifdef HAVE_STACK_SIZE_VERBOSE
     2045  size_t *stackSizeHWM_ptr;
     2046  thread_func fn;
     2047  void *args;
     2048#endif
     2049};
     2050
     2051#ifdef HAVE_STACK_SIZE_VERBOSE
     2052
     2053/* per-subtest stack high water mark tracking.
     2054 *
     2055 * enable with
     2056 *
     2057 * ./configure --enable-stacksize=verbose [...]
     2058 */
     2059
     2060static THREAD_RETURN debug_stack_size_verbose_shim(struct stack_size_debug_context *shim_args) {
     2061  StackSizeCheck_myStack = shim_args->myStack;
     2062  StackSizeCheck_stackSize = shim_args->stackSize;
     2063  StackSizeCheck_stackSizeHWM_ptr = shim_args->stackSizeHWM_ptr;
     2064  return shim_args->fn(shim_args->args);
     2065}
     2066
     2067static WC_INLINE int StackSizeSetOffset(const char *funcname, void *p)
     2068{
     2069    if (StackSizeCheck_myStack == NULL)
     2070        return -BAD_FUNC_ARG;
     2071
     2072    StackSizeCheck_stackOffsetPointer = p;
     2073
     2074    printf("setting stack relative offset reference mark in %s to +%lu\n",
     2075        funcname, (unsigned long)((char*)(StackSizeCheck_myStack +
     2076                                  StackSizeCheck_stackSize) - (char *)p));
     2077
     2078    return 0;
     2079}
     2080
     2081static WC_INLINE ssize_t StackSizeHWM(void)
     2082{
     2083    size_t i;
     2084    ssize_t used;
     2085
     2086    if (StackSizeCheck_myStack == NULL)
     2087        return -BAD_FUNC_ARG;
     2088
     2089    for (i = 0; i < StackSizeCheck_stackSize; i++) {
     2090        if (StackSizeCheck_myStack[i] != STACK_CHECK_VAL) {
     2091            break;
     2092        }
     2093    }
     2094
     2095    used = StackSizeCheck_stackSize - i;
     2096    if ((ssize_t)*StackSizeCheck_stackSizeHWM_ptr < used)
     2097      *StackSizeCheck_stackSizeHWM_ptr = used;
     2098
     2099    return used;
     2100}
     2101
     2102static WC_INLINE ssize_t StackSizeHWM_OffsetCorrected(void)
     2103{
     2104    ssize_t used = StackSizeHWM();
     2105    if (used < 0)
     2106        return used;
     2107    if (StackSizeCheck_stackOffsetPointer)
     2108        used -= (ssize_t)(((char *)StackSizeCheck_myStack + StackSizeCheck_stackSize) - (char *)StackSizeCheck_stackOffsetPointer);
     2109    return used;
     2110}
     2111
     2112static
     2113#ifdef __GNUC__
     2114__attribute__((unused)) __attribute__((noinline))
     2115#endif
     2116int StackSizeHWMReset(void)
     2117{
     2118    volatile ssize_t i;
     2119
     2120    if (StackSizeCheck_myStack == NULL)
     2121        return -BAD_FUNC_ARG;
     2122
     2123    for (i = (ssize_t)((char *)&i - (char *)StackSizeCheck_myStack) - (ssize_t)sizeof i - 1; i >= 0; --i)
     2124    {
     2125        StackSizeCheck_myStack[i] = STACK_CHECK_VAL;
     2126    }
     2127
     2128    return 0;
     2129}
     2130
     2131#define STACK_SIZE_CHECKPOINT(...) ({  \
     2132    ssize_t HWM = StackSizeHWM_OffsetCorrected();    \
     2133    __VA_ARGS__;                                     \
     2134    printf("    relative stack peak usage = %ld bytes\n", HWM);  \
     2135    StackSizeHWMReset();                             \
     2136    })
     2137
     2138#define STACK_SIZE_CHECKPOINT_WITH_MAX_CHECK(max, ...) ({  \
     2139    ssize_t HWM = StackSizeHWM_OffsetCorrected();    \
     2140    int _ret;                                        \
     2141    __VA_ARGS__;                                     \
     2142    printf("    relative stack peak usage = %ld bytes\n", HWM);  \
     2143    _ret = StackSizeHWMReset();                      \
     2144    if ((max >= 0) && (HWM > (ssize_t)(max))) {      \
     2145        printf("    relative stack usage at %s L%d exceeds designated max %ld bytes.\n", __FILE__, __LINE__, (ssize_t)(max)); \
     2146        _ret = -1;                                   \
     2147    }                                                \
     2148    _ret;                                            \
     2149    })
     2150
     2151
     2152#ifdef __GNUC__
     2153#define STACK_SIZE_INIT() (void)StackSizeSetOffset(__FUNCTION__, __builtin_frame_address(0))
     2154#endif
     2155
     2156#endif /* HAVE_STACK_SIZE_VERBOSE */
     2157
    19502158static WC_INLINE int StackSizeCheck(func_args* args, thread_func tf)
    19512159{
    1952     int            ret, i, used;
     2160    size_t         i;
     2161    int            ret;
    19532162    void*          status;
    19542163    unsigned char* myStack = NULL;
    1955     int            stackSize = 1024*152;
     2164    size_t         stackSize = 1024*1024;
    19562165    pthread_attr_t myAttr;
    19572166    pthread_t      threadId;
     2167#ifdef HAVE_STACK_SIZE_VERBOSE
     2168    struct stack_size_debug_context shim_args;
     2169#endif
    19582170
    19592171#ifdef PTHREAD_STACK_MIN
     
    19642176    ret = posix_memalign((void**)&myStack, sysconf(_SC_PAGESIZE), stackSize);
    19652177    if (ret != 0 || myStack == NULL)
    1966         err_sys("posix_memalign failed\n");
     2178        err_sys_with_errno("posix_memalign failed\n");
    19672179
    19682180    XMEMSET(myStack, STACK_CHECK_VAL, stackSize);
     
    19762188        err_sys("attr_setstackaddr failed");
    19772189
     2190#ifdef HAVE_STACK_SIZE_VERBOSE
     2191    StackSizeCheck_stackSizeHWM = 0;
     2192    shim_args.myStack = myStack;
     2193    shim_args.stackSize = stackSize;
     2194    shim_args.stackSizeHWM_ptr = &StackSizeCheck_stackSizeHWM;
     2195    shim_args.fn = tf;
     2196    shim_args.args = args;
     2197    ret = pthread_create(&threadId, &myAttr, (thread_func)debug_stack_size_verbose_shim, (void *)&shim_args);
     2198#else
    19782199    ret = pthread_create(&threadId, &myAttr, tf, args);
     2200#endif
    19792201    if (ret != 0) {
    19802202        perror("pthread_create failed");
     
    19932215
    19942216    free(myStack);
    1995 
    1996     used = stackSize - i;
    1997     printf("stack used = %d\n", used);
     2217#ifdef HAVE_STACK_SIZE_VERBOSE
     2218    printf("stack used = %lu\n", StackSizeCheck_stackSizeHWM > (stackSize - i)
     2219        ? (unsigned long)StackSizeCheck_stackSizeHWM
     2220        : (unsigned long)(stackSize - i));
     2221#else
     2222    {
     2223      size_t used = stackSize - i;
     2224      printf("stack used = %lu\n", (unsigned long)used);
     2225    }
     2226#endif
    19982227
    19992228    return (int)((size_t)status);
    20002229}
    20012230
     2231static WC_INLINE int StackSizeCheck_launch(func_args* args, thread_func tf, pthread_t *threadId, void **stack_context)
     2232{
     2233    int ret;
     2234    unsigned char* myStack = NULL;
     2235    size_t stackSize = 1024*1024;
     2236    pthread_attr_t myAttr;
     2237
     2238#ifdef PTHREAD_STACK_MIN
     2239    if (stackSize < PTHREAD_STACK_MIN)
     2240        stackSize = PTHREAD_STACK_MIN;
     2241#endif
     2242
     2243    struct stack_size_debug_context *shim_args = (struct stack_size_debug_context *)malloc(sizeof *shim_args);
     2244    if (! shim_args) {
     2245        perror("malloc");
     2246        exit(EXIT_FAILURE);
     2247    }
     2248
     2249    ret = posix_memalign((void**)&myStack, sysconf(_SC_PAGESIZE), stackSize);
     2250    if (ret != 0 || myStack == NULL)
     2251        err_sys_with_errno("posix_memalign failed\n");
     2252
     2253    XMEMSET(myStack, STACK_CHECK_VAL, stackSize);
     2254
     2255    ret = pthread_attr_init(&myAttr);
     2256    if (ret != 0)
     2257        err_sys("attr_init failed");
     2258
     2259    ret = pthread_attr_setstack(&myAttr, myStack, stackSize);
     2260    if (ret != 0)
     2261        err_sys("attr_setstackaddr failed");
     2262
     2263    shim_args->myStack = myStack;
     2264    shim_args->stackSize = stackSize;
     2265#ifdef HAVE_STACK_SIZE_VERBOSE
     2266    shim_args->stackSizeHWM_ptr = &StackSizeCheck_stackSizeHWM;
     2267    shim_args->fn = tf;
     2268    shim_args->args = args;
     2269    ret = pthread_create(threadId, &myAttr, (thread_func)debug_stack_size_verbose_shim, (void *)shim_args);
     2270#else
     2271    ret = pthread_create(threadId, &myAttr, tf, args);
     2272#endif
     2273    if (ret != 0) {
     2274        fprintf(stderr,"pthread_create failed: %s",strerror(ret));
     2275        exit(EXIT_FAILURE);
     2276    }
     2277
     2278    *stack_context = (void *)shim_args;
     2279
     2280    return 0;
     2281}
     2282
     2283static WC_INLINE int StackSizeCheck_reap(pthread_t threadId, void *stack_context)
     2284{
     2285    struct stack_size_debug_context *shim_args = (struct stack_size_debug_context *)stack_context;
     2286    size_t i;
     2287    void *status;
     2288    int ret = pthread_join(threadId, &status);
     2289    if (ret != 0)
     2290        err_sys("pthread_join failed");
     2291
     2292    for (i = 0; i < shim_args->stackSize; i++) {
     2293        if (shim_args->myStack[i] != STACK_CHECK_VAL) {
     2294            break;
     2295        }
     2296    }
     2297
     2298    free(shim_args->myStack);
     2299#ifdef HAVE_STACK_SIZE_VERBOSE
     2300    printf("stack used = %lu\n",
     2301        *shim_args->stackSizeHWM_ptr > (shim_args->stackSize - i)
     2302        ? (unsigned long)*shim_args->stackSizeHWM_ptr
     2303        : (unsigned long)(shim_args->stackSize - i));
     2304#else
     2305    {
     2306      size_t used = shim_args->stackSize - i;
     2307      printf("stack used = %lu\n", (unsigned long)used);
     2308    }
     2309#endif
     2310    free(shim_args);
     2311
     2312    return (int)((size_t)status);
     2313}
     2314
    20022315
    20032316#endif /* HAVE_STACK_SIZE */
    20042317
     2318#ifndef STACK_SIZE_CHECKPOINT
     2319#define STACK_SIZE_CHECKPOINT(...) (__VA_ARGS__)
     2320#endif
     2321#ifndef STACK_SIZE_INIT
     2322#define STACK_SIZE_INIT()
     2323#endif
    20052324
    20062325#ifdef STACK_TRAP
     
    20212340    struct rlimit  rl;
    20222341    if (getrlimit(RLIMIT_STACK, &rl) != 0)
    2023         err_sys("getrlimit failed");
     2342        err_sys_with_errno("getrlimit failed");
    20242343    printf("rlim_cur = %llu\n", rl.rlim_cur);
    20252344    rl.rlim_cur = 1024*21;  /* adjust trap size here */
    2026     if (setrlimit(RLIMIT_STACK, &rl) != 0) {
    2027         perror("setrlimit");
    2028         err_sys("setrlimit failed");
    2029     }
     2345    if (setrlimit(RLIMIT_STACK, &rl) != 0)
     2346        err_sys_with_errno("setrlimit failed");
    20302347}
    20312348
     
    23902707    encCtx = (AtomicEncCtx*)malloc(sizeof(AtomicEncCtx));
    23912708    if (encCtx == NULL)
    2392         err_sys("AtomicEncCtx malloc failed");
     2709        err_sys_with_errno("AtomicEncCtx malloc failed");
    23932710    XMEMSET(encCtx, 0, sizeof(AtomicEncCtx));
    23942711
     
    23962713    if (decCtx == NULL) {
    23972714        free(encCtx);
    2398         err_sys("AtomicDecCtx malloc failed");
     2715        err_sys_with_errno("AtomicDecCtx malloc failed");
    23992716    }
    24002717    XMEMSET(decCtx, 0, sizeof(AtomicDecCtx));
     
    26652982    }
    26662983
     2984#if defined(ECC_TIMING_RESISTANT) && !defined(HAVE_FIPS) && \
     2985                                                         !defined(HAVE_SELFTEST)
     2986    if (ret == 0) {
     2987        ret = wc_ecc_set_rng(privKey, wolfSSL_GetRNG(ssl));
     2988    }
     2989#endif
     2990
    26672991    /* generate shared secret and return it */
    26682992    if (ret == 0) {
     
    28743198        ret = wc_Ed448PrivateKeyDecode(keyBuf, &idx, &myKey, keySz);
    28753199        if (ret == 0)
    2876             ret = wc_ed448_sign_msg(in, inSz, out, outSz, &myKey);
     3200            ret = wc_ed448_sign_msg(in, inSz, out, outSz, &myKey, NULL, 0);
    28773201        wc_ed448_free(&myKey);
    28783202    }
     
    29063230        ret = wc_ed448_import_public(key, keySz, &myKey);
    29073231        if (ret == 0) {
    2908             ret = wc_ed448_verify_msg(sig, sigSz, msg, msgSz, result, &myKey);
     3232            ret = wc_ed448_verify_msg(sig, sigSz, msg, msgSz, result, &myKey,
     3233                                                                       NULL, 0);
    29093234        }
    29103235        wc_ed448_free(&myKey);
     
    34993824#endif /* HAVE_PK_CALLBACKS */
    35003825
    3501 
    3502 
     3826static WC_INLINE int SimulateWantWriteIOSendCb(WOLFSSL *ssl, char *buf, int sz, void *ctx)
     3827{
     3828    static int wantWriteFlag = 1;
     3829
     3830    int sent;
     3831    int sd = *(int*)ctx;
     3832
     3833    (void)ssl;
     3834
     3835    if (!wantWriteFlag)
     3836    {
     3837        wantWriteFlag = 1;
     3838
     3839        sent = wolfIO_Send(sd, buf, sz, 0);
     3840        if (sent < 0) {
     3841            int err = errno;
     3842
     3843            if (err == SOCKET_EWOULDBLOCK || err == SOCKET_EAGAIN) {
     3844                return WOLFSSL_CBIO_ERR_WANT_WRITE;
     3845            }
     3846            else if (err == SOCKET_ECONNRESET) {
     3847                return WOLFSSL_CBIO_ERR_CONN_RST;
     3848            }
     3849            else if (err == SOCKET_EINTR) {
     3850                return WOLFSSL_CBIO_ERR_ISR;
     3851            }
     3852            else if (err == SOCKET_EPIPE) {
     3853                return WOLFSSL_CBIO_ERR_CONN_CLOSE;
     3854            }
     3855            else {
     3856                return WOLFSSL_CBIO_ERR_GENERAL;
     3857            }
     3858        }
     3859
     3860        return sent;
     3861    }
     3862    else
     3863    {
     3864        wantWriteFlag = 0;
     3865        return WOLFSSL_CBIO_ERR_WANT_WRITE;
     3866    }
     3867}
    35033868
    35043869#if defined(__hpux__) || defined(__MINGW32__) || defined (WOLFSSL_TIRTOS) \
     
    35673932
    35683933
    3569 #if defined(HAVE_SESSION_TICKET) && defined(HAVE_CHACHA) && \
    3570                                     defined(HAVE_POLY1305)
    3571 
     3934#if defined(HAVE_SESSION_TICKET) && defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && \
     3935    ((defined(HAVE_CHACHA) && defined(HAVE_POLY1305)) || \
     3936      defined(HAVE_AESGCM))
     3937
     3938#if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    35723939    #include <wolfssl/wolfcrypt/chacha20_poly1305.h>
     3940    #define WOLFSSL_TICKET_KEY_SZ CHACHA20_POLY1305_AEAD_KEYSIZE
     3941#elif defined(HAVE_AESGCM)
     3942    #include <wolfssl/wolfcrypt/aes.h>
     3943    #include <wolfssl/wolfcrypt/wc_encrypt.h> /* AES IV sizes in FIPS mode */
     3944    #define WOLFSSL_TICKET_KEY_SZ AES_256_KEY_SIZE
     3945#endif
    35733946
    35743947    typedef struct key_ctx {
    3575         byte name[WOLFSSL_TICKET_NAME_SZ];        /* name for this context */
    3576         byte key[CHACHA20_POLY1305_AEAD_KEYSIZE]; /* cipher key */
     3948        byte name[WOLFSSL_TICKET_NAME_SZ]; /* name for this context */
     3949        byte key[WOLFSSL_TICKET_KEY_SZ];  /* cipher key */
    35773950    } key_ctx;
    35783951
     
    36063979                             void* userCtx)
    36073980    {
    3608         (void)ssl;
    3609         (void)userCtx;
    3610 
    36113981        int ret;
    36123982        word16 sLen = XHTONS(inLen);
     
    36143984        int  aadSz = WOLFSSL_TICKET_NAME_SZ + WOLFSSL_TICKET_IV_SZ + 2;
    36153985        byte* tmp = aad;
    3616 
     3986    #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
     3987        /* chahca20/poly1305 */
     3988    #elif defined(HAVE_AESGCM)
     3989        Aes aes;
     3990    #endif
     3991
     3992        (void)ssl;
     3993        (void)userCtx;
     3994
     3995        /* encrypt */
    36173996        if (enc) {
    36183997            XMEMCPY(key_name, myKey_ctx.name, WOLFSSL_TICKET_NAME_SZ);
     
    36264005            XMEMCPY(tmp, iv, WOLFSSL_TICKET_IV_SZ);
    36274006            tmp += WOLFSSL_TICKET_IV_SZ;
    3628             XMEMCPY(tmp, &sLen, 2);
    3629 
     4007            XMEMCPY(tmp, &sLen, sizeof(sLen));
     4008
     4009        #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    36304010            ret = wc_ChaCha20Poly1305_Encrypt(myKey_ctx.key, iv,
    36314011                                              aad, aadSz,
     
    36334013                                              ticket,
    36344014                                              mac);
     4015        #elif defined(HAVE_AESGCM)
     4016            ret = wc_AesInit(&aes, NULL, INVALID_DEVID);
     4017            if (ret != 0) return WOLFSSL_TICKET_RET_REJECT;
     4018
     4019            ret = wc_AesGcmSetKey(&aes, myKey_ctx.key, sizeof(myKey_ctx.key));
     4020            if (ret == 0) {
     4021                ret = wc_AesGcmEncrypt(&aes, ticket, ticket, inLen,
     4022                                       iv, GCM_NONCE_MID_SZ, mac, AES_BLOCK_SIZE,
     4023                                       aad, aadSz);
     4024            }
     4025            wc_AesFree(&aes);
     4026        #endif
     4027           
    36354028            if (ret != 0) return WOLFSSL_TICKET_RET_REJECT;
    36364029            *outLen = inLen;  /* no padding in this mode */
    3637         } else {
    3638             /* decrypt */
    3639 
     4030        }
     4031        /* decrypt */
     4032        else {
    36404033            /* see if we know this key */
    36414034            if (XMEMCMP(key_name, myKey_ctx.name, WOLFSSL_TICKET_NAME_SZ) != 0){
    3642                 printf("client presented unknown ticket key name ");
     4035                printf("client presented unknown ticket key name %s\n", key_name);
    36434036                return WOLFSSL_TICKET_RET_FATAL;
    36444037            }
     
    36494042            XMEMCPY(tmp, iv, WOLFSSL_TICKET_IV_SZ);
    36504043            tmp += WOLFSSL_TICKET_IV_SZ;
    3651             XMEMCPY(tmp, &sLen, 2);
    3652 
     4044            XMEMCPY(tmp, &sLen, sizeof(sLen));
     4045
     4046        #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305)
    36534047            ret = wc_ChaCha20Poly1305_Decrypt(myKey_ctx.key, iv,
    36544048                                              aad, aadSz,
     
    36564050                                              mac,
    36574051                                              ticket);
     4052        #elif defined(HAVE_AESGCM)
     4053            ret = wc_AesInit(&aes, NULL, INVALID_DEVID);
     4054            if (ret != 0) return WOLFSSL_TICKET_RET_REJECT;
     4055
     4056            ret = wc_AesGcmSetKey(&aes, myKey_ctx.key, sizeof(myKey_ctx.key));
     4057            if (ret == 0) {
     4058                ret = wc_AesGcmDecrypt(&aes, ticket, ticket, inLen,
     4059                                        iv, GCM_NONCE_MID_SZ, mac, AES_BLOCK_SIZE,
     4060                                        aad, aadSz);
     4061            }
     4062            wc_AesFree(&aes);
     4063        #endif
     4064
    36584065            if (ret != 0) return WOLFSSL_TICKET_RET_REJECT;
    36594066            *outLen = inLen;  /* no padding in this mode */
     
    36634070    }
    36644071
    3665 #endif  /* HAVE_SESSION_TICKET && CHACHA20 && POLY1305 */
     4072#endif /* HAVE_SESSION_TICKET && ((HAVE_CHACHA && HAVE_POLY1305) || HAVE_AESGCM) */
     4073
    36664074
    36674075static WC_INLINE word16 GetRandomPort(void)
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/version.h

    r457 r464  
    2929#endif
    3030
    31 #define LIBWOLFSSL_VERSION_STRING "4.4.0"
    32 #define LIBWOLFSSL_VERSION_HEX 0x04004000
     31#define LIBWOLFSSL_VERSION_STRING "4.7.0"
     32#define LIBWOLFSSL_VERSION_HEX 0x04007000
    3333
    3434#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/aes.h

    r457 r464  
    2323    \file wolfssl/wolfcrypt/aes.h
    2424*/
    25 
    26 
     25/*
     26
     27DESCRIPTION
     28This library provides the interfaces to the Advanced Encryption Standard (AES)
     29for encrypting and decrypting data. AES is the standard known for a symmetric
     30block cipher mechanism that uses n-bit binary string parameter key with 128-bits,
     31192-bits, and 256-bits of key sizes.
     32
     33*/
    2734#ifndef WOLF_CRYPT_AES_H
    2835#define WOLF_CRYPT_AES_H
     
    5663#endif
    5764
    58 #ifdef WOLFSSL_AESNI
    59 
    60 #include <wmmintrin.h>
    61 #include <emmintrin.h>
    62 #include <smmintrin.h>
    63 
    64 #endif /* WOLFSSL_AESNI */
    65 
     65#ifdef WOLFSSL_IMXRT_DCP
     66    #include "fsl_dcp.h"
     67#endif
    6668
    6769#ifdef WOLFSSL_XILINX_CRYPT
     
    7779#include <wolfssl/wolfcrypt/port/devcrypto/wc_devcrypto.h>
    7880#endif
     81
     82#ifdef WOLFSSL_SILABS_SE_ACCEL
     83    #include <wolfssl/wolfcrypt/port/silabs/silabs_aes.h>
     84#endif
     85
    7986
    8087#if defined(HAVE_AESGCM) && !defined(WC_NO_RNG)
     
    142149
    143150#ifdef HAVE_PKCS11
    144     AES_MAX_ID_LEN   = 32,
     151    AES_MAX_ID_LEN      = 32,
     152    AES_MAX_LABEL_LEN   = 32,
    145153#endif
    146154};
     
    170178    /* key-based fast multiplication table. */
    171179    ALIGN16 byte M0[256][AES_BLOCK_SIZE];
     180#elif defined(GCM_TABLE_4BIT)
     181    #if defined(BIG_ENDIAN_ORDER) || defined(WC_16BIT_CPU)
     182        ALIGN16 byte M0[16][AES_BLOCK_SIZE];
     183    #else
     184        ALIGN16 byte M0[32][AES_BLOCK_SIZE];
     185    #endif
    172186#endif /* GCM_TABLE */
    173187#ifdef HAVE_CAVIUM_OCTEON_SYNC
     
    185199    byte id[AES_MAX_ID_LEN];
    186200    int  idLen;
     201    char label[AES_MAX_LABEL_LEN];
     202    int  labelLen;
    187203#endif
    188204#ifdef WOLFSSL_ASYNC_CRYPT
     
    227243    defined(WOLFSSL_RENESAS_TSIP_TLS_AES_CRYPT)
    228244    TSIP_AES_CTX ctx;
     245#endif
     246#if defined(WOLFSSL_IMXRT_DCP)
     247    dcp_handle_t handle;
     248#endif
     249#if defined(WOLFSSL_SILABS_SE_ACCEL)
     250    silabs_aes_t ctx;
    229251#endif
    230252    void*  heap; /* memory hint to use */
     
    370392#endif /* HAVE_AESGCM */
    371393#ifdef HAVE_AESCCM
     394 WOLFSSL_LOCAL int wc_AesCcmCheckTagSize(int sz);
    372395 WOLFSSL_API int  wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz);
    373396 WOLFSSL_API int  wc_AesCcmEncrypt(Aes* aes, byte* out,
     
    426449WOLFSSL_API int  wc_AesInit_Id(Aes* aes, unsigned char* id, int len, void* heap,
    427450        int devId);
     451WOLFSSL_API int  wc_AesInit_Label(Aes* aes, const char* label, void* heap,
     452        int devId);
    428453#endif
    429454WOLFSSL_API void wc_AesFree(Aes* aes);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/asn.h

    r457 r464  
    2424*/
    2525
     26/*
     27
     28DESCRIPTION
     29This library provides the interface to Abstract Syntax Notation One (ASN.1) objects.
     30ASN.1 is a standard interface description language for defining data structures
     31that can be serialized and deserialized in a cross-platform way.
     32
     33*/
    2634#ifndef WOLF_CRYPT_ASN_H
    2735#define WOLF_CRYPT_ASN_H
     
    93101    ASN_SET               = 0x11,
    94102    ASN_PRINTABLE_STRING  = 0x13,
     103    ASN_IA5_STRING        = 0x16,
    95104    ASN_UTC_TIME          = 0x17,
    96105    ASN_OTHER_TYPE        = 0x00,
     
    134143    ASN_DOMAIN_COMPONENT = 0x19  /* DC */
    135144};
     145
     146/* This is the size of the smallest possible PEM header and footer */
     147extern const int pem_struct_min_sz;
    136148
    137149#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
     
    195207    NID_sha384 = 673,
    196208    NID_sha512 = 674,
     209    NID_pkcs9_challengePassword = 54,
    197210    NID_hw_name_oid = 73,
    198211    NID_id_pkix_OCSP_basic = 74,
     
    221234    NID_tlsfeature = 1020,             /* id-pe 24 */
    222235    NID_commonName = 0x03,             /* matches ASN_COMMON_NAME in asn.h */
     236    NID_buildingName = 1494,
    223237
    224238
     
    234248    NID_businessCategory = ASN_BUS_CAT,
    235249    NID_domainComponent = ASN_DOMAIN_COMPONENT,
     250    NID_userId = 458,
    236251    NID_emailAddress = 0x30,           /* emailAddress */
    237252    NID_id_on_dnsSRV = 82,             /* 1.3.6.1.5.5.7.8.7 */
     
    292307    RSA_INTS            =   8,     /* RSA ints in private key */
    293308    DSA_INTS            =   5,     /* DSA ints in private key */
    294     MIN_DATE_SIZE       =  13,
     309    MIN_DATE_SIZE       =  12,
    295310    MAX_DATE_SIZE       =  32,
    296311    ASN_GEN_TIME_SZ     =  15,     /* 7 numbers * 2 + Zulu tag */
     
    327342    MAX_DER_DIGEST_ASN_SZ = MAX_ENCODED_DIG_ASN_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
    328343                            /* Maximum DER digest ASN header size */
     344                            /* Max X509 header length indicates the max length + 2 ('\n', '\0') */
     345    MAX_X509_HEADER_SZ  = (37 + 2), /* Maximum PEM Header/Footer Size */
    329346#ifdef WOLFSSL_CERT_GEN
    330347    #ifdef WOLFSSL_CERT_REQ
     
    340357                                   /* Max total extensions, id + len + others */
    341358#endif
    342 #if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || defined(HAVE_PKCS7)
     359#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
     360        defined(HAVE_PKCS7) || defined(OPENSSL_EXTRA_X509_SMALL)
    343361    MAX_OID_SZ          = 32,      /* Max DER length of OID*/
    344362    MAX_OID_STRING_SZ   = 64,      /* Max string length representation of OID*/
     
    355373#endif
    356374    MAX_AIA_SZ          = 2,       /* Max Authority Info Access extension size*/
    357     MAX_NAME_ENTRIES    = 5,       /* extra entries added to x509 name struct */
    358375    OCSP_NONCE_EXT_SZ   = 35,      /* OCSP Nonce Extension size */
    359376    MAX_OCSP_EXT_SZ     = 58,      /* Max OCSP Extension length */
     
    370387    ASN_TAG_SZ          = 1,       /* single byte ASN.1 tag */
    371388    MIN_VERSION_SZ      = 3,       /* Min bytes needed for GetMyVersion */
     389    MAX_X509_VERSION    = 3,       /* Max X509 version allowed */
     390    MIN_X509_VERSION    = 0,       /* Min X509 version allowed */
     391    WOLFSSL_X509_V1     = 0,
     392    WOLFSSL_X509_V2     = 1,
     393    WOLFSSL_X509_V3     = 2,
    372394#if defined(OPENSSL_ALL)  || defined(WOLFSSL_MYSQL_COMPATIBLE) || \
    373395    defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \
     
    378400    PKCS5_SALT_SZ       = 8,
    379401
    380     PEM_LINE_LEN       = 80,       /* PEM line max + fudge */
    381 };
     402    PEM_LINE_SZ        = 64,               /* Length of Base64 encoded line, not including new line */
     403    PEM_LINE_LEN       = PEM_LINE_SZ + 12, /* PEM line max + fudge */
     404};
     405
     406#ifndef WC_MAX_NAME_ENTRIES
     407    /* entries added to x509 name struct */
     408    #define WC_MAX_NAME_ENTRIES 13
     409#endif
     410#define MAX_NAME_ENTRIES WC_MAX_NAME_ENTRIES
    382411
    383412
     
    403432    oidTlsExtType       = 18,
    404433    oidCrlExtType       = 19,
     434    oidCsrAttrType      = 20,
    405435    oidIgnoreType
    406436};
     
    519549    ISSUE_ALT_NAMES_OID       = 132,
    520550    TLS_FEATURE_OID           = 92,  /* id-pe 24 */
    521     NETSCAPE_CT_OID           = 753  /* 2.16.840.1.113730.1.1 */
     551    NETSCAPE_CT_OID           = 753, /* 2.16.840.1.113730.1.1 */
     552    OCSP_NOCHECK_OID          = 121  /* 1.3.6.1.5.5.7.48.1.5
     553                                         id-pkix-ocsp-nocheck */
    522554};
    523555
     
    564596    SKID_TYPE = 0,
    565597    AKID_TYPE = 1
     598};
     599#endif
     600
     601#ifdef WOLFSSL_CERT_REQ
     602enum CsrAttrType {
     603    CHALLENGE_PASSWORD_OID = 659,
     604    SERIAL_NUMBER_OID = 94,
     605    EXTENSION_REQUEST_OID = 666,
    566606};
    567607#endif
     
    607647};
    608648
    609 #define DOMAIN_COMPONENT_MAX 10
    610 #define DN_NAMES_MAX 9
    611 
    612 struct DecodedName {
    613     char*   fullName;
    614     int     fullNameLen;
    615     int     entryCount;
    616     int     cnIdx;
    617     int     cnLen;
    618     int     cnNid;
    619     int     snIdx;
    620     int     snLen;
    621     int     snNid;
    622     int     cIdx;
    623     int     cLen;
    624     int     cNid;
    625     int     lIdx;
    626     int     lLen;
    627     int     lNid;
    628     int     stIdx;
    629     int     stLen;
    630     int     stNid;
    631     int     oIdx;
    632     int     oLen;
    633     int     oNid;
    634     int     ouIdx;
    635     int     ouLen;
    636 #ifdef WOLFSSL_CERT_EXT
    637     int     bcIdx;
    638     int     bcLen;
    639     int     jcIdx;
    640     int     jcLen;
    641     int     jsIdx;
    642     int     jsLen;
    643 #endif
    644     int     ouNid;
    645     int     emailIdx;
    646     int     emailLen;
    647     int     emailNid;
    648     int     uidIdx;
    649     int     uidLen;
    650     int     uidNid;
    651     int     serialIdx;
    652     int     serialLen;
    653     int     serialNid;
    654     int     dcIdx[DOMAIN_COMPONENT_MAX];
    655     int     dcLen[DOMAIN_COMPONENT_MAX];
    656     int     dcNum;
    657     int     dcMode;
    658 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    659     /* hold the location / order with which each of the DN tags was found
    660      *
    661      * example of ASN_DOMAIN_COMPONENT at index 0 if first found and so on.
    662      */
    663     int     loc[DOMAIN_COMPONENT_MAX + DN_NAMES_MAX];
    664     int     locSz;
    665 #endif
    666 };
    667649
    668650enum SignatureState {
     
    697679#ifndef NO_RSA
    698680    byte* out;
    699     byte* plain;
    700 #endif
    701 #if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448)
     681#endif
     682#if !(defined(NO_RSA) && defined(NO_DSA))
     683    byte* sigCpy;
     684#endif
     685#if defined(HAVE_ECC) || defined(HAVE_ED25519) || defined(HAVE_ED448) || \
     686    !defined(NO_DSA)
    702687    int verify;
    703688#endif
     
    705690    #ifndef NO_RSA
    706691        struct RsaKey*      rsa;
     692    #endif
     693    #ifndef NO_DSA
     694        struct DsaKey*      dsa;
    707695    #endif
    708696    #ifdef HAVE_ECC
     
    782770
    783771typedef struct DecodedCert DecodedCert;
    784 typedef struct DecodedName DecodedName;
    785772typedef struct Signer      Signer;
    786773#ifdef WOLFSSL_TRUST_PEER_CERT
     
    804791#ifndef IGNORE_NAME_CONSTRAINTS
    805792    DNS_entry* altEmailNames;        /* alt names list of RFC822 entries */
     793    DNS_entry* altDirNames;          /* alt names list of DIR entries    */
    806794    Base_entry* permittedNames;      /* Permitted name bases             */
    807795    Base_entry* excludedNames;       /* Excluded name bases              */
     
    909897#endif /* WOLFSSL_CERT_GEN */
    910898#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
    911     DecodedName issuerName;
    912     DecodedName subjectName;
     899    /* WOLFSSL_X509_NAME structures (used void* to avoid including ssl.h) */
     900    void* issuerName;
     901    void* subjectName;
    913902#endif /* OPENSSL_EXTRA */
    914903#ifdef WOLFSSL_SEP
     
    925914#endif /* defined(WOLFSSL_CERT_GEN) || defined(WOLFSSL_CERT_EXT) */
    926915
     916#ifdef WOLFSSL_CERT_REQ
     917    /* CSR attributes */
     918    char*   cPwd; /* challengePassword */
     919    int     cPwdLen;
     920    char*   sNum; /* Serial Number */
     921    int     sNumLen;
     922#endif /* WOLFSSL_CERT_REQ */
     923
    927924    Signer* ca;
    928925#ifndef NO_CERTS
     
    948945    byte extKeyUsageSet : 1;
    949946    byte extExtKeyUsageSet : 1;    /* Extended Key Usage set */
     947#ifdef HAVE_OCSP
     948    byte ocspNoCheckSet : 1;       /* id-pkix-ocsp-nocheck set */
     949#endif
    950950    byte extCRLdistSet : 1;
    951951    byte extAuthInfoSet : 1;
     
    973973    byte extCertPolicyCrit : 1;
    974974#endif
    975 
     975#ifdef WOLFSSL_CERT_REQ
     976    byte isCSR : 1;                /* Do we intend on parsing a CSR? */
     977#endif
    976978};
    977979
     
    10491051#endif
    10501052
     1053#ifdef HAVE_SMIME
     1054#define MIME_HEADER_ASCII_MIN   33
     1055#define MIME_HEADER_ASCII_MAX   126
     1056
     1057typedef struct MimeParam MimeParam;
     1058typedef struct MimeHdr MimeHdr;
     1059
     1060struct MimeParam
     1061{
     1062    MimeParam*  next;
     1063    char*       attribute;
     1064    char*       value;
     1065};
     1066
     1067struct MimeHdr
     1068{
     1069    MimeHdr*    next;
     1070    MimeParam*  params;
     1071    char*       name;
     1072    char*       body;
     1073};
     1074
     1075typedef enum MimeTypes
     1076{
     1077    MIME_HDR,
     1078    MIME_PARAM
     1079} MimeTypes;
     1080
     1081typedef enum MimeStatus
     1082{
     1083    MIME_NAMEATTR,
     1084    MIME_BODYVAL
     1085} MimeStatus;
     1086#endif /* HAVE_SMIME */
     1087
     1088
    10511089WOLFSSL_LOCAL int CalcHashId(const byte* data, word32 len, byte* hash);
     1090WOLFSSL_LOCAL int GetName(DecodedCert* cert, int nameType, int maxIdx);
    10521091
    10531092WOLFSSL_ASN_API int wc_BerToDer(const byte* ber, word32 berSz, byte* der,
     
    10691108WOLFSSL_LOCAL int CheckCertSignaturePubKey(const byte* cert, word32 certSz,
    10701109        void* heap, const byte* pubKey, word32 pubKeySz, int pubKeyOID);
     1110#ifdef WOLFSSL_CERT_REQ
     1111WOLFSSL_LOCAL int CheckCSRSignaturePubKey(const byte* cert, word32 certSz, void* heap,
     1112        const byte* pubKey, word32 pubKeySz, int pubKeyOID);
     1113#endif /* WOLFSSL_CERT_REQ */
     1114WOLFSSL_LOCAL int AddSignature(byte* buf, int bodySz, const byte* sig, int sigSz,
     1115                        int sigAlgoType);
    10711116WOLFSSL_LOCAL int ParseCertRelative(DecodedCert*,int type,int verify,void* cm);
    10721117WOLFSSL_LOCAL int DecodeToKey(DecodedCert*, int verify);
     
    11161161                                                 wolfssl_tm* certTime, int* idx);
    11171162WOLFSSL_LOCAL int DateGreaterThan(const struct tm* a, const struct tm* b);
    1118 WOLFSSL_LOCAL int ValidateDate(const byte* date, byte format, int dateType);
     1163WOLFSSL_LOCAL int wc_ValidateDate(const byte* date, byte format, int dateType);
    11191164WOLFSSL_LOCAL int wc_OBJ_sn2nid(const char *sn);
    11201165
     
    11221167#ifdef WOLFSSL_CERT_GEN
    11231168WOLFSSL_ASN_API int SetName(byte* output, word32 outputSz, CertName* name);
     1169WOLFSSL_LOCAL const char* GetOneCertName(CertName* name, int idx);
     1170WOLFSSL_LOCAL byte GetCertNameId(int idx);
    11241171#endif
    11251172WOLFSSL_LOCAL int GetShortInt(const byte* input, word32* inOutIdx, int* number,
     
    11391186WOLFSSL_LOCAL int GetOctetString(const byte* input, word32* inOutIdx, int* len,
    11401187                         word32 maxIdx);
     1188WOLFSSL_LOCAL int CheckBitString(const byte* input, word32* inOutIdx, int* len,
     1189                          word32 maxIdx, int zeroBits, byte* unusedBits);
    11411190WOLFSSL_LOCAL int GetSet(const byte* input, word32* inOutIdx, int* len,
    11421191                        word32 maxIdx);
     
    11731222WOLFSSL_LOCAL int wc_DhPrivKeyToDer(DhKey* key, byte* out, word32* outSz);
    11741223#endif
     1224WOLFSSL_LOCAL int SetASNInt(int len, byte firstByte, byte* output);
    11751225WOLFSSL_LOCAL word32 SetBitString(word32 len, byte unusedBits, byte* output);
    11761226WOLFSSL_LOCAL word32 SetImplicit(byte tag,byte number,word32 len,byte* output);
     
    11851235WOLFSSL_LOCAL int GetNameHash(const byte* source, word32* idx, byte* hash,
    11861236                             int maxIdx);
    1187 WOLFSSL_LOCAL int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der);
     1237WOLFSSL_LOCAL int wc_CheckPrivateKeyCert(const byte* key, word32 keySz, DecodedCert* der);
     1238WOLFSSL_LOCAL int wc_CheckPrivateKey(const byte* privKey, word32 privKeySz,
     1239                                     const byte* pubKey, word32 pubKeySz, enum Key_Sum ks);
    11881240WOLFSSL_LOCAL int StoreDHparams(byte* out, word32* outLen, mp_int* p, mp_int* g);
    11891241WOLFSSL_LOCAL int FlattenAltNames( byte*, word32, const DNS_entry*);
     
    11931245    WOLFSSL_LOCAL int StoreECC_DSA_Sig(byte* out, word32* outLen, mp_int* r,
    11941246                                      mp_int* s);
     1247    WOLFSSL_LOCAL int StoreECC_DSA_Sig_Bin(byte* out, word32* outLen,
     1248        const byte* r, word32 rLen, const byte* s, word32 sLen);
     1249    WOLFSSL_LOCAL int DecodeECC_DSA_Sig_Bin(const byte* sig, word32 sigLen,
     1250        byte* r, word32* rLen, byte* s, word32* sLen);
     1251#endif
     1252#if defined(HAVE_ECC) || !defined(NO_DSA)
    11951253    WOLFSSL_LOCAL int DecodeECC_DSA_Sig(const byte* sig, word32 sigLen,
    11961254                                       mp_int* r, mp_int* s);
     
    12151273
    12161274#endif /* !NO_CERTS */
     1275
     1276#ifdef HAVE_SMIME
     1277WOLFSSL_LOCAL int wc_MIME_parse_headers(char* in, int inLen, MimeHdr** hdrs);
     1278WOLFSSL_LOCAL int wc_MIME_header_strip(char* in, char** out, size_t start, size_t end);
     1279WOLFSSL_LOCAL int wc_MIME_create_header(char* name, char* body, MimeHdr** hdr);
     1280WOLFSSL_LOCAL int wc_MIME_create_parameter(char* attribute, char* value, MimeParam** param);
     1281WOLFSSL_LOCAL MimeHdr* wc_MIME_find_header_name(const char* name, MimeHdr* hdr);
     1282WOLFSSL_LOCAL MimeParam* wc_MIME_find_param_attr(const char* attribute, MimeParam* param);
     1283WOLFSSL_LOCAL int wc_MIME_free_hdrs(MimeHdr* head);
     1284#endif /* HAVE_SMIME */
    12171285
    12181286#ifdef WOLFSSL_CERT_GEN
     
    12311299    ECC_KEY         = 12,
    12321300    ED25519_KEY     = 13,
    1233     ED448_KEY       = 14
     1301    ED448_KEY       = 14,
     1302    DSA_KEY         = 15
    12341303};
    12351304
     
    12821351    byte serial[EXTERNAL_SERIAL_SIZE];
    12831352    int serialSz;
     1353#ifdef OPENSSL_EXTRA
     1354    WOLFSSL_ASN1_INTEGER* serialInt;
     1355#endif
    12841356
    12851357    int status;
     
    12891361    byte thisDateFormat;
    12901362    byte nextDateFormat;
    1291 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     1363#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
    12921364    WOLFSSL_ASN1_TIME thisDateParsed;
    12931365    WOLFSSL_ASN1_TIME nextDateParsed;
     
    13001372};
    13011373
    1302 
     1374typedef struct OcspEntry OcspEntry;
     1375
     1376#ifdef NO_SHA
     1377#define OCSP_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
     1378#else
     1379#define OCSP_DIGEST_SIZE WC_SHA_DIGEST_SIZE
     1380#endif
     1381
     1382struct OcspEntry
     1383{
     1384    OcspEntry *next;                      /* next entry                */
     1385    word32 hashAlgoOID;                   /* hash algo ID              */
     1386    byte issuerHash[OCSP_DIGEST_SIZE];    /* issuer hash               */
     1387    byte issuerKeyHash[OCSP_DIGEST_SIZE]; /* issuer public key hash    */
     1388    CertStatus *status;                   /* OCSP response list        */
     1389    int totalStatus;                      /* number on list            */
     1390    byte* rawCertId;                      /* raw bytes of the CertID   */
     1391    int rawCertIdSize;                    /* num bytes in raw CertID   */
     1392    /* option bits - using 32-bit for alignment */
     1393    word32 isDynamic:1;                   /* was dynamically allocated */
     1394
     1395};
     1396
     1397/* TODO: Long-term, it would be helpful if we made this struct and other OCSP
     1398         structs conform to the ASN spec as described in RFC 6960. It will help
     1399         with readability and with implementing OpenSSL compatibility API
     1400         functions, because OpenSSL's OCSP data structures conform to the
     1401         RFC. */
    13031402struct OcspResponse {
    13041403    int     responseStatus;  /* return code from Responder */
     
    13101409                             /* Date at which this response was signed */
    13111410    byte    producedDateFormat; /* format of the producedDate */
    1312     byte*   issuerHash;
    1313     byte*   issuerKeyHash;
    13141411
    13151412    byte*   cert;
     
    13201417    word32  sigOID;          /* OID for hash used for sig */
    13211418
    1322     CertStatus* status;      /* certificate status to fill out */
     1419    OcspEntry* single;       /* chain of OCSP single responses */
    13231420
    13241421    byte*   nonce;           /* pointer to nonce inside ASN.1 response */
     
    13311428    int     verifyError;
    13321429#endif
     1430    void*  heap;
    13331431};
    13341432
     
    13511449};
    13521450
    1353 typedef struct OcspEntry OcspEntry;
    1354 
    1355 #ifdef NO_SHA
    1356 #define OCSP_DIGEST_SIZE WC_SHA256_DIGEST_SIZE
    1357 #else
    1358 #define OCSP_DIGEST_SIZE WC_SHA_DIGEST_SIZE
    1359 #endif
    1360 
    1361 struct OcspEntry
    1362 {
    1363     OcspEntry *next;                      /* next entry             */
    1364     byte issuerHash[OCSP_DIGEST_SIZE];    /* issuer hash            */
    1365     byte issuerKeyHash[OCSP_DIGEST_SIZE]; /* issuer public key hash */
    1366     CertStatus *status;                   /* OCSP response list     */
    1367     int totalStatus;                      /* number on list         */
    1368 };
    1369 
    1370 WOLFSSL_LOCAL void InitOcspResponse(OcspResponse*, CertStatus*, byte*, word32);
    1371 WOLFSSL_LOCAL int  OcspResponseDecode(OcspResponse*, void*, void* heap, int);
     1451WOLFSSL_LOCAL void InitOcspResponse(OcspResponse*, OcspEntry*, CertStatus*, byte*, word32, void*);
     1452WOLFSSL_LOCAL void FreeOcspResponse(OcspResponse*);
     1453WOLFSSL_LOCAL int OcspResponseDecode(OcspResponse*, void*, void* heap, int);
    13721454
    13731455WOLFSSL_LOCAL int    InitOcspRequest(OcspRequest*, DecodedCert*, byte, void*);
     
    14471529
    14481530enum PBESTypes {
    1449     PBE_MD5_DES      = 0,
    1450     PBE_SHA1_RC4_128 = 1,
    1451     PBE_SHA1_DES     = 2,
    1452     PBE_SHA1_DES3    = 3,
    1453     PBE_AES256_CBC   = 4,
    1454     PBE_AES128_CBC   = 5,
     1531    PBE_MD5_DES        = 0,
     1532    PBE_SHA1_RC4_128   = 1,
     1533    PBE_SHA1_DES       = 2,
     1534    PBE_SHA1_DES3      = 3,
     1535    PBE_AES256_CBC     = 4,
     1536    PBE_AES128_CBC     = 5,
     1537    PBE_SHA1_40RC2_CBC = 6,
    14551538
    14561539    PBE_SHA1_RC4_128_SUM = 657,
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/asn_public.h

    r457 r464  
    2424*/
    2525
     26/*
     27DESCRIPTION
     28This library defines the interface APIs for X509 certificates.
     29
     30*/
    2631#ifndef WOLF_CRYPT_ASN_PUBLIC_H
    2732#define WOLF_CRYPT_ASN_PUBLIC_H
     
    122127enum Ctc_SigType {
    123128    CTC_SHAwDSA      = 517,
     129    CTC_SHA256wDSA   = 416,
    124130    CTC_MD2wRSA      = 646,
    125131    CTC_MD5wRSA      = 648,
     
    326332    char    certPolicies[CTC_MAX_CERTPOL_NB][CTC_MAX_CERTPOL_SZ];
    327333    word16  certPoliciesNb;              /* Number of Cert Policy */
     334#endif
     335#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
     336    defined(WOLFSSL_CERT_REQ)
    328337    byte     issRaw[sizeof(CertName)];   /* raw issuer info */
    329338    byte     sbjRaw[sizeof(CertName)];   /* raw subject info */
     
    510519    WOLFSSL_API int wc_EccPrivateKeyToPKCS8(ecc_key* key, byte* output,
    511520                                            word32* outLen);
     521    WOLFSSL_API int wc_EccKeyToPKCS8(ecc_key* key, byte* output,
     522                                     word32* outLen);
    512523
    513524    /* public key helper */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/chacha.h

    r457 r464  
    1919 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
    2020 */
     21/*
    2122
     23DESCRIPTION
     24This library contains implementation for the ChaCha20 stream cipher.
     25
     26*/
    2227/*!
    2328    \file wolfssl/wolfcrypt/chacha.h
     
    3641#endif
    3742
     43/*
     44Initialization vector starts at 13 with zero being the index origin of a matrix.
     45Block counter is located at index 12.
     46  0   1   2   3
     47  4   5   6   7
     48  8   9   10  11
     49  12  13  14  15
     50*/
     51#define CHACHA_MATRIX_CNT_IV 12
     52
    3853/* Size of the IV */
    3954#define CHACHA_IV_WORDS    3
    40 #define CHACHA_IV_BYTES    (CHACHA_IV_WORDS * sizeof(word32))
     55
     56/* Size of IV in bytes*/
     57#define CHACHA_IV_BYTES 12
     58#ifdef HAVE_XCHACHA
     59#define XCHACHA_NONCE_BYTES 24
     60#endif
    4161
    4262/* Size of ChaCha chunks */
     
    5878typedef struct ChaCha {
    5979    word32 X[CHACHA_CHUNK_WORDS];           /* state of cipher */
    60     word32 left;                            /* number of bytes leftover */
    6180#ifdef HAVE_INTEL_AVX1
    6281    /* vpshufd reads 16 bytes but we only use bottom 4. */
    6382    byte extra[12];
     83#endif
     84    word32 left;                            /* number of bytes leftover */
     85#if defined(USE_INTEL_CHACHA_SPEEDUP) || defined(WOLFSSL_ARMASM)
     86    word32 over[CHACHA_CHUNK_WORDS];
    6487#endif
    6588} ChaCha;
     
    7396WOLFSSL_API int wc_Chacha_Process(ChaCha* ctx, byte* cipher, const byte* plain,
    7497                              word32 msglen);
     98
     99WOLFSSL_LOCAL void wc_Chacha_purge_current_block(ChaCha* ctx);
     100
    75101WOLFSSL_API int wc_Chacha_SetKey(ChaCha* ctx, const byte* key, word32 keySz);
     102
     103#ifdef HAVE_XCHACHA
     104WOLFSSL_API int wc_XChacha_SetKey(ChaCha *ctx, const byte *key, word32 keySz,
     105                                  const byte *nonce, word32 nonceSz,
     106                                  word32 counter);
     107#endif
    76108
    77109#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/cpuid.h

    r457 r464  
    3535#if defined(WOLFSSL_X86_64_BUILD) || defined(USE_INTEL_SPEEDUP) || \
    3636    defined(WOLFSSL_AESNI)
     37
    3738    #define CPUID_AVX1   0x0001
    3839    #define CPUID_AVX2   0x0002
     
    4243    #define CPUID_AESNI  0x0020
    4344    #define CPUID_ADX    0x0040   /* ADCX, ADOX */
     45    #define CPUID_MOVBE  0x0080   /* Move and byte swap */
    4446
    4547    #define IS_INTEL_AVX1(f)    ((f) & CPUID_AVX1)
     
    5052    #define IS_INTEL_AESNI(f)   ((f) & CPUID_AESNI)
    5153    #define IS_INTEL_ADX(f)     ((f) & CPUID_ADX)
     54    #define IS_INTEL_MOVBE(f)   ((f) & CPUID_MOVBE)
    5255
    5356    void cpuid_set_flags(void);
    5457    word32 cpuid_get_flags(void);
     58
     59    /* Public APIs to modify flags. */
     60    WOLFSSL_API void cpuid_select_flags(word32 flags);
     61    WOLFSSL_API void cpuid_set_flag(word32 flag);
     62    WOLFSSL_API void cpuid_clear_flag(word32 flag);
     63
    5564#endif
    5665
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/curve25519.h

    r457 r464  
    8888
    8989WOLFSSL_API
     90int wc_curve25519_make_pub(int public_size, byte* pub, int private_size,
     91                           const byte* priv);
     92
     93WOLFSSL_API
     94int wc_curve25519_generic(int public_size, byte* pub,
     95                          int private_size, const byte* priv,
     96                          int basepoint_size, const byte* basepoint);
     97
     98WOLFSSL_API
     99int wc_curve25519_make_priv(WC_RNG* rng, int keysize, byte* priv);
     100
     101WOLFSSL_API
    90102int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key);
    91103
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/dh.h

    r457 r464  
    4646    #include <wolfssl/wolfcrypt/async.h>
    4747#endif
     48
     49/* Optional support extended DH public / private keys */
     50#if !defined(WOLFSSL_DH_EXTRA) && (defined(WOLFSSL_QT) || \
     51        defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH) || \
     52        defined(WOLFSSL_STATIC_EPHEMERAL))
     53    #define WOLFSSL_DH_EXTRA
     54#endif
     55
    4856typedef struct DhParams {
    49     #ifdef HAVE_FFDHE_Q
     57#ifdef HAVE_FFDHE_Q
    5058    const byte* q;
    5159    word32      q_len;
    52     #endif /* HAVE_FFDHE_Q */
     60#endif /* HAVE_FFDHE_Q */
    5361    const byte* p;
    5462    word32      p_len;
     
    5967/* Diffie-Hellman Key */
    6068struct DhKey {
    61     mp_int p, g, q;                         /* group parameters */
    62 #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH)
     69    mp_int p, g, q; /* group parameters */
     70#ifdef WOLFSSL_DH_EXTRA
    6371    mp_int pub;
    6472    mp_int priv;
     
    102110
    103111WOLFSSL_API int wc_DhKeyDecode(const byte* input, word32* inOutIdx, DhKey* key,
    104                            word32);
     112                           word32); /* wc_DhKeyDecode is in asn.c */
     113
    105114WOLFSSL_API int wc_DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g,
    106115                        word32 gSz);
    107116WOLFSSL_API int wc_DhSetKey_ex(DhKey* key, const byte* p, word32 pSz,
    108117                        const byte* g, word32 gSz, const byte* q, word32 qSz);
    109 #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
    110 WOLFSSL_LOCAL int wc_DhSetFullKeys(DhKey* key,const byte* priv_key,word32 privSz,
    111                                    const byte* pub_key, word32 pubSz);
     118
     119#ifdef WOLFSSL_DH_EXTRA
     120WOLFSSL_API int wc_DhImportKeyPair(DhKey* key, const byte* priv, word32 privSz,
     121                                   const byte* pub, word32 pubSz);
     122WOLFSSL_API int wc_DhExportKeyPair(DhKey* key, byte* priv, word32* pPrivSz,
     123                                   byte* pub, word32* pPubSz);
     124WOLFSSL_LOCAL int wc_DhKeyCopy(DhKey* src, DhKey* dst);
    112125#endif
    113126WOLFSSL_API int wc_DhSetCheckKey(DhKey* key, const byte* p, word32 pSz,
     
    137150#endif /* NO_DH */
    138151#endif /* WOLF_CRYPT_DH_H */
    139 
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/ecc.h

    r457 r464  
    5151#endif
    5252
    53 #ifdef WOLFSSL_ATECC508A
     53#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    5454    #include <wolfssl/wolfcrypt/port/atmel/atmel.h>
    5555#endif /* WOLFSSL_ATECC508A */
     
    5858    #include <wolfssl/wolfcrypt/port/arm/cryptoCell.h>
    5959#endif
     60
     61#ifdef WOLFSSL_SILABS_SE_ACCEL
     62    #include <wolfssl/wolfcrypt/port/silabs/silabs_ecc.h>
     63#endif
     64
     65#ifdef WOLFSSL_HAVE_SP_ECC
     66    #include <wolfssl/wolfcrypt/sp_int.h>
     67#endif
     68
    6069
    6170#ifdef __cplusplus
     
    121130    SIG_HEADER_SZ   =  7,   /* ECC signature header size (30 81 87 02 42 [R] 02 42 [S]) */
    122131    ECC_BUFSIZE     = 256,  /* for exported keys temp buffer */
    123     ECC_MINSIZE     = 20,   /* MIN Private Key size */
     132    ECC_MINSIZE     = ECC_MIN_KEY_SZ/8,   /* MIN Private Key size */
    124133    ECC_MAXSIZE     = 66,   /* MAX Private Key size */
    125134    ECC_MAXSIZE_GEN = 74,   /* MAX Buffer size required when generating ECC keys*/
     
    128137
    129138    /* max crypto hardware size */
    130 #ifdef WOLFSSL_ATECC508A
     139#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    131140    ECC_MAX_CRYPTO_HW_SIZE = ATECC_KEY_SIZE, /* from port/atmel/atmel.h */
    132141    ECC_MAX_CRYPTO_HW_PUBKEY_SIZE = (ATECC_KEY_SIZE*2),
    133142#elif defined(PLUTON_CRYPTO_ECC)
     143    ECC_MAX_CRYPTO_HW_SIZE = 32,
     144#elif defined(WOLFSSL_SILABS_SE_ACCEL)
    134145    ECC_MAX_CRYPTO_HW_SIZE = 32,
    135146#elif defined(WOLFSSL_CRYPTOCELL)
     
    148159    SHAMIR_PRECOMP_SZ = 16,
    149160
    150 #ifdef HAVE_PKCS11
     161#ifdef WOLF_CRYPTO_CB
    151162    ECC_MAX_ID_LEN    = 32,
     163    ECC_MAX_LABEL_LEN = 32,
    152164#endif
    153165};
     
    204216    ECC_CURVE_CUSTOM,
    205217#endif
     218    ECC_CURVE_MAX
    206219} ecc_curve_id;
    207220
     
    279292 * of the point are pointers that are set to each of a three item array of
    280293 * alt_fp_ints. While an mp_int will have 4096 bits of digit inside the
    281  * structure, the alt_fp_int will only have 528 bits. A size value was added
    282  * in the ALT case, as well, and is set by mp_init() and alt_fp_init(). The
    283  * functions fp_zero() and fp_copy() use the size parameter. An int needs to
    284  * be initialized before using it instead of just fp_zeroing it, the init will
    285  * call zero. FP_MAX_BITS_ECC defaults to 528, but can be set to change the
    286  * number of bits used in the alternate FP_INT.
     294 * structure, the alt_fp_int will only have 512 bits for ECC 256-bit and
     295 * 1056-bits for ECC 521-bit. A size value was added in the ALT case, as well,
     296 * and is set by mp_init() and alt_fp_init(). The functions fp_zero() and
     297 * fp_copy() use the size parameter. An int needs to be initialized before
     298 * using it instead of just fp_zeroing it, the init will call zero. The
     299 * FP_MAX_BITS_ECC defaults to calculating based on MAX_ECC_BITS, but
     300 * can be set to change the number of bits used in the alternate FP_INT.
    287301 *
    288  * Do not enable ALT_ECC_SIZE and disable fast math in the configuration.
     302 * The ALT_ECC_SIZE option only applies to stack based fast math USE_FAST_MATH.
    289303 */
    290304
     
    295309/* determine max bits required for ECC math */
    296310#ifndef FP_MAX_BITS_ECC
    297     /* check alignment */
    298     #if ((MAX_ECC_BITS * 2) % DIGIT_BIT) == 0
    299         /* max bits is double */
    300         #define FP_MAX_BITS_ECC     (MAX_ECC_BITS * 2)
    301     #else
    302         /* max bits is doubled, plus one digit of fudge */
    303         #define FP_MAX_BITS_ECC     ((MAX_ECC_BITS * 2) + DIGIT_BIT)
    304     #endif
    305 #else
    306     /* verify alignment */
    307     #if FP_MAX_BITS_ECC % CHAR_BIT
    308        #error FP_MAX_BITS_ECC must be a multiple of CHAR_BIT
    309     #endif
     311    /* max bits rounded up by 8 then doubled */
     312    /* (ROUND8(MAX_ECC_BITS) * 2) */
     313    #define FP_MAX_BITS_ECC (2 * \
     314        ((MAX_ECC_BITS + DIGIT_BIT - 1) / DIGIT_BIT) * DIGIT_BIT)
     315
     316    /* Note: For ECC verify only FP_MAX_BITS_ECC can be reduced to:
     317             ROUND8(MAX_ECC_BITS) + ROUND8(DIGIT_BIT) */
     318#endif
     319
     320/* verify alignment */
     321#if FP_MAX_BITS_ECC % CHAR_BIT
     322    #error FP_MAX_BITS_ECC must be a multiple of CHAR_BIT
    310323#endif
    311324
    312325/* determine buffer size */
    313 #define FP_SIZE_ECC    (FP_MAX_BITS_ECC/DIGIT_BIT)
     326/* Add one to accommodate extra digit used by sp_mul(), sp_mulmod(), sp_sqr(), and sp_sqrmod(). */
     327#define FP_SIZE_ECC    ((FP_MAX_BITS_ECC/DIGIT_BIT) + 1)
    314328
    315329
     
    348362/* ECC Flags */
    349363enum {
    350     WC_ECC_FLAG_NONE = 0x00,
     364    WC_ECC_FLAG_NONE     = 0x00,
    351365#ifdef HAVE_ECC_CDH
    352366    WC_ECC_FLAG_COFACTOR = 0x01,
    353367#endif
     368    WC_ECC_FLAG_DEC_SIGN = 0x02,
    354369};
     370
     371/* ECC non-blocking */
     372#ifdef WC_ECC_NONBLOCK
     373    typedef struct ecc_nb_ctx {
     374    #if defined(WOLFSSL_HAVE_SP_ECC) && defined(WOLFSSL_SP_NONBLOCK)
     375        sp_ecc_ctx_t sp_ctx;
     376    #else
     377        /* build configuration not supported */
     378        #error ECC non-blocking only supports SP (--enable-sp=nonblock)
     379    #endif
     380    } ecc_nb_ctx_t;
     381#endif /* WC_ECC_NONBLOCK */
     382
    355383
    356384/* An ECC Key */
     
    370398    ecc_point pubkey;   /* public key */
    371399    mp_int    k;        /* private key */
    372 #ifdef WOLFSSL_ATECC508A
     400#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A)
    373401    int  slot;        /* Key Slot Number (-1 unknown) */
    374402    byte pubkey_raw[ECC_MAX_CRYPTO_HW_PUBKEY_SIZE];
     
    377405    int devId;
    378406#endif
     407#ifdef WOLFSSL_SILABS_SE_ACCEL
     408    sl_se_command_context_t  cmd_ctx;
     409    sl_se_key_descriptor_t   key;
     410    /* Used for SiLabs "plaintext" with public X, public Y, and
     411     * private D concatenated. These are respectively at offset `0`,
     412     * offset `keysize`, and offset `2 * keysize`.
     413     */
     414    byte key_raw[3 * ECC_MAX_CRYPTO_HW_SIZE];
     415#endif
     416
    379417#ifdef WOLFSSL_ASYNC_CRYPT
    380418    mp_int* r;          /* sign/verify temps */
     
    389427    #endif
    390428#endif /* WOLFSSL_ASYNC_CRYPT */
    391 #ifdef HAVE_PKCS11
     429#ifdef WOLF_CRYPTO_CB
    392430    byte id[ECC_MAX_ID_LEN];
    393431    int  idLen;
     432    char label[ECC_MAX_LABEL_LEN];
     433    int  labelLen;
    394434#endif
    395435#if defined(WOLFSSL_CRYPTOCELL)
     
    414454    remote_handle64 handle;
    415455#endif
     456#ifdef ECC_TIMING_RESISTANT
     457    WC_RNG* rng;
     458#endif
     459#ifdef WC_ECC_NONBLOCK
     460    ecc_nb_ctx_t* nb_ctx;
     461#endif
    416462};
    417463
     
    428474const char* wc_ecc_get_name(int curve_id);
    429475
    430 #ifndef WOLFSSL_ATECC508A
     476#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
    431477
    432478#ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
     
    447493                                     mp_int* modulus, mp_digit mp);
    448494
     495WOLFSSL_LOCAL
     496int ecc_projective_add_point_safe(ecc_point* A, ecc_point* B, ecc_point* R,
     497    mp_int* a, mp_int* modulus, mp_digit mp, int* infinity);
     498WOLFSSL_LOCAL
     499int ecc_projective_dbl_point_safe(ecc_point* P, ecc_point* R, mp_int* a,
     500                                  mp_int* modulus, mp_digit mp);
     501
    449502#endif
    450503
     
    454507int wc_ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key, int curve_id);
    455508WOLFSSL_API
     509int wc_ecc_make_key_ex2(WC_RNG* rng, int keysize, ecc_key* key, int curve_id,
     510                        int flags);
     511WOLFSSL_API
    456512int wc_ecc_make_pub(ecc_key* key, ecc_point* pubOut);
     513WOLFSSL_API
     514int wc_ecc_make_pub_ex(ecc_key* key, ecc_point* pubOut, WC_RNG* rng);
    457515WOLFSSL_API
    458516int wc_ecc_check_key(ecc_key* key);
     
    473531                             byte* out, word32 *outlen);
    474532
    475 #if defined(WOLFSSL_ATECC508A) || defined(PLUTON_CRYPTO_ECC) || defined(WOLFSSL_CRYPTOCELL)
     533#if defined(WOLFSSL_ATECC508A) || defined(WOLFSSL_ATECC608A) || \
     534    defined(PLUTON_CRYPTO_ECC) || defined(WOLFSSL_CRYPTOCELL)
    476535#define wc_ecc_shared_secret_ssh wc_ecc_shared_secret
    477536#else
     
    507566WOLFSSL_ABI WOLFSSL_API
    508567int wc_ecc_init_ex(ecc_key* key, void* heap, int devId);
    509 #ifdef HAVE_PKCS11
     568#ifdef WOLF_CRYPTO_CB
    510569WOLFSSL_API
    511570int wc_ecc_init_id(ecc_key* key, unsigned char* id, int len, void* heap,
    512571                   int devId);
     572WOLFSSL_API
     573int wc_ecc_init_label(ecc_key* key, const char* label, void* heap, int devId);
    513574#endif
    514575#ifdef WOLFSSL_CUSTOM_CURVES
     
    522583WOLFSSL_API
    523584void wc_ecc_fp_free(void);
     585WOLFSSL_LOCAL
     586void wc_ecc_fp_init(void);
     587#ifdef ECC_TIMING_RESISTANT
     588WOLFSSL_API
     589int wc_ecc_set_rng(ecc_key* key, WC_RNG* rng);
     590#endif
    524591
    525592WOLFSSL_API
     
    569636WOLFSSL_API
    570637int wc_ecc_point_is_at_infinity(ecc_point *p);
    571 
    572 #ifndef WOLFSSL_ATECC508A
     638WOLFSSL_API
     639int wc_ecc_point_is_on_curve(ecc_point *p, int curve_idx);
     640
     641#if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A)
    573642WOLFSSL_API
    574643int wc_ecc_mulmod(mp_int* k, ecc_point *G, ecc_point *R,
     
    577646int wc_ecc_mulmod_ex(mp_int* k, ecc_point *G, ecc_point *R,
    578647                  mp_int* a, mp_int* modulus, int map, void* heap);
     648WOLFSSL_LOCAL
     649int wc_ecc_mulmod_ex2(mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
     650                      mp_int* modulus, mp_int* order, WC_RNG* rng, int map,
     651                      void* heap);
    579652#endif /* !WOLFSSL_ATECC508A */
    580653
     
    755828#endif
    756829
     830#ifdef WC_ECC_NONBLOCK
     831    WOLFSSL_API int wc_ecc_set_nonblock(ecc_key *key, ecc_nb_ctx_t* ctx);
     832#endif
     833
    757834#ifdef __cplusplus
    758835    }    /* extern "C" */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/error-crypt.h

    r457 r464  
    2222/*!
    2323    \file wolfssl/wolfcrypt/error-crypt.h
     24*/
     25/*
     26DESCRIPTION
     27This library defines error codes and contians routines for setting and examining
     28the error status.
    2429*/
    2530
     
    228233    PKCS7_SIGNEEDS_CHECK= -272,  /* signature needs verified by caller */
    229234    PSS_SALTLEN_RECOVER_E=-273,  /* PSS slat length not recoverable */
    230 
    231     ASN_SELF_SIGNED_E   = -274, /* ASN self-signed certificate error */
    232 
    233     WC_LAST_E           = -274,  /* Update this to indicate last error */
     235    CHACHA_POLY_OVERFLOW =-274,  /* ChaCha20Poly1305 limit overflow */
     236    ASN_SELF_SIGNED_E   = -275, /* ASN self-signed certificate error */
     237
     238    WC_LAST_E           = -275,  /* Update this to indicate last error */
    234239    MIN_CODE_E          = -300   /* errors -101 - -299 */
    235240
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/hmac.h

    r457 r464  
    9595#endif
    9696#ifdef HAVE_PKCS11
    97     HMAC_MAX_ID_LEN = 32,
     97    HMAC_MAX_ID_LEN    = 32,
     98    HMAC_MAX_LABEL_LEN = 32,
    9899#endif
    99100};
     
    132133    wc_Sha3 sha3;
    133134#endif
    134 } Hash;
     135} wc_Hmac_Hash;
    135136
    136137/* Hmac digest */
    137138struct Hmac {
    138     Hash    hash;
     139    wc_Hmac_Hash    hash;
    139140    word32  ipad[WC_HMAC_BLOCK_SIZE  / sizeof(word32)];  /* same block size all*/
    140141    word32  opad[WC_HMAC_BLOCK_SIZE  / sizeof(word32)];
     
    154155    byte    id[HMAC_MAX_ID_LEN];
    155156    int     idLen;
     157    char    label[HMAC_MAX_LABEL_LEN];
     158    int     labelLen;
    156159#endif
    157160#if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
     
    175178
    176179WOLFSSL_API int wc_HmacInit(Hmac* hmac, void* heap, int devId);
     180#ifdef HAVE_PKCS11
    177181WOLFSSL_API int wc_HmacInit_Id(Hmac* hmac, byte* id, int len, void* heap,
    178182                               int devId);
     183WOLFSSL_API int wc_HmacInit_Label(Hmac* hmac, const char* label, void* heap,
     184                                  int devId);
     185#endif
    179186WOLFSSL_API void wc_HmacFree(Hmac*);
    180187
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/integer.h

    r457 r464  
    3434*/
    3535#include <wolfssl/wolfcrypt/types.h>       /* will set MP_xxBIT if not default */
    36 #ifdef WOLFSSL_SP_MATH
     36#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
    3737    #include <wolfssl/wolfcrypt/sp_int.h>
    3838#elif defined(USE_FAST_MATH)
     
    4343
    4444#ifndef CHAR_BIT
    45     #include <limits.h>
     45    #if defined(WOLFSSL_LINUXKM)
     46        #include <linux/limits.h>
     47    #else
     48        #include <limits.h>
     49    #endif
    4650#endif
    4751
     
    6973
    7074/* detect 64-bit mode if possible */
    71 #if defined(__x86_64__) && !(defined (_MSC_VER) && defined(__clang__))
     75#if (defined(__x86_64__) || defined(__aarch64__)) && !(defined (_MSC_VER) && defined(__clang__))
    7276   #if !(defined(MP_64BIT) && defined(MP_16BIT) && defined(MP_8BIT))
    7377      #define MP_64BIT
     
    158162#define MP_MEM        -2  /* out of mem */
    159163#define MP_VAL        -3  /* invalid input */
    160 #define MP_NOT_INF        -4  /* point not at infinity */
     164#define MP_NOT_INF    -4  /* point not at infinity */
    161165#define MP_RANGE      MP_NOT_INF
    162166
     
    302306MP_API void mp_clamp (mp_int * a);
    303307MP_API void mp_exch (mp_int * a, mp_int * b);
     308MP_API int  mp_cond_swap_ct (mp_int * a, mp_int * b, int c, int m);
    304309MP_API void mp_rshd (mp_int * a, int b);
    305310MP_API void mp_rshb (mp_int * a, int b);
     
    319324MP_API int  mp_div(mp_int * a, mp_int * b, mp_int * c, mp_int * d);
    320325MP_API int  mp_div_2(mp_int * a, mp_int * b);
     326MP_API int  mp_div_2_mod_ct (mp_int* a, mp_int* b, mp_int* c);
    321327MP_API int  mp_add (mp_int * a, mp_int * b, mp_int * c);
    322328int  s_mp_add (mp_int * a, mp_int * b, mp_int * c);
     
    333339int  fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho);
    334340MP_API int  mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho);
     341#define mp_montgomery_reduce_ex(x, n, rho, ct) mp_montgomery_reduce (x, n, rho)
    335342MP_API void mp_dr_setup(mp_int *a, mp_digit *d);
    336343MP_API int  mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k);
     
    356363MP_API int  mp_submod (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
    357364MP_API int  mp_addmod (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
     365MP_API int  mp_submod_ct (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
     366MP_API int  mp_addmod_ct (mp_int* a, mp_int* b, mp_int* c, mp_int* d);
    358367MP_API int  mp_mul_d (mp_int * a, mp_digit b, mp_int * c);
    359368MP_API int  mp_2expt (mp_int * a, int b);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/logging.h

    r457 r464  
    101101WOLFSSL_API void wolfSSL_Debugging_OFF(void);
    102102
     103#ifdef HAVE_WC_INTROSPECTION
     104    WOLFSSL_API const char *wolfSSL_configure_args(void);
     105    WOLFSSL_API const char *wolfSSL_global_cflags(void);
     106#endif
    103107
    104108#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE)
     
    188192#endif
    189193
     194#ifdef HAVE_STACK_SIZE_VERBOSE
     195    extern WOLFSSL_API THREAD_LS_T unsigned char *StackSizeCheck_myStack;
     196    extern WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSize;
     197    extern WOLFSSL_API THREAD_LS_T size_t StackSizeCheck_stackSizeHWM;
     198    extern WOLFSSL_API THREAD_LS_T size_t *StackSizeCheck_stackSizeHWM_ptr;
     199    extern WOLFSSL_API THREAD_LS_T void *StackSizeCheck_stackOffsetPointer;
     200#endif
     201
    190202#ifdef __cplusplus
    191203}
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/memory.h

    r457 r464  
    3030#define WOLFSSL_MEMORY_H
    3131
    32 #ifndef STRING_USER
     32#if !defined(STRING_USER) && !defined(WOLFSSL_LINUXKM)
    3333#include <stdlib.h>
    3434#endif
     
    111111            /* extra storage in structs for multiple attributes and order */
    112112            #ifndef LARGEST_MEM_BUCKET
    113                 #define LARGEST_MEM_BUCKET 25600
     113                #ifdef WOLFSSL_TLS13
     114                    #define LARGEST_MEM_BUCKET 30400
     115                #else
     116                    #define LARGEST_MEM_BUCKET 25600
     117                #endif
    114118            #endif
    115119            #define WOLFMEM_BUCKETS 64,128,256,512,1024,2432,3360,4480,\
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/misc.h

    r457 r464  
    1919 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
    2020 */
     21/*
    2122
     23DESCRIPTION
     24This module implements the arithmetic-shift right, left, byte swapping, XOR,
     25masking and clearing memory logic.
    2226
    23 
     27*/
    2428#ifndef WOLF_CRYPT_MISC_H
    2529#define WOLF_CRYPT_MISC_H
     
    4044word32 rotrFixed(word32, word32);
    4145
     46#ifdef WC_RC2
     47WOLFSSL_LOCAL
     48word16 rotlFixed16(word16, word16);
     49WOLFSSL_LOCAL
     50word16 rotrFixed16(word16, word16);
     51#endif
     52
    4253WOLFSSL_LOCAL
    4354word32 ByteReverseWord32(word32);
     
    4556void   ByteReverseWords(word32*, const word32*, word32);
    4657
     58WOLFSSL_LOCAL
     59void XorWordsOut(wolfssl_word* r, const wolfssl_word* a, const wolfssl_word* b,
     60                 word32 n);
     61WOLFSSL_LOCAL
     62void xorbufout(void*, const void*, const void*, word32);
    4763WOLFSSL_LOCAL
    4864void XorWords(wolfssl_word*, const wolfssl_word*, word32);
     
    100116WOLFSSL_LOCAL byte ctMaskEq(int a, int b);
    101117WOLFSSL_LOCAL word16 ctMask16GT(int a, int b);
     118WOLFSSL_LOCAL word16 ctMask16GTE(int a, int b);
    102119WOLFSSL_LOCAL word16 ctMask16LT(int a, int b);
     120WOLFSSL_LOCAL word16 ctMask16LTE(int a, int b);
    103121WOLFSSL_LOCAL word16 ctMask16Eq(int a, int b);
    104122WOLFSSL_LOCAL byte ctMaskNotEq(int a, int b);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/pkcs12.h

    r457 r464  
    5454        byte** pkey, word32* pkeySz, byte** cert, word32* certSz,
    5555        WC_DerCertList** ca);
     56WOLFSSL_LOCAL int wc_PKCS12_verify_ex(WC_PKCS12* pkcs12,
     57        const byte* psw, word32 pswSz);
    5658WOLFSSL_API WC_PKCS12* wc_PKCS12_create(char* pass, word32 passSz,
    5759        char* name, byte* key, word32 keySz, byte* cert, word32 certSz,
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/random.h

    r457 r464  
    150150#endif
    151151
     152#ifdef HAVE_HASHDRBG
     153struct DRBG_internal {
     154    word32 reseedCtr;
     155    word32 lastBlock;
     156    byte V[DRBG_SEED_LEN];
     157    byte C[DRBG_SEED_LEN];
     158#if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
     159    void* heap;
     160    int devId;
     161#endif
     162    byte   matchCount;
     163#ifdef WOLFSSL_SMALL_STACK_CACHE
     164    wc_Sha256 sha256;
     165#endif
     166};
     167#endif
     168
    152169/* RNG context */
    153170struct WC_RNG {
     
    158175    struct DRBG* drbg;
    159176#if defined(WOLFSSL_NO_MALLOC) && !defined(WOLFSSL_STATIC_MEMORY)
    160     #define DRBG_STRUCT_SZ ((sizeof(word32)*3) + (DRBG_SEED_LEN*2))
    161     #ifdef WOLFSSL_SMALL_STACK_CACHE
    162         #define DRBG_STRUCT_SZ_SHA256 (sizeof(wc_Sha256))
    163     #else
    164         #define DRBG_STRUCT_SZ_SHA256 0
    165     #endif
    166     #if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB)
    167         #define DRBG_STRUCT_SZ_ASYNC (sizeof(void*) + sizeof(int))
    168     #else
    169         #define DRBG_STRUCT_SZ_ASYNC 0
    170     #endif
    171     byte drbg_data[DRBG_STRUCT_SZ + DRBG_STRUCT_SZ_SHA256 + DRBG_STRUCT_SZ_ASYNC];
     177    struct DRBG_internal drbg_data;
    172178#endif
    173179    byte status;
     
    220226#define wc_InitRngNonce(rng, n, s) NOT_COMPILED_IN
    221227#define wc_InitRngNonce_ex(rng, n, s, h, d) NOT_COMPILED_IN
     228#if defined(__ghs__) || defined(WC_NO_RNG_SIMPLE)
     229/* some older compilers do not like macro function in expression */
    222230#define wc_RNG_GenerateBlock(rng, b, s) NOT_COMPILED_IN
     231#else
     232#define wc_RNG_GenerateBlock(rng, b, s) ({(void)rng; (void)b; (void)s; NOT_COMPILED_IN;})
     233#endif
    223234#define wc_RNG_GenerateByte(rng, b) NOT_COMPILED_IN
    224235#define wc_FreeRng(rng) (void)NOT_COMPILED_IN
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/rsa.h

    r457 r464  
    2424*/
    2525
    26 
     26/*
     27
     28DESCRIPTION
     29This library provides the interface to the RSA.
     30RSA keys can be used to encrypt, decrypt, sign and verify data.
     31
     32*/
    2733#ifndef WOLF_CRYPT_RSA_H
    2834#define WOLF_CRYPT_RSA_H
     
    136142#endif
    137143
    138 #ifdef HAVE_PKCS11
     144#ifdef WOLF_CRYPTO_CB
    139145    RSA_MAX_ID_LEN      = 32,
     146    RSA_MAX_LABEL_LEN   = 32,
    140147#endif
    141148};
     
    179186    XSecure_Rsa xRsa;
    180187#endif
    181 #ifdef HAVE_PKCS11
     188#ifdef WOLF_CRYPTO_CB
    182189    byte id[RSA_MAX_ID_LEN];
    183190    int  idLen;
     191    char label[RSA_MAX_LABEL_LEN];
     192    int  labelLen;
    184193#endif
    185194#if defined(WOLFSSL_ASYNC_CRYPT) || !defined(WOLFSSL_RSA_VERIFY_INLINE)
     
    208217WOLFSSL_API int  wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId);
    209218WOLFSSL_API int  wc_FreeRsaKey(RsaKey* key);
    210 #ifdef HAVE_PKCS11
     219#ifdef WOLF_CRYPTO_CB
    211220WOLFSSL_API int wc_InitRsaKey_Id(RsaKey* key, unsigned char* id, int len,
    212221                                 void* heap, int devId);
     222WOLFSSL_API int wc_InitRsaKey_Label(RsaKey* key, const char* label, void* heap,
     223                                    int devId);
    213224#endif
    214225WOLFSSL_API int  wc_CheckRsaKey(RsaKey* key);
     
    241252WOLFSSL_API int  wc_RsaSSL_Verify_ex(const byte* in, word32 inLen, byte* out,
    242253                              word32 outLen, RsaKey* key, int pad_type);
     254WOLFSSL_API int  wc_RsaSSL_Verify_ex2(const byte* in, word32 inLen, byte* out,
     255                              word32 outLen, RsaKey* key, int pad_type,
     256                              enum wc_HashType hash);
    243257WOLFSSL_API int  wc_RsaPSS_VerifyInline(byte* in, word32 inLen, byte** out,
    244258                                        enum wc_HashType hash, int mgf,
     
    281295WOLFSSL_API int  wc_RsaPublicKeyDecodeRaw(const byte* n, word32 nSz,
    282296                                        const byte* e, word32 eSz, RsaKey* key);
    283 WOLFSSL_API int wc_RsaKeyToDer(RsaKey*, byte* output, word32 inLen);
    284 
     297#ifdef WOLFSSL_KEY_GEN
     298    WOLFSSL_API int wc_RsaKeyToDer(RsaKey*, byte* output, word32 inLen);
     299#endif
    285300
    286301#ifdef WC_RSA_BLINDING
     
    361376                                   int bits, void* heap);
    362377
     378WOLFSSL_LOCAL int wc_hash2mgf(enum wc_HashType hType);
     379
    363380#endif /* HAVE_USER_RSA */
    364381
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/settings.h

    r457 r464  
    6363/* #define MICROCHIP_TCPIP */
    6464
     65/* Uncomment next line if using above Microchip TCP/IP defines with BSD API */
     66/* #define MICROCHIP_TCPIP_BSD_API */
     67
    6568/* Uncomment next line if using PIC32MZ Crypto Engine */
    6669/* #define WOLFSSL_MICROCHIP_PIC32MZ */
     
    210213/* #define WOLFSSL_RENESAS_RX65N */
    211214
     215/* Uncomment next line if using Solaris OS*/
     216/* #define WOLFSSL_SOLARIS */
     217
     218/* Uncomment next line if building for Linux Kernel Module */
     219/* #define WOLFSSL_LINUXKM */
     220
     221
    212222#include <wolfssl/wolfcrypt/visibility.h>
    213223
    214224#ifdef WOLFSSL_USER_SETTINGS
    215225    #include "user_settings.h"
    216 #endif
    217 
     226#elif defined(USE_HAL_DRIVER) && !defined(HAVE_CONFIG_H)
     227    /* STM Configuration File (generated by CubeMX) */
     228    #include "wolfSSL.I-CUBE-wolfSSL_conf.h"
     229#endif
    218230
    219231/* make sure old RNG name is used with CTaoCrypt FIPS */
     
    293305#endif
    294306
    295 #if defined(WOLFSSL_RENESAS_RA6M3G)
     307#if defined(WOLFSSL_RENESAS_RA6M3G) || defined(WOLFSSL_RENESAS_RA6M3)
    296308    /* settings in user_settings.h */
    297309#endif
     
    338350    #define SIZEOF_LONG_LONG 8
    339351    #define SINGLE_THREADED
    340     #define WOLFSSL_USER_IO
     352    #ifndef MICROCHIP_TCPIP_BSD_API
     353        #define WOLFSSL_USER_IO
     354    #endif
    341355    #define NO_WRITEV
    342356    #define NO_DEV_RANDOM
     
    344358    #define USE_FAST_MATH
    345359    #define TFM_TIMING_RESISTANT
     360    #define NO_BIG_INT
     361#endif
     362
     363#ifdef WOLFSSL_MICROCHIP_PIC32MZ
    346364    #define WOLFSSL_HAVE_MIN
    347365    #define WOLFSSL_HAVE_MAX
    348     #define NO_BIG_INT
    349 #endif
    350 
    351 #ifdef WOLFSSL_MICROCHIP_PIC32MZ
     366
    352367    #ifndef NO_PIC32MZ_CRYPT
    353368        #define WOLFSSL_PIC32MZ_CRYPT
     
    373388        #include "system/system_services.h"
    374389        #include "tcpip/sntp.h"
     390    #endif
     391#endif
     392
     393#ifdef WOLFSSL_ATECC508A
     394    /* backwards compatibility */
     395#ifndef WOLFSSL_ATECC_NO_ECDH_ENC
     396    #define WOLFSSL_ATECC_ECDH_ENC
     397#endif
     398    #ifdef WOLFSSL_ATECC508A_DEBUG
     399        #define WOLFSSL_ATECC_DEBUG
    375400    #endif
    376401#endif
     
    602627        #define SIZEOF_LONG 4
    603628        #define SIZEOF_LONG_LONG 8
    604         #define NO_ASN_TIME
    605629        #define NO_DEV_RANDOM
    606630        #define NO_FILESYSTEM
     
    610634        #define USE_FAST_MATH
    611635        #define TFM_TIMING_RESISTANT
    612         #define USE_WOLFSSL_MEMORY
    613636        #define WOLFSSL_NRF51
    614637        #define WOLFSSL_USER_IO
     
    656679    /* static char* gets(char *buff); */
    657680    static char* fgets(char *buff, int sz, XFILE fp) {
    658         char * p = buff;
    659         *p = '\0';
     681        char * s = buff;
     682        *s = '\0';
    660683        while (1) {
    661             *p = tm_getchar(-1);
    662             tm_putchar(*p);
    663             if (*p == '\r') {
     684            *s = tm_getchar(-1);
     685            tm_putchar(*s);
     686            if (*s == '\r') {
    664687                tm_putchar('\n');
    665                 *p = '\0';
     688                *s = '\0';
    666689                break;
    667690            }
    668             p++;
     691            s++;
    669692        }
    670693        return buff;
     
    699722        #define XMALLOC(s, h, type)  pvPortMalloc((s))
    700723        #define XFREE(p, h, type)    vPortFree((p))
    701     #endif
    702     /* FreeRTOS pvPortRealloc() implementation can be found here:
    703         https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
    704     #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
    705         #if defined(WOLFSSL_ESPIDF)
    706             /*In IDF, realloc(p, n) is equivalent to
    707             heap_caps_realloc(p, s, MALLOC_CAP_8BIT) */
    708             #define XREALLOC(p, n, h, t) realloc((p), (n))
    709         #else
    710             #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
    711         #endif
    712     #endif
     724        /* FreeRTOS pvPortRealloc() implementation can be found here:
     725            https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
     726        #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || \
     727            defined(HAVE_ED448)
     728            #if defined(WOLFSSL_ESPIDF)
     729                /*In IDF, realloc(p, n) is equivalent to
     730                heap_caps_realloc(p, s, MALLOC_CAP_8BIT) */
     731                #define XREALLOC(p, n, h, t) realloc((p), (n))
     732            #else
     733                #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     734            #endif
     735        #endif
     736    #endif
     737
    713738    #ifndef NO_WRITEV
    714739        #define NO_WRITEV
     
    813838        #define SIZEOF_LONG_LONG 8
    814839    #else
    815         #error settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG
     840        #if !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG)
     841            #error settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG
     842        #endif
    816843    #endif
    817844
     
    823850        #define XSTRNCASECMP(s1,s2,n)  _strnicmp((s1),(s2),(n))
    824851    #else
    825         #sslpro: settings.h - please implement XSTRNCASECMP - needed for HAVE_ECC
     852        #ifndef XSTRNCASECMP
     853            #error settings.h - please implement XSTRNCASECMP - needed for HAVE_ECC
     854        #endif
    826855    #endif
    827856
     
    884913        #define XMALLOC(s, h, type)  pvPortMalloc((s))
    885914        #define XFREE(p, h, type)    vPortFree((p))
    886     #endif
    887     /* FreeRTOS pvPortRealloc() implementation can be found here:
    888         https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
    889     #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
    890         #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     915
     916        /* FreeRTOS pvPortRealloc() implementation can be found here:
     917            https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
     918        #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || \
     919            defined(HAVE_ED448)
     920            #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
     921        #endif
    891922    #endif
    892923#endif
     
    899930    #undef  TFM_TIMING_RESISTANT
    900931    #define TFM_TIMING_RESISTANT
     932#endif
     933
     934/* To support storing some of the large constant tables in flash memory rather than SRAM.
     935   Useful for processors that have limited SRAM, such as the AVR family of microtrollers. */
     936#ifdef WOLFSSL_USE_FLASHMEM
     937    /* This is supported on the avr-gcc compiler, for more information see:
     938         https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html */
     939    #define FLASH_QUALIFIER __flash
     940
     941    /* Copy data out of flash memory and into SRAM */
     942    #define XMEMCPY_P(pdest, psrc, size) memcpy_P((pdest), (psrc), (size))
     943#else
     944    #define FLASH_QUALIFIER
    901945#endif
    902946
     
    934978        /* Note: MQX has no realloc, using fastmath above */
    935979    #endif
     980    #ifdef USE_FAST_MATH
     981        /* Undef first to avoid re-definition if user_settings.h defines */
     982        #undef TFM_TIMING_RESISTANT
     983        #define TFM_TIMING_RESISTANT
     984        #undef ECC_TIMING_RESISTANT
     985        #define ECC_TIMING_RESISTANT
     986        #undef WC_RSA_BLINDING
     987        #define WC_RSA_BLINDING
     988    #endif
    936989#endif
    937990
     
    10221075
    10231076    #undef  HAVE_ECC
     1077    #ifndef WOLFCRYPT_FIPS_RAND
    10241078    #define HAVE_ECC
     1079    #endif
    10251080    #ifndef NO_AES
    10261081        #undef  HAVE_AESCCM
     
    10431098    /* random seed */
    10441099    #define NO_OLD_RNGNAME
    1045     #if defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0)
     1100    #if   defined(FREESCALE_NO_RNG)
     1101        /* nothing to define */
     1102    #elif defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0)
    10461103        #define FREESCALE_KSDK_2_0_TRNG
    10471104    #elif defined(FSL_FEATURE_SOC_RNG_COUNT) && (FSL_FEATURE_SOC_RNG_COUNT > 0)
     
    11151172
    11161173        #if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA
     1174            #ifndef WOLFCRYPT_FIPS_RAND
    11171175            #define FREESCALE_LTC_ECC
     1176            #endif
    11181177            #define FREESCALE_LTC_TFM
    11191178
     
    11651224    #undef  FP_MAX_BITS
    11661225    #define FP_MAX_BITS (8192)
     1226    #undef  SP_INT_BITS
     1227    #define SP_INT_BITS (4096)
    11671228
    11681229    #undef  NO_DH
     
    11791240#if defined(WOLFSSL_STM32F2) || defined(WOLFSSL_STM32F4) || \
    11801241    defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32F1) || \
    1181     defined(WOLFSSL_STM32L4)
     1242    defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \
     1243    defined(WOLFSSL_STM32WB) || defined(WOLFSSL_STM32H7)
    11821244
    11831245    #define SIZEOF_LONG_LONG 8
     
    12001262        #define STM32_CRYPTO
    12011263
    1202         #ifdef WOLFSSL_STM32L4
     1264        #if defined(WOLFSSL_STM32L4) || defined(WOLFSSL_STM32L5) || \
     1265            defined(WOLFSSL_STM32WB)
    12031266            #define NO_AES_192 /* hardware does not support 192-bit */
    12041267        #endif
     
    12131276    #define NO_OLD_RNGNAME
    12141277    #ifdef WOLFSSL_STM32_CUBEMX
    1215         #if defined(WOLFSSL_STM32F2)
     1278        #if defined(WOLFSSL_STM32F1)
     1279            #include "stm32f1xx_hal.h"
     1280        #elif defined(WOLFSSL_STM32F2)
    12161281            #include "stm32f2xx_hal.h"
     1282        #elif defined(WOLFSSL_STM32L5)
     1283            #include "stm32l5xx_hal.h"
    12171284        #elif defined(WOLFSSL_STM32L4)
    12181285            #include "stm32l4xx_hal.h"
     
    12231290        #elif defined(WOLFSSL_STM32F1)
    12241291            #include "stm32f1xx_hal.h"
     1292        #elif defined(WOLFSSL_STM32H7)
     1293            #include "stm32h7xx_hal.h"
     1294        #elif defined(WOLFSSL_STM32WB)
     1295            #include "stm32wbxx_hal.h"
    12251296        #endif
    12261297        #if defined(WOLFSSL_CUBEMX_USE_LL) && defined(WOLFSSL_STM32L4)
     
    12481319                #include "stm32f4xx_hash.h"
    12491320            #endif
     1321        #elif defined(WOLFSSL_STM32L5)
     1322            #include "stm32l5xx.h"
     1323            #ifdef STM32_CRYPTO
     1324                #include "stm32l5xx_cryp.h"
     1325            #endif
     1326            #ifdef STM32_HASH
     1327                #include "stm32l5xx_hash.h"
     1328            #endif
    12501329        #elif defined(WOLFSSL_STM32L4)
    12511330            #include "stm32l4xx.h"
     
    12581337        #elif defined(WOLFSSL_STM32F7)
    12591338            #include "stm32f7xx.h"
     1339        #elif defined(WOLFSSL_STM32H7)
     1340            #include "stm32h7xx.h"
    12601341        #elif defined(WOLFSSL_STM32F1)
    12611342            #include "stm32f1xx.h"
    12621343        #endif
    12631344    #endif /* WOLFSSL_STM32_CUBEMX */
    1264 #endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 || WOLFSSL_STM32F7 */
     1345#endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 ||
     1346          WOLFSSL_STM32L5 || WOLFSSL_STM32F7 || WOLFSSL_STMWB || WOLFSSL_STM32H7 */
    12651347#ifdef WOLFSSL_DEOS
    12661348    #include <deos.h>
     
    13161398    #include <stdlib.h>
    13171399    #include <os.h>
    1318     #include <net_cfg.h>
    1319     #include <net_sock.h>
    1320     #include <net_err.h>
     1400    #if defined(RTOS_MODULE_NET_AVAIL) || (APP_CFG_TCPIP_EN == DEF_ENABLED)
     1401        #include <net_cfg.h>
     1402        #include <net_sock.h>
     1403        #if (OS_VERSION < 50000)
     1404            #include <net_err.h>
     1405        #endif
     1406    #endif
    13211407    #include <lib_mem.h>
    13221408    #include <lib_math.h>
     1409    #include <lib_str.h>
     1410    #include  <stdio.h>
     1411    #include <string.h>
    13231412
    13241413    #define USE_FAST_MATH
     
    13441433    #define NO_WRITEV
    13451434
    1346     #ifndef CUSTOM_RAND_GENERATE
     1435    #if ! defined(WOLFSSL_SILABS_SE_ACCEL) && !defined(CUSTOM_RAND_GENERATE)
    13471436        #define CUSTOM_RAND_TYPE     RAND_NBR
    13481437        #define CUSTOM_RAND_GENERATE Math_Rand
     
    13741463    #define XMEMCPY(pdest, psrc, size) ((void)Mem_Copy((void *)(pdest), \
    13751464                     (void *)(psrc), (CPU_SIZE_T)(size)))
    1376     #define XMEMCMP(pmem_1, pmem_2, size) \
    1377                    (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1), \
    1378                                           (void *)(pmem_2), \
     1465
     1466    #if (OS_VERSION < 50000)
     1467        #define XMEMCMP(pmem_1, pmem_2, size)                   \
     1468                   (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1),     \
     1469                                          (void *)(pmem_2),     \
    13791470                     (CPU_SIZE_T)(size))) ? DEF_NO : DEF_YES)
     1471    #else
     1472      /* Work around for Micrium OS version 5.8 change in behavior
     1473       * that returns DEF_NO for 0 size compare
     1474       */
     1475        #define XMEMCMP(pmem_1, pmem_2, size)                           \
     1476            (( (size < 1 ) ||                                           \
     1477               ((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1),                  \
     1478                                     (void *)(pmem_2),                  \
     1479                                     (CPU_SIZE_T)(size)) == DEF_YES))   \
     1480             ? 0 : 1)
     1481        #define XSNPRINTF snprintf
     1482    #endif
     1483
    13801484    #define XMEMMOVE XMEMCPY
    13811485
     
    13911495    #endif
    13921496#endif /* MICRIUM */
     1497
     1498#if defined(sun) || defined(__sun)
     1499# if defined(__SVR4) || defined(__svr4__)
     1500    /* Solaris */
     1501    #ifndef WOLFSSL_SOLARIS
     1502        #define WOLFSSL_SOLARIS
     1503    #endif
     1504# else
     1505    /* SunOS */
     1506# endif
     1507#endif
     1508
     1509#ifdef WOLFSSL_SOLARIS
     1510    /* Avoid naming clash with fp_zero from math.h > ieefp.h */
     1511    #define WOLFSSL_DH_CONST
     1512#endif
    13931513
    13941514#ifdef WOLFSSL_MCF5441X
     
    15341654    #define HAVE_AES_ECB
    15351655#endif
     1656#endif
     1657
     1658/* If DCP is used without SINGLE_THREADED, enforce WOLFSSL_CRYPT_HW_MUTEX */
     1659#if defined(WOLFSSL_IMXRT_DCP) && !defined(SINGLE_THREADED)
     1660    #undef WOLFSSL_CRYPT_HW_MUTEX
     1661    #define WOLFSSL_CRYPT_HW_MUTEX 1
    15361662#endif
    15371663
     
    16531779#endif
    16541780
     1781/* The minimum allowed ECC key size */
     1782/* Note: 224-bits is equivelant to 2048-bit RSA */
     1783#ifndef ECC_MIN_KEY_SZ
     1784    #ifdef WOLFSSL_MIN_ECC_BITS
     1785        #define ECC_MIN_KEY_SZ WOLFSSL_MIN_ECC_BITS
     1786    #else
     1787        #if defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && HAVE_FIPS_VERSION >= 2
     1788            /* FIPSv2 and ready (for now) includes 192-bit support */
     1789            #define ECC_MIN_KEY_SZ 192
     1790        #else
     1791            #define ECC_MIN_KEY_SZ 224
     1792        #endif
     1793    #endif
     1794#endif
     1795
    16551796/* ECC Configs */
    16561797#ifdef HAVE_ECC
     
    18361977    #endif
    18371978#endif
     1979#if defined(HAVE_FFDHE) && defined(SP_INT_BITS)
     1980    #if MIN_FFDHE_FP_MAX_BITS > SP_INT_BITS * 2
     1981        #error "FFDHE parameters are too large for SP_INT_BIT as set"
     1982    #endif
     1983#endif
    18381984
    18391985/* if desktop type system and fastmath increase default max bits */
    1840 #ifdef WOLFSSL_X86_64_BUILD
     1986#if defined(WOLFSSL_X86_64_BUILD) || defined(WOLFSSL_AARCH64_BUILD)
    18411987    #if defined(USE_FAST_MATH) && !defined(FP_MAX_BITS)
    18421988        #if MIN_FFDHE_FP_MAX_BITS <= 8192
     
    18441990        #else
    18451991            #define FP_MAX_BITS MIN_FFDHE_FP_MAX_BITS
     1992        #endif
     1993    #endif
     1994    #if defined(WOLFSSL_SP_MATH_ALL) && !defined(SP_INT_BITS)
     1995        #if MIN_FFDHE_FP_MAX_BITS <= 8192
     1996            #define SP_INT_BITS 4096
     1997        #else
     1998            #define PS_INT_BITS MIN_FFDHE_FP_MAX_BITS / 2
    18461999        #endif
    18472000    #endif
     
    20002153
    20012154
     2155#ifdef WOLFSSL_LINUXKM
     2156    #ifndef NO_DEV_RANDOM
     2157        #define NO_DEV_RANDOM
     2158    #endif
     2159    #ifndef NO_WRITEV
     2160        #define NO_WRITEV
     2161    #endif
     2162    #ifndef NO_FILESYSTEM
     2163        #define NO_FILESYSTEM
     2164    #endif
     2165    #ifndef NO_STDIO_FILESYSTEM
     2166        #define NO_STDIO_FILESYSTEM
     2167    #endif
     2168    #ifndef WOLFSSL_NO_SOCK
     2169        #define WOLFSSL_NO_SOCK
     2170    #endif
     2171    #ifndef WOLFSSL_DH_CONST
     2172        #define WOLFSSL_DH_CONST
     2173    #endif
     2174    #ifndef WOLFSSL_USER_IO
     2175        #define WOLFSSL_USER_IO
     2176    #endif
     2177    #ifndef USE_WOLF_STRTOK
     2178        #define USE_WOLF_STRTOK
     2179    #endif
     2180    #ifndef WOLFSSL_SP_DIV_WORD_HALF
     2181        #define WOLFSSL_SP_DIV_WORD_HALF
     2182    #endif
     2183    #ifndef WOLFSSL_OLD_PRIME_CHECK
     2184        #define WOLFSSL_OLD_PRIME_CHECK
     2185    #endif
     2186    #ifndef WOLFSSL_TEST_SUBROUTINE
     2187        #define WOLFSSL_TEST_SUBROUTINE static
     2188    #endif
     2189    #undef HAVE_STRINGS_H
     2190    #undef HAVE_ERRNO_H
     2191    #undef HAVE_THREAD_LS
     2192    #undef WOLFSSL_HAVE_MIN
     2193    #undef WOLFSSL_HAVE_MAX
     2194    #define SIZEOF_LONG         8
     2195    #define SIZEOF_LONG_LONG    8
     2196    #define CHAR_BIT            8
     2197    #ifndef WOLFSSL_SP_DIV_64
     2198        #define WOLFSSL_SP_DIV_64
     2199    #endif
     2200    #ifndef WOLFSSL_SP_DIV_WORD_HALF
     2201        #define WOLFSSL_SP_DIV_WORD_HALF
     2202    #endif
     2203#endif
     2204
     2205
    20022206/* Place any other flags or defines here */
    20032207
     
    20072211#endif /* WOLFSSL_MYSQL_COMPATIBLE */
    20082212
    2009 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2213#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
     2214 || defined(HAVE_LIGHTY)
    20102215    #define SSL_OP_NO_COMPRESSION    SSL_OP_NO_COMPRESSION
    20112216    #define OPENSSL_NO_ENGINE
     
    20282233#endif
    20292234
    2030 #if defined(WOLFSSL_NGINX) || defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
     2235#ifdef HAVE_SNI
    20312236    #define SSL_CTRL_SET_TLSEXT_HOSTNAME 55
    20322237#endif
     
    21012306
    21022307/* Parts of the openssl compatibility layer require peer certs */
    2103 #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
     2308#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) \
     2309 || defined(HAVE_LIGHTY)
    21042310    #undef  KEEP_PEER_CERT
    21052311    #define KEEP_PEER_CERT
    21062312#endif
    21072313
    2108 /* RAW hash function APIs are not implemented with ARMv8 hardware acceleration*/
    2109 #ifdef WOLFSSL_ARMASM
     2314/* RAW hash function APIs are not implemented */
     2315#if defined(WOLFSSL_ARMASM) || defined(WOLFSSL_AFALG_HASH)
    21102316    #undef  WOLFSSL_NO_HASH_RAW
    21112317    #define WOLFSSL_NO_HASH_RAW
     2318#endif
     2319
     2320/* XChacha not implemented with ARM assembly ChaCha */
     2321#if defined(WOLFSSL_ARMASM)
     2322    #undef HAVE_XCHACHA
    21122323#endif
    21132324
     
    21502361#if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(WOLFSSL_SHA384) && \
    21512362    !defined(WOLFSSL_SHA512) && defined(WC_NO_RNG) && \
    2152                     defined(WOLFSSL_SP_MATH) && defined(WOLFSSL_RSA_PUBLIC_ONLY)
     2363    (defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)) && \
     2364    defined(WOLFSSL_RSA_PUBLIC_ONLY)
    21532365    #undef  WOLFSSL_NO_FORCE_ZERO
    21542366    #define WOLFSSL_NO_FORCE_ZERO
     
    21742386#ifdef NO_WOLFSSL_SMALL_STACK
    21752387    #undef WOLFSSL_SMALL_STACK
     2388#endif
     2389
     2390#ifdef WOLFSSL_SMALL_STACK_STATIC
     2391    #undef WOLFSSL_SMALL_STACK_STATIC
     2392    #define WOLFSSL_SMALL_STACK_STATIC static
     2393#else
     2394    #define WOLFSSL_SMALL_STACK_STATIC
    21762395#endif
    21772396
     
    21882407#endif
    21892408
     2409/* FIPS v1 does not support TLS v1.3 (requires RSA PSS and HKDF) */
     2410#if defined(HAVE_FIPS) && !defined(HAVE_FIPS_VERSION)
     2411    #undef WC_RSA_PSS
     2412    #undef WOLFSSL_TLS13
     2413#endif
     2414
     2415/* For FIPSv2 make sure the ECDSA encoding allows extra bytes
     2416 * but make sure users consider enabling it */
     2417#if !defined(NO_STRICT_ECDSA_LEN) && defined(HAVE_FIPS) && \
     2418        defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 2)
     2419    /* ECDSA length checks off by default for CAVP testing
     2420     * consider enabling strict checks in production */
     2421    #define NO_STRICT_ECDSA_LEN
     2422#endif
     2423
    21902424
    21912425#ifdef __cplusplus
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha.h

    r457 r464  
    7373    #include <wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h>
    7474#endif
     75#ifdef WOLFSSL_IMXRT_DCP
     76    #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h>
     77#endif
     78#if defined(WOLFSSL_SILABS_SE_ACCEL)
     79    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
     80#endif
    7581
    7682#if !defined(NO_OLD_SHA_NAMES)
     
    102108   !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
    103109    #include "wolfssl/wolfcrypt/port/Renesas/renesas-tsip-crypt.h"
     110#elif defined(WOLFSSL_PSOC6_CRYPTO)
     111    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
    104112#else
    105113
     
    110118#elif defined(STM32_HASH)
    111119        STM32_HASH_Context stmCtx;
     120#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     121        wc_silabs_sha_t silabsCtx;
    112122#else
    113123        word32  buffLen;   /* in bytes          */
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha256.h

    r457 r464  
    8888#if defined(WOLFSSL_CRYPTOCELL)
    8989    #include <wolfssl/wolfcrypt/port/arm/cryptoCell.h>
     90#endif
     91#if defined(WOLFSSL_SILABS_SE_ACCEL)
     92    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
    9093#endif
    9194
     
    127130   !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH)
    128131    #include "wolfssl/wolfcrypt/port/Renesas/renesas-tsip-crypt.h"
     132#elif defined(WOLFSSL_PSOC6_CRYPTO)
     133    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
     134#elif defined(WOLFSSL_IMXRT_DCP)
     135    #include <wolfssl/wolfcrypt/port/nxp/dcp_port.h>
    129136#else
    130137
     
    135142#elif defined(STM32_HASH_SHA2)
    136143    STM32_HASH_Context stmCtx;
     144#elif defined(WOLFSSL_SILABS_SE_ACCEL)
     145  wc_silabs_sha_t silabsCtx;
    137146#else
    138147    /* alignment on digest and buffer speeds up ARMv8 crypto operations */
     
    143152    word32  hiLen;     /* length in bytes   */
    144153    void*   heap;
     154#endif
    145155#ifdef WOLFSSL_PIC32MZ_HASH
    146156    hashUpdCache cache; /* cache for updates */
     
    151161#ifdef WOLFSSL_SMALL_STACK_CACHE
    152162    word32* W;
    153 #endif
     163#endif /* !FREESCALE_LTC_SHA && !STM32_HASH_SHA2 */
    154164#ifdef WOLFSSL_DEVCRYPTO_HASH
    155165    WC_CRYPTODEV ctx;
     
    168178    int    devId;
    169179    void*  devCtx; /* generic crypto callback context */
    170 #endif
    171180#endif
    172181#if defined(WOLFSSL_HASH_FLAGS) || defined(WOLF_CRYPTO_CB)
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/sha512.h

    r457 r464  
    3131
    3232#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
     33
    3334
    3435#if defined(HAVE_FIPS) && \
     
    7677    #include <wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h>
    7778#endif
     79#if defined(WOLFSSL_SILABS_SE_ACCEL)
     80    #include <wolfssl/wolfcrypt/port/silabs/silabs_hash.h>
     81#endif
     82
    7883#if defined(_MSC_VER)
    7984    #define SHA512_NOINLINE __declspec(noinline)
     
    112117#ifdef WOLFSSL_IMX6_CAAM
    113118    #include "wolfssl/wolfcrypt/port/caam/wolfcaam_sha.h"
     119#elif defined (WOLFSSL_PSOC6_CRYPTO)
     120    #include "wolfssl/wolfcrypt/port/cypress/psoc6_crypto.h"
    114121#else
    115122/* wc_Sha512 digest */
     
    134141    WC_ESP32SHA ctx;
    135142#endif
     143#if defined(WOLFSSL_SILABS_SE_ACCEL)
     144  wc_silabs_sha_t silabsCtx;
     145#endif
     146
    136147#if defined(WOLFSSL_HASH_FLAGS) || defined(WOLF_CRYPTO_CB)
    137148    word32 flags; /* enum wc_HashFlags in hash.h */
     
    153164
    154165#ifdef WOLFSSL_SHA512
     166
    155167
    156168WOLFSSL_API int wc_InitSha512(wc_Sha512*);
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/types.h

    r457 r464  
    2323    \file wolfssl/wolfcrypt/types.h
    2424*/
    25 
     25/*
     26DESCRIPTION
     27This library defines the primitive data types and abstraction macros to
     28decouple library dependencies with standard string, memory and so on.
     29
     30*/
    2631#ifndef WOLF_CRYPT_TYPES_H
    2732#define WOLF_CRYPT_TYPES_H
     
    6065        #ifndef byte
    6166            typedef unsigned char  byte;
     67            typedef   signed char  sword8;
     68            typedef unsigned char  word8;
    6269        #endif
    6370        #ifdef WC_16BIT_CPU
     71            typedef          int   sword16;
    6472            typedef unsigned int   word16;
     73            typedef          long  sword32;
    6574            typedef unsigned long  word32;
    6675        #else
     76            typedef          short sword16;
    6777            typedef unsigned short word16;
     78            typedef          int   sword32;
    6879            typedef unsigned int   word32;
    6980        #endif
     
    110121        #define WORD64_AVAILABLE
    111122        #define W64LIT(x) x##ui64
     123        typedef          __int64 sword64;
    112124        typedef unsigned __int64 word64;
    113125    #elif defined(__EMSCRIPTEN__)
    114126        #define WORD64_AVAILABLE
    115127        #define W64LIT(x) x##ull
     128        typedef          long long sword64;
    116129        typedef unsigned long long word64;
    117130    #elif defined(SIZEOF_LONG) && SIZEOF_LONG == 8
    118131        #define WORD64_AVAILABLE
    119132        #define W64LIT(x) x##LL
     133        typedef          long sword64;
    120134        typedef unsigned long word64;
    121135    #elif defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG == 8
    122136        #define WORD64_AVAILABLE
    123137        #define W64LIT(x) x##LL
     138        typedef          long long sword64;
    124139        typedef unsigned long long word64;
    125140    #elif defined(__SIZEOF_LONG_LONG__) && __SIZEOF_LONG_LONG__ == 8
    126141        #define WORD64_AVAILABLE
    127142        #define W64LIT(x) x##LL
     143        typedef          long long sword64;
    128144        typedef unsigned long long word64;
    129145    #endif
     
    150166            #define WOLFCRYPT_SLOW_WORD64
    151167        #endif
     168        #define WC_32BIT_CPU
    152169    #endif
    153170
     
    163180        #define MP_16BIT  /* for mp_int, mp_word needs to be twice as big as
    164181                             mp_digit, no 64 bit type so make mp_digit 16 bit */
     182        #define WC_32BIT_CPU
    165183#endif
    166184
     
    198216        #endif
    199217    #else
    200         #define WC_INLINE
     218        #ifdef __GNUC__
     219            #define WC_INLINE __attribute__((unused))
     220        #else
     221            #define WC_INLINE
     222        #endif
    201223    #endif
    202224    #endif
     
    245267        #if ((__GNUC__ > 7) || ((__GNUC__ == 7) && (__GNUC_MINOR__ >= 1)))
    246268            #undef  FALL_THROUGH
    247             #define FALL_THROUGH __attribute__ ((fallthrough));
     269            #if defined(WOLFSSL_LINUXKM) && defined(fallthrough)
     270                #define FALL_THROUGH fallthrough
     271            #else
     272                #define FALL_THROUGH __attribute__ ((fallthrough));
     273            #endif
    248274        #endif
    249275    #endif
     
    343369        /* just use plain C stdlib stuff if desired */
    344370        #include <stdlib.h>
    345         #define XMALLOC(s, h, t)     malloc((s))
     371        #define XMALLOC(s, h, t)     malloc((size_t)(s))
    346372        #define XFREE(p, h, t)       {void* xp = (p); if((xp)) free((xp));}
    347         #define XREALLOC(p, n, h, t) realloc((p), (n))
    348         #endif
     373        #define XREALLOC(p, n, h, t) realloc((p), (size_t)(n))
     374        #endif
     375
     376    #elif defined(WOLFSSL_LINUXKM)
     377        /* the requisite linux/slab.h is included in wc_port.h, with incompatible warnings masked out. */
     378        #define XMALLOC(s, h, t)     ({(void)(h); (void)(t); kmalloc(s, GFP_KERNEL);})
     379        #define XFREE(p, h, t)       ({void* _xp; (void)(h); _xp = (p); if(_xp) kfree(_xp);})
     380        #define XREALLOC(p, n, h, t) ({(void)(h); (void)(t); krealloc((p), (n), GFP_KERNEL);})
     381
    349382    #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \
    350383            && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \
     
    376409    #endif
    377410
    378     /* declare/free variable handling for async */
    379     #ifdef WOLFSSL_ASYNC_CRYPT
     411    /* declare/free variable handling for async and smallstack */
     412    #if defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLFSSL_SMALL_STACK)
     413        #define DECLARE_VAR_IS_HEAP_ALLOC
    380414        #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \
    381             VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT);
    382         #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \
    383             VAR_TYPE* VAR_NAME = ({ \
    384                 VAR_TYPE* ptr = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT); \
    385                 if (ptr && INIT_VALUE) { \
    386                     XMEMCPY(ptr, INIT_VALUE, sizeof(VAR_TYPE) * VAR_SIZE); \
    387                 } \
    388                 ptr; \
    389             })
     415            VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT)
    390416        #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    391417            VAR_TYPE* VAR_NAME[VAR_ITEMS]; \
    392             int idx##VAR_NAME; \
     418            int idx##VAR_NAME, inner_idx_##VAR_NAME; \
    393419            for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \
    394420                VAR_NAME[idx##VAR_NAME] = (VAR_TYPE*)XMALLOC(VAR_SIZE, (HEAP), DYNAMIC_TYPE_WOLF_BIGINT); \
     421                if (VAR_NAME[idx##VAR_NAME] == NULL) { \
     422                    for (inner_idx_##VAR_NAME = 0; inner_idx_##VAR_NAME < idx##VAR_NAME; inner_idx_##VAR_NAME++) { \
     423                        XFREE(VAR_NAME[inner_idx_##VAR_NAME], HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \
     424                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     425                    } \
     426                    for (inner_idx_##VAR_NAME = idx##VAR_NAME + 1; inner_idx_##VAR_NAME < VAR_ITEMS; inner_idx_##VAR_NAME++) { \
     427                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     428                    } \
     429                    break; \
     430                } \
    395431            }
    396432        #define FREE_VAR(VAR_NAME, HEAP) \
     
    407443            FREE_ARRAY(VAR_NAME, VAR_ITEMS, HEAP)
    408444    #else
     445        #undef DECLARE_VAR_IS_HEAP_ALLOC
    409446        #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \
    410447            VAR_TYPE VAR_NAME[VAR_SIZE]
    411         #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \
    412             VAR_TYPE* VAR_NAME = (VAR_TYPE*)INIT_VALUE
    413448        #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    414449            VAR_TYPE VAR_NAME[VAR_ITEMS][VAR_SIZE]
     
    418453        #define DECLARE_ARRAY_DYNAMIC_DEC(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    419454            VAR_TYPE* VAR_NAME[VAR_ITEMS]; \
    420             int idx##VAR_NAME;
     455            int idx##VAR_NAME, inner_idx_##VAR_NAME;
    421456        #define DECLARE_ARRAY_DYNAMIC_EXE(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \
    422457            for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \
    423458                VAR_NAME[idx##VAR_NAME] = (VAR_TYPE*)XMALLOC(VAR_SIZE, (HEAP), DYNAMIC_TYPE_TMP_BUFFER); \
     459                if (VAR_NAME[idx##VAR_NAME] == NULL) { \
     460                    for (inner_idx_##VAR_NAME = 0; inner_idx_##VAR_NAME < idx##VAR_NAME; inner_idx_##VAR_NAME++) { \
     461                        XFREE(VAR_NAME[inner_idx_##VAR_NAME], HEAP, DYNAMIC_TYPE_TMP_BUFFER); \
     462                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     463                    } \
     464                    for (inner_idx_##VAR_NAME = idx##VAR_NAME + 1; inner_idx_##VAR_NAME < VAR_ITEMS; inner_idx_##VAR_NAME++) { \
     465                        VAR_NAME[inner_idx_##VAR_NAME] = NULL; \
     466                    } \
     467                    break; \
     468                } \
    424469            }
    425470        #define FREE_ARRAY_DYNAMIC(VAR_NAME, VAR_ITEMS, HEAP) \
     
    438483    #endif
    439484
    440     #ifndef STRING_USER
    441         #include <string.h>
    442         #define XMEMCPY(d,s,l)    memcpy((d),(s),(l))
    443         #define XMEMSET(b,c,l)    memset((b),(c),(l))
    444         #define XMEMCMP(s1,s2,n)  memcmp((s1),(s2),(n))
    445         #define XMEMMOVE(d,s,l)   memmove((d),(s),(l))
     485        #ifndef STRING_USER
     486        #if defined(WOLFSSL_LINUXKM)
     487            #include <linux/string.h>
     488        #else
     489            #include <string.h>
     490        #endif
     491
     492            #define XMEMCPY(d,s,l)    memcpy((d),(s),(l))
     493            #define XMEMSET(b,c,l)    memset((b),(c),(l))
     494            #define XMEMCMP(s1,s2,n)  memcmp((s1),(s2),(n))
     495            #define XMEMMOVE(d,s,l)   memmove((d),(s),(l))
    446496
    447497        #define XSTRLEN(s1)       strlen((s1))
    448498        #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n))
    449         /* strstr, strncmp, and strncat only used by wolfSSL proper,
     499        /* strstr, strncmp, strcmp, and strncat only used by wolfSSL proper,
    450500         * not required for wolfCrypt only */
    451501        #define XSTRSTR(s1,s2)    strstr((s1),(s2))
    452502        #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n))
    453503        #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n))
     504        #define XSTRCMP(s1,s2)    strcmp((s1),(s2))
    454505        #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n))
    455506
     
    474525            #if defined(WOLFSSL_DEOS)
    475526                #define XSTRNCASECMP(s1,s2,n) strnicmp((s1),(s2),(n))
     527            #elif defined(WOLFSSL_CMSIS_RTOSv2)
     528                #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n))
    476529            #else
    477530                #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n))
     
    490543                #include <stdio.h>
    491544            #endif
    492             #define XSNPRINTF snprintf
     545            #if defined(WOLFSSL_ESPIDF) && \
     546                (!defined(NO_ASN_TIME) && defined(HAVE_PKCS7))
     547                    #include<stdarg.h>
     548                    /* later gcc than 7.1 introduces -Wformat-truncation    */
     549                    /* In cases when truncation is expected the caller needs*/
     550                    /* to check the return value from the function so that  */
     551                    /* compiler doesn't complain.                           */
     552                    /* xtensa-esp32-elf v8.2.0 warns trancation at          */
     553                    /* GetAsnTimeString()                                   */
     554                    static WC_INLINE
     555                    int _xsnprintf_(char *s, size_t n, const char *format, ...)
     556                    {
     557                        va_list ap;
     558                        int ret;
     559                       
     560                        if ((int)n <= 0) return -1;
     561                       
     562                        va_start(ap, format);
     563                       
     564                        ret = vsnprintf(s, n, format, ap);
     565                        if (ret < 0)
     566                            ret = -1;
     567                           
     568                        va_end(ap);
     569                       
     570                        return ret;
     571                    }
     572                #define XSNPRINTF _xsnprintf_
     573            #else
     574                #define XSNPRINTF snprintf
     575            #endif
    493576            #endif
    494577        #else
     
    566649    #endif /* OPENSSL_EXTRA */
    567650
    568     #ifndef CTYPE_USER
    569         #include <ctype.h>
    570         #if defined(HAVE_ECC) || defined(HAVE_OCSP) || \
    571             defined(WOLFSSL_KEY_GEN) || !defined(NO_DSA)
     651        #ifndef CTYPE_USER
     652            #ifndef WOLFSSL_LINUXKM
     653                #include <ctype.h>
     654            #endif
     655            #if defined(HAVE_ECC) || defined(HAVE_OCSP) || \
     656            defined(WOLFSSL_KEY_GEN) || !defined(NO_DSA) || \
     657            defined(OPENSSL_EXTRA)
    572658            #define XTOUPPER(c)     toupper((c))
    573             #define XISALPHA(c)     isalpha((c))
     659        #endif
     660        #ifdef OPENSSL_ALL
     661        #define XISALNUM(c)     isalnum((c))
    574662        #endif
    575663        /* needed by wolfSSL_check_domain_name() */
     
    672760        DYNAMIC_TYPE_CURVE448     = 91,
    673761        DYNAMIC_TYPE_ED448        = 92,
     762        DYNAMIC_TYPE_AES          = 93,
     763        DYNAMIC_TYPE_CMAC         = 94,
    674764        DYNAMIC_TYPE_SNIFFER_SERVER     = 1000,
    675765        DYNAMIC_TYPE_SNIFFER_SESSION    = 1001,
     
    706796    /* hash types */
    707797    enum wc_HashType {
    708     #if defined(HAVE_SELFTEST) || defined(HAVE_FIPS)
     798    #if defined(HAVE_SELFTEST) || defined(HAVE_FIPS) && \
     799        (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION <= 2))
    709800        /* In selftest build, WC_* types are not mapped to WC_HASH_TYPE types.
    710801         * Values here are based on old selftest hmac.h enum, with additions.
     
    780871        WC_PK_TYPE_RSA_KEYGEN = 8,
    781872        WC_PK_TYPE_EC_KEYGEN = 9,
    782 
    783         WC_PK_TYPE_MAX = WC_PK_TYPE_EC_KEYGEN
     873        WC_PK_TYPE_RSA_CHECK_PRIV_KEY = 10,
     874        WC_PK_TYPE_EC_CHECK_PRIV_KEY = 11,
     875
     876        WC_PK_TYPE_MAX = WC_PK_TYPE_EC_CHECK_PRIV_KEY
    784877    };
    785878
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wc_encrypt.h

    r457 r464  
    2929
    3030#include <wolfssl/wolfcrypt/types.h>
    31 #include <wolfssl/wolfcrypt/aes.h>
    32 #include <wolfssl/wolfcrypt/chacha.h>
    33 #include <wolfssl/wolfcrypt/des3.h>
    34 #include <wolfssl/wolfcrypt/arc4.h>
     31#ifndef NO_AES
     32    #include <wolfssl/wolfcrypt/aes.h>
     33#endif
     34#ifdef HAVE_CHACHA
     35    #include <wolfssl/wolfcrypt/chacha.h>
     36#endif
     37#ifndef NO_DES3
     38    #include <wolfssl/wolfcrypt/des3.h>
     39#endif
     40#ifndef NO_RC4
     41    #include <wolfssl/wolfcrypt/arc4.h>
     42#endif
    3543
    3644#ifdef __cplusplus
     
    3846#endif
    3947
    40 /* determine max cipher key size */
     48/* determine max cipher key size - cannot use enum values here, must be define,
     49 * since WC_MAX_SYM_KEY_SIZE is used in if macro logic. */
    4150#ifndef NO_AES
    4251    #define WC_MAX_SYM_KEY_SIZE     (AES_MAX_KEY_SIZE/8)
    4352#elif defined(HAVE_CHACHA)
    44     #define WC_MAX_SYM_KEY_SIZE     CHACHA_MAX_KEY_SZ
     53    #define WC_MAX_SYM_KEY_SIZE     32 /* CHACHA_MAX_KEY_SZ */
    4554#elif !defined(NO_DES3)
    46     #define WC_MAX_SYM_KEY_SIZE     DES3_KEY_SIZE
     55    #define WC_MAX_SYM_KEY_SIZE     24 /* DES3_KEY_SIZE */
    4756#elif !defined(NO_RC4)
    48     #define WC_MAX_SYM_KEY_SIZE     RC4_KEY_SIZE
     57    #define WC_MAX_SYM_KEY_SIZE     16 /* RC4_KEY_SIZE */
    4958#else
    5059    #define WC_MAX_SYM_KEY_SIZE     32
     60#endif
     61
     62
     63#if (defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && \
     64     (HAVE_FIPS_VERSION <= 2)) || (defined(HAVE_SELFTEST) && \
     65     (!defined(HAVE_SELFTEST_VERSION) || (HAVE_SELFTEST_VERSION < 2)))
     66    /* In FIPS cert 3389 and CAVP selftest v1 build, these enums are
     67     * not in aes.h. Define them here outside the fips boundary.
     68     */
     69    #ifndef GCM_NONCE_MID_SZ
     70        /* The usual default nonce size for AES-GCM. */
     71        #define GCM_NONCE_MID_SZ 12
     72    #endif
     73    #ifndef CCM_NONCE_MIN_SZ
     74        #define CCM_NONCE_MIN_SZ 7
     75    #endif
    5176#endif
    5277
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wc_port.h

    r457 r464  
    5555#endif
    5656
     57#ifdef WOLFSSL_LINUXKM
     58    #ifdef HAVE_CONFIG_H
     59        #ifndef PACKAGE_NAME
     60            #error wc_port.h included before config.h
     61        #endif
     62        /* config.h is autogenerated without gating, and is subject to repeat
     63         * inclusions, so gate it out here to keep autodetection masking
     64         * intact:
     65         */
     66        #undef HAVE_CONFIG_H
     67    #endif
     68
     69    #ifdef BUILDING_WOLFSSL
     70
     71    _Pragma("GCC diagnostic push");
     72
     73    /* we include all the needed kernel headers with these masked out. else
     74     * there are profuse warnings.
     75     */
     76    _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"");
     77    _Pragma("GCC diagnostic ignored \"-Wpointer-arith\"");
     78    _Pragma("GCC diagnostic ignored \"-Wshadow\"");
     79    _Pragma("GCC diagnostic ignored \"-Wnested-externs\"");
     80    _Pragma("GCC diagnostic ignored \"-Wredundant-decls\"");
     81    _Pragma("GCC diagnostic ignored \"-Wsign-compare\"");
     82    _Pragma("GCC diagnostic ignored \"-Wpointer-sign\"");
     83    _Pragma("GCC diagnostic ignored \"-Wbad-function-cast\"");
     84    _Pragma("GCC diagnostic ignored \"-Wdiscarded-qualifiers\"");
     85
     86    #include <linux/kconfig.h>
     87    #include <linux/kernel.h>
     88    #include <linux/version.h>
     89    #include <linux/ctype.h>
     90    #include <linux/init.h>
     91    #include <linux/module.h>
     92    #include <linux/mm.h>
     93    #ifndef SINGLE_THREADED
     94        #include <linux/kthread.h>
     95    #endif
     96    #include <linux/net.h>
     97    #include <linux/slab.h>
     98    #if defined(WOLFSSL_AESNI) || defined(USE_INTEL_SPEEDUP)
     99        #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
     100            #include <asm/i387.h>
     101        #else
     102            #include <asm/simd.h>
     103        #endif
     104        #ifndef SAVE_VECTOR_REGISTERS
     105            #define SAVE_VECTOR_REGISTERS() kernel_fpu_begin()
     106        #endif
     107        #ifndef RESTORE_VECTOR_REGISTERS
     108            #define RESTORE_VECTOR_REGISTERS() kernel_fpu_end()
     109        #endif
     110    #elif defined(WOLFSSL_ARMASM)
     111        #include <asm/fpsimd.h>
     112        #ifndef SAVE_VECTOR_REGISTERS
     113            #define SAVE_VECTOR_REGISTERS() ({ preempt_disable(); fpsimd_preserve_current_state(); })
     114        #endif
     115        #ifndef RESTORE_VECTOR_REGISTERS
     116            #define RESTORE_VECTOR_REGISTERS() ({ fpsimd_restore_current_state(); preempt_enable(); })
     117        #endif
     118    #else
     119        #ifndef SAVE_VECTOR_REGISTERS
     120            #define SAVE_VECTOR_REGISTERS() ({})
     121        #endif
     122        #ifndef RESTORE_VECTOR_REGISTERS
     123            #define RESTORE_VECTOR_REGISTERS() ({})
     124        #endif
     125    #endif
     126
     127    _Pragma("GCC diagnostic pop");
     128
     129    /* Linux headers define these using C expressions, but we need
     130     * them to be evaluable by the preprocessor, for use in sp_int.h.
     131     */
     132    _Static_assert(sizeof(ULONG_MAX) == 8, "WOLFSSL_LINUXKM supported only on targets with 64 bit long words.");
     133    #undef UCHAR_MAX
     134    #define UCHAR_MAX 255
     135    #undef USHRT_MAX
     136    #define USHRT_MAX 65535
     137    #undef UINT_MAX
     138    #define UINT_MAX 4294967295U
     139    #undef ULONG_MAX
     140    #define ULONG_MAX 18446744073709551615UL
     141    #undef ULLONG_MAX
     142    #define ULLONG_MAX ULONG_MAX
     143    #undef INT_MAX
     144    #define INT_MAX 2147483647
     145    #undef LONG_MAX
     146    #define LONG_MAX 9223372036854775807L
     147    #undef LLONG_MAX
     148    #define LLONG_MAX LONG_MAX
     149
     150    /* remove this multifariously conflicting macro, picked up from
     151     * Linux arch/<arch>/include/asm/current.h.
     152     */
     153    #undef current
     154
     155    /* prevent gcc's mm_malloc.h from being included, since it unconditionally
     156     * includes stdlib.h, which is kernel-incompatible.
     157     */
     158    #define _MM_MALLOC_H_INCLUDED
     159
     160#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
     161    /* kvmalloc()/kvfree() and friends added in linux commit a7c3e901 */
     162    #define malloc(x) kvmalloc(x, GFP_KERNEL)
     163    #define free(x) kvfree(x)
     164    void *lkm_realloc(void *ptr, size_t newsize);
     165    #define realloc(x, y) lkm_realloc(x, y)
     166#else
     167    #define malloc(x) kmalloc(x, GFP_KERNEL)
     168    #define free(x) kfree(x)
     169    #define realloc(x,y) krealloc(x, y, GFP_KERNEL)
     170#endif
     171
     172    /* min() and max() in linux/kernel.h over-aggressively type-check, producing
     173     * myriad spurious -Werrors throughout the codebase.
     174     */
     175    #undef min
     176    #undef max
     177
     178    /* work around namespace conflict between wolfssl/internal.h (enum HandShakeType)
     179     * and linux/key.h (extern int()).
     180     */
     181    #define key_update wc_key_update
     182
     183    #define lkm_printf(format, args...) printk(KERN_INFO "wolfssl: %s(): " format, __func__, ## args)
     184    #define printf(...) lkm_printf(__VA_ARGS__)
     185
     186    #endif /* BUILDING_WOLFSSL */
     187
     188    /* needed to suppress inclusion of stdio.h in wolfssl/wolfcrypt/types.h */
     189    #define XSNPRINTF snprintf
     190
     191    /* the rigmarole around kstrtol() here is to accommodate its warn-unused-result attribute. */
     192    #define XATOI(s) ({                                 \
     193          long _xatoi_res = 0;                          \
     194          int _xatoi_ret = kstrtol(s, 10, &_xatoi_res); \
     195          if (_xatoi_ret != 0) {                        \
     196            _xatoi_res = 0;                             \
     197          }                                             \
     198          (int)_xatoi_res;                              \
     199        })
     200
     201#else /* ! WOLFSSL_LINUXKM */
     202
     203    #ifndef SAVE_VECTOR_REGISTERS
     204        #define SAVE_VECTOR_REGISTERS() do{}while(0)
     205    #endif
     206    #ifndef RESTORE_VECTOR_REGISTERS
     207        #define RESTORE_VECTOR_REGISTERS() do{}while(0)
     208    #endif
     209
     210#endif /* WOLFSSL_LINUXKM */
    57211
    58212/* THREADING/MUTEX SECTION */
     
    84238    /* do nothing, just don't pick Unix */
    85239#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS)
     240    /* do nothing */
     241#elif defined(RTTHREAD)
    86242    /* do nothing */
    87243#elif defined(EBSNET)
     
    157313#else
    158314    #ifndef SINGLE_THREADED
    159         #define WOLFSSL_PTHREADS
    160         #include <pthread.h>
     315        #ifndef WOLFSSL_USER_MUTEX
     316            #if defined(WOLFSSL_LINUXKM)
     317                #define WOLFSSL_KTHREADS
     318            #else
     319                #define WOLFSSL_PTHREADS
     320                #include <pthread.h>
     321            #endif
     322        #endif
    161323    #endif
    162324    #if (defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)) && \
    163325        !defined(NO_FILESYSTEM)
    164         #include <unistd.h>      /* for close of BIO */
     326        #ifdef FUSION_RTOS
     327            #include <fclunistd.h>
     328        #else
     329            #include <unistd.h>      /* for close of BIO */
     330        #endif
    165331    #endif
    166332#endif
     
    184350        #include "semphr.h"
    185351                typedef SemaphoreHandle_t  wolfSSL_Mutex;
     352    #elif defined (RTTHREAD)
     353        #include "rtthread.h"
     354        typedef rt_mutex_t wolfSSL_Mutex;
    186355    #elif defined(WOLFSSL_SAFERTOS)
    187356        typedef struct wolfSSL_Mutex {
     
    193362    #elif defined(WOLFSSL_PTHREADS)
    194363        typedef pthread_mutex_t wolfSSL_Mutex;
     364    #elif defined(WOLFSSL_KTHREADS)
     365        typedef struct mutex wolfSSL_Mutex;
    195366    #elif defined(THREADX)
    196367        typedef TX_MUTEX wolfSSL_Mutex;
     
    239410    #elif defined(WOLFSSL_TELIT_M2MB)
    240411        typedef M2MB_OS_MTX_HANDLE wolfSSL_Mutex;
     412    #elif defined(WOLFSSL_USER_MUTEX)
     413        /* typedef User_Mutex wolfSSL_Mutex; */
     414    #elif defined(WOLFSSL_LINUXKM)
     415        typedef struct mutex wolfSSL_Mutex;
    241416    #else
    242417        #error Need a mutex type in multithreaded mode
     
    246421/* Enable crypt HW mutex for Freescale MMCAU, PIC32MZ or STM32 */
    247422#if defined(FREESCALE_MMCAU) || defined(WOLFSSL_MICROCHIP_PIC32MZ) || \
    248     defined(STM32_CRYPTO)
     423    defined(STM32_CRYPTO) || defined(STM32_HASH) || defined(STM32_RNG)
    249424    #ifndef WOLFSSL_CRYPT_HW_MUTEX
    250425        #define WOLFSSL_CRYPT_HW_MUTEX  1
     
    289464WOLFSSL_API int wolfCrypt_Cleanup(void);
    290465
     466#ifdef WOLFSSL_TRACK_MEMORY_VERBOSE
     467    WOLFSSL_API long wolfCrypt_heap_peakAllocs_checkpoint(void);
     468    WOLFSSL_API long wolfCrypt_heap_peakBytes_checkpoint(void);
     469#endif
     470
    291471
    292472/* FILESYSTEM SECTION */
     
    312492    #define XBADFILE                 -1
    313493    #define XFGETS(b,s,f)            -2 /* Not ported yet */
     494
    314495#elif defined(LSR_FS)
    315496    #include <fs.h>
     
    324505    #define XSEEK_END               0
    325506    #define XBADFILE                NULL
    326     #define XFGETS(b,s,f)            -2 /* Not ported yet */
     507    #define XFGETS(b,s,f)           -2 /* Not ported yet */
     508
    327509#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
    328510    #define XFILE                   MQX_FILE_PTR
     
    337519    #define XBADFILE                NULL
    338520    #define XFGETS                  fgets
     521
    339522#elif defined(WOLFSSL_DEOS)
    340523    #define NO_FILESYSTEM
    341524    #warning "TODO - DDC-I Certifiable Fast File System for Deos is not integrated"
    342     //#define XFILE      bfd *
     525    /* #define XFILE      bfd * */
    343526
    344527#elif defined(MICRIUM)
     
    355538    #define XBADFILE   NULL
    356539    #define XFGETS(b,s,f) -2 /* Not ported yet */
     540
    357541#elif defined(WOLFSSL_NUCLEUS_1_2)
    358542    #include "fal/inc/fal.h"
     
    367551    #define XSEEK_END  PSEEK_END
    368552    #define XBADFILE   NULL
     553
    369554#elif defined(WOLFSSL_APACHE_MYNEWT)
    370555    #include <fs/fs.h>
     
    381566    #define XBADFILE   NULL
    382567    #define XFGETS(b,s,f) -2 /* Not ported yet */
     568
    383569#elif defined(WOLFSSL_ZEPHYR)
    384570    #include <fs.h>
     
    415601    #define XFGETS(b,s,f)            -2 /* Not ported yet */
    416602
     603#elif defined (WOLFSSL_XILINX)
     604    #include "xsdps.h"
     605    #include "ff.h"
     606
     607    /* workaround to declare variable and provide type */
     608    #define XFILE                    FIL curFile; FIL*
     609    #define XFOPEN(NAME, MODE)       ({ FRESULT res; res = f_open(&curFile, (NAME), (FA_OPEN_ALWAYS | FA_WRITE | FA_READ)); (res == FR_OK) ? &curFile : NULL; })
     610    #define XFSEEK(F, O, W)          f_lseek((F), (O))
     611    #define XFTELL(F)                f_tell((F))
     612    #define XREWIND(F)               f_rewind((F))
     613    #define XFREAD(BUF, SZ, AMT, F)  ({ FRESULT res; UINT br; res = f_read((F), (BUF), (SZ)*(AMT), &br); (void)br; res; })
     614    #define XFWRITE(BUF, SZ, AMT, F) ({ FRESULT res; UINT written; res = f_write((F), (BUF), (SZ)*(AMT), &written); (void)written; res; })
     615    #define XFCLOSE(F)               f_close((F))
     616    #define XSEEK_END                0
     617    #define XBADFILE                 NULL
     618    #define XFGETS(b,s,f)            f_gets((b), (s), (f))
     619
     620#elif defined(FUSION_RTOS)
     621    #include <fclstdio.h>
     622    #include <fclunistd.h>
     623    #include <fcldirent.h>
     624    #include <sys/fclstat.h>
     625    #include <fclstring.h>
     626    #include <fcl_os.h>
     627    #define XFILE     FCL_FILE*
     628    #define XFOPEN    FCL_FOPEN
     629    #define XFSEEK    FCL_FSEEK
     630    #define XFTELL    FCL_FTELL
     631    #define XREWIND   FCL_REWIND
     632    #define XFREAD    FCL_FREAD
     633    #define XFWRITE   FCL_FWRITE
     634    #define XFCLOSE   FCL_FCLOSE
     635    #define XSEEK_END SEEK_END
     636    #define XBADFILE  NULL
     637    #define XFGETS    FCL_FGETS
     638    #define XFPUTS    FCL_FPUTS
     639    #define XFPRINTF  FCL_FPRINTF
     640    #define XVFPRINTF FCL_VFPRINTF
     641    #define XVSNPRINTF  FCL_VSNPRINTF
     642    #define XSNPRINTF  FCL_SNPRINTF
     643    #define XSPRINTF  FCL_SPRINTF
     644    #define DIR       FCL_DIR
     645    #define stat      FCL_STAT
     646    #define opendir   FCL_OPENDIR
     647    #define closedir  FCL_CLOSEDIR
     648    #define readdir   FCL_READDIR
     649    #define dirent    fclDirent
     650    #define strncasecmp FCL_STRNCASECMP
     651
     652    /* FUSION SPECIFIC ERROR CODE */
     653    #define FUSION_IO_SEND_E 63
     654
    417655#elif defined(WOLFSSL_USER_FILESYSTEM)
    418656    /* To be defined in user_settings.h */
     
    427665        #define XFOPEN     fopen
    428666    #endif
     667    #define XFDOPEN    fdopen
    429668    #define XFSEEK     fseek
    430669    #define XFTELL     ftell
     
    436675    #define XBADFILE   NULL
    437676    #define XFGETS     fgets
     677    #define XFPRINTF   fprintf
    438678
    439679    #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\
     
    442682        #include <unistd.h>
    443683        #include <sys/stat.h>
    444     #endif
     684        #define XWRITE      write
     685        #define XREAD       read
     686        #define XCLOSE      close
     687    #endif
     688#endif
     689
     690/* Defaults, user may over-ride with user_settings.h or in a porting section
     691 * above
     692 */
     693#ifndef XVFPRINTF
     694    #define XVFPRINTF  vfprintf
     695#endif
     696#ifndef XVSNPRINTF
     697    #define XVSNPRINTF vsnprintf
     698#endif
     699#ifndef XFPUTS
     700    #define XFPUTS     fputs
     701#endif
     702#ifndef XSPRINTF
     703    #define XSPRINTF   sprintf
    445704#endif
    446705
     
    451710        #define MAX_PATH 256
    452711    #endif
     712
     713    WOLFSSL_LOCAL int wc_FileLoad(const char* fname, unsigned char** buf,
     714        size_t* bufLen, void* heap);
    453715
    454716#if !defined(NO_WOLFSSL_DIR) && !defined(WOLFSSL_NUCLEUS) && \
     
    529791
    530792#elif defined(WOLFSSL_XILINX)
    531     #define USER_TIME
     793    #ifndef XTIME
     794        #define XTIME(t1)       xilinx_time((t1))
     795    #endif
    532796    #include <time.h>
    533797
     
    554818#elif defined(MICROCHIP_TCPIP_V5) || defined(MICROCHIP_TCPIP)
    555819    #include <time.h>
     820    extern time_t pic32_time(time_t* timer);
    556821    #define XTIME(t1)       pic32_time((t1))
    557822    #define XGMTIME(c, t)   gmtime((c))
     
    638903    #define USE_WOLF_TM
    639904
     905
     906#elif defined(WOLFSSL_LINUXKM)
     907    #ifdef BUILDING_WOLFSSL
     908
     909    /* includes are all above, with incompatible warnings masked out. */
     910    #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 0)
     911    typedef __kernel_time_t time_t;
     912    #else
     913    typedef __kernel_time64_t time_t;
     914    #endif
     915    extern time_t time(time_t * timer);
     916    #define XTIME time
     917    #define WOLFSSL_GMTIME
     918    #define XGMTIME(c, t) gmtime(c)
     919    #define NO_TIMEVAL 1
     920
     921    #endif /* BUILDING_WOLFSSL */
     922
    640923#else
    641924    /* default */
     
    675958#endif
    676959#if !defined(XGMTIME) && !defined(TIME_OVERRIDES)
    677     #if defined(WOLFSSL_GMTIME) || !defined(HAVE_GMTIME_R) || defined(WOLF_C99)
    678         #define XGMTIME(c, t)   gmtime((c))
    679     #else
     960    /* Always use gmtime_r if available. */
     961    #if defined(HAVE_GMTIME_R)
    680962        #define XGMTIME(c, t)   gmtime_r((c), (t))
    681963        #define NEED_TMP_TIME
     964    #else
     965        #define XGMTIME(c, t)   gmtime((c))
    682966    #endif
    683967#endif
    684968#if !defined(XVALIDATE_DATE) && !defined(HAVE_VALIDATE_DATE)
    685969    #define USE_WOLF_VALIDDATE
    686     #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t))
     970    #define XVALIDATE_DATE(d, f, t) wc_ValidateDate((d), (f), (t))
    687971#endif
    688972
     
    7431027
    7441028#ifndef FILE_BUFFER_SIZE
    745     #define FILE_BUFFER_SIZE 1024     /* default static file buffer size for input,
     1029    #define FILE_BUFFER_SIZE 1024     /* default static file buffer size for input, \
    7461030                                    will use dynamic buffer if not big enough */
    7471031#endif
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfcrypt/wolfmath.h

    r457 r464  
    2020 */
    2121
     22/*
     23DESCRIPTION
     24This library provides big integer math functions.
     25
     26*/
    2227#ifndef __WOLFMATH_H__
    2328#define __WOLFMATH_H__
  • azure_iot_hub_f767zi/trunk/wolfssl-4.7.0/wolfssl/wolfio.h

    r457 r464  
    9595        #include <externs.h>
    9696        #include <errno.h>
     97    #elif defined(WOLFSSL_LINUXKM)
     98        /* the requisite linux/net.h is included in wc_port.h, with incompatible warnings masked out. */
    9799    #elif defined(WOLFSSL_ATMEL)
    98100        #include "socket/include/socket.h"
     
    127129    #elif defined(WOLFSSL_ZEPHYR)
    128130        #include <net/socket.h>
     131    #elif defined(MICROCHIP_PIC32)
     132        #include <sys/errno.h>
    129133    #elif defined(HAVE_NETX)
    130134        #include "nx_api.h"
    131135        #include "errno.h"
     136    #elif defined(FUSION_RTOS)
     137        #include <sys/fcltypes.h>
     138        #include <fclerrno.h>
     139        #include <fclfcntl.h>
    132140    #elif !defined(WOLFSSL_NO_SOCK)
    133141        #include <sys/types.h>
     
    159167    #endif
    160168
    161     #if defined(WOLFSSL_RENESAS_RA6M3G) /* Uses FREERTOS_TCP */
     169    #if defined(WOLFSSL_RENESAS_RA6M3G) || defined(WOLFSSL_RENESAS_RA6M3) /* Uses FREERTOS_TCP */
    162170        #include <errno.h>
    163171    #endif
     
    256264    #define SOCKET_ECONNREFUSED NX_NOT_CONNECTED
    257265    #define SOCKET_ECONNABORTED NX_NOT_CONNECTED
     266#elif defined(FUSION_RTOS)
     267    #define SOCKET_EWOULDBLOCK FCL_EWOULDBLOCK
     268    #define SOCKET_EAGAIN      FCL_EAGAIN
     269    #define SOCKET_ECONNRESET  FNS_ECONNRESET
     270    #define SOCKET_EINTR       FCL_EINTR
     271    #define SOCKET_EPIPE       FCL_EPIPE
     272    #define SOCKET_ECONNREFUSED FCL_ECONNREFUSED
     273    #define SOCKET_ECONNABORTED FNS_ECONNABORTED
    258274#else
    259275    #define SOCKET_EWOULDBLOCK EWOULDBLOCK
     
    287303    #define SEND_FUNCTION NU_Send
    288304    #define RECV_FUNCTION NU_Recv
     305#elif defined(FUSION_RTOS)
     306    #define SEND_FUNCTION FNS_SEND
     307    #define RECV_FUNCTION FNS_RECV
    289308#elif defined(WOLFSSL_ZEPHYR)
    290309    #ifndef WOLFSSL_MAX_SEND_SZ
     
    294313    #define SEND_FUNCTION send
    295314    #define RECV_FUNCTION recv
     315#elif defined(WOLFSSL_LINUXKM)
     316    #define SEND_FUNCTION linuxkm_send
     317    #define RECV_FUNCTION linuxkm_recv
    296318#else
    297319    #define SEND_FUNCTION send
     
    304326#ifdef USE_WINDOWS_API
    305327    typedef unsigned int SOCKET_T;
     328    #ifndef SOCKET_INVALID
     329        #define SOCKET_INVALID INVALID_SOCKET
     330    #endif
    306331#else
    307332    typedef int SOCKET_T;
     333    #ifndef SOCKET_INVALID
     334        #define SOCKET_INVALID -1
     335    #endif
    308336#endif
    309337
     
    360388    #endif
    361389    #define StartTCP()
     390#elif defined(FUSION_RTOS)
     391    #ifndef CloseSocket
     392        #define CloseSocket(s) do {                     \
     393                                    int err;            \
     394                                    FNS_CLOSE(s, &err); \
     395                                } while(0)
     396    #endif
    362397#else
    363398    #ifndef CloseSocket
     
    490525        WOLFSSL_CTX *ctx;
    491526        WOLFSSL *ssl;
    492         uint8_t *input_databuf;
    493         uint8_t *output_databuf;
    494         uint8_t *ssl_rx_databuf;
     527        byte *input_databuf;
     528        byte *output_databuf;
     529        byte *ssl_rx_databuf;
    495530        int ssl_rb_len;
    496531        int ssl_rb_off;
     
    500535        int closing;
    501536        uip_ipaddr_t peer_addr;
    502         uint16_t peer_port;
     537        word16 peer_port;
    503538    };
    504539
Note: See TracChangeset for help on using the changeset viewer.