From 895b1b7a6f2007fc9642b46b13ed92b818fde5c5 Mon Sep 17 00:00:00 2001 From: zhangjunhao Date: Fri, 20 Apr 2018 22:20:33 +0800 Subject: [PATCH] feat(wolfssl): Add wolfssl commercial library V3.14.0 --- components/freertos/component.mk | 2 +- components/ssl/Kconfig | 2 + components/ssl/component.mk | 10 + .../ssl/wolfssl/include/user_settings.h | 59 + components/ssl/wolfssl/include/wolfssl/ssl.h | 2851 +++++++++++++++++ .../ssl/wolfssl/include/wolfssl/version.h | 31 + .../include/wolfssl/wolfcrypt/logging.h | 117 + .../include/wolfssl/wolfcrypt/settings.h | 1646 ++++++++++ .../wolfssl/include/wolfssl/wolfcrypt/types.h | 625 ++++ .../include/wolfssl/wolfcrypt/visibility.h | 67 + .../include/wolfssl/wolfcrypt/wc_port.h | 473 +++ .../ssl/wolfssl/include/wolfssl/wolfio.h | 420 +++ components/ssl/wolfssl/lib/libwolfssl.a | Bin 0 -> 937674 bytes 13 files changed, 6302 insertions(+), 1 deletion(-) create mode 100755 components/ssl/wolfssl/include/user_settings.h create mode 100644 components/ssl/wolfssl/include/wolfssl/ssl.h create mode 100644 components/ssl/wolfssl/include/wolfssl/version.h create mode 100644 components/ssl/wolfssl/include/wolfssl/wolfcrypt/logging.h create mode 100644 components/ssl/wolfssl/include/wolfssl/wolfcrypt/settings.h create mode 100755 components/ssl/wolfssl/include/wolfssl/wolfcrypt/types.h create mode 100644 components/ssl/wolfssl/include/wolfssl/wolfcrypt/visibility.h create mode 100644 components/ssl/wolfssl/include/wolfssl/wolfcrypt/wc_port.h create mode 100644 components/ssl/wolfssl/include/wolfssl/wolfio.h create mode 100644 components/ssl/wolfssl/lib/libwolfssl.a diff --git a/components/freertos/component.mk b/components/freertos/component.mk index 4fe37f4f..efa91b52 100644 --- a/components/freertos/component.mk +++ b/components/freertos/component.mk @@ -1,6 +1,6 @@ # # Component Makefile # -COMPONENT_ADD_INCLUDEDIRS += include +COMPONENT_ADD_INCLUDEDIRS += include include/freertos COMPONENT_SRCDIRS := library diff --git a/components/ssl/Kconfig b/components/ssl/Kconfig index ee445c7c..49e10623 100644 --- a/components/ssl/Kconfig +++ b/components/ssl/Kconfig @@ -12,6 +12,8 @@ config SSL_USING_MBEDTLS bool "mbedTLS" config SSL_USING_AXTLS bool "axTLS" +config SSL_USING_WOLFSSL + bool "wolfSSL" endchoice endmenu diff --git a/components/ssl/component.mk b/components/ssl/component.mk index db6e056b..2b1be9ef 100644 --- a/components/ssl/component.mk +++ b/components/ssl/component.mk @@ -2,6 +2,15 @@ # Component Makefile # +ifdef CONFIG_SSL_USING_WOLFSSL +COMPONENT_ADD_INCLUDEDIRS := wolfssl/include + +WOLFSSLLIB = wolfssl +COMPONENT_ADD_LDFLAGS := -L $(COMPONENT_PATH)/wolfssl/lib -lwolfssl + +# re-link program if wolfssl library change +COMPONENT_ADD_LINKER_DEPS := $(patsubst %,$(COMPONENT_PATH)/wolfssl/lib/lib%.a,$(WOLFSSLLIB)) +else ifdef CONFIG_SSL_USING_MBEDTLS COMPONENT_ADD_INCLUDEDIRS := openssl/include COMPONENT_PRIV_INCLUDEDIRS := openssl/include/internal openssl/include/openssl openssl/include/platform @@ -14,3 +23,4 @@ else COMPONENT_ADD_INCLUDEDIRS := axtls/include COMPONENT_SRCDIRS := axtls/source/ssl axtls/source/crypto endif +endif \ No newline at end of file diff --git a/components/ssl/wolfssl/include/user_settings.h b/components/ssl/wolfssl/include/user_settings.h new file mode 100755 index 00000000..4291da2b --- /dev/null +++ b/components/ssl/wolfssl/include/user_settings.h @@ -0,0 +1,59 @@ +/* user_settings.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * Additions Copyright 2018 Espressif Systems (Shanghai) PTE LTD. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + +#ifndef __USER_SETTINGS_H__ +#define __USER_SETTINGS_H__ + +#define WOLFSSL_LWIP +#define NO_WRITEV +#define NO_WOLFSSL_DIR +#define NO_INLINE +#define NO_WOLFSSL_MEMORY +#define HAVE_PK_CALLBACKS +#define WOLFSSL_KEY_GEN +#define WOLFSSL_RIPEMD +#define ESP_PLATFORM +#define DEBUG_ESP_PLATFORM +#define USE_WOLFSSL_IO +#define WOLFSSL_STATIC_RSA +#define NO_DH +#define NO_MD4 +#define NO_MD5 +#define NO_DES3 +#define NO_DSA +#define NO_OLD_TLS +#define HAVE_ECC +#define WC_NO_HARDEN +#define FREERTOS +#define WOLFSSL_TYPES +#define NO_FILESYSTEM + +#ifdef WOLFSSL_TYPES + #ifndef byte + typedef unsigned char byte; + #endif + typedef unsigned short word16; + typedef unsigned int word32; + typedef byte word24[3]; +#endif + +#ifndef CUSTOM_RAND_GENERATE_BLOCK + + /* To use define the following:*/ + #define CUSTOM_RAND_GENERATE_BLOCK myRngFunc + extern int myRngFunc(byte* output, word32 sz); + +#endif + +#endif + diff --git a/components/ssl/wolfssl/include/wolfssl/ssl.h b/components/ssl/wolfssl/include/wolfssl/ssl.h new file mode 100644 index 00000000..8f0dfe41 --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/ssl.h @@ -0,0 +1,2851 @@ +/* ssl.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + + +/* wolfSSL API */ + +#ifndef WOLFSSL_SSL_H +#define WOLFSSL_SSL_H + + +/* for users not using preprocessor flags*/ +#include +#include +#include + +#ifdef HAVE_WOLF_EVENT + #include +#endif + +#ifndef NO_FILESYSTEM + #if defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + #if MQX_USE_IO_OLD + #include + #else + #include + #endif + #endif +#endif + +#ifdef WOLFSSL_PREFIX + #include "prefix_ssl.h" +#endif + +#ifdef LIBWOLFSSL_VERSION_STRING + #define WOLFSSL_VERSION LIBWOLFSSL_VERSION_STRING +#endif + +#ifdef _WIN32 + /* wincrypt.h clashes */ + #undef OCSP_REQUEST + #undef OCSP_RESPONSE +#endif + +#ifdef OPENSSL_COEXIST + /* mode to allow wolfSSL and OpenSSL to exist together */ + #ifdef TEST_OPENSSL_COEXIST + /* + ./configure --enable-opensslcoexist \ + CFLAGS="-I/usr/local/opt/openssl/include -DTEST_OPENSSL_COEXIST" \ + LDFLAGS="-L/usr/local/opt/openssl/lib -lcrypto" + */ + #include + #include + #include + #include + #include + #include + #endif + + /* make sure old names are disabled */ + #ifndef NO_OLD_SSL_NAMES + #define NO_OLD_SSL_NAMES + #endif + #ifndef NO_OLD_WC_NAMES + #define NO_OLD_WC_NAMES + #endif + +#elif (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) + #include + #include + + /* We need the old SSL names */ + #ifdef NO_OLD_SSL_NAMES + #undef NO_OLD_SSL_NAMES + #endif + #ifdef NO_OLD_WC_NAMES + #undef NO_OLD_WC_NAMES + #endif +#endif + + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef WOLFSSL_WOLFSSL_TYPE_DEFINED +#define WOLFSSL_WOLFSSL_TYPE_DEFINED +typedef struct WOLFSSL WOLFSSL; +#endif +typedef struct WOLFSSL_SESSION WOLFSSL_SESSION; +typedef struct WOLFSSL_METHOD WOLFSSL_METHOD; +#ifndef WOLFSSL_WOLFSSL_CTX_TYPE_DEFINED +#define WOLFSSL_WOLFSSL_CTX_TYPE_DEFINED +typedef struct WOLFSSL_CTX WOLFSSL_CTX; +#endif + +typedef struct WOLFSSL_STACK WOLFSSL_STACK; +typedef struct WOLFSSL_X509 WOLFSSL_X509; +typedef struct WOLFSSL_X509_NAME WOLFSSL_X509_NAME; +typedef struct WOLFSSL_X509_NAME_ENTRY WOLFSSL_X509_NAME_ENTRY; +typedef struct WOLFSSL_X509_CHAIN WOLFSSL_X509_CHAIN; + +typedef struct WOLFSSL_CERT_MANAGER WOLFSSL_CERT_MANAGER; +typedef struct WOLFSSL_SOCKADDR WOLFSSL_SOCKADDR; +typedef struct WOLFSSL_CRL WOLFSSL_CRL; + +typedef void *WOLFSSL_X509_STORE_CTX_verify_cb; /* verify callback */ + +/* redeclare guard */ +#define WOLFSSL_TYPES_DEFINED + +#include + + +#ifndef WOLFSSL_RSA_TYPE_DEFINED /* guard on redeclaration */ +typedef struct WOLFSSL_RSA WOLFSSL_RSA; +#define WOLFSSL_RSA_TYPE_DEFINED +#endif + +#ifndef WC_RNG_TYPE_DEFINED /* guard on redeclaration */ + typedef struct WC_RNG WC_RNG; + #define WC_RNG_TYPE_DEFINED +#endif + +#ifndef WOLFSSL_DSA_TYPE_DEFINED /* guard on redeclaration */ +typedef struct WOLFSSL_DSA WOLFSSL_DSA; +#define WOLFSSL_DSA_TYPE_DEFINED +#endif + +#ifndef WOLFSSL_EC_TYPE_DEFINED /* guard on redeclaration */ +typedef struct WOLFSSL_EC_KEY WOLFSSL_EC_KEY; +typedef struct WOLFSSL_EC_POINT WOLFSSL_EC_POINT; +typedef struct WOLFSSL_EC_GROUP WOLFSSL_EC_GROUP; +#define WOLFSSL_EC_TYPE_DEFINED +#endif + +#ifndef WOLFSSL_ECDSA_TYPE_DEFINED /* guard on redeclaration */ +typedef struct WOLFSSL_ECDSA_SIG WOLFSSL_ECDSA_SIG; +#define WOLFSSL_ECDSA_TYPE_DEFINED +#endif + +typedef struct WOLFSSL_CIPHER WOLFSSL_CIPHER; +typedef struct WOLFSSL_X509_LOOKUP WOLFSSL_X509_LOOKUP; +typedef struct WOLFSSL_X509_LOOKUP_METHOD WOLFSSL_X509_LOOKUP_METHOD; +typedef struct WOLFSSL_X509_CRL WOLFSSL_X509_CRL; +typedef struct WOLFSSL_X509_STORE WOLFSSL_X509_STORE; +typedef struct WOLFSSL_X509_VERIFY_PARAM WOLFSSL_X509_VERIFY_PARAM; +typedef struct WOLFSSL_BIO WOLFSSL_BIO; +typedef struct WOLFSSL_BIO_METHOD WOLFSSL_BIO_METHOD; +typedef struct WOLFSSL_X509_EXTENSION WOLFSSL_X509_EXTENSION; +typedef struct WOLFSSL_ASN1_TIME WOLFSSL_ASN1_TIME; +typedef struct WOLFSSL_ASN1_INTEGER WOLFSSL_ASN1_INTEGER; +typedef struct WOLFSSL_ASN1_OBJECT WOLFSSL_ASN1_OBJECT; + +typedef struct WOLFSSL_ASN1_STRING WOLFSSL_ASN1_STRING; +typedef struct WOLFSSL_dynlock_value WOLFSSL_dynlock_value; +typedef struct WOLFSSL_DH WOLFSSL_DH; +typedef struct WOLFSSL_ASN1_BIT_STRING WOLFSSL_ASN1_BIT_STRING; + +#define WOLFSSL_ASN1_UTCTIME WOLFSSL_ASN1_TIME +#define WOLFSSL_ASN1_GENERALIZEDTIME WOLFSSL_ASN1_TIME + +struct WOLFSSL_ASN1_INTEGER { + /* size can be increased set at 20 for tag, length then to hold at least 16 + * byte type */ + unsigned char data[20]; + /* ASN_INTEGER | LENGTH | hex of number */ +}; + +struct WOLFSSL_ASN1_TIME { + /* MAX_DATA_SIZE is 32 */ + unsigned char data[32 + 2]; + /* ASN_TIME | LENGTH | date bytes */ +}; + +struct WOLFSSL_ASN1_STRING { + int length; + int type; /* type of string i.e. CTC_UTF8 */ + char* data; + long flags; +}; + +#define WOLFSSL_MAX_SNAME 40 +struct WOLFSSL_ASN1_OBJECT { + void* heap; + unsigned char* obj; + /* sName is short name i.e sha256 rather than oid (null terminated) */ + char sName[WOLFSSL_MAX_SNAME]; + int type; /* oid */ + int grp; /* type of OID, i.e. oidCertPolicyType */ + unsigned int objSz; + unsigned char dynamic; /* if 1 then obj was dynamiclly created, 0 otherwise */ + struct d { /* derefrenced */ + WOLFSSL_ASN1_STRING ia5_internal; + WOLFSSL_ASN1_STRING* ia5; /* points to ia5_internal */ + } d; +}; + +struct WOLFSSL_EVP_PKEY { + void* heap; + int type; /* openssh dereference */ + int save_type; /* openssh dereference */ + int pkey_sz; + union { + char* ptr; /* der format of key / or raw for NTRU */ + } pkey; + #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) + #ifndef NO_RSA + WOLFSSL_RSA* rsa; + byte ownRsa; /* if struct owns RSA and should free it */ + #endif + #ifdef HAVE_ECC + WOLFSSL_EC_KEY* ecc; + byte ownEcc; /* if struct owns ECC and should free it */ + #endif + WC_RNG rng; + #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ + #ifdef HAVE_ECC + int pkey_curve; + #endif +}; +typedef struct WOLFSSL_EVP_PKEY WOLFSSL_PKCS8_PRIV_KEY_INFO; + +#ifndef WOLFSSL_EVP_TYPE_DEFINED /* guard on redeclaration */ +typedef struct WOLFSSL_EVP_PKEY WOLFSSL_EVP_PKEY; +typedef char WOLFSSL_EVP_MD; +#define WOLFSSL_EVP_TYPE_DEFINED +#endif + +#define WOLFSSL_EVP_PKEY_DEFAULT EVP_PKEY_RSA /* default key type */ + + +enum BIO_TYPE { + WOLFSSL_BIO_BUFFER = 1, + WOLFSSL_BIO_SOCKET = 2, + WOLFSSL_BIO_SSL = 3, + WOLFSSL_BIO_MEMORY = 4, + WOLFSSL_BIO_BIO = 5, + WOLFSSL_BIO_FILE = 6, + WOLFSSL_BIO_BASE64 = 7 +}; + +enum BIO_FLAGS { + WOLFSSL_BIO_FLAG_BASE64_NO_NL = 0x01, + WOLFSSL_BIO_FLAG_READ = 0x02, + WOLFSSL_BIO_FLAG_WRITE = 0x04, + WOLFSSL_BIO_FLAG_IO_SPECIAL = 0x08, + WOLFSSL_BIO_FLAG_RETRY = 0x10 +}; + +typedef struct WOLFSSL_BUF_MEM { + char* data; /* dereferenced */ + size_t length; /* current length */ + size_t max; /* maximum length */ +} WOLFSSL_BUF_MEM; + +typedef struct WOLFSSL_COMP_METHOD { + int type; /* stunnel dereference */ +} WOLFSSL_COMP_METHOD; + +struct WOLFSSL_X509_LOOKUP_METHOD { + int type; +}; + +struct WOLFSSL_X509_LOOKUP { + WOLFSSL_X509_STORE *store; +}; + +struct WOLFSSL_X509_STORE { + int cache; /* stunnel dereference */ + WOLFSSL_CERT_MANAGER* cm; + WOLFSSL_X509_LOOKUP lookup; +#ifdef OPENSSL_EXTRA + int isDynamic; +#endif +}; + +#ifdef OPENSSL_EXTRA +#define WOLFSSL_USE_CHECK_TIME 0x2 +#define WOLFSSL_NO_CHECK_TIME 0x200000 +struct WOLFSSL_X509_VERIFY_PARAM { + time_t check_time; + unsigned long flags; +}; +#endif + +typedef struct WOLFSSL_ALERT { + int code; + int level; +} WOLFSSL_ALERT; + +typedef struct WOLFSSL_ALERT_HISTORY { + WOLFSSL_ALERT last_rx; + WOLFSSL_ALERT last_tx; +} WOLFSSL_ALERT_HISTORY; + +typedef struct WOLFSSL_X509_REVOKED { + WOLFSSL_ASN1_INTEGER* serialNumber; /* stunnel dereference */ +} WOLFSSL_X509_REVOKED; + + +typedef struct WOLFSSL_X509_OBJECT { + union { + char* ptr; + WOLFSSL_X509 *x509; + WOLFSSL_X509_CRL* crl; /* stunnel dereference */ + } data; +} WOLFSSL_X509_OBJECT; + +typedef struct WOLFSSL_BUFFER_INFO { + unsigned char* buffer; + unsigned int length; +} WOLFSSL_BUFFER_INFO; + +typedef struct WOLFSSL_X509_STORE_CTX { + WOLFSSL_X509_STORE* store; /* Store full of a CA cert chain */ + WOLFSSL_X509* current_cert; /* stunnel dereference */ + WOLFSSL_X509_CHAIN* sesChain; /* pointer to WOLFSSL_SESSION peer chain */ + WOLFSSL_STACK* chain; +#ifdef OPENSSL_EXTRA + WOLFSSL_X509_VERIFY_PARAM* param; /* certificate validation parameter */ +#endif + char* domain; /* subject CN domain name */ + void* ex_data; /* external data, for fortress build */ + void* userCtx; /* user ctx */ + int error; /* current error */ + int error_depth; /* index of cert depth for this error */ + int discardSessionCerts; /* so verify callback can flag for discard */ + int totalCerts; /* number of peer cert buffers */ + WOLFSSL_BUFFER_INFO* certs; /* peer certs */ + WOLFSSL_X509_STORE_CTX_verify_cb verify_cb; /* verify callback */ +} WOLFSSL_X509_STORE_CTX; + +typedef char* WOLFSSL_STRING; + +/* Valid Alert types from page 16/17 + * Add alert string to the function wolfSSL_alert_type_string_long in src/ssl.c + */ +enum AlertDescription { + close_notify = 0, + unexpected_message = 10, + bad_record_mac = 20, + record_overflow = 22, + decompression_failure = 30, + handshake_failure = 40, + no_certificate = 41, + bad_certificate = 42, + unsupported_certificate = 43, + certificate_revoked = 44, + certificate_expired = 45, + certificate_unknown = 46, + illegal_parameter = 47, + decode_error = 50, + decrypt_error = 51, + #ifdef WOLFSSL_MYSQL_COMPATIBLE + /* catch name conflict for enum protocol with MYSQL build */ + wc_protocol_version = 70, + #else + protocol_version = 70, + #endif + no_renegotiation = 100, + unsupported_extension = 110, /**< RFC 5246, section 7.2.2 */ + unrecognized_name = 112, /**< RFC 6066, section 3 */ + bad_certificate_status_response = 113, /**< RFC 6066, section 8 */ + no_application_protocol = 120 +}; + + +enum AlertLevel { + alert_warning = 1, + alert_fatal = 2 +}; + +/* Maximum master key length (SECRET_LEN) */ +#define WOLFSSL_MAX_MASTER_KEY_LENGTH 48 + +typedef WOLFSSL_METHOD* (*wolfSSL_method_func)(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method_ex(void* heap); +#ifdef WOLFSSL_TLS13 + WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method_ex(void* heap); + WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method_ex(void* heap); +#endif +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method_ex(void* heap); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_client_method_ex(void* heap); + +#ifdef WOLFSSL_DTLS + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method_ex(void* heap); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method_ex(void* heap); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method_ex(void* heap); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method_ex(void* heap); +#endif +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_server_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv3_client_method(void); +WOLFSSL_API WOLFSSL_METHOD* wolfTLSv1_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_server_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_client_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_server_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_1_client_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_server_method(void); +WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_2_client_method(void); +#ifdef WOLFSSL_TLS13 + WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_server_method(void); + WOLFSSL_API WOLFSSL_METHOD *wolfTLSv1_3_client_method(void); +#endif + +#ifdef WOLFSSL_DTLS + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_client_method(void); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_server_method(void); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_client_method(void); + WOLFSSL_API WOLFSSL_METHOD *wolfDTLSv1_2_server_method(void); +#endif + +#ifdef HAVE_POLY1305 + WOLFSSL_API int wolfSSL_use_old_poly(WOLFSSL*, int); +#endif + +#ifdef WOLFSSL_SESSION_EXPORT +#ifdef WOLFSSL_DTLS + +#ifndef WOLFSSL_DTLS_EXPORT_TYPES +typedef int (*wc_dtls_export)(WOLFSSL* ssl, + unsigned char* exportBuffer, unsigned int sz, void* userCtx); +#define WOLFSSL_DTLS_EXPORT_TYPES +#endif /* WOLFSSL_DTLS_EXPORT_TYPES */ + +WOLFSSL_API int wolfSSL_dtls_import(WOLFSSL* ssl, unsigned char* buf, + unsigned int sz); +WOLFSSL_API int wolfSSL_CTX_dtls_set_export(WOLFSSL_CTX* ctx, + wc_dtls_export func); +WOLFSSL_API int wolfSSL_dtls_set_export(WOLFSSL* ssl, wc_dtls_export func); +WOLFSSL_API int wolfSSL_dtls_export(WOLFSSL* ssl, unsigned char* buf, + unsigned int* sz); +#endif /* WOLFSSL_DTLS */ +#endif /* WOLFSSL_SESSION_EXPORT */ + +#ifdef WOLFSSL_STATIC_MEMORY +#ifndef WOLFSSL_MEM_GUARD +#define WOLFSSL_MEM_GUARD + typedef struct WOLFSSL_MEM_STATS WOLFSSL_MEM_STATS; + typedef struct WOLFSSL_MEM_CONN_STATS WOLFSSL_MEM_CONN_STATS; +#endif +WOLFSSL_API int wolfSSL_CTX_load_static_memory(WOLFSSL_CTX** ctx, + wolfSSL_method_func method, + unsigned char* buf, unsigned int sz, + int flag, int max); +WOLFSSL_API int wolfSSL_CTX_is_static_memory(WOLFSSL_CTX* ctx, + WOLFSSL_MEM_STATS* mem_stats); +WOLFSSL_API int wolfSSL_is_static_memory(WOLFSSL* ssl, + WOLFSSL_MEM_CONN_STATS* mem_stats); +#endif + +#if !defined(NO_FILESYSTEM) && !defined(NO_CERTS) + +WOLFSSL_API int wolfSSL_CTX_use_certificate_file(WOLFSSL_CTX*, const char*, int); +WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_file(WOLFSSL_CTX*, const char*, int); +WOLFSSL_API int wolfSSL_CTX_load_verify_locations(WOLFSSL_CTX*, const char*, + const char*); +#ifdef WOLFSSL_TRUST_PEER_CERT +WOLFSSL_API int wolfSSL_CTX_trust_peer_cert(WOLFSSL_CTX*, const char*, int); +#endif +WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_file(WOLFSSL_CTX *, + const char *file); +WOLFSSL_API int wolfSSL_CTX_use_RSAPrivateKey_file(WOLFSSL_CTX*, const char*, int); + +WOLFSSL_API long wolfSSL_get_verify_depth(WOLFSSL* ssl); +WOLFSSL_API long wolfSSL_CTX_get_verify_depth(WOLFSSL_CTX* ctx); +WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth); +WOLFSSL_API int wolfSSL_use_certificate_file(WOLFSSL*, const char*, int); +WOLFSSL_API int wolfSSL_use_PrivateKey_file(WOLFSSL*, const char*, int); +WOLFSSL_API int wolfSSL_use_certificate_chain_file(WOLFSSL*, const char *file); +WOLFSSL_API int wolfSSL_use_RSAPrivateKey_file(WOLFSSL*, const char*, int); + +#ifdef WOLFSSL_DER_LOAD + WOLFSSL_API int wolfSSL_CTX_der_load_verify_locations(WOLFSSL_CTX*, + const char*, int); +#endif + +#ifdef HAVE_NTRU + WOLFSSL_API int wolfSSL_CTX_use_NTRUPrivateKey_file(WOLFSSL_CTX*, const char*); + /* load NTRU private key blob */ +#endif + +#ifndef WOLFSSL_PEMCERT_TODER_DEFINED + WOLFSSL_API int wolfSSL_PemCertToDer(const char*, unsigned char*, int); + #define WOLFSSL_PEMCERT_TODER_DEFINED +#endif + +#endif /* !NO_FILESYSTEM && !NO_CERTS */ + +WOLFSSL_API WOLFSSL_CTX* wolfSSL_CTX_new(WOLFSSL_METHOD*); +WOLFSSL_API WOLFSSL* wolfSSL_new(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_is_server(WOLFSSL*); +WOLFSSL_API WOLFSSL* wolfSSL_write_dup(WOLFSSL*); +WOLFSSL_API int wolfSSL_set_fd (WOLFSSL*, int); +WOLFSSL_API int wolfSSL_set_write_fd (WOLFSSL*, int); +WOLFSSL_API int wolfSSL_set_read_fd (WOLFSSL*, int); +WOLFSSL_API char* wolfSSL_get_cipher_list(int priority); +WOLFSSL_API char* wolfSSL_get_cipher_list_ex(WOLFSSL* ssl, int priority); +WOLFSSL_API int wolfSSL_get_ciphers(char*, int); +WOLFSSL_API const char* wolfSSL_get_cipher_name(WOLFSSL* ssl); +WOLFSSL_API const char* wolfSSL_get_shared_ciphers(WOLFSSL* ssl, char* buf, + int len); +WOLFSSL_API const char* wolfSSL_get_curve_name(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_get_fd(const WOLFSSL*); +WOLFSSL_API void wolfSSL_set_using_nonblock(WOLFSSL*, int); +WOLFSSL_API int wolfSSL_get_using_nonblock(WOLFSSL*); +/* please see note at top of README if you get an error from connect */ +WOLFSSL_API int wolfSSL_connect(WOLFSSL*); +WOLFSSL_API int wolfSSL_write(WOLFSSL*, const void*, int); +WOLFSSL_API int wolfSSL_read(WOLFSSL*, void*, int); +WOLFSSL_API int wolfSSL_peek(WOLFSSL*, void*, int); +WOLFSSL_API int wolfSSL_accept(WOLFSSL*); +#ifdef WOLFSSL_TLS13 +WOLFSSL_API int wolfSSL_send_hrr_cookie(WOLFSSL* ssl, + const unsigned char* secret, unsigned int secretSz); +WOLFSSL_API int wolfSSL_CTX_no_ticket_TLSv13(WOLFSSL_CTX* ctx); +WOLFSSL_API int wolfSSL_no_ticket_TLSv13(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_CTX_no_dhe_psk(WOLFSSL_CTX* ctx); +WOLFSSL_API int wolfSSL_no_dhe_psk(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_update_keys(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_CTX_allow_post_handshake_auth(WOLFSSL_CTX* ctx); +WOLFSSL_API int wolfSSL_allow_post_handshake_auth(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_request_certificate(WOLFSSL* ssl); + +WOLFSSL_API int wolfSSL_connect_TLSv13(WOLFSSL*); +WOLFSSL_API int wolfSSL_accept_TLSv13(WOLFSSL*); + +#ifdef WOLFSSL_EARLY_DATA +WOLFSSL_API int wolfSSL_CTX_set_max_early_data(WOLFSSL_CTX* ctx, + unsigned int sz); +WOLFSSL_API int wolfSSL_set_max_early_data(WOLFSSL* ssl, unsigned int sz); +WOLFSSL_API int wolfSSL_write_early_data(WOLFSSL*, const void*, int, int*); +WOLFSSL_API int wolfSSL_read_early_data(WOLFSSL*, void*, int, int*); +#endif +#endif +WOLFSSL_API void wolfSSL_CTX_free(WOLFSSL_CTX*); +WOLFSSL_API void wolfSSL_free(WOLFSSL*); +WOLFSSL_API int wolfSSL_shutdown(WOLFSSL*); +WOLFSSL_API int wolfSSL_send(WOLFSSL*, const void*, int sz, int flags); +WOLFSSL_API int wolfSSL_recv(WOLFSSL*, void*, int sz, int flags); + +WOLFSSL_API void wolfSSL_CTX_set_quiet_shutdown(WOLFSSL_CTX*, int); +WOLFSSL_API void wolfSSL_set_quiet_shutdown(WOLFSSL*, int); + +WOLFSSL_API int wolfSSL_get_error(WOLFSSL*, int); +WOLFSSL_API int wolfSSL_get_alert_history(WOLFSSL*, WOLFSSL_ALERT_HISTORY *); + +WOLFSSL_API int wolfSSL_set_session(WOLFSSL* ssl,WOLFSSL_SESSION* session); +WOLFSSL_API long wolfSSL_SSL_SESSION_set_timeout(WOLFSSL_SESSION* session, long t); +WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get_session(WOLFSSL* ssl); +WOLFSSL_API void wolfSSL_flush_sessions(WOLFSSL_CTX *ctx, long tm); +WOLFSSL_API int wolfSSL_SetServerID(WOLFSSL* ssl, const unsigned char*, + int, int); + +#ifdef SESSION_INDEX +WOLFSSL_API int wolfSSL_GetSessionIndex(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_GetSessionAtIndex(int index, WOLFSSL_SESSION* session); +#endif /* SESSION_INDEX */ + +#if defined(SESSION_INDEX) && defined(SESSION_CERTS) +WOLFSSL_API + WOLFSSL_X509_CHAIN* wolfSSL_SESSION_get_peer_chain(WOLFSSL_SESSION* session); +#endif /* SESSION_INDEX && SESSION_CERTS */ + +typedef int (*VerifyCallback)(int, WOLFSSL_X509_STORE_CTX*); +typedef int (pem_password_cb)(char*, int, int, void*); +#ifdef OPENSSL_EXTRA +typedef void (CallbackInfoState)(const WOLFSSL*, int, int); + +typedef struct WOLFSSL_CRYPTO_EX_DATA { + WOLFSSL_STACK* data; +} WOLFSSL_CRYPTO_EX_DATA; + +typedef int (WOLFSSL_CRYPTO_EX_new)(void* p, void* ptr, + WOLFSSL_CRYPTO_EX_DATA* a, int idx, long argValue, void* arg); +typedef int (WOLFSSL_CRYPTO_EX_dup)(WOLFSSL_CRYPTO_EX_DATA* out, + WOLFSSL_CRYPTO_EX_DATA* in, void* inPtr, int idx, long argV, void* arg); +typedef void (WOLFSSL_CRYPTO_EX_free)(void* p, void* ptr, + WOLFSSL_CRYPTO_EX_DATA* a, int idx, long argValue, void* arg); + +WOLFSSL_API int wolfSSL_get_ex_new_index(long argValue, void* arg, + WOLFSSL_CRYPTO_EX_new* a, WOLFSSL_CRYPTO_EX_dup* b, + WOLFSSL_CRYPTO_EX_free* c); +#endif + +WOLFSSL_API void wolfSSL_CTX_set_verify(WOLFSSL_CTX*, int, + VerifyCallback verify_callback); +WOLFSSL_API void wolfSSL_set_verify(WOLFSSL*, int, VerifyCallback verify_callback); +WOLFSSL_API void wolfSSL_SetCertCbCtx(WOLFSSL*, void*); + +WOLFSSL_API int wolfSSL_pending(WOLFSSL*); + +WOLFSSL_API void wolfSSL_load_error_strings(void); +WOLFSSL_API int wolfSSL_library_init(void); +WOLFSSL_API long wolfSSL_CTX_set_session_cache_mode(WOLFSSL_CTX*, long); + +#ifdef HAVE_SECRET_CALLBACK +typedef int (*SessionSecretCb)(WOLFSSL* ssl, + void* secret, int* secretSz, void* ctx); +WOLFSSL_API int wolfSSL_set_session_secret_cb(WOLFSSL*, SessionSecretCb, void*); +#endif /* HAVE_SECRET_CALLBACK */ + +/* session cache persistence */ +WOLFSSL_API int wolfSSL_save_session_cache(const char*); +WOLFSSL_API int wolfSSL_restore_session_cache(const char*); +WOLFSSL_API int wolfSSL_memsave_session_cache(void*, int); +WOLFSSL_API int wolfSSL_memrestore_session_cache(const void*, int); +WOLFSSL_API int wolfSSL_get_session_cache_memsize(void); + +/* certificate cache persistence, uses ctx since certs are per ctx */ +WOLFSSL_API int wolfSSL_CTX_save_cert_cache(WOLFSSL_CTX*, const char*); +WOLFSSL_API int wolfSSL_CTX_restore_cert_cache(WOLFSSL_CTX*, const char*); +WOLFSSL_API int wolfSSL_CTX_memsave_cert_cache(WOLFSSL_CTX*, void*, int, int*); +WOLFSSL_API int wolfSSL_CTX_memrestore_cert_cache(WOLFSSL_CTX*, const void*, int); +WOLFSSL_API int wolfSSL_CTX_get_cert_cache_memsize(WOLFSSL_CTX*); + +/* only supports full name from cipher_name[] delimited by : */ +WOLFSSL_API int wolfSSL_CTX_set_cipher_list(WOLFSSL_CTX*, const char*); +WOLFSSL_API int wolfSSL_set_cipher_list(WOLFSSL*, const char*); + +/* Nonblocking DTLS helper functions */ +WOLFSSL_API int wolfSSL_dtls_get_current_timeout(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_dtls_set_timeout_init(WOLFSSL* ssl, int); +WOLFSSL_API int wolfSSL_dtls_set_timeout_max(WOLFSSL* ssl, int); +WOLFSSL_API int wolfSSL_dtls_got_timeout(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_dtls(WOLFSSL* ssl); + +WOLFSSL_API int wolfSSL_dtls_set_peer(WOLFSSL*, void*, unsigned int); +WOLFSSL_API int wolfSSL_dtls_get_peer(WOLFSSL*, void*, unsigned int*); + +WOLFSSL_API int wolfSSL_CTX_dtls_set_sctp(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_dtls_set_sctp(WOLFSSL*); +WOLFSSL_API int wolfSSL_CTX_dtls_set_mtu(WOLFSSL_CTX*, unsigned short); +WOLFSSL_API int wolfSSL_dtls_set_mtu(WOLFSSL*, unsigned short); + +WOLFSSL_API int wolfSSL_dtls_get_drop_stats(WOLFSSL*, + unsigned int*, unsigned int*); +WOLFSSL_API int wolfSSL_CTX_mcast_set_member_id(WOLFSSL_CTX*, unsigned short); +WOLFSSL_API int wolfSSL_set_secret(WOLFSSL*, unsigned short, + const unsigned char*, unsigned int, + const unsigned char*, const unsigned char*, + const unsigned char*); +WOLFSSL_API int wolfSSL_mcast_read(WOLFSSL*, unsigned short*, void*, int); +WOLFSSL_API int wolfSSL_mcast_peer_add(WOLFSSL*, unsigned short, int); +WOLFSSL_API int wolfSSL_mcast_peer_known(WOLFSSL*, unsigned short); +WOLFSSL_API int wolfSSL_mcast_get_max_peers(void); +typedef int (*CallbackMcastHighwater)(unsigned short peerId, + unsigned int maxSeq, + unsigned int curSeq, void* ctx); +WOLFSSL_API int wolfSSL_CTX_mcast_set_highwater_cb(WOLFSSL_CTX*, + unsigned int, + unsigned int, + unsigned int, + CallbackMcastHighwater); +WOLFSSL_API int wolfSSL_mcast_set_highwater_ctx(WOLFSSL*, void*); + +WOLFSSL_API int wolfSSL_ERR_GET_REASON(unsigned long err); +WOLFSSL_API char* wolfSSL_ERR_error_string(unsigned long,char*); +WOLFSSL_API void wolfSSL_ERR_error_string_n(unsigned long e, char* buf, + unsigned long sz); +WOLFSSL_API const char* wolfSSL_ERR_reason_error_string(unsigned long); + +/* extras */ + +#ifndef WOLF_STACK_OF + #define WOLF_STACK_OF(x) WOLFSSL_STACK +#endif +#ifndef DECLARE_STACK_OF + #define DECLARE_STACK_OF(x) WOLF_STACK_OF(x); +#endif + +WOLFSSL_API int wolfSSL_sk_X509_push(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk, + WOLFSSL_X509* x509); +WOLFSSL_API WOLFSSL_X509* wolfSSL_sk_X509_pop(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk); +WOLFSSL_API void wolfSSL_sk_X509_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk); +WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_sk_GENERAL_NAME_value( + WOLFSSL_STACK* sk, int i); +WOLFSSL_API int wolfSSL_sk_GENERAL_NAME_num(WOLFSSL_STACK* sk); +WOLFSSL_API void wolfSSL_sk_GENERAL_NAME_pop_free(WOLFSSL_STACK* sk, + void f (WOLFSSL_ASN1_OBJECT*)); +WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_new(void); +WOLFSSL_API void wolfSSL_ASN1_OBJECT_free(WOLFSSL_ASN1_OBJECT* obj); +WOLFSSL_API int wolfSSL_sk_ASN1_OBJECT_push(WOLF_STACK_OF(WOLFSSL_ASN1_OBJEXT)* sk, + WOLFSSL_ASN1_OBJECT* obj); +WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_sk_ASN1_OBJCET_pop( + WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk); +WOLFSSL_API void wolfSSL_sk_ASN1_OBJECT_free(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk); +WOLFSSL_API int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *in); + +WOLFSSL_API int wolfSSL_set_ex_data(WOLFSSL*, int, void*); +WOLFSSL_API int wolfSSL_get_shutdown(const WOLFSSL*); +WOLFSSL_API int wolfSSL_set_rfd(WOLFSSL*, int); +WOLFSSL_API int wolfSSL_set_wfd(WOLFSSL*, int); +WOLFSSL_API void wolfSSL_set_shutdown(WOLFSSL*, int); +WOLFSSL_API int wolfSSL_set_session_id_context(WOLFSSL*, const unsigned char*, + unsigned int); +WOLFSSL_API void wolfSSL_set_connect_state(WOLFSSL*); +WOLFSSL_API void wolfSSL_set_accept_state(WOLFSSL*); +WOLFSSL_API int wolfSSL_session_reused(WOLFSSL*); +WOLFSSL_API void wolfSSL_SESSION_free(WOLFSSL_SESSION* session); +WOLFSSL_API int wolfSSL_is_init_finished(WOLFSSL*); + +WOLFSSL_API const char* wolfSSL_get_version(WOLFSSL*); +WOLFSSL_API int wolfSSL_get_current_cipher_suite(WOLFSSL* ssl); +WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_get_current_cipher(WOLFSSL*); +WOLFSSL_API char* wolfSSL_CIPHER_description(const WOLFSSL_CIPHER*, char*, int); +WOLFSSL_API const char* wolfSSL_CIPHER_get_name(const WOLFSSL_CIPHER* cipher); +WOLFSSL_API const char* wolfSSL_SESSION_CIPHER_get_name(WOLFSSL_SESSION* session); +WOLFSSL_API const char* wolfSSL_get_cipher(WOLFSSL*); +WOLFSSL_API WOLFSSL_SESSION* wolfSSL_get1_session(WOLFSSL* ssl); + /* what's ref count */ + +WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_new(void); + +#ifdef OPENSSL_EXTRA +WOLFSSL_API void wolfSSL_OPENSSL_free(void*); +WOLFSSL_API void *wolfSSL_OPENSSL_malloc(size_t a); +#endif + +WOLFSSL_API int wolfSSL_OCSP_parse_url(char* url, char** host, char** port, + char** path, int* ssl); + +WOLFSSL_API WOLFSSL_METHOD* wolfSSLv23_client_method(void); +WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_client_method(void); +WOLFSSL_API WOLFSSL_METHOD* wolfSSLv2_server_method(void); + +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new(WOLFSSL_BIO_METHOD*); +WOLFSSL_API int wolfSSL_BIO_free(WOLFSSL_BIO*); +WOLFSSL_API int wolfSSL_BIO_free_all(WOLFSSL_BIO*); +WOLFSSL_API int wolfSSL_BIO_gets(WOLFSSL_BIO* bio, char* buf, int sz); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_next(WOLFSSL_BIO* bio); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_find_type(WOLFSSL_BIO* bio, int type); +WOLFSSL_API int wolfSSL_BIO_read(WOLFSSL_BIO*, void*, int); +WOLFSSL_API int wolfSSL_BIO_write(WOLFSSL_BIO*, const void*, int); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_push(WOLFSSL_BIO*, WOLFSSL_BIO* append); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_pop(WOLFSSL_BIO*); +WOLFSSL_API int wolfSSL_BIO_flush(WOLFSSL_BIO*); +WOLFSSL_API int wolfSSL_BIO_pending(WOLFSSL_BIO*); + +WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_buffer(void); +WOLFSSL_API long wolfSSL_BIO_set_write_buffer_size(WOLFSSL_BIO*, long size); +WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_ssl(void); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_socket(int sfd, int flag); +WOLFSSL_API int wolfSSL_BIO_eof(WOLFSSL_BIO*); + +WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_mem(void); +WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_base64(void); +WOLFSSL_API void wolfSSL_BIO_set_flags(WOLFSSL_BIO*, int); + +WOLFSSL_API int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO* bio,void* p); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_mem_buf(void* buf, int len); + + +WOLFSSL_API long wolfSSL_BIO_set_ssl(WOLFSSL_BIO*, WOLFSSL*, int flag); +WOLFSSL_API long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int flag); +WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr); +WOLFSSL_API int wolfSSL_add_all_algorithms(void); + +#ifndef NO_FILESYSTEM +WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_file(void); +#endif + +WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void); +WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_socket(void); + +WOLFSSL_API long wolfSSL_BIO_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, void *parg); +WOLFSSL_API long wolfSSL_BIO_int_ctrl(WOLFSSL_BIO *bp, int cmd, long larg, int iarg); + +WOLFSSL_API int wolfSSL_BIO_set_write_buf_size(WOLFSSL_BIO *b, long size); +WOLFSSL_API int wolfSSL_BIO_make_bio_pair(WOLFSSL_BIO *b1, WOLFSSL_BIO *b2); +WOLFSSL_API int wolfSSL_BIO_ctrl_reset_read_request(WOLFSSL_BIO *b); +WOLFSSL_API int wolfSSL_BIO_nread0(WOLFSSL_BIO *bio, char **buf); +WOLFSSL_API int wolfSSL_BIO_nread(WOLFSSL_BIO *bio, char **buf, int num); +WOLFSSL_API int wolfSSL_BIO_nwrite(WOLFSSL_BIO *bio, char **buf, int num); +WOLFSSL_API int wolfSSL_BIO_reset(WOLFSSL_BIO *bio); + +WOLFSSL_API int wolfSSL_BIO_seek(WOLFSSL_BIO *bio, int ofs); +WOLFSSL_API int wolfSSL_BIO_write_filename(WOLFSSL_BIO *bio, char *name); +WOLFSSL_API long wolfSSL_BIO_set_mem_eof_return(WOLFSSL_BIO *bio, int v); +WOLFSSL_API long wolfSSL_BIO_get_mem_ptr(WOLFSSL_BIO *bio, WOLFSSL_BUF_MEM **m); + +WOLFSSL_API void wolfSSL_RAND_screen(void); +WOLFSSL_API const char* wolfSSL_RAND_file_name(char*, unsigned long); +WOLFSSL_API int wolfSSL_RAND_write_file(const char*); +WOLFSSL_API int wolfSSL_RAND_load_file(const char*, long); +WOLFSSL_API int wolfSSL_RAND_egd(const char*); +WOLFSSL_API int wolfSSL_RAND_seed(const void*, int); +WOLFSSL_API void wolfSSL_RAND_Cleanup(void); +WOLFSSL_API void wolfSSL_RAND_add(const void*, int, double); + +WOLFSSL_API WOLFSSL_COMP_METHOD* wolfSSL_COMP_zlib(void); +WOLFSSL_API WOLFSSL_COMP_METHOD* wolfSSL_COMP_rle(void); +WOLFSSL_API int wolfSSL_COMP_add_compression_method(int, void*); + +WOLFSSL_API unsigned long wolfSSL_thread_id(void); +WOLFSSL_API void wolfSSL_set_id_callback(unsigned long (*f)(void)); +WOLFSSL_API void wolfSSL_set_locking_callback(void (*f)(int, int, const char*, + int)); +WOLFSSL_API void wolfSSL_set_dynlock_create_callback(WOLFSSL_dynlock_value* (*f) + (const char*, int)); +WOLFSSL_API void wolfSSL_set_dynlock_lock_callback(void (*f)(int, + WOLFSSL_dynlock_value*, const char*, int)); +WOLFSSL_API void wolfSSL_set_dynlock_destroy_callback(void (*f) + (WOLFSSL_dynlock_value*, const char*, int)); +WOLFSSL_API int wolfSSL_num_locks(void); + +WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_STORE_CTX_get_current_cert( + WOLFSSL_X509_STORE_CTX*); +WOLFSSL_API int wolfSSL_X509_STORE_CTX_get_error(WOLFSSL_X509_STORE_CTX*); +WOLFSSL_API int wolfSSL_X509_STORE_CTX_get_error_depth(WOLFSSL_X509_STORE_CTX*); + +WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_verify_cb(WOLFSSL_X509_STORE_CTX *ctx, + WOLFSSL_X509_STORE_CTX_verify_cb verify_cb); +WOLFSSL_API int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* n, + unsigned char** out); +WOLFSSL_API int wolfSSL_X509_print(WOLFSSL_BIO* bio, WOLFSSL_X509* x509); +WOLFSSL_API char* wolfSSL_X509_NAME_oneline(WOLFSSL_X509_NAME*, char*, int); +WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_issuer_name(WOLFSSL_X509*); +WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_get_subject_name(WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_X509_ext_isSet_by_NID(WOLFSSL_X509*, int); +WOLFSSL_API int wolfSSL_X509_ext_get_critical_by_NID(WOLFSSL_X509*, int); +WOLFSSL_API int wolfSSL_X509_get_isCA(WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_X509_get_isSet_pathLength(WOLFSSL_X509*); +WOLFSSL_API unsigned int wolfSSL_X509_get_pathLength(WOLFSSL_X509*); +WOLFSSL_API unsigned int wolfSSL_X509_get_keyUsage(WOLFSSL_X509*); +WOLFSSL_API unsigned char* wolfSSL_X509_get_authorityKeyID( + WOLFSSL_X509*, unsigned char*, int*); +WOLFSSL_API unsigned char* wolfSSL_X509_get_subjectKeyID( + WOLFSSL_X509*, unsigned char*, int*); +WOLFSSL_API int wolfSSL_X509_NAME_entry_count(WOLFSSL_X509_NAME*); +WOLFSSL_API int wolfSSL_X509_NAME_get_text_by_NID( + WOLFSSL_X509_NAME*, int, char*, int); +WOLFSSL_API int wolfSSL_X509_NAME_get_index_by_NID( + WOLFSSL_X509_NAME*, int, int); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_X509_NAME_ENTRY_get_data(WOLFSSL_X509_NAME_ENTRY*); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_new(void); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_type_new(int type); +WOLFSSL_API void wolfSSL_ASN1_STRING_free(WOLFSSL_ASN1_STRING* asn1); +WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1, + const void* data, int dataSz); +WOLFSSL_API unsigned char* wolfSSL_ASN1_STRING_data(WOLFSSL_ASN1_STRING*); +WOLFSSL_API int wolfSSL_ASN1_STRING_length(WOLFSSL_ASN1_STRING*); +WOLFSSL_API int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX*); +WOLFSSL_API const char* wolfSSL_X509_verify_cert_error_string(long); +WOLFSSL_API int wolfSSL_X509_get_signature_type(WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_X509_get_signature(WOLFSSL_X509*, unsigned char*, int*); + +WOLFSSL_API int wolfSSL_X509_LOOKUP_add_dir(WOLFSSL_X509_LOOKUP*,const char*,long); +WOLFSSL_API int wolfSSL_X509_LOOKUP_load_file(WOLFSSL_X509_LOOKUP*, const char*, + long); +WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_hash_dir(void); +WOLFSSL_API WOLFSSL_X509_LOOKUP_METHOD* wolfSSL_X509_LOOKUP_file(void); + +WOLFSSL_API WOLFSSL_X509_LOOKUP* wolfSSL_X509_STORE_add_lookup(WOLFSSL_X509_STORE*, + WOLFSSL_X509_LOOKUP_METHOD*); +WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_X509_STORE_new(void); +WOLFSSL_API void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE*); +WOLFSSL_API int wolfSSL_X509_STORE_add_cert( + WOLFSSL_X509_STORE*, WOLFSSL_X509*); +WOLFSSL_API WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain( + WOLFSSL_X509_STORE_CTX* ctx); +WOLFSSL_API int wolfSSL_X509_STORE_set_flags(WOLFSSL_X509_STORE* store, + unsigned long flag); +WOLFSSL_API int wolfSSL_X509_STORE_set_default_paths(WOLFSSL_X509_STORE*); +WOLFSSL_API int wolfSSL_X509_STORE_get_by_subject(WOLFSSL_X509_STORE_CTX*, + int, WOLFSSL_X509_NAME*, WOLFSSL_X509_OBJECT*); +WOLFSSL_API WOLFSSL_X509_STORE_CTX* wolfSSL_X509_STORE_CTX_new(void); +WOLFSSL_API int wolfSSL_X509_STORE_CTX_init(WOLFSSL_X509_STORE_CTX*, + WOLFSSL_X509_STORE*, WOLFSSL_X509*, WOLF_STACK_OF(WOLFSSL_X509)*); +WOLFSSL_API void wolfSSL_X509_STORE_CTX_free(WOLFSSL_X509_STORE_CTX*); +WOLFSSL_API void wolfSSL_X509_STORE_CTX_cleanup(WOLFSSL_X509_STORE_CTX*); + +WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_lastUpdate(WOLFSSL_X509_CRL*); +WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_nextUpdate(WOLFSSL_X509_CRL*); + +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKEY*); +WOLFSSL_API void wolfSSL_X509_OBJECT_free_contents(WOLFSSL_X509_OBJECT*); +WOLFSSL_API WOLFSSL_PKCS8_PRIV_KEY_INFO* wolfSSL_d2i_PKCS8_PKEY_bio( + WOLFSSL_BIO* bio, WOLFSSL_PKCS8_PRIV_KEY_INFO** pkey); +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY_bio(WOLFSSL_BIO* bio, + WOLFSSL_EVP_PKEY** out); +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PUBKEY(WOLFSSL_EVP_PKEY** key, + unsigned char** in, long inSz); +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_d2i_PrivateKey(int type, + WOLFSSL_EVP_PKEY** out, const unsigned char **in, long inSz); +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new_ex(void* heap); +WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new(void); +WOLFSSL_API void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY*); +WOLFSSL_API int wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME*); +WOLFSSL_API int wolfSSL_sk_X509_REVOKED_num(WOLFSSL_X509_REVOKED*); +#ifdef OPENSSL_EXTRA +WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_time(WOLFSSL_X509_STORE_CTX*, + unsigned long flags, + time_t t); +#endif +WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_X509_CRL_get_REVOKED(WOLFSSL_X509_CRL*); +WOLFSSL_API WOLFSSL_X509_REVOKED* wolfSSL_sk_X509_REVOKED_value( + WOLFSSL_X509_REVOKED*,int); +WOLFSSL_API WOLFSSL_ASN1_INTEGER* wolfSSL_X509_get_serialNumber(WOLFSSL_X509*); + +WOLFSSL_API int wolfSSL_ASN1_TIME_print(WOLFSSL_BIO*, const WOLFSSL_ASN1_TIME*); + +WOLFSSL_API char* wolfSSL_ASN1_TIME_to_string(WOLFSSL_ASN1_TIME* t, + char* buf, int len); +WOLFSSL_API int wolfSSL_ASN1_INTEGER_cmp(const WOLFSSL_ASN1_INTEGER*, + const WOLFSSL_ASN1_INTEGER*); +WOLFSSL_API long wolfSSL_ASN1_INTEGER_get(const WOLFSSL_ASN1_INTEGER*); + +#ifdef OPENSSL_EXTRA +WOLFSSL_API WOLFSSL_BIGNUM *wolfSSL_ASN1_INTEGER_to_BN(const WOLFSSL_ASN1_INTEGER *ai, + WOLFSSL_BIGNUM *bn); +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_load_client_CA_file(const char*); +WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_ASN1_TIME_adj(WOLFSSL_ASN1_TIME*, time_t, + int, long); +#endif + +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME)* wolfSSL_SSL_CTX_get_client_CA_list( + const WOLFSSL_CTX *s); +WOLFSSL_API void wolfSSL_CTX_set_client_CA_list(WOLFSSL_CTX*, + WOLF_STACK_OF(WOLFSSL_X509_NAME)*); +WOLFSSL_API void* wolfSSL_X509_STORE_CTX_get_ex_data(WOLFSSL_X509_STORE_CTX*, int); +WOLFSSL_API int wolfSSL_get_ex_data_X509_STORE_CTX_idx(void); +WOLFSSL_API void wolfSSL_X509_STORE_CTX_set_error( + WOLFSSL_X509_STORE_CTX* ctx, int er); +WOLFSSL_API void* wolfSSL_get_ex_data(const WOLFSSL*, int); + +WOLFSSL_API void wolfSSL_CTX_set_default_passwd_cb_userdata(WOLFSSL_CTX*, + void* userdata); +WOLFSSL_API void wolfSSL_CTX_set_default_passwd_cb(WOLFSSL_CTX*, + pem_password_cb*); + + +WOLFSSL_API void wolfSSL_CTX_set_info_callback(WOLFSSL_CTX*, + void (*)(const WOLFSSL* ssl, int type, int val)); + +WOLFSSL_API unsigned long wolfSSL_ERR_peek_error(void); +WOLFSSL_API int wolfSSL_GET_REASON(int); + +WOLFSSL_API const char* wolfSSL_alert_type_string_long(int); +WOLFSSL_API const char* wolfSSL_alert_desc_string_long(int); +WOLFSSL_API const char* wolfSSL_state_string_long(const WOLFSSL*); + +WOLFSSL_API WOLFSSL_RSA* wolfSSL_RSA_generate_key(int, unsigned long, + void(*)(int, int, void*), void*); +WOLFSSL_API void wolfSSL_CTX_set_tmp_rsa_callback(WOLFSSL_CTX*, + WOLFSSL_RSA*(*)(WOLFSSL*, int, int)); + +WOLFSSL_API int wolfSSL_PEM_def_callback(char*, int num, int w, void* key); + +WOLFSSL_API long wolfSSL_CTX_sess_accept(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_connect(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_accept_good(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_connect_good(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_accept_renegotiate(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_connect_renegotiate(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_hits(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_cb_hits(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_cache_full(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_misses(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_timeouts(WOLFSSL_CTX*); +WOLFSSL_API long wolfSSL_CTX_sess_number(WOLFSSL_CTX*); + +WOLFSSL_API long wolfSSL_CTX_add_extra_chain_cert(WOLFSSL_CTX*, WOLFSSL_X509*); +WOLFSSL_API long wolfSSL_CTX_sess_set_cache_size(WOLFSSL_CTX*, long); +WOLFSSL_API long wolfSSL_CTX_sess_get_cache_size(WOLFSSL_CTX*); + +WOLFSSL_API long wolfSSL_CTX_get_session_cache_mode(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_CTX_get_read_ahead(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_CTX_set_read_ahead(WOLFSSL_CTX*, int v); +WOLFSSL_API long wolfSSL_CTX_set_tlsext_status_arg(WOLFSSL_CTX*, void* arg); +WOLFSSL_API long wolfSSL_CTX_set_tlsext_opaque_prf_input_callback_arg( + WOLFSSL_CTX*, void* arg); +WOLFSSL_API int wolfSSL_CTX_add_client_CA(WOLFSSL_CTX*, WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_CTX_set_srp_password(WOLFSSL_CTX*, char*); +WOLFSSL_API int wolfSSL_CTX_set_srp_username(WOLFSSL_CTX*, char*); + +WOLFSSL_API long wolfSSL_set_options(WOLFSSL *s, long op); +WOLFSSL_API long wolfSSL_get_options(const WOLFSSL *s); +WOLFSSL_API long wolfSSL_clear_options(WOLFSSL *s, long op); +WOLFSSL_API long wolfSSL_clear_num_renegotiations(WOLFSSL *s); +WOLFSSL_API long wolfSSL_total_renegotiations(WOLFSSL *s); +WOLFSSL_API long wolfSSL_set_tmp_dh(WOLFSSL *s, WOLFSSL_DH *dh); +WOLFSSL_API long wolfSSL_set_tlsext_debug_arg(WOLFSSL *s, void *arg); +WOLFSSL_API long wolfSSL_set_tlsext_status_type(WOLFSSL *s, int type); +WOLFSSL_API long wolfSSL_set_tlsext_status_exts(WOLFSSL *s, void *arg); +WOLFSSL_API long wolfSSL_get_tlsext_status_ids(WOLFSSL *s, void *arg); +WOLFSSL_API long wolfSSL_set_tlsext_status_ids(WOLFSSL *s, void *arg); +WOLFSSL_API long wolfSSL_get_tlsext_status_ocsp_resp(WOLFSSL *s, unsigned char **resp); +WOLFSSL_API long wolfSSL_set_tlsext_status_ocsp_resp(WOLFSSL *s, unsigned char *resp, int len); + +WOLFSSL_API void wolfSSL_CONF_modules_unload(int all); +WOLFSSL_API long wolfSSL_get_tlsext_status_exts(WOLFSSL *s, void *arg); +WOLFSSL_API long wolfSSL_get_verify_result(const WOLFSSL *ssl); + +#define WOLFSSL_DEFAULT_CIPHER_LIST "" /* default all */ +#define WOLFSSL_RSA_F4 0x10001L + +enum { + WOLFSSL_OCSP_URL_OVERRIDE = 1, + WOLFSSL_OCSP_NO_NONCE = 2, + WOLFSSL_OCSP_CHECKALL = 4, + + WOLFSSL_CRL_CHECKALL = 1, + WOLFSSL_CRL_CHECK = 27, +}; + +#ifdef OPENSSL_EXTRA +/* seperated out from other enums because of size */ +enum { + SSL_OP_MICROSOFT_SESS_ID_BUG = 0x00000001, + SSL_OP_NETSCAPE_CHALLENGE_BUG = 0x00000002, + SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG = 0x00000004, + SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG = 0x00000008, + SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER = 0x00000010, + SSL_OP_MSIE_SSLV2_RSA_PADDING = 0x00000020, + SSL_OP_SSLEAY_080_CLIENT_DH_BUG = 0x00000040, + SSL_OP_TLS_D5_BUG = 0x00000080, + SSL_OP_TLS_BLOCK_PADDING_BUG = 0x00000100, + SSL_OP_TLS_ROLLBACK_BUG = 0x00000200, + SSL_OP_ALL = 0x00000400, + SSL_OP_EPHEMERAL_RSA = 0x00000800, + SSL_OP_NO_SSLv3 = 0x00001000, + SSL_OP_NO_TLSv1 = 0x00002000, + SSL_OP_PKCS1_CHECK_1 = 0x00004000, + SSL_OP_PKCS1_CHECK_2 = 0x00008000, + SSL_OP_NETSCAPE_CA_DN_BUG = 0x00010000, + SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG = 0x00020000, + SSL_OP_SINGLE_DH_USE = 0x00040000, + SSL_OP_NO_TICKET = 0x00080000, + SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS = 0x00100000, + SSL_OP_NO_QUERY_MTU = 0x00200000, + SSL_OP_COOKIE_EXCHANGE = 0x00400000, + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION = 0x00800000, + SSL_OP_SINGLE_ECDH_USE = 0x01000000, + SSL_OP_CIPHER_SERVER_PREFERENCE = 0x02000000, + SSL_OP_NO_TLSv1_1 = 0x04000000, + SSL_OP_NO_TLSv1_2 = 0x08000000, + SSL_OP_NO_COMPRESSION = 0x10000000, + SSL_OP_NO_TLSv1_3 = 0x20000000, +}; + +enum { +#ifdef HAVE_OCSP + /* OCSP Flags */ + OCSP_NOCERTS = 1, + OCSP_NOINTERN = 2, + OCSP_NOSIGS = 4, + OCSP_NOCHAIN = 8, + OCSP_NOVERIFY = 16, + OCSP_NOEXPLICIT = 32, + OCSP_NOCASIGN = 64, + OCSP_NODELEGATED = 128, + OCSP_NOCHECKS = 256, + OCSP_TRUSTOTHER = 512, + OCSP_RESPID_KEY = 1024, + OCSP_NOTIME = 2048, + + /* OCSP Types */ + OCSP_CERTID = 2, + OCSP_REQUEST = 4, + OCSP_RESPONSE = 8, + OCSP_BASICRESP = 16, +#endif + + ASN1_GENERALIZEDTIME = 4, + SSL_MAX_SSL_SESSION_ID_LENGTH = 32, + + EVP_R_BAD_DECRYPT = 2, + + SSL_ST_CONNECT = 0x1000, + SSL_ST_ACCEPT = 0x2000, + SSL_ST_MASK = 0x0FFF, + + SSL_CB_LOOP = 0x01, + SSL_CB_EXIT = 0x02, + SSL_CB_READ = 0x04, + SSL_CB_WRITE = 0x08, + SSL_CB_HANDSHAKE_START = 0x10, + SSL_CB_HANDSHAKE_DONE = 0x20, + SSL_CB_ALERT = 0x4000, + SSL_CB_READ_ALERT = (SSL_CB_ALERT | SSL_CB_READ), + SSL_CB_WRITE_ALERT = (SSL_CB_ALERT | SSL_CB_WRITE), + SSL_CB_ACCEPT_LOOP = (SSL_ST_ACCEPT | SSL_CB_LOOP), + SSL_CB_ACCEPT_EXIT = (SSL_ST_ACCEPT | SSL_CB_EXIT), + SSL_CB_CONNECT_LOOP = (SSL_ST_CONNECT | SSL_CB_LOOP), + SSL_CB_CONNECT_EXIT = (SSL_ST_CONNECT | SSL_CB_EXIT), + SSL_CB_MODE_READ = 1, + SSL_CB_MODE_WRITE = 2, + + SSL_MODE_ENABLE_PARTIAL_WRITE = 2, + + BIO_FLAGS_BASE64_NO_NL = 1, + BIO_CLOSE = 1, + BIO_NOCLOSE = 0, + + NID_undef = 0, + + X509_FILETYPE_PEM = 8, + X509_LU_X509 = 9, + X509_LU_CRL = 12, + + X509_V_OK = 0, + X509_V_ERR_CRL_SIGNATURE_FAILURE = 13, + X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 14, + X509_V_ERR_CRL_HAS_EXPIRED = 15, + X509_V_ERR_CERT_REVOKED = 16, + X509_V_ERR_CERT_CHAIN_TOO_LONG = 17, + X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 18, + X509_V_ERR_CERT_NOT_YET_VALID = 19, + X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 20, + X509_V_ERR_CERT_HAS_EXPIRED = 21, + X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 22, + X509_V_ERR_CERT_REJECTED = 23, + /* Required for Nginx */ + X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 24, + X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 25, + X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 26, + X509_V_ERR_CERT_UNTRUSTED = 27, + X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 28, + X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29, + /* additional X509_V_ERR_* enums not used in wolfSSL */ + X509_V_ERR_UNABLE_TO_GET_CRL, + X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE, + X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE, + X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY, + X509_V_ERR_CERT_SIGNATURE_FAILURE, + X509_V_ERR_CRL_NOT_YET_VALID, + X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD, + X509_V_ERR_OUT_OF_MEM, + X509_V_ERR_INVALID_CA, + X509_V_ERR_PATH_LENGTH_EXCEEDED, + X509_V_ERR_INVALID_PURPOSE, + X509_V_ERR_AKID_SKID_MISMATCH, + X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH, + X509_V_ERR_KEYUSAGE_NO_CERTSIGN, + X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER, + X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION, + X509_V_ERR_KEYUSAGE_NO_CRL_SIGN, + X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION, + X509_V_ERR_INVALID_NON_CA, + X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED, + X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE, + X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED, + X509_V_ERR_INVALID_EXTENSION, + X509_V_ERR_INVALID_POLICY_EXTENSION, + X509_V_ERR_NO_EXPLICIT_POLICY, + X509_V_ERR_UNNESTED_RESOURCE, + + X509_R_CERT_ALREADY_IN_HASH_TABLE, + + XN_FLAG_SPC_EQ = (1 << 23), + XN_FLAG_ONELINE = 0, + XN_FLAG_RFC2253 = 1, + + CRYPTO_LOCK = 1, + CRYPTO_NUM_LOCKS = 10, + + ASN1_STRFLGS_ESC_MSB = 4 +}; +#endif + +/* extras end */ + +#if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) +/* wolfSSL extension, provide last error from SSL_get_error + since not using thread storage error queue */ +#include +WOLFSSL_API void wolfSSL_ERR_print_errors_fp(FILE*, int err); +#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) +WOLFSSL_API void wolfSSL_ERR_dump_errors_fp(FILE* fp); +#endif +#endif + + +#ifndef NO_OLD_SSL_NAMES + #define SSL_ERROR_NONE WOLFSSL_ERROR_NONE + #define SSL_FAILURE WOLFSSL_FAILURE + #define SSL_SUCCESS WOLFSSL_SUCCESS + #define SSL_SHUTDOWN_NOT_DONE WOLFSSL_SHUTDOWN_NOT_DONE + + #define SSL_ALPN_NOT_FOUND WOLFSSL_ALPN_NOT_FOUND + #define SSL_BAD_CERTTYPE WOLFSSL_BAD_CERTTYPE + #define SSL_BAD_STAT WOLFSSL_BAD_STAT + #define SSL_BAD_PATH WOLFSSL_BAD_PATH + #define SSL_BAD_FILETYPE WOLFSSL_BAD_FILETYPE + #define SSL_BAD_FILE WOLFSSL_BAD_FILE + #define SSL_NOT_IMPLEMENTED WOLFSSL_NOT_IMPLEMENTED + #define SSL_UNKNOWN WOLFSSL_UNKNOWN + #define SSL_FATAL_ERROR WOLFSSL_FATAL_ERROR + + #define SSL_FILETYPE_ASN1 WOLFSSL_FILETYPE_ASN1 + #define SSL_FILETYPE_PEM WOLFSSL_FILETYPE_PEM + #define SSL_FILETYPE_DEFAULT WOLFSSL_FILETYPE_DEFAULT + #define SSL_FILETYPE_RAW WOLFSSL_FILETYPE_RAW + + #define SSL_VERIFY_NONE WOLFSSL_VERIFY_NONE + #define SSL_VERIFY_PEER WOLFSSL_VERIFY_PEER + #define SSL_VERIFY_FAIL_IF_NO_PEER_CERT WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT + #define SSL_VERIFY_CLIENT_ONCE WOLFSSL_VERIFY_CLIENT_ONCE + #define SSL_VERIFY_FAIL_EXCEPT_PSK WOLFSSL_VERIFY_FAIL_EXCEPT_PSK + + #define SSL_SESS_CACHE_OFF WOLFSSL_SESS_CACHE_OFF + #define SSL_SESS_CACHE_CLIENT WOLFSSL_SESS_CACHE_CLIENT + #define SSL_SESS_CACHE_SERVER WOLFSSL_SESS_CACHE_SERVER + #define SSL_SESS_CACHE_BOTH WOLFSSL_SESS_CACHE_BOTH + #define SSL_SESS_CACHE_NO_AUTO_CLEAR WOLFSSL_SESS_CACHE_NO_AUTO_CLEAR + #define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP WOLFSSL_SESS_CACHE_NO_INTERNAL_LOOKUP + #define SSL_SESS_CACHE_NO_INTERNAL_STORE WOLFSSL_SESS_CACHE_NO_INTERNAL_STORE + #define SSL_SESS_CACHE_NO_INTERNAL WOLFSSL_SESS_CACHE_NO_INTERNAL + + #define SSL_ERROR_WANT_READ WOLFSSL_ERROR_WANT_READ + #define SSL_ERROR_WANT_WRITE WOLFSSL_ERROR_WANT_WRITE + #define SSL_ERROR_WANT_CONNECT WOLFSSL_ERROR_WANT_CONNECT + #define SSL_ERROR_WANT_ACCEPT WOLFSSL_ERROR_WANT_ACCEPT + #define SSL_ERROR_SYSCALL WOLFSSL_ERROR_SYSCALL + #define SSL_ERROR_WANT_X509_LOOKUP WOLFSSL_ERROR_WANT_X509_LOOKUP + #define SSL_ERROR_ZERO_RETURN WOLFSSL_ERROR_ZERO_RETURN + #define SSL_ERROR_SSL WOLFSSL_ERROR_SSL + + #define SSL_SENT_SHUTDOWN WOLFSSL_SENT_SHUTDOWN + #define SSL_RECEIVED_SHUTDOWN WOLFSSL_RECEIVED_SHUTDOWN + #define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER WOLFSSL_MODE_ACCEPT_MOVING_WRITE_BUFFER + #define SSL_OP_NO_SSLv2 WOLFSSL_OP_NO_SSLv2 + + #define SSL_R_SSL_HANDSHAKE_FAILURE WOLFSSL_R_SSL_HANDSHAKE_FAILURE + #define SSL_R_TLSV1_ALERT_UNKNOWN_CA WOLFSSL_R_TLSV1_ALERT_UNKNOWN_CA + #define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN WOLFSSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN + #define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE WOLFSSL_R_SSLV3_ALERT_BAD_CERTIFICATE + + #define PEM_BUFSIZE WOLF_PEM_BUFSIZE +#endif + +enum { /* ssl Constants */ + WOLFSSL_ERROR_NONE = 0, /* for most functions */ + WOLFSSL_FAILURE = 0, /* for some functions */ + WOLFSSL_SUCCESS = 1, + WOLFSSL_SHUTDOWN_NOT_DONE = 2, /* call wolfSSL_shutdown again to complete */ + + WOLFSSL_ALPN_NOT_FOUND = -9, + WOLFSSL_BAD_CERTTYPE = -8, + WOLFSSL_BAD_STAT = -7, + WOLFSSL_BAD_PATH = -6, + WOLFSSL_BAD_FILETYPE = -5, + WOLFSSL_BAD_FILE = -4, + WOLFSSL_NOT_IMPLEMENTED = -3, + WOLFSSL_UNKNOWN = -2, + WOLFSSL_FATAL_ERROR = -1, + + WOLFSSL_FILETYPE_ASN1 = 2, + WOLFSSL_FILETYPE_PEM = 1, + WOLFSSL_FILETYPE_DEFAULT = 2, /* ASN1 */ + WOLFSSL_FILETYPE_RAW = 3, /* NTRU raw key blob */ + + WOLFSSL_VERIFY_NONE = 0, + WOLFSSL_VERIFY_PEER = 1, + WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2, + WOLFSSL_VERIFY_CLIENT_ONCE = 4, + WOLFSSL_VERIFY_FAIL_EXCEPT_PSK = 8, + + WOLFSSL_SESS_CACHE_OFF = 0x0000, + WOLFSSL_SESS_CACHE_CLIENT = 0x0001, + WOLFSSL_SESS_CACHE_SERVER = 0x0002, + WOLFSSL_SESS_CACHE_BOTH = 0x0003, + WOLFSSL_SESS_CACHE_NO_AUTO_CLEAR = 0x0008, + WOLFSSL_SESS_CACHE_NO_INTERNAL_LOOKUP = 0x0100, + WOLFSSL_SESS_CACHE_NO_INTERNAL_STORE = 0x0200, + WOLFSSL_SESS_CACHE_NO_INTERNAL = 0x0300, + + WOLFSSL_ERROR_WANT_READ = 2, + WOLFSSL_ERROR_WANT_WRITE = 3, + WOLFSSL_ERROR_WANT_CONNECT = 7, + WOLFSSL_ERROR_WANT_ACCEPT = 8, + WOLFSSL_ERROR_SYSCALL = 5, + WOLFSSL_ERROR_WANT_X509_LOOKUP = 83, + WOLFSSL_ERROR_ZERO_RETURN = 6, + WOLFSSL_ERROR_SSL = 85, + + WOLFSSL_SENT_SHUTDOWN = 1, + WOLFSSL_RECEIVED_SHUTDOWN = 2, + WOLFSSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 4, + WOLFSSL_OP_NO_SSLv2 = 8, + + WOLFSSL_R_SSL_HANDSHAKE_FAILURE = 101, + WOLFSSL_R_TLSV1_ALERT_UNKNOWN_CA = 102, + WOLFSSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN = 103, + WOLFSSL_R_SSLV3_ALERT_BAD_CERTIFICATE = 104, + + WOLF_PEM_BUFSIZE = 1024 +}; + +#ifndef NO_PSK + typedef unsigned int (*wc_psk_client_callback)(WOLFSSL*, const char*, char*, + unsigned int, unsigned char*, unsigned int); + WOLFSSL_API void wolfSSL_CTX_set_psk_client_callback(WOLFSSL_CTX*, + wc_psk_client_callback); + WOLFSSL_API void wolfSSL_set_psk_client_callback(WOLFSSL*, + wc_psk_client_callback); + + WOLFSSL_API const char* wolfSSL_get_psk_identity_hint(const WOLFSSL*); + WOLFSSL_API const char* wolfSSL_get_psk_identity(const WOLFSSL*); + + WOLFSSL_API int wolfSSL_CTX_use_psk_identity_hint(WOLFSSL_CTX*, const char*); + WOLFSSL_API int wolfSSL_use_psk_identity_hint(WOLFSSL*, const char*); + + typedef unsigned int (*wc_psk_server_callback)(WOLFSSL*, const char*, + unsigned char*, unsigned int); + WOLFSSL_API void wolfSSL_CTX_set_psk_server_callback(WOLFSSL_CTX*, + wc_psk_server_callback); + WOLFSSL_API void wolfSSL_set_psk_server_callback(WOLFSSL*, + wc_psk_server_callback); + + #define PSK_TYPES_DEFINED +#endif /* NO_PSK */ + + +#ifdef HAVE_ANON + WOLFSSL_API int wolfSSL_CTX_allow_anon_cipher(WOLFSSL_CTX*); +#endif /* HAVE_ANON */ + + +/* extra begins */ +#ifdef OPENSSL_EXTRA +enum { /* ERR Constants */ + ERR_TXT_STRING = 1 +}; + +/* bio misc */ +enum { + WOLFSSL_BIO_ERROR = -1, + WOLFSSL_BIO_UNSET = -2, + WOLFSSL_BIO_SIZE = 17000 /* default BIO write size if not set */ +}; + +#endif + +WOLFSSL_API void wolfSSL_ERR_put_error(int lib, int fun, int err, + const char* file, int line); +WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line(const char**, int*); +WOLFSSL_API unsigned long wolfSSL_ERR_get_error_line_data(const char**, int*, + const char**, int *); + +WOLFSSL_API unsigned long wolfSSL_ERR_get_error(void); +WOLFSSL_API void wolfSSL_ERR_clear_error(void); + + +WOLFSSL_API int wolfSSL_RAND_status(void); +WOLFSSL_API int wolfSSL_RAND_pseudo_bytes(unsigned char* buf, int num); +WOLFSSL_API int wolfSSL_RAND_bytes(unsigned char* buf, int num); +WOLFSSL_API WOLFSSL_METHOD *wolfSSLv23_server_method(void); +WOLFSSL_API long wolfSSL_CTX_set_options(WOLFSSL_CTX*, long); +WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx); +WOLFSSL_API long wolfSSL_CTX_clear_options(WOLFSSL_CTX*, long); + +#ifndef NO_CERTS + WOLFSSL_API int wolfSSL_CTX_check_private_key(const WOLFSSL_CTX*); +#endif /* !NO_CERTS */ + +WOLFSSL_API void wolfSSL_ERR_free_strings(void); +WOLFSSL_API void wolfSSL_ERR_remove_state(unsigned long); +WOLFSSL_API void wolfSSL_EVP_cleanup(void); +WOLFSSL_API int wolfSSL_clear(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_state(WOLFSSL* ssl); + +WOLFSSL_API void wolfSSL_cleanup_all_ex_data(void); +WOLFSSL_API long wolfSSL_CTX_set_mode(WOLFSSL_CTX* ctx, long mode); +WOLFSSL_API long wolfSSL_CTX_get_mode(WOLFSSL_CTX* ctx); +WOLFSSL_API void wolfSSL_CTX_set_default_read_ahead(WOLFSSL_CTX* ctx, int m); +WOLFSSL_API long wolfSSL_SSL_get_mode(WOLFSSL* ssl); + + +WOLFSSL_API int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_CTX_set_session_id_context(WOLFSSL_CTX*, + const unsigned char*, unsigned int); +WOLFSSL_API WOLFSSL_X509* wolfSSL_get_peer_certificate(WOLFSSL* ssl); +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_get_peer_cert_chain(const WOLFSSL*); + +WOLFSSL_API int wolfSSL_want_read(WOLFSSL*); +WOLFSSL_API int wolfSSL_want_write(WOLFSSL*); + +WOLFSSL_API int wolfSSL_BIO_printf(WOLFSSL_BIO*, const char*, ...); +WOLFSSL_API int wolfSSL_ASN1_UTCTIME_print(WOLFSSL_BIO*, + const WOLFSSL_ASN1_UTCTIME*); +WOLFSSL_API int wolfSSL_ASN1_GENERALIZEDTIME_print(WOLFSSL_BIO*, + const WOLFSSL_ASN1_GENERALIZEDTIME*); +WOLFSSL_API int wolfSSL_sk_num(WOLFSSL_X509_REVOKED*); +WOLFSSL_API void* wolfSSL_sk_value(WOLFSSL_X509_REVOKED*, int); + +/* stunnel 4.28 needs */ +WOLFSSL_API void* wolfSSL_CTX_get_ex_data(const WOLFSSL_CTX*, int); +WOLFSSL_API int wolfSSL_CTX_set_ex_data(WOLFSSL_CTX*, int, void*); +WOLFSSL_API void wolfSSL_CTX_sess_set_get_cb(WOLFSSL_CTX*, + WOLFSSL_SESSION*(*f)(WOLFSSL*, unsigned char*, int, int*)); +WOLFSSL_API void wolfSSL_CTX_sess_set_new_cb(WOLFSSL_CTX*, + int (*f)(WOLFSSL*, WOLFSSL_SESSION*)); +WOLFSSL_API void wolfSSL_CTX_sess_set_remove_cb(WOLFSSL_CTX*, + void (*f)(WOLFSSL_CTX*, WOLFSSL_SESSION*)); + +WOLFSSL_API int wolfSSL_i2d_SSL_SESSION(WOLFSSL_SESSION*,unsigned char**); +WOLFSSL_API WOLFSSL_SESSION* wolfSSL_d2i_SSL_SESSION(WOLFSSL_SESSION**, + const unsigned char**, long); + +WOLFSSL_API long wolfSSL_SESSION_get_timeout(const WOLFSSL_SESSION*); +WOLFSSL_API long wolfSSL_SESSION_get_time(const WOLFSSL_SESSION*); +WOLFSSL_API int wolfSSL_CTX_get_ex_new_index(long, void*, void*, void*, void*); + +/* extra ends */ + + +/* wolfSSL extensions */ + +/* call before SSL_connect, if verifying will add name check to + date check and signature check */ +WOLFSSL_API int wolfSSL_check_domain_name(WOLFSSL* ssl, const char* dn); + +/* need to call once to load library (session cache) */ +WOLFSSL_API int wolfSSL_Init(void); +/* call when done to cleanup/free session cache mutex / resources */ +WOLFSSL_API int wolfSSL_Cleanup(void); + +/* which library version do we have */ +WOLFSSL_API const char* wolfSSL_lib_version(void); +/* which library version do we have in hex */ +WOLFSSL_API unsigned int wolfSSL_lib_version_hex(void); + +/* do accept or connect depedning on side */ +WOLFSSL_API int wolfSSL_negotiate(WOLFSSL* ssl); +/* turn on wolfSSL data compression */ +WOLFSSL_API int wolfSSL_set_compression(WOLFSSL* ssl); + +WOLFSSL_API int wolfSSL_set_timeout(WOLFSSL*, unsigned int); +WOLFSSL_API int wolfSSL_CTX_set_timeout(WOLFSSL_CTX*, unsigned int); + +/* get wolfSSL peer X509_CHAIN */ +WOLFSSL_API WOLFSSL_X509_CHAIN* wolfSSL_get_peer_chain(WOLFSSL* ssl); +#ifdef WOLFSSL_ALT_CERT_CHAINS +WOLFSSL_API int wolfSSL_is_peer_alt_cert_chain(const WOLFSSL* ssl); +/* get wolfSSL alternate peer X509_CHAIN */ +WOLFSSL_API WOLFSSL_X509_CHAIN* wolfSSL_get_peer_alt_chain(WOLFSSL* ssl); +#endif +/* peer chain count */ +WOLFSSL_API int wolfSSL_get_chain_count(WOLFSSL_X509_CHAIN* chain); +/* index cert length */ +WOLFSSL_API int wolfSSL_get_chain_length(WOLFSSL_X509_CHAIN*, int idx); +/* index cert */ +WOLFSSL_API unsigned char* wolfSSL_get_chain_cert(WOLFSSL_X509_CHAIN*, int idx); +/* index cert in X509 */ +WOLFSSL_API WOLFSSL_X509* wolfSSL_get_chain_X509(WOLFSSL_X509_CHAIN*, int idx); +/* free X509 */ +#define wolfSSL_FreeX509(x509) wolfSSL_X509_free((x509)) +WOLFSSL_API void wolfSSL_X509_free(WOLFSSL_X509*); +/* get index cert in PEM */ +WOLFSSL_API int wolfSSL_get_chain_cert_pem(WOLFSSL_X509_CHAIN*, int idx, + unsigned char* buf, int inLen, int* outLen); +WOLFSSL_API const unsigned char* wolfSSL_get_sessionID(const WOLFSSL_SESSION* s); +WOLFSSL_API int wolfSSL_X509_get_serial_number(WOLFSSL_X509*,unsigned char*,int*); +WOLFSSL_API char* wolfSSL_X509_get_subjectCN(WOLFSSL_X509*); +WOLFSSL_API const unsigned char* wolfSSL_X509_get_der(WOLFSSL_X509*, int*); +WOLFSSL_API const unsigned char* wolfSSL_X509_notBefore(WOLFSSL_X509*); +WOLFSSL_API const unsigned char* wolfSSL_X509_notAfter(WOLFSSL_X509*); +WOLFSSL_API int wolfSSL_X509_version(WOLFSSL_X509*); + +WOLFSSL_API int wolfSSL_cmp_peer_cert_to_file(WOLFSSL*, const char*); + +WOLFSSL_API char* wolfSSL_X509_get_next_altname(WOLFSSL_X509*); + +WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509(WOLFSSL_X509** x509, + const unsigned char** in, int len); +WOLFSSL_API WOLFSSL_X509* + wolfSSL_X509_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len); +WOLFSSL_API int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out); +#ifndef NO_FILESYSTEM + #ifndef NO_STDIO_FILESYSTEM + WOLFSSL_API WOLFSSL_X509* + wolfSSL_X509_d2i_fp(WOLFSSL_X509** x509, FILE* file); + #endif +WOLFSSL_API WOLFSSL_X509* + wolfSSL_X509_load_certificate_file(const char* fname, int format); +#endif +WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_load_certificate_buffer( + const unsigned char* buf, int sz, int format); + +#ifdef WOLFSSL_SEP + WOLFSSL_API unsigned char* + wolfSSL_X509_get_device_type(WOLFSSL_X509*, unsigned char*, int*); + WOLFSSL_API unsigned char* + wolfSSL_X509_get_hw_type(WOLFSSL_X509*, unsigned char*, int*); + WOLFSSL_API unsigned char* + wolfSSL_X509_get_hw_serial_number(WOLFSSL_X509*, unsigned char*, int*); +#endif + +/* connect enough to get peer cert */ +WOLFSSL_API int wolfSSL_connect_cert(WOLFSSL* ssl); + + + +/* PKCS12 compatibility */ +typedef struct WC_PKCS12 WC_PKCS12; +WOLFSSL_API WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio, + WC_PKCS12** pkcs12); +WOLFSSL_API int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, + WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert, + WOLF_STACK_OF(WOLFSSL_X509)** ca); +WOLFSSL_API WC_PKCS12* wolfSSL_PKCS12_create(char* pass, char* name, + WOLFSSL_EVP_PKEY* pkey, WOLFSSL_X509* cert, + WOLF_STACK_OF(WOLFSSL_X509)* ca, + int keyNID, int certNID, int itt, int macItt, int keytype); +WOLFSSL_API void wolfSSL_PKCS12_PBE_add(void); + + + +#ifndef NO_DH +/* server Diffie-Hellman parameters */ +WOLFSSL_API int wolfSSL_SetTmpDH(WOLFSSL*, const unsigned char* p, int pSz, + const unsigned char* g, int gSz); +WOLFSSL_API int wolfSSL_SetTmpDH_buffer(WOLFSSL*, const unsigned char* b, long sz, + int format); +#ifndef NO_FILESYSTEM + WOLFSSL_API int wolfSSL_SetTmpDH_file(WOLFSSL*, const char* f, int format); +#endif + +/* server ctx Diffie-Hellman parameters */ +WOLFSSL_API int wolfSSL_CTX_SetTmpDH(WOLFSSL_CTX*, const unsigned char* p, + int pSz, const unsigned char* g, int gSz); +WOLFSSL_API int wolfSSL_CTX_SetTmpDH_buffer(WOLFSSL_CTX*, const unsigned char* b, + long sz, int format); + +#ifndef NO_FILESYSTEM + WOLFSSL_API int wolfSSL_CTX_SetTmpDH_file(WOLFSSL_CTX*, const char* f, + int format); +#endif + +WOLFSSL_API int wolfSSL_CTX_SetMinDhKey_Sz(WOLFSSL_CTX*, unsigned short); +WOLFSSL_API int wolfSSL_SetMinDhKey_Sz(WOLFSSL*, unsigned short); +WOLFSSL_API int wolfSSL_GetDhKey_Sz(WOLFSSL*); +#endif /* NO_DH */ + +#ifndef NO_RSA +WOLFSSL_API int wolfSSL_CTX_SetMinRsaKey_Sz(WOLFSSL_CTX*, short); +WOLFSSL_API int wolfSSL_SetMinRsaKey_Sz(WOLFSSL*, short); +#endif /* NO_RSA */ + +#ifdef HAVE_ECC +WOLFSSL_API int wolfSSL_CTX_SetMinEccKey_Sz(WOLFSSL_CTX*, short); +WOLFSSL_API int wolfSSL_SetMinEccKey_Sz(WOLFSSL*, short); +#endif /* NO_RSA */ + +WOLFSSL_API int wolfSSL_SetTmpEC_DHE_Sz(WOLFSSL*, unsigned short); +WOLFSSL_API int wolfSSL_CTX_SetTmpEC_DHE_Sz(WOLFSSL_CTX*, unsigned short); + +/* keyblock size in bytes or -1 */ +/* need to call wolfSSL_KeepArrays before handshake to save keys */ +WOLFSSL_API int wolfSSL_get_keyblock_size(WOLFSSL*); +WOLFSSL_API int wolfSSL_get_keys(WOLFSSL*,unsigned char** ms, unsigned int* msLen, + unsigned char** sr, unsigned int* srLen, + unsigned char** cr, unsigned int* crLen); + +/* Computes EAP-TLS and EAP-TTLS keying material from the master_secret. */ +WOLFSSL_API int wolfSSL_make_eap_keys(WOLFSSL*, void* key, unsigned int len, + const char* label); + + +#ifndef _WIN32 + #ifndef NO_WRITEV + #ifdef __PPU + #include + #include + #elif !defined(WOLFSSL_MDK_ARM) && !defined(WOLFSSL_IAR_ARM) && \ + !defined(WOLFSSL_PICOTCP) && !defined(WOLFSSL_ROWLEY_ARM) && \ + !defined(WOLFSSL_EMBOS) && !defined(WOLFSSL_FROSTED) && \ + !defined(WOLFSSL_CHIBIOS) + #include + #endif + /* allow writev style writing */ + WOLFSSL_API int wolfSSL_writev(WOLFSSL* ssl, const struct iovec* iov, + int iovcnt); + #endif +#endif + + +#ifndef NO_CERTS + /* SSL_CTX versions */ + WOLFSSL_API int wolfSSL_CTX_UnloadCAs(WOLFSSL_CTX*); +#ifdef WOLFSSL_TRUST_PEER_CERT + WOLFSSL_API int wolfSSL_CTX_Unload_trust_peers(WOLFSSL_CTX*); + WOLFSSL_API int wolfSSL_CTX_trust_peer_buffer(WOLFSSL_CTX*, + const unsigned char*, long, int); +#endif + WOLFSSL_API int wolfSSL_CTX_load_verify_buffer(WOLFSSL_CTX*, + const unsigned char*, long, int); + WOLFSSL_API int wolfSSL_CTX_use_certificate_buffer(WOLFSSL_CTX*, + const unsigned char*, long, int); + WOLFSSL_API int wolfSSL_CTX_use_PrivateKey_buffer(WOLFSSL_CTX*, + const unsigned char*, long, int); + WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_buffer_format(WOLFSSL_CTX*, + const unsigned char*, long, int); + WOLFSSL_API int wolfSSL_CTX_use_certificate_chain_buffer(WOLFSSL_CTX*, + const unsigned char*, long); + + /* SSL versions */ + WOLFSSL_API int wolfSSL_use_certificate_buffer(WOLFSSL*, const unsigned char*, + long, int); + WOLFSSL_API int wolfSSL_use_PrivateKey_buffer(WOLFSSL*, const unsigned char*, + long, int); + WOLFSSL_API int wolfSSL_use_certificate_chain_buffer_format(WOLFSSL*, + const unsigned char*, long, int); + WOLFSSL_API int wolfSSL_use_certificate_chain_buffer(WOLFSSL*, + const unsigned char*, long); + WOLFSSL_API int wolfSSL_UnloadCertsKeys(WOLFSSL*); + + #if defined(OPENSSL_EXTRA) && defined(KEEP_OUR_CERT) + WOLFSSL_API WOLFSSL_X509* wolfSSL_get_certificate(WOLFSSL* ssl); + #endif +#endif + +WOLFSSL_API int wolfSSL_CTX_set_group_messages(WOLFSSL_CTX*); +WOLFSSL_API int wolfSSL_set_group_messages(WOLFSSL*); + + +#ifdef HAVE_FUZZER +enum fuzzer_type { + FUZZ_HMAC = 0, + FUZZ_ENCRYPT = 1, + FUZZ_SIGNATURE = 2, + FUZZ_HASH = 3, + FUZZ_HEAD = 4 +}; + +typedef int (*CallbackFuzzer)(WOLFSSL* ssl, const unsigned char* buf, int sz, + int type, void* fuzzCtx); + +WOLFSSL_API void wolfSSL_SetFuzzerCb(WOLFSSL* ssl, CallbackFuzzer cbf, void* fCtx); +#endif + + +WOLFSSL_API int wolfSSL_DTLS_SetCookieSecret(WOLFSSL*, + const unsigned char*, + unsigned int); + + +/* I/O Callback default errors */ +enum IOerrors { + WOLFSSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */ + WOLFSSL_CBIO_ERR_WANT_READ = -2, /* need to call read again */ + WOLFSSL_CBIO_ERR_WANT_WRITE = -2, /* need to call write again */ + WOLFSSL_CBIO_ERR_CONN_RST = -3, /* connection reset */ + WOLFSSL_CBIO_ERR_ISR = -4, /* interrupt */ + WOLFSSL_CBIO_ERR_CONN_CLOSE = -5, /* connection closed or epipe */ + WOLFSSL_CBIO_ERR_TIMEOUT = -6 /* socket timeout */ +}; + + +/* CA cache callbacks */ +enum { + WOLFSSL_SSLV3 = 0, + WOLFSSL_TLSV1 = 1, + WOLFSSL_TLSV1_1 = 2, + WOLFSSL_TLSV1_2 = 3, + WOLFSSL_TLSV1_3 = 4, + WOLFSSL_USER_CA = 1, /* user added as trusted */ + WOLFSSL_CHAIN_CA = 2 /* added to cache from trusted chain */ +}; + +WOLFSSL_API WC_RNG* wolfSSL_GetRNG(WOLFSSL*); + +WOLFSSL_API int wolfSSL_CTX_SetMinVersion(WOLFSSL_CTX* ctx, int version); +WOLFSSL_API int wolfSSL_SetMinVersion(WOLFSSL* ssl, int version); +WOLFSSL_API int wolfSSL_GetObjectSize(void); /* object size based on build */ +WOLFSSL_API int wolfSSL_CTX_GetObjectSize(void); +WOLFSSL_API int wolfSSL_METHOD_GetObjectSize(void); +WOLFSSL_API int wolfSSL_GetOutputSize(WOLFSSL*, int); +WOLFSSL_API int wolfSSL_GetMaxOutputSize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetVersion(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_SetVersion(WOLFSSL* ssl, int version); +WOLFSSL_API int wolfSSL_KeyPemToDer(const unsigned char*, int, + unsigned char*, int, const char*); +WOLFSSL_API int wolfSSL_CertPemToDer(const unsigned char*, int, + unsigned char*, int, int); +#if defined(WOLFSSL_CERT_EXT) || defined(WOLFSSL_PUB_PEM_TO_DER) + #ifndef WOLFSSL_PEMPUBKEY_TODER_DEFINED + #ifndef NO_FILESYSTEM + WOLFSSL_API int wolfSSL_PemPubKeyToDer(const char* fileName, + unsigned char* derBuf, int derSz); + #endif + WOLFSSL_API int wolfSSL_PubKeyPemToDer(const unsigned char*, int, + unsigned char*, int); + #define WOLFSSL_PEMPUBKEY_TODER_DEFINED + #endif /* WOLFSSL_PEMPUBKEY_TODER_DEFINED */ +#endif /* WOLFSSL_CERT_EXT || WOLFSSL_PUB_PEM_TO_DER*/ + +typedef void (*CallbackCACache)(unsigned char* der, int sz, int type); +typedef void (*CbMissingCRL)(const char* url); +typedef int (*CbOCSPIO)(void*, const char*, int, + unsigned char*, int, unsigned char**); +typedef void (*CbOCSPRespFree)(void*,unsigned char*); + +#ifdef HAVE_CRL_IO +typedef int (*CbCrlIO)(WOLFSSL_CRL* crl, const char* url, int urlSz); +#endif + +/* User Atomic Record Layer CallBacks */ +typedef int (*CallbackMacEncrypt)(WOLFSSL* ssl, unsigned char* macOut, + const unsigned char* macIn, unsigned int macInSz, int macContent, + int macVerify, unsigned char* encOut, const unsigned char* encIn, + unsigned int encSz, void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetMacEncryptCb(WOLFSSL_CTX*, CallbackMacEncrypt); +WOLFSSL_API void wolfSSL_SetMacEncryptCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetMacEncryptCtx(WOLFSSL* ssl); + +typedef int (*CallbackDecryptVerify)(WOLFSSL* ssl, + unsigned char* decOut, const unsigned char* decIn, + unsigned int decSz, int content, int verify, unsigned int* padSz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetDecryptVerifyCb(WOLFSSL_CTX*, + CallbackDecryptVerify); +WOLFSSL_API void wolfSSL_SetDecryptVerifyCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetDecryptVerifyCtx(WOLFSSL* ssl); + +WOLFSSL_API const unsigned char* wolfSSL_GetMacSecret(WOLFSSL*, int); +WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteKey(WOLFSSL*); +WOLFSSL_API const unsigned char* wolfSSL_GetClientWriteIV(WOLFSSL*); +WOLFSSL_API const unsigned char* wolfSSL_GetServerWriteKey(WOLFSSL*); +WOLFSSL_API const unsigned char* wolfSSL_GetServerWriteIV(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetKeySize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetIVSize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetSide(WOLFSSL*); +WOLFSSL_API int wolfSSL_IsTLSv1_1(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetBulkCipher(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetCipherBlockSize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetAeadMacSize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetHmacSize(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetHmacType(WOLFSSL*); +WOLFSSL_API int wolfSSL_GetCipherType(WOLFSSL*); +WOLFSSL_API int wolfSSL_SetTlsHmacInner(WOLFSSL*, unsigned char*, + unsigned int, int, int); + +/* Atomic User Needs */ +enum { + WOLFSSL_SERVER_END = 0, + WOLFSSL_CLIENT_END = 1, + WOLFSSL_NEITHER_END = 3, + WOLFSSL_BLOCK_TYPE = 2, + WOLFSSL_STREAM_TYPE = 3, + WOLFSSL_AEAD_TYPE = 4, + WOLFSSL_TLS_HMAC_INNER_SZ = 13 /* SEQ_SZ + ENUM + VERSION_SZ + LEN_SZ */ +}; + +/* for GetBulkCipher and internal use */ +enum BulkCipherAlgorithm { + wolfssl_cipher_null, + wolfssl_rc4, + wolfssl_rc2, + wolfssl_des, + wolfssl_triple_des, /* leading 3 (3des) not valid identifier */ + wolfssl_des40, +#ifdef HAVE_IDEA + wolfssl_idea, +#endif + wolfssl_aes, + wolfssl_aes_gcm, + wolfssl_aes_ccm, + wolfssl_chacha, + wolfssl_camellia, + wolfssl_hc128, /* wolfSSL extensions */ + wolfssl_rabbit +}; + + +/* for KDF TLS 1.2 mac types */ +enum KDF_MacAlgorithm { + wolfssl_sha256 = 4, /* needs to match internal MACAlgorithm */ + wolfssl_sha384, + wolfssl_sha512 +}; + + +/* Public Key Callback support */ +typedef int (*CallbackEccSign)(WOLFSSL* ssl, + const unsigned char* in, unsigned int inSz, + unsigned char* out, unsigned int* outSz, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetEccSignCb(WOLFSSL_CTX*, CallbackEccSign); +WOLFSSL_API void wolfSSL_SetEccSignCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetEccSignCtx(WOLFSSL* ssl); + +typedef int (*CallbackEccVerify)(WOLFSSL* ssl, + const unsigned char* sig, unsigned int sigSz, + const unsigned char* hash, unsigned int hashSz, + const unsigned char* keyDer, unsigned int keySz, + int* result, void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetEccVerifyCb(WOLFSSL_CTX*, CallbackEccVerify); +WOLFSSL_API void wolfSSL_SetEccVerifyCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetEccVerifyCtx(WOLFSSL* ssl); + +struct ecc_key; +typedef int (*CallbackEccSharedSecret)(WOLFSSL* ssl, struct ecc_key* otherKey, + unsigned char* pubKeyDer, unsigned int* pubKeySz, + unsigned char* out, unsigned int* outlen, + int side, void* ctx); /* side is WOLFSSL_CLIENT_END or WOLFSSL_SERVER_END */ +WOLFSSL_API void wolfSSL_CTX_SetEccSharedSecretCb(WOLFSSL_CTX*, CallbackEccSharedSecret); +WOLFSSL_API void wolfSSL_SetEccSharedSecretCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetEccSharedSecretCtx(WOLFSSL* ssl); + +#ifndef NO_DH +/* Public DH Key Callback support */ +struct DhKey; +typedef int (*CallbackDhAgree)(WOLFSSL* ssl, struct DhKey* key, + const unsigned char* priv, unsigned int privSz, + const unsigned char* otherPubKeyDer, unsigned int otherPubKeySz, + unsigned char* out, unsigned int* outlen, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetDhAgreeCb(WOLFSSL_CTX*, CallbackDhAgree); +WOLFSSL_API void wolfSSL_SetDhAgreeCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl); +#endif /* !NO_DH */ + +struct ed25519_key; +typedef int (*CallbackEd25519Sign)(WOLFSSL* ssl, + const unsigned char* in, unsigned int inSz, + unsigned char* out, unsigned int* outSz, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetEd25519SignCb(WOLFSSL_CTX*, + CallbackEd25519Sign); +WOLFSSL_API void wolfSSL_SetEd25519SignCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetEd25519SignCtx(WOLFSSL* ssl); + +typedef int (*CallbackEd25519Verify)(WOLFSSL* ssl, + const unsigned char* sig, unsigned int sigSz, + const unsigned char* msg, unsigned int msgSz, + const unsigned char* keyDer, unsigned int keySz, + int* result, void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetEd25519VerifyCb(WOLFSSL_CTX*, + CallbackEd25519Verify); +WOLFSSL_API void wolfSSL_SetEd25519VerifyCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetEd25519VerifyCtx(WOLFSSL* ssl); + +struct curve25519_key; +typedef int (*CallbackX25519SharedSecret)(WOLFSSL* ssl, + struct curve25519_key* otherKey, + unsigned char* pubKeyDer, unsigned int* pubKeySz, + unsigned char* out, unsigned int* outlen, + int side, void* ctx); + /* side is WOLFSSL_CLIENT_END or WOLFSSL_SERVER_END */ +WOLFSSL_API void wolfSSL_CTX_SetX25519SharedSecretCb(WOLFSSL_CTX*, + CallbackX25519SharedSecret); +WOLFSSL_API void wolfSSL_SetX25519SharedSecretCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetX25519SharedSecretCtx(WOLFSSL* ssl); + +typedef int (*CallbackRsaSign)(WOLFSSL* ssl, + const unsigned char* in, unsigned int inSz, + unsigned char* out, unsigned int* outSz, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaSignCb(WOLFSSL_CTX*, CallbackRsaSign); +WOLFSSL_API void wolfSSL_SetRsaSignCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaSignCtx(WOLFSSL* ssl); + +typedef int (*CallbackRsaVerify)(WOLFSSL* ssl, + unsigned char* sig, unsigned int sigSz, + unsigned char** out, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaVerifyCb(WOLFSSL_CTX*, CallbackRsaVerify); +WOLFSSL_API void wolfSSL_SetRsaVerifyCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaVerifyCtx(WOLFSSL* ssl); + +#ifdef WC_RSA_PSS +typedef int (*CallbackRsaPssSign)(WOLFSSL* ssl, + const unsigned char* in, unsigned int inSz, + unsigned char* out, unsigned int* outSz, + int hash, int mgf, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaPssSignCb(WOLFSSL_CTX*, CallbackRsaPssSign); +WOLFSSL_API void wolfSSL_SetRsaPssSignCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaPssSignCtx(WOLFSSL* ssl); + +typedef int (*CallbackRsaPssVerify)(WOLFSSL* ssl, + unsigned char* sig, unsigned int sigSz, + unsigned char** out, + int hash, int mgf, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaPssVerifyCb(WOLFSSL_CTX*, + CallbackRsaPssVerify); +WOLFSSL_API void wolfSSL_SetRsaPssVerifyCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaPssVerifyCtx(WOLFSSL* ssl); +#endif + +/* RSA Public Encrypt cb */ +typedef int (*CallbackRsaEnc)(WOLFSSL* ssl, + const unsigned char* in, unsigned int inSz, + unsigned char* out, unsigned int* outSz, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaEncCb(WOLFSSL_CTX*, CallbackRsaEnc); +WOLFSSL_API void wolfSSL_SetRsaEncCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaEncCtx(WOLFSSL* ssl); + +/* RSA Private Decrypt cb */ +typedef int (*CallbackRsaDec)(WOLFSSL* ssl, + unsigned char* in, unsigned int inSz, + unsigned char** out, + const unsigned char* keyDer, unsigned int keySz, + void* ctx); +WOLFSSL_API void wolfSSL_CTX_SetRsaDecCb(WOLFSSL_CTX*, CallbackRsaDec); +WOLFSSL_API void wolfSSL_SetRsaDecCtx(WOLFSSL* ssl, void *ctx); +WOLFSSL_API void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl); + + +#ifndef NO_CERTS + WOLFSSL_API void wolfSSL_CTX_SetCACb(WOLFSSL_CTX*, CallbackCACache); + + WOLFSSL_API WOLFSSL_CERT_MANAGER* wolfSSL_CTX_GetCertManager(WOLFSSL_CTX*); + + WOLFSSL_API WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew_ex(void* heap); + WOLFSSL_API WOLFSSL_CERT_MANAGER* wolfSSL_CertManagerNew(void); + WOLFSSL_API void wolfSSL_CertManagerFree(WOLFSSL_CERT_MANAGER*); + + WOLFSSL_API int wolfSSL_CertManagerLoadCA(WOLFSSL_CERT_MANAGER*, const char* f, + const char* d); + WOLFSSL_API int wolfSSL_CertManagerLoadCABuffer(WOLFSSL_CERT_MANAGER*, + const unsigned char* in, long sz, int format); + WOLFSSL_API int wolfSSL_CertManagerUnloadCAs(WOLFSSL_CERT_MANAGER* cm); +#ifdef WOLFSSL_TRUST_PEER_CERT + WOLFSSL_API int wolfSSL_CertManagerUnload_trust_peers(WOLFSSL_CERT_MANAGER* cm); +#endif + WOLFSSL_API int wolfSSL_CertManagerVerify(WOLFSSL_CERT_MANAGER*, const char* f, + int format); + WOLFSSL_API int wolfSSL_CertManagerVerifyBuffer(WOLFSSL_CERT_MANAGER* cm, + const unsigned char* buff, long sz, int format); + WOLFSSL_API int wolfSSL_CertManagerCheckCRL(WOLFSSL_CERT_MANAGER*, + unsigned char*, int sz); + WOLFSSL_API int wolfSSL_CertManagerEnableCRL(WOLFSSL_CERT_MANAGER*, + int options); + WOLFSSL_API int wolfSSL_CertManagerDisableCRL(WOLFSSL_CERT_MANAGER*); + WOLFSSL_API int wolfSSL_CertManagerLoadCRL(WOLFSSL_CERT_MANAGER*, + const char*, int, int); + WOLFSSL_API int wolfSSL_CertManagerLoadCRLBuffer(WOLFSSL_CERT_MANAGER*, + const unsigned char*, long sz, int); + WOLFSSL_API int wolfSSL_CertManagerSetCRL_Cb(WOLFSSL_CERT_MANAGER*, + CbMissingCRL); +#ifdef HAVE_CRL_IO + WOLFSSL_API int wolfSSL_CertManagerSetCRL_IOCb(WOLFSSL_CERT_MANAGER*, + CbCrlIO); +#endif + WOLFSSL_API int wolfSSL_CertManagerCheckOCSP(WOLFSSL_CERT_MANAGER*, + unsigned char*, int sz); + WOLFSSL_API int wolfSSL_CertManagerEnableOCSP(WOLFSSL_CERT_MANAGER*, + int options); + WOLFSSL_API int wolfSSL_CertManagerDisableOCSP(WOLFSSL_CERT_MANAGER*); + WOLFSSL_API int wolfSSL_CertManagerSetOCSPOverrideURL(WOLFSSL_CERT_MANAGER*, + const char*); + WOLFSSL_API int wolfSSL_CertManagerSetOCSP_Cb(WOLFSSL_CERT_MANAGER*, + CbOCSPIO, CbOCSPRespFree, void*); + + WOLFSSL_API int wolfSSL_CertManagerEnableOCSPStapling( + WOLFSSL_CERT_MANAGER* cm); + WOLFSSL_API int wolfSSL_CertManagerDisableOCSPStapling( + WOLFSSL_CERT_MANAGER* cm); + + WOLFSSL_API int wolfSSL_EnableCRL(WOLFSSL* ssl, int options); + WOLFSSL_API int wolfSSL_DisableCRL(WOLFSSL* ssl); + WOLFSSL_API int wolfSSL_LoadCRL(WOLFSSL*, const char*, int, int); + WOLFSSL_API int wolfSSL_LoadCRLBuffer(WOLFSSL*, + const unsigned char*, long sz, int); + WOLFSSL_API int wolfSSL_SetCRL_Cb(WOLFSSL*, CbMissingCRL); +#ifdef HAVE_CRL_IO + WOLFSSL_API int wolfSSL_SetCRL_IOCb(WOLFSSL* ssl, CbCrlIO cb); +#endif + WOLFSSL_API int wolfSSL_EnableOCSP(WOLFSSL*, int options); + WOLFSSL_API int wolfSSL_DisableOCSP(WOLFSSL*); + WOLFSSL_API int wolfSSL_SetOCSP_OverrideURL(WOLFSSL*, const char*); + WOLFSSL_API int wolfSSL_SetOCSP_Cb(WOLFSSL*, CbOCSPIO, CbOCSPRespFree, void*); + WOLFSSL_API int wolfSSL_EnableOCSPStapling(WOLFSSL*); + WOLFSSL_API int wolfSSL_DisableOCSPStapling(WOLFSSL*); + + WOLFSSL_API int wolfSSL_CTX_EnableCRL(WOLFSSL_CTX* ctx, int options); + WOLFSSL_API int wolfSSL_CTX_DisableCRL(WOLFSSL_CTX* ctx); + WOLFSSL_API int wolfSSL_CTX_LoadCRL(WOLFSSL_CTX*, const char*, int, int); + WOLFSSL_API int wolfSSL_CTX_LoadCRLBuffer(WOLFSSL_CTX*, + const unsigned char*, long sz, int); + WOLFSSL_API int wolfSSL_CTX_SetCRL_Cb(WOLFSSL_CTX*, CbMissingCRL); +#ifdef HAVE_CRL_IO + WOLFSSL_API int wolfSSL_CTX_SetCRL_IOCb(WOLFSSL_CTX*, CbCrlIO); +#endif + + WOLFSSL_API int wolfSSL_CTX_EnableOCSP(WOLFSSL_CTX*, int options); + WOLFSSL_API int wolfSSL_CTX_DisableOCSP(WOLFSSL_CTX*); + WOLFSSL_API int wolfSSL_CTX_SetOCSP_OverrideURL(WOLFSSL_CTX*, const char*); + WOLFSSL_API int wolfSSL_CTX_SetOCSP_Cb(WOLFSSL_CTX*, + CbOCSPIO, CbOCSPRespFree, void*); + WOLFSSL_API int wolfSSL_CTX_EnableOCSPStapling(WOLFSSL_CTX*); + WOLFSSL_API int wolfSSL_CTX_DisableOCSPStapling(WOLFSSL_CTX*); +#endif /* !NO_CERTS */ + + +#ifdef SINGLE_THREADED + WOLFSSL_API int wolfSSL_CTX_new_rng(WOLFSSL_CTX*); +#endif + +/* end of handshake frees temporary arrays, if user needs for get_keys or + psk hints, call KeepArrays before handshake and then FreeArrays when done + if don't want to wait for object free */ +WOLFSSL_API void wolfSSL_KeepArrays(WOLFSSL*); +WOLFSSL_API void wolfSSL_FreeArrays(WOLFSSL*); + +WOLFSSL_API int wolfSSL_KeepHandshakeResources(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_FreeHandshakeResources(WOLFSSL* ssl); + +WOLFSSL_API int wolfSSL_CTX_UseClientSuites(WOLFSSL_CTX* ctx); +WOLFSSL_API int wolfSSL_UseClientSuites(WOLFSSL* ssl); + +/* async additions */ +#define wolfSSL_UseAsync wolfSSL_SetDevId +#define wolfSSL_CTX_UseAsync wolfSSL_CTX_SetDevId +WOLFSSL_API int wolfSSL_SetDevId(WOLFSSL*, int devId); +WOLFSSL_API int wolfSSL_CTX_SetDevId(WOLFSSL_CTX*, int devId); + +/* helpers to get device id and heap */ +WOLFSSL_API int wolfSSL_CTX_GetDevId(WOLFSSL_CTX* ctx, WOLFSSL* ssl); +WOLFSSL_API void* wolfSSL_CTX_GetHeap(WOLFSSL_CTX* ctx, WOLFSSL* ssl); + +/* TLS Extensions */ + +/* Server Name Indication */ +#ifdef HAVE_SNI + +/* SNI types */ +enum { + WOLFSSL_SNI_HOST_NAME = 0 +}; + +WOLFSSL_API int wolfSSL_UseSNI(WOLFSSL* ssl, unsigned char type, + const void* data, unsigned short size); +WOLFSSL_API int wolfSSL_CTX_UseSNI(WOLFSSL_CTX* ctx, unsigned char type, + const void* data, unsigned short size); + +#ifndef NO_WOLFSSL_SERVER + +/* SNI options */ +enum { + /* Do not abort the handshake if the requested SNI didn't match. */ + WOLFSSL_SNI_CONTINUE_ON_MISMATCH = 0x01, + + /* Behave as if the requested SNI matched in a case of mismatch. */ + /* In this case, the status will be set to WOLFSSL_SNI_FAKE_MATCH. */ + WOLFSSL_SNI_ANSWER_ON_MISMATCH = 0x02, + + /* Abort the handshake if the client didn't send a SNI request. */ + WOLFSSL_SNI_ABORT_ON_ABSENCE = 0x04, +}; + +WOLFSSL_API void wolfSSL_SNI_SetOptions(WOLFSSL* ssl, unsigned char type, + unsigned char options); +WOLFSSL_API void wolfSSL_CTX_SNI_SetOptions(WOLFSSL_CTX* ctx, + unsigned char type, unsigned char options); +WOLFSSL_API int wolfSSL_SNI_GetFromBuffer( + const unsigned char* clientHello, unsigned int helloSz, + unsigned char type, unsigned char* sni, unsigned int* inOutSz); + +#endif /* NO_WOLFSSL_SERVER */ + +/* SNI status */ +enum { + WOLFSSL_SNI_NO_MATCH = 0, + WOLFSSL_SNI_FAKE_MATCH = 1, /**< @see WOLFSSL_SNI_ANSWER_ON_MISMATCH */ + WOLFSSL_SNI_REAL_MATCH = 2, + WOLFSSL_SNI_FORCE_KEEP = 3 /** Used with -DWOLFSSL_ALWAYS_KEEP_SNI */ +}; + +WOLFSSL_API unsigned char wolfSSL_SNI_Status(WOLFSSL* ssl, unsigned char type); + +WOLFSSL_API unsigned short wolfSSL_SNI_GetRequest(WOLFSSL *ssl, + unsigned char type, void** data); + +#endif /* HAVE_SNI */ + +/* Application-Layer Protocol Negotiation */ +#ifdef HAVE_ALPN + +/* ALPN status code */ +enum { + WOLFSSL_ALPN_NO_MATCH = 0, + WOLFSSL_ALPN_MATCH = 1, + WOLFSSL_ALPN_CONTINUE_ON_MISMATCH = 2, + WOLFSSL_ALPN_FAILED_ON_MISMATCH = 4, +}; + +enum { + WOLFSSL_MAX_ALPN_PROTO_NAME_LEN = 255, + WOLFSSL_MAX_ALPN_NUMBER = 257 +}; + +#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) +typedef int (*CallbackALPNSelect)(WOLFSSL* ssl, const unsigned char** out, + unsigned char* outLen, const unsigned char* in, unsigned int inLen, + void *arg); +#endif + +WOLFSSL_API int wolfSSL_UseALPN(WOLFSSL* ssl, char *protocol_name_list, + unsigned int protocol_name_listSz, + unsigned char options); + +WOLFSSL_API int wolfSSL_ALPN_GetProtocol(WOLFSSL* ssl, char **protocol_name, + unsigned short *size); + +WOLFSSL_API int wolfSSL_ALPN_GetPeerProtocol(WOLFSSL* ssl, char **list, + unsigned short *listSz); +WOLFSSL_API int wolfSSL_ALPN_FreePeerProtocol(WOLFSSL* ssl, char **list); +#endif /* HAVE_ALPN */ + +/* Maximum Fragment Length */ +#ifdef HAVE_MAX_FRAGMENT + +/* Fragment lengths */ +enum { + WOLFSSL_MFL_2_9 = 1, /* 512 bytes */ + WOLFSSL_MFL_2_10 = 2, /* 1024 bytes */ + WOLFSSL_MFL_2_11 = 3, /* 2048 bytes */ + WOLFSSL_MFL_2_12 = 4, /* 4096 bytes */ + WOLFSSL_MFL_2_13 = 5 /* 8192 bytes *//* wolfSSL ONLY!!! */ +}; + +#ifndef NO_WOLFSSL_CLIENT + +WOLFSSL_API int wolfSSL_UseMaxFragment(WOLFSSL* ssl, unsigned char mfl); +WOLFSSL_API int wolfSSL_CTX_UseMaxFragment(WOLFSSL_CTX* ctx, unsigned char mfl); + +#endif +#endif + +/* Truncated HMAC */ +#ifdef HAVE_TRUNCATED_HMAC +#ifndef NO_WOLFSSL_CLIENT + +WOLFSSL_API int wolfSSL_UseTruncatedHMAC(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_CTX_UseTruncatedHMAC(WOLFSSL_CTX* ctx); + +#endif +#endif + +/* Certificate Status Request */ +/* Certificate Status Type */ +enum { + WOLFSSL_CSR_OCSP = 1 +}; + +/* Certificate Status Options (flags) */ +enum { + WOLFSSL_CSR_OCSP_USE_NONCE = 0x01 +}; + +#ifdef HAVE_CERTIFICATE_STATUS_REQUEST +#ifndef NO_WOLFSSL_CLIENT + +WOLFSSL_API int wolfSSL_UseOCSPStapling(WOLFSSL* ssl, + unsigned char status_type, unsigned char options); + +WOLFSSL_API int wolfSSL_CTX_UseOCSPStapling(WOLFSSL_CTX* ctx, + unsigned char status_type, unsigned char options); + +#endif +#endif + +/* Certificate Status Request v2 */ +/* Certificate Status Type */ +enum { + WOLFSSL_CSR2_OCSP = 1, + WOLFSSL_CSR2_OCSP_MULTI = 2 +}; + +/* Certificate Status v2 Options (flags) */ +enum { + WOLFSSL_CSR2_OCSP_USE_NONCE = 0x01 +}; + +#ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2 +#ifndef NO_WOLFSSL_CLIENT + +WOLFSSL_API int wolfSSL_UseOCSPStaplingV2(WOLFSSL* ssl, + unsigned char status_type, unsigned char options); + +WOLFSSL_API int wolfSSL_CTX_UseOCSPStaplingV2(WOLFSSL_CTX* ctx, + unsigned char status_type, unsigned char options); + +#endif +#endif + +/* Named Groups */ +enum { +#if 0 /* Not Supported */ + WOLFSSL_ECC_SECT163K1 = 1, + WOLFSSL_ECC_SECT163R1 = 2, + WOLFSSL_ECC_SECT163R2 = 3, + WOLFSSL_ECC_SECT193R1 = 4, + WOLFSSL_ECC_SECT193R2 = 5, + WOLFSSL_ECC_SECT233K1 = 6, + WOLFSSL_ECC_SECT233R1 = 7, + WOLFSSL_ECC_SECT239K1 = 8, + WOLFSSL_ECC_SECT283K1 = 9, + WOLFSSL_ECC_SECT283R1 = 10, + WOLFSSL_ECC_SECT409K1 = 11, + WOLFSSL_ECC_SECT409R1 = 12, + WOLFSSL_ECC_SECT571K1 = 13, + WOLFSSL_ECC_SECT571R1 = 14, +#endif + WOLFSSL_ECC_SECP160K1 = 15, + WOLFSSL_ECC_SECP160R1 = 16, + WOLFSSL_ECC_SECP160R2 = 17, + WOLFSSL_ECC_SECP192K1 = 18, + WOLFSSL_ECC_SECP192R1 = 19, + WOLFSSL_ECC_SECP224K1 = 20, + WOLFSSL_ECC_SECP224R1 = 21, + WOLFSSL_ECC_SECP256K1 = 22, + WOLFSSL_ECC_SECP256R1 = 23, + WOLFSSL_ECC_SECP384R1 = 24, + WOLFSSL_ECC_SECP521R1 = 25, + WOLFSSL_ECC_BRAINPOOLP256R1 = 26, + WOLFSSL_ECC_BRAINPOOLP384R1 = 27, + WOLFSSL_ECC_BRAINPOOLP512R1 = 28, + WOLFSSL_ECC_X25519 = 29, +#ifdef WOLFSSL_TLS13 + /* Not implemented. */ + WOLFSSL_ECC_X448 = 30, + + WOLFSSL_FFDHE_2048 = 256, + WOLFSSL_FFDHE_3072 = 257, + WOLFSSL_FFDHE_4096 = 258, + WOLFSSL_FFDHE_6144 = 259, + WOLFSSL_FFDHE_8192 = 260, +#endif +}; + +enum { + WOLFSSL_EC_PF_UNCOMPRESSED = 0, +#if 0 /* Not Supported */ + WOLFSSL_EC_PF_X962_COMP_PRIME = 1, + WOLFSSL_EC_PF_X962_COMP_CHAR2 = 2, +#endif +}; + +#ifdef HAVE_SUPPORTED_CURVES +#ifndef NO_WOLFSSL_CLIENT + +WOLFSSL_API int wolfSSL_UseSupportedCurve(WOLFSSL* ssl, unsigned short name); +WOLFSSL_API int wolfSSL_CTX_UseSupportedCurve(WOLFSSL_CTX* ctx, + unsigned short name); + +#endif +#endif + +#ifdef WOLFSSL_TLS13 +WOLFSSL_API int wolfSSL_UseKeyShare(WOLFSSL* ssl, unsigned short group); +WOLFSSL_API int wolfSSL_NoKeyShares(WOLFSSL* ssl); +#endif + + +/* Secure Renegotiation */ +#ifdef HAVE_SECURE_RENEGOTIATION + +WOLFSSL_API int wolfSSL_UseSecureRenegotiation(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_Rehandshake(WOLFSSL* ssl); + +#endif + +/* Session Ticket */ +#ifdef HAVE_SESSION_TICKET + +#ifndef NO_WOLFSSL_CLIENT +WOLFSSL_API int wolfSSL_UseSessionTicket(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_CTX_UseSessionTicket(WOLFSSL_CTX* ctx); +WOLFSSL_API int wolfSSL_get_SessionTicket(WOLFSSL*, unsigned char*, unsigned int*); +WOLFSSL_API int wolfSSL_set_SessionTicket(WOLFSSL*, const unsigned char*, unsigned int); +typedef int (*CallbackSessionTicket)(WOLFSSL*, const unsigned char*, int, void*); +WOLFSSL_API int wolfSSL_set_SessionTicket_cb(WOLFSSL*, + CallbackSessionTicket, void*); +#endif /* NO_WOLFSSL_CLIENT */ + +#ifndef NO_WOLFSSL_SERVER + +#define WOLFSSL_TICKET_NAME_SZ 16 +#define WOLFSSL_TICKET_IV_SZ 16 +#define WOLFSSL_TICKET_MAC_SZ 32 + +enum TicketEncRet { + WOLFSSL_TICKET_RET_FATAL = -1, /* fatal error, don't use ticket */ + WOLFSSL_TICKET_RET_OK = 0, /* ok, use ticket */ + WOLFSSL_TICKET_RET_REJECT, /* don't use ticket, but not fatal */ + WOLFSSL_TICKET_RET_CREATE /* existing ticket ok and create new one */ +}; + +typedef int (*SessionTicketEncCb)(WOLFSSL*, + unsigned char key_name[WOLFSSL_TICKET_NAME_SZ], + unsigned char iv[WOLFSSL_TICKET_IV_SZ], + unsigned char mac[WOLFSSL_TICKET_MAC_SZ], + int enc, unsigned char*, int, int*, void*); +WOLFSSL_API int wolfSSL_CTX_set_TicketEncCb(WOLFSSL_CTX* ctx, + SessionTicketEncCb); +WOLFSSL_API int wolfSSL_CTX_set_TicketHint(WOLFSSL_CTX* ctx, int); +WOLFSSL_API int wolfSSL_CTX_set_TicketEncCtx(WOLFSSL_CTX* ctx, void*); + +#endif /* NO_WOLFSSL_SERVER */ + +#endif /* HAVE_SESSION_TICKET */ + +#ifdef HAVE_QSH +/* Quantum-safe Crypto Schemes */ +enum { + WOLFSSL_NTRU_EESS439 = 0x0101, /* max plaintext length of 65 */ + WOLFSSL_NTRU_EESS593 = 0x0102, /* max plaintext length of 86 */ + WOLFSSL_NTRU_EESS743 = 0x0103, /* max plaintext length of 106 */ + WOLFSSL_LWE_XXX = 0x0201, /* Learning With Error encryption scheme */ + WOLFSSL_HFE_XXX = 0x0301, /* Hidden Field Equation scheme */ + WOLFSSL_NULL_QSH = 0xFFFF /* QSHScheme is not used */ +}; + + +/* test if the connection is using a QSH secure connection return 1 if so */ +WOLFSSL_API int wolfSSL_isQSH(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_UseSupportedQSH(WOLFSSL* ssl, unsigned short name); +#ifndef NO_WOLFSSL_CLIENT + /* user control over sending client public key in hello + when flag = 1 will send keys if flag is 0 or function is not called + then will not send keys in the hello extension */ + WOLFSSL_API int wolfSSL_UseClientQSHKeys(WOLFSSL* ssl, unsigned char flag); +#endif + +#endif /* QSH */ + +/* TLS Extended Master Secret Extension */ +WOLFSSL_API int wolfSSL_DisableExtendedMasterSecret(WOLFSSL* ssl); +WOLFSSL_API int wolfSSL_CTX_DisableExtendedMasterSecret(WOLFSSL_CTX* ctx); + + +#define WOLFSSL_CRL_MONITOR 0x01 /* monitor this dir flag */ +#define WOLFSSL_CRL_START_MON 0x02 /* start monitoring flag */ + + +/* notify user the handshake is done */ +typedef int (*HandShakeDoneCb)(WOLFSSL*, void*); +WOLFSSL_API int wolfSSL_SetHsDoneCb(WOLFSSL*, HandShakeDoneCb, void*); + + +WOLFSSL_API int wolfSSL_PrintSessionStats(void); +WOLFSSL_API int wolfSSL_get_session_stats(unsigned int* active, + unsigned int* total, + unsigned int* peak, + unsigned int* maxSessions); +/* External facing KDF */ +WOLFSSL_API +int wolfSSL_MakeTlsMasterSecret(unsigned char* ms, unsigned int msLen, + const unsigned char* pms, unsigned int pmsLen, + const unsigned char* cr, const unsigned char* sr, + int tls1_2, int hash_type); + +WOLFSSL_API +int wolfSSL_MakeTlsExtendedMasterSecret(unsigned char* ms, unsigned int msLen, + const unsigned char* pms, unsigned int pmsLen, + const unsigned char* sHash, unsigned int sHashLen, + int tls1_2, int hash_type); + +WOLFSSL_API +int wolfSSL_DeriveTlsKeys(unsigned char* key_data, unsigned int keyLen, + const unsigned char* ms, unsigned int msLen, + const unsigned char* sr, const unsigned char* cr, + int tls1_2, int hash_type); + +#ifdef WOLFSSL_CALLBACKS + +/* used internally by wolfSSL while OpenSSL types aren't */ +#include + +typedef int (*HandShakeCallBack)(HandShakeInfo*); +typedef int (*TimeoutCallBack)(TimeoutInfo*); + +/* wolfSSL connect extension allowing HandShakeCallBack and/or TimeoutCallBack + for diagnostics */ +WOLFSSL_API int wolfSSL_connect_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack, + Timeval); +WOLFSSL_API int wolfSSL_accept_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack, + Timeval); + +#endif /* WOLFSSL_CALLBACKS */ + + +#ifdef WOLFSSL_HAVE_WOLFSCEP + WOLFSSL_API void wolfSSL_wolfSCEP(void); +#endif /* WOLFSSL_HAVE_WOLFSCEP */ + +#ifdef WOLFSSL_HAVE_CERT_SERVICE + WOLFSSL_API void wolfSSL_cert_service(void); +#endif + +#if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) +/* Smaller subset of X509 compatibility functions. Avoid increasing the size of + * this subset and its memory usage */ + +#include +struct WOLFSSL_X509_NAME_ENTRY { + WOLFSSL_ASN1_OBJECT* object; /* not defined yet */ + WOLFSSL_ASN1_STRING data; + WOLFSSL_ASN1_STRING* value; /* points to data, for lighttpd port */ + int nid; /* i.e. ASN_COMMON_NAME */ + int set; + int size; +}; +#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ + +#ifdef OPENSSL_EXTRA + +enum { + WOLFSSL_SYS_ACCEPT = 0, + WOLFSSL_SYS_BIND, + WOLFSSL_SYS_CONNECT, + WOLFSSL_SYS_FOPEN, + WOLFSSL_SYS_FREAD, + WOLFSSL_SYS_GETADDRINFO, + WOLFSSL_SYS_GETSOCKOPT, + WOLFSSL_SYS_GETSOCKNAME, + WOLFSSL_SYS_GETHOSTBYNAME, + WOLFSSL_SYS_GETNAMEINFO, + WOLFSSL_SYS_GETSERVBYNAME, + WOLFSSL_SYS_IOCTLSOCKET, + WOLFSSL_SYS_LISTEN, + WOLFSSL_SYS_OPENDIR, + WOLFSSL_SYS_SETSOCKOPT, + WOLFSSL_SYS_SOCKET +}; + +/* Object functions */ +WOLFSSL_API const char * wolfSSL_OBJ_nid2sn(int n); +WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o); +WOLFSSL_API int wolfSSL_OBJ_sn2nid(const char *sn); + +WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n); +WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn); + +WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int n); +WOLFSSL_API int wolfSSL_OBJ_obj2txt(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a, int no_name); + +WOLFSSL_API void wolfSSL_OBJ_cleanup(void); +/* end of object functions */ + +#ifndef NO_FILESYSTEM +WOLFSSL_API long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c); +WOLFSSL_API long wolfSSL_BIO_get_fp(WOLFSSL_BIO *bio, XFILE* fp); +#endif + +WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error_line(const char **file, int *line); +WOLFSSL_API long wolfSSL_ctrl(WOLFSSL* ssl, int cmd, long opt, void* pt); +WOLFSSL_API long wolfSSL_CTX_ctrl(WOLFSSL_CTX* ctx, int cmd, long opt,void* pt); + +#ifndef NO_CERTS +WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_NID( + WOLFSSL_X509_NAME_ENTRY** out, int nid, int type, + unsigned char* data, int dataSz); +WOLFSSL_API int wolfSSL_X509_NAME_add_entry(WOLFSSL_X509_NAME* name, + WOLFSSL_X509_NAME_ENTRY* entry, int idx, int set); +WOLFSSL_API int wolfSSL_X509_NAME_cmp(const WOLFSSL_X509_NAME* x, + const WOLFSSL_X509_NAME* y); +WOLFSSL_API WOLFSSL_X509_NAME* wolfSSL_X509_NAME_new(void); +WOLFSSL_API int wolfSSL_check_private_key(const WOLFSSL* ssl); +WOLFSSL_API void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, + int nid, int* c, int* idx); +WOLFSSL_API int wolfSSL_X509_digest(const WOLFSSL_X509* x509, + const WOLFSSL_EVP_MD* digest, unsigned char* buf, unsigned int* len); +WOLFSSL_API int wolfSSL_use_certificate(WOLFSSL* ssl, WOLFSSL_X509* x509); +WOLFSSL_API int wolfSSL_use_certificate_ASN1(WOLFSSL* ssl, unsigned char* der, + int derSz); +WOLFSSL_API int wolfSSL_use_PrivateKey(WOLFSSL* ssl, WOLFSSL_EVP_PKEY* pkey); +WOLFSSL_API int wolfSSL_use_PrivateKey_ASN1(int pri, WOLFSSL* ssl, + unsigned char* der, long derSz); +WOLFSSL_API WOLFSSL_EVP_PKEY *wolfSSL_get_privatekey(const WOLFSSL *ssl); +#ifndef NO_RSA +WOLFSSL_API int wolfSSL_use_RSAPrivateKey_ASN1(WOLFSSL* ssl, unsigned char* der, + long derSz); +#endif +#endif /* NO_CERTS */ + +WOLFSSL_API WOLFSSL_DH *wolfSSL_DSA_dup_DH(const WOLFSSL_DSA *r); + +WOLFSSL_API int wolfSSL_SESSION_get_master_key(const WOLFSSL_SESSION* ses, + unsigned char* out, int outSz); +WOLFSSL_API int wolfSSL_SESSION_get_master_key_length(const WOLFSSL_SESSION* ses); + +WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx, + WOLFSSL_X509_STORE* str); +WOLFSSL_API int wolfSSL_i2d_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509); +WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio, + WOLFSSL_X509** x509); +WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx); + +WOLFSSL_API size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO *b); +WOLFSSL_API size_t wolfSSL_get_server_random(const WOLFSSL *ssl, + unsigned char *out, size_t outlen); +WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl, + unsigned char* out, size_t outSz); +WOLFSSL_API pem_password_cb* wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX *ctx); +WOLFSSL_API void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx); +WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u); +WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX + (WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u); + +/*lighttp compatibility */ + +struct WOLFSSL_ASN1_BIT_STRING { + int length; + int type; + char* data; + long flags; +}; + + +#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) \ + || defined(HAVE_STUNNEL) \ + || defined(WOLFSSL_NGINX) \ + || defined(WOLFSSL_HAPROXY) \ + || defined(OPENSSL_EXTRA) +WOLFSSL_API void wolfSSL_X509_NAME_ENTRY_free(WOLFSSL_X509_NAME_ENTRY* ne); +WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_new(void); +WOLFSSL_API void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME* name); +WOLFSSL_API char wolfSSL_CTX_use_certificate(WOLFSSL_CTX *ctx, WOLFSSL_X509 *x); +WOLFSSL_API int wolfSSL_BIO_read_filename(WOLFSSL_BIO *b, const char *name); +/* These are to be merged shortly */ +WOLFSSL_API void wolfSSL_set_verify_depth(WOLFSSL *ssl,int depth); +WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl); +WOLFSSL_API int wolfSSL_set_app_data(WOLFSSL *ssl, void *arg); +WOLFSSL_API WOLFSSL_ASN1_OBJECT * wolfSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne); +WOLFSSL_API WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry(WOLFSSL_X509_NAME *name, int loc); +WOLFSSL_API void wolfSSL_sk_X509_NAME_pop_free(WOLF_STACK_OF(WOLFSSL_X509_NAME)* sk, void f (WOLFSSL_X509_NAME*)); +WOLFSSL_API unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md); +WOLFSSL_API unsigned char *wolfSSL_SHA256(const unsigned char *d, size_t n, unsigned char *md); +WOLFSSL_API int wolfSSL_X509_check_private_key(WOLFSSL_X509*, WOLFSSL_EVP_PKEY*); +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( WOLF_STACK_OF(WOLFSSL_X509_NAME) *sk ); + +/* end lighttpd*/ +#endif +#endif + +#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \ + || defined(WOLFSSL_MYSQL_COMPATIBLE) \ + || defined(WOLFSSL_HAPROXY) \ + || defined(OPENSSL_EXTRA) + +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode); +WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*); +WOLFSSL_API WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp, + WOLFSSL_DH **x, pem_password_cb *cb, void *u); +WOLFSSL_API WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp, + WOLFSSL_DSA **x, pem_password_cb *cb, void *u); +WOLFSSL_API int wolfSSL_PEM_write_bio_X509_REQ(WOLFSSL_BIO *bp,WOLFSSL_X509 *x); +WOLFSSL_API int wolfSSL_PEM_write_bio_X509_AUX(WOLFSSL_BIO *bp,WOLFSSL_X509 *x); +WOLFSSL_API int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x); + +#endif /* HAVE_STUNNEL || HAVE_LIGHTY */ + + +#if defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || \ + defined(WOLFSSL_HAPROXY) || defined(OPENSSL_EXTRA) + +#include + +/* SNI received callback type */ +typedef int (*CallbackSniRecv)(WOLFSSL *ssl, int *ret, void* exArg); + +WOLFSSL_API int wolfSSL_CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), void (*f) (void *)); + +WOLFSSL_API void wolfSSL_CRYPTO_cleanup_all_ex_data(void); + +WOLFSSL_API WOLFSSL_BIGNUM* wolfSSL_DH_1536_prime(WOLFSSL_BIGNUM* bn); +WOLFSSL_API WOLFSSL_DH *wolfSSL_DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, void *), void *cb_arg); + +WOLFSSL_API int wolfSSL_DH_generate_parameters_ex(WOLFSSL_DH*, int, int, + void (*callback) (int, int, void *)); + +WOLFSSL_API void wolfSSL_ERR_load_crypto_strings(void); + +WOLFSSL_API unsigned long wolfSSL_ERR_peek_last_error(void); + +WOLFSSL_API int wolfSSL_FIPS_mode(void); + +WOLFSSL_API int wolfSSL_FIPS_mode_set(int r); + +WOLFSSL_API int wolfSSL_RAND_set_rand_method(const void *meth); + +WOLFSSL_API int wolfSSL_CIPHER_get_bits(const WOLFSSL_CIPHER *c, int *alg_bits); + +WOLFSSL_API int wolfSSL_sk_X509_NAME_num(const WOLF_STACK_OF(WOLFSSL_X509_NAME) *s); + +WOLFSSL_API int wolfSSL_sk_X509_num(const WOLF_STACK_OF(WOLFSSL_X509) *s); + +WOLFSSL_API int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO*,WOLFSSL_X509_NAME*,int, + unsigned long); + +WOLFSSL_API WOLFSSL_ASN1_BIT_STRING* wolfSSL_X509_get0_pubkey_bitstr( + const WOLFSSL_X509*); + +WOLFSSL_API int wolfSSL_CTX_add_session(WOLFSSL_CTX*, WOLFSSL_SESSION*); + +WOLFSSL_API WOLFSSL_CTX* wolfSSL_get_SSL_CTX(WOLFSSL* ssl); + +WOLFSSL_API int wolfSSL_version(WOLFSSL*); + +WOLFSSL_API int wolfSSL_get_state(const WOLFSSL*); + +WOLFSSL_API void* wolfSSL_sk_X509_NAME_value(const WOLF_STACK_OF(WOLFSSL_X509_NAME)*, int); + +WOLFSSL_API void* wolfSSL_sk_X509_value(WOLF_STACK_OF(WOLFSSL_X509)*, int); + +WOLFSSL_API void* wolfSSL_SESSION_get_ex_data(const WOLFSSL_SESSION*, int); + +WOLFSSL_API int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION*, int, void*); + +WOLFSSL_API int wolfSSL_SESSION_get_ex_new_index(long,void*,void*,void*, + CRYPTO_free_func*); + +WOLFSSL_API int wolfSSL_X509_NAME_get_sz(WOLFSSL_X509_NAME*); + + +WOLFSSL_API const unsigned char* wolfSSL_SESSION_get_id(WOLFSSL_SESSION*, + unsigned int*); + +WOLFSSL_API int wolfSSL_set_tlsext_host_name(WOLFSSL *, const char *); + +WOLFSSL_API const char* wolfSSL_get_servername(WOLFSSL *, unsigned char); + +WOLFSSL_API WOLFSSL_CTX* wolfSSL_set_SSL_CTX(WOLFSSL*,WOLFSSL_CTX*); + +WOLFSSL_API VerifyCallback wolfSSL_CTX_get_verify_callback(WOLFSSL_CTX*); + +WOLFSSL_API void wolfSSL_CTX_set_servername_callback(WOLFSSL_CTX *, + CallbackSniRecv); +WOLFSSL_API int wolfSSL_CTX_set_tlsext_servername_callback(WOLFSSL_CTX *, + CallbackSniRecv); + +WOLFSSL_API void wolfSSL_CTX_set_servername_arg(WOLFSSL_CTX *, void*); + +WOLFSSL_API void WOLFSSL_ERR_remove_thread_state(void*); + +#ifndef NO_FILESYSTEM +WOLFSSL_API void wolfSSL_print_all_errors_fp(XFILE *fp); +#endif + +WOLFSSL_API void wolfSSL_THREADID_set_callback(void (*threadid_func)(void*)); + +WOLFSSL_API void wolfSSL_THREADID_set_numeric(void* id, unsigned long val); + +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_STORE_get1_certs( + WOLFSSL_X509_STORE_CTX*, WOLFSSL_X509_NAME*); + +WOLFSSL_API void wolfSSL_sk_X509_pop_free(WOLF_STACK_OF(WOLFSSL_X509)* sk, void f (WOLFSSL_X509*)); +#endif /* HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */ + +#if defined(HAVE_STUNNEL) || defined(WOLFSSL_MYSQL_COMPATIBLE) \ + || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) + +WOLFSSL_API int wolfSSL_CTX_get_verify_mode(WOLFSSL_CTX* ctx); + +#endif + +#ifdef WOLFSSL_JNI +WOLFSSL_API int wolfSSL_set_jobject(WOLFSSL* ssl, void* objPtr); +WOLFSSL_API void* wolfSSL_get_jobject(WOLFSSL* ssl); +#endif /* WOLFSSL_JNI */ + + +#ifdef WOLFSSL_ASYNC_CRYPT +WOLFSSL_API int wolfSSL_AsyncPoll(WOLFSSL* ssl, WOLF_EVENT_FLAG flags); +WOLFSSL_API int wolfSSL_CTX_AsyncPoll(WOLFSSL_CTX* ctx, WOLF_EVENT** events, int maxEvents, + WOLF_EVENT_FLAG flags, int* eventCount); +#endif /* WOLFSSL_ASYNC_CRYPT */ + +#ifdef OPENSSL_EXTRA +WOLFSSL_API int wolfSSL_CTX_set1_curves_list(WOLFSSL_CTX* ctx, char* names); + +typedef void (*SSL_Msg_Cb)(int write_p, int version, int content_type, + const void *buf, size_t len, WOLFSSL *ssl, void *arg); + +WOLFSSL_API int wolfSSL_CTX_set_msg_callback(WOLFSSL_CTX *ctx, SSL_Msg_Cb cb); +WOLFSSL_API int wolfSSL_set_msg_callback(WOLFSSL *ssl, SSL_Msg_Cb cb); +WOLFSSL_API int wolfSSL_CTX_set_msg_callback_arg(WOLFSSL_CTX *ctx, void* arg); +WOLFSSL_API int wolfSSL_set_msg_callback_arg(WOLFSSL *ssl, void* arg); +WOLFSSL_API unsigned long wolfSSL_ERR_peek_error_line_data(const char **file, + int *line, const char **data, int *flags); +WOLFSSL_API int wolfSSL_CTX_set_alpn_protos(WOLFSSL_CTX *ctx, + const unsigned char *protos, unsigned int protos_len); +WOLFSSL_API void *wolfSSL_OPENSSL_memdup(const void *data, + size_t siz, const char* file, int line); +WOLFSSL_API void wolfSSL_ERR_load_BIO_strings(void); +#endif + +#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \ + defined(OPENSSL_EXTRA) +WOLFSSL_API void wolfSSL_OPENSSL_config(char *config_name); +#endif + +#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) +/* Not an OpenSSL API. */ +WOLFSSL_LOCAL int wolfSSL_get_ocsp_response(WOLFSSL* ssl, byte** response); +/* Not an OpenSSL API. */ +WOLFSSL_LOCAL char* wolfSSL_get_ocsp_url(WOLFSSL* ssl); +/* Not an OpenSSL API. */ +WOLFSSL_API int wolfSSL_set_ocsp_url(WOLFSSL* ssl, char* url); + +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl); +WOLFSSL_API int wolfSSL_X509_get_ex_new_index(int idx, void *arg, void *a, + void *b, void *c); +WOLFSSL_API void *wolfSSL_X509_get_ex_data(WOLFSSL_X509 *x509, int idx); +WOLFSSL_API int wolfSSL_X509_set_ex_data(WOLFSSL_X509 *x509, int idx, + void *data); + +WOLFSSL_API int wolfSSL_X509_NAME_digest(const WOLFSSL_X509_NAME *data, + const WOLFSSL_EVP_MD *type, unsigned char *md, unsigned int *len); + +WOLFSSL_API long wolfSSL_SSL_CTX_get_timeout(const WOLFSSL_CTX *ctx); +WOLFSSL_API int wolfSSL_SSL_CTX_set_tmp_ecdh(WOLFSSL_CTX *ctx, + WOLFSSL_EC_KEY *ecdh); +WOLFSSL_API int wolfSSL_SSL_CTX_remove_session(WOLFSSL_CTX *, + WOLFSSL_SESSION *c); + +WOLFSSL_API WOLFSSL_BIO *wolfSSL_SSL_get_rbio(const WOLFSSL *s); +WOLFSSL_API WOLFSSL_BIO *wolfSSL_SSL_get_wbio(const WOLFSSL *s); +WOLFSSL_API int wolfSSL_SSL_do_handshake(WOLFSSL *s); +WOLFSSL_API int wolfSSL_SSL_in_init(WOLFSSL *a); /* #define in OpenSSL */ +#ifndef NO_SESSION_CACHE + WOLFSSL_API WOLFSSL_SESSION *wolfSSL_SSL_get0_session(const WOLFSSL *s); +#endif +WOLFSSL_API int wolfSSL_X509_check_host(WOLFSSL_X509 *x, const char *chk, + size_t chklen, unsigned int flags, char **peername); + +WOLFSSL_API int wolfSSL_i2a_ASN1_INTEGER(WOLFSSL_BIO *bp, + const WOLFSSL_ASN1_INTEGER *a); + +#ifdef HAVE_SESSION_TICKET +WOLFSSL_API int wolfSSL_CTX_set_tlsext_ticket_key_cb(WOLFSSL_CTX *, int (*)( + WOLFSSL *ssl, unsigned char *name, unsigned char *iv, + WOLFSSL_EVP_CIPHER_CTX *ectx, WOLFSSL_HMAC_CTX *hctx, int enc)); +#endif + +#ifdef HAVE_OCSP +WOLFSSL_API int wolfSSL_CTX_get_extra_chain_certs(WOLFSSL_CTX* ctx, + WOLF_STACK_OF(X509)** chain); +WOLFSSL_API int wolfSSL_CTX_set_tlsext_status_cb(WOLFSSL_CTX* ctx, + int(*)(WOLFSSL*, void*)); + +WOLFSSL_API int wolfSSL_X509_STORE_CTX_get1_issuer(WOLFSSL_X509 **issuer, + WOLFSSL_X509_STORE_CTX *ctx, WOLFSSL_X509 *x); + +WOLFSSL_API void wolfSSL_X509_email_free(WOLF_STACK_OF(WOLFSSL_STRING) *sk); +WOLFSSL_API WOLF_STACK_OF(WOLFSSL_STRING) *wolfSSL_X509_get1_ocsp(WOLFSSL_X509 *x); + +WOLFSSL_API int wolfSSL_X509_check_issued(WOLFSSL_X509 *issuer, + WOLFSSL_X509 *subject); + +WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_dup(WOLFSSL_X509 *x); + +WOLFSSL_API char* wolfSSL_sk_WOLFSSL_STRING_value( + WOLF_STACK_OF(WOLFSSL_STRING)* strings, int idx); +#endif /* HAVE_OCSP */ + +WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bio, + WOLFSSL_X509 *cert); + +#endif /* WOLFSSL_NGINX */ + +WOLFSSL_API void wolfSSL_get0_alpn_selected(const WOLFSSL *ssl, + const unsigned char **data, unsigned int *len); +WOLFSSL_API int wolfSSL_select_next_proto(unsigned char **out, + unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); +WOLFSSL_API void wolfSSL_CTX_set_alpn_select_cb(WOLFSSL_CTX *ctx, + int (*cb) (WOLFSSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg), void *arg); +WOLFSSL_API void wolfSSL_CTX_set_next_protos_advertised_cb(WOLFSSL_CTX *s, + int (*cb) (WOLFSSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg), void *arg); +WOLFSSL_API void wolfSSL_CTX_set_next_proto_select_cb(WOLFSSL_CTX *s, + int (*cb) (WOLFSSL *ssl, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg), void *arg); +WOLFSSL_API void wolfSSL_get0_next_proto_negotiated(const WOLFSSL *s, const unsigned char **data, + unsigned *len); + + +#ifdef OPENSSL_EXTRA +#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) +WOLFSSL_API const unsigned char *SSL_SESSION_get0_id_context( + const WOLFSSL_SESSION *sess, unsigned int *sid_ctx_length); +WOLFSSL_API size_t SSL_get_finished(const WOLFSSL *s, void *buf, size_t count); +WOLFSSL_API size_t SSL_get_peer_finished(const WOLFSSL *s, void *buf, size_t count); +#endif + +WOLFSSL_API int SSL_SESSION_set1_id(WOLFSSL_SESSION *s, const unsigned char *sid, unsigned int sid_len); +WOLFSSL_API int SSL_SESSION_set1_id_context(WOLFSSL_SESSION *s, const unsigned char *sid_ctx, unsigned int sid_ctx_len); +WOLFSSL_API void *X509_get0_tbs_sigalg(const WOLFSSL_X509 *x); +WOLFSSL_API void X509_ALGOR_get0(WOLFSSL_ASN1_OBJECT **paobj, int *pptype, const void **ppval, const void *algor); +WOLFSSL_API void *X509_get_X509_PUBKEY(void * x); +WOLFSSL_API int X509_PUBKEY_get0_param(WOLFSSL_ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, void **pa, WOLFSSL_EVP_PKEY *pub); +WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a); +WOLFSSL_API void SSL_CTX_set_tmp_dh_callback(WOLFSSL_CTX *ctx, WOLFSSL_DH *(*dh) (WOLFSSL *ssl, int is_export, int keylength)); +WOLFSSL_API WOLF_STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +WOLFSSL_API int X509_STORE_load_locations(WOLFSSL_X509_STORE *ctx, const char *file, const char *dir); +WOLFSSL_API int wolfSSL_sk_SSL_CIPHER_num(const void * p); +WOLFSSL_API int wolfSSL_sk_SSL_COMP_zero(WOLFSSL_STACK* st); +WOLFSSL_API WOLFSSL_CIPHER* wolfSSL_sk_SSL_CIPHER_value(void *ciphers, int idx); +WOLFSSL_API void ERR_load_SSL_strings(void); +WOLFSSL_API void wolfSSL_EC_POINT_dump(const char *msg, const WOLFSSL_EC_POINT *p); + +#endif /* OPENSSL_EXTRA */ + +#ifdef __cplusplus + } /* extern "C" */ +#endif + + +#endif /* WOLFSSL_SSL_H */ diff --git a/components/ssl/wolfssl/include/wolfssl/version.h b/components/ssl/wolfssl/include/wolfssl/version.h new file mode 100644 index 00000000..66cc4388 --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/version.h @@ -0,0 +1,31 @@ +/* wolfssl_version.h.in + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + +#ifndef WOLFSSL_VERSION_H +#define WOLFSSL_VERSION_H + + +#ifdef __cplusplus +extern "C" { +#endif + +#define LIBWOLFSSL_VERSION_STRING "3.14.0" +#define LIBWOLFSSL_VERSION_HEX 0x03014000 + +#ifdef __cplusplus +} +#endif + + +#endif /* WOLFSSL_VERSION_H */ + diff --git a/components/ssl/wolfssl/include/wolfssl/wolfcrypt/logging.h b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/logging.h new file mode 100644 index 00000000..8be8f141 --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/logging.h @@ -0,0 +1,117 @@ +/* logging.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + +/* submitted by eof */ + + +#ifndef WOLFSSL_LOGGING_H +#define WOLFSSL_LOGGING_H + +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +enum wc_LogLevels { + ERROR_LOG = 0, + INFO_LOG, + ENTER_LOG, + LEAVE_LOG, + OTHER_LOG +}; + +typedef void (*wolfSSL_Logging_cb)(const int logLevel, + const char *const logMessage); + +WOLFSSL_API int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function); + +/* turn logging on, only if compiled in */ +WOLFSSL_API int wolfSSL_Debugging_ON(void); +/* turn logging off */ +WOLFSSL_API void wolfSSL_Debugging_OFF(void); + + +#if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) + WOLFSSL_LOCAL int wc_LoggingInit(void); + WOLFSSL_LOCAL int wc_LoggingCleanup(void); + WOLFSSL_LOCAL int wc_AddErrorNode(int error, int line, char* buf, + char* file); + WOLFSSL_LOCAL int wc_PeekErrorNode(int index, const char **file, + const char **reason, int *line); + WOLFSSL_LOCAL void wc_RemoveErrorNode(int index); + WOLFSSL_LOCAL void wc_ClearErrorNodes(void); + WOLFSSL_LOCAL int wc_PullErrorNode(const char **file, const char **reason, + int *line); + WOLFSSL_API int wc_SetLoggingHeap(void* h); + WOLFSSL_API int wc_ERR_remove_state(void); + #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) + WOLFSSL_API void wc_ERR_print_errors_fp(FILE* fp); + #endif +#endif /* OPENSSL_EXTRA || DEBUG_WOLFSSL_VERBOSE */ + + +#if defined(DEBUG_WOLFSSL) && !defined(WOLFSSL_DEBUG_ERRORS_ONLY) + #if defined(_WIN32) + #if defined(INTIME_RTOS) + #define __func__ NULL + #else + #define __func__ __FUNCTION__ + #endif + #endif + + /* a is prepended to m and b is appended, creating a log msg a + m + b */ + #define WOLFSSL_LOG_CAT(a, m, b) #a " " m " " #b + + WOLFSSL_API void WOLFSSL_ENTER(const char* msg); + WOLFSSL_API void WOLFSSL_LEAVE(const char* msg, int ret); + #define WOLFSSL_STUB(m) \ + WOLFSSL_MSG(WOLFSSL_LOG_CAT(wolfSSL Stub, m, not implemented)) + + WOLFSSL_API void WOLFSSL_MSG(const char* msg); + WOLFSSL_API void WOLFSSL_BUFFER(const byte* buffer, word32 length); + +#else + + #define WOLFSSL_ENTER(m) + #define WOLFSSL_LEAVE(m, r) + #define WOLFSSL_STUB(m) + + #define WOLFSSL_MSG(m) + #define WOLFSSL_BUFFER(b, l) + +#endif /* DEBUG_WOLFSSL && !WOLFSSL_DEBUG_ERRORS_ONLY */ + +#if defined(DEBUG_WOLFSSL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) + + #if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) + WOLFSSL_API void WOLFSSL_ERROR_LINE(int err, const char* func, unsigned int line, + const char* file, void* ctx); + #define WOLFSSL_ERROR(x) \ + WOLFSSL_ERROR_LINE((x), __func__, __LINE__, __FILE__, NULL) + #else + WOLFSSL_API void WOLFSSL_ERROR(int err); + #endif + WOLFSSL_API void WOLFSSL_ERROR_MSG(const char* msg); + +#else + #define WOLFSSL_ERROR(e) + #define WOLFSSL_ERROR_MSG(m) +#endif + +#ifdef __cplusplus +} +#endif +#endif /* WOLFSSL_LOGGING_H */ + diff --git a/components/ssl/wolfssl/include/wolfssl/wolfcrypt/settings.h b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/settings.h new file mode 100644 index 00000000..5a22416b --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/settings.h @@ -0,0 +1,1646 @@ +/* settings.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + +/* Place OS specific preprocessor flags, defines, includes here, will be + included into every file because types.h includes it */ + + +#ifndef WOLF_CRYPT_SETTINGS_H +#define WOLF_CRYPT_SETTINGS_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Uncomment next line if using IPHONE */ +/* #define IPHONE */ + +/* Uncomment next line if using ThreadX */ +/* #define THREADX */ + +/* Uncomment next line if using Micrium uC/OS-III */ +/* #define MICRIUM */ + +/* Uncomment next line if using Mbed */ +/* #define MBED */ + +/* Uncomment next line if using Microchip PIC32 ethernet starter kit */ +/* #define MICROCHIP_PIC32 */ + +/* Uncomment next line if using Microchip TCP/IP stack, version 5 */ +/* #define MICROCHIP_TCPIP_V5 */ + +/* Uncomment next line if using Microchip TCP/IP stack, version 6 or later */ +/* #define MICROCHIP_TCPIP */ + +/* Uncomment next line if using PIC32MZ Crypto Engine */ +/* #define WOLFSSL_MICROCHIP_PIC32MZ */ + +/* Uncomment next line if using FreeRTOS */ +/* #define FREERTOS */ + +/* Uncomment next line if using FreeRTOS+ TCP */ +/* #define FREERTOS_TCP */ + +/* Uncomment next line if using FreeRTOS Windows Simulator */ +/* #define FREERTOS_WINSIM */ + +/* Uncomment next line if using RTIP */ +/* #define EBSNET */ + +/* Uncomment next line if using lwip */ +/* #define WOLFSSL_LWIP */ + +/* Uncomment next line if building wolfSSL for a game console */ +/* #define WOLFSSL_GAME_BUILD */ + +/* Uncomment next line if building wolfSSL for LSR */ +/* #define WOLFSSL_LSR */ + +/* Uncomment next line if building for Freescale Classic MQX/RTCS/MFS */ +/* #define FREESCALE_MQX */ + +/* Uncomment next line if building for Freescale KSDK MQX/RTCS/MFS */ +/* #define FREESCALE_KSDK_MQX */ + +/* Uncomment next line if building for Freescale KSDK Bare Metal */ +/* #define FREESCALE_KSDK_BM */ + +/* Uncomment next line if building for Freescale KSDK FreeRTOS (old name FREESCALE_FREE_RTOS) */ +/* #define FREESCALE_KSDK_FREERTOS */ + +/* Uncomment next line if using STM32F2 */ +/* #define WOLFSSL_STM32F2 */ + +/* Uncomment next line if using STM32F4 */ +/* #define WOLFSSL_STM32F4 */ + +/* Uncomment next line if using STM32F7 */ +/* #define WOLFSSL_STM32F7 */ + +/* Uncomment next line if using QL SEP settings */ +/* #define WOLFSSL_QL */ + +/* Uncomment next line if building for EROAD */ +/* #define WOLFSSL_EROAD */ + +/* Uncomment next line if building for IAR EWARM */ +/* #define WOLFSSL_IAR_ARM */ + +/* Uncomment next line if building for Rowley CrossWorks ARM */ +/* #define WOLFSSL_ROWLEY_ARM */ + +/* Uncomment next line if using TI-RTOS settings */ +/* #define WOLFSSL_TIRTOS */ + +/* Uncomment next line if building with PicoTCP */ +/* #define WOLFSSL_PICOTCP */ + +/* Uncomment next line if building for PicoTCP demo bundle */ +/* #define WOLFSSL_PICOTCP_DEMO */ + +/* Uncomment next line if building for uITRON4 */ +/* #define WOLFSSL_uITRON4 */ + +/* Uncomment next line if building for uT-Kernel */ +/* #define WOLFSSL_uTKERNEL2 */ + +/* Uncomment next line if using Max Strength build */ +/* #define WOLFSSL_MAX_STRENGTH */ + +/* Uncomment next line if building for VxWorks */ +/* #define WOLFSSL_VXWORKS */ + +/* Uncomment next line if building for Nordic nRF5x platofrm */ +/* #define WOLFSSL_NRF5x */ + +/* Uncomment next line to enable deprecated less secure static DH suites */ +/* #define WOLFSSL_STATIC_DH */ + +/* Uncomment next line to enable deprecated less secure static RSA suites */ +/* #define WOLFSSL_STATIC_RSA */ + +/* Uncomment next line if building for ARDUINO */ +/* Uncomment both lines if building for ARDUINO on INTEL_GALILEO */ +/* #define WOLFSSL_ARDUINO */ +/* #define INTEL_GALILEO */ + +/* Uncomment next line to enable asynchronous crypto WC_PENDING_E */ +/* #define WOLFSSL_ASYNC_CRYPT */ + +/* Uncomment next line if building for uTasker */ +/* #define WOLFSSL_UTASKER */ + +/* Uncomment next line if building for embOS */ +/* #define WOLFSSL_EMBOS */ + +/* Uncomment next line if building for RIOT-OS */ +/* #define WOLFSSL_RIOT_OS */ + +/* Uncomment next line if building for using XILINX hardened crypto */ +/* #define WOLFSSL_XILINX_CRYPT */ + +/* Uncomment next line if building for using XILINX */ +/* #define WOLFSSL_XILINX */ + +#include + +#ifdef WOLFSSL_USER_SETTINGS + #include "user_settings.h" +#endif + + +/* make sure old RNG name is used with CTaoCrypt FIPS */ +#ifdef HAVE_FIPS + #define WC_RNG RNG + /* blinding adds API not available yet in FIPS mode */ + #undef WC_RSA_BLINDING +#endif + + +#if defined(_WIN32) && !defined(_M_X64) && \ + defined(HAVE_AESGCM) && defined(WOLFSSL_AESNI) + +/* The _M_X64 macro is what's used in the headers for MSC to tell if it + * has the 64-bit versions of the 128-bit integers available. If one is + * building on 32-bit Windows with AES-NI, turn off the AES-GCMloop + * unrolling. */ + + #define AES_GCM_AESNI_NO_UNROLL +#endif + +#ifdef IPHONE + #define SIZEOF_LONG_LONG 8 +#endif + +#ifdef THREADX + #define SIZEOF_LONG_LONG 8 +#endif + +#ifdef HAVE_NETX + #ifdef NEED_THREADX_TYPES + #include + #endif + #include +#endif + +#if defined(HAVE_LWIP_NATIVE) /* using LwIP native TCP socket */ + #define WOLFSSL_LWIP + #define NO_WRITEV + #define SINGLE_THREADED + #define WOLFSSL_USER_IO + #define NO_FILESYSTEM +#endif + +#if defined(WOLFSSL_IAR_ARM) || defined(WOLFSSL_ROWLEY_ARM) + #define NO_MAIN_DRIVER + #define SINGLE_THREADED + #if !defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_4096) + #define USE_CERT_BUFFERS_1024 + #endif + #define BENCH_EMBEDDED + #define NO_FILESYSTEM + #define NO_WRITEV + #define WOLFSSL_USER_IO + #define BENCH_EMBEDDED +#endif + +#ifdef MICROCHIP_PIC32 + /* #define WOLFSSL_MICROCHIP_PIC32MZ */ + #define SIZEOF_LONG_LONG 8 + #define SINGLE_THREADED + #define WOLFSSL_USER_IO + #define NO_WRITEV + #define NO_DEV_RANDOM + #define NO_FILESYSTEM + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define WOLFSSL_HAVE_MIN + #define WOLFSSL_HAVE_MAX + #define NO_BIG_INT +#endif + +#ifdef WOLFSSL_MICROCHIP_PIC32MZ + #define WOLFSSL_PIC32MZ_CRYPT + #define WOLFSSL_PIC32MZ_RNG + #define WOLFSSL_PIC32MZ_HASH +#endif + +#ifdef MICROCHIP_TCPIP_V5 + /* include timer functions */ + #include "TCPIP Stack/TCPIP.h" +#endif + +#ifdef MICROCHIP_TCPIP + /* include timer, NTP functions */ + #ifdef MICROCHIP_MPLAB_HARMONY + #include "tcpip/tcpip.h" + #else + #include "system/system_services.h" + #include "tcpip/sntp.h" + #endif +#endif + +#ifdef MBED + #define WOLFSSL_USER_IO + #define NO_FILESYSTEM + #define NO_CERT + #if !defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_4096) + #define USE_CERT_BUFFERS_1024 + #endif + #define NO_WRITEV + #define NO_DEV_RANDOM + #define NO_SHA512 + #define NO_DH + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + #define NO_DSA + #define NO_HC128 + #define HAVE_ECC + #define NO_SESSION_CACHE + #define WOLFSSL_CMSIS_RTOS +#endif + + +#ifdef WOLFSSL_EROAD + #define FREESCALE_MQX + #define FREESCALE_MMCAU + #define SINGLE_THREADED + #define NO_STDIO_FILESYSTEM + #define WOLFSSL_LEANPSK + #define HAVE_NULL_CIPHER + #define NO_OLD_TLS + #define NO_ASN + #define NO_BIG_INT + #define NO_RSA + #define NO_DSA + #define NO_DH + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + #define NO_CERTS + #define NO_PWDBASED + #define NO_DES3 + #define NO_MD4 + #define NO_RC4 + #define NO_MD5 + #define NO_SESSION_CACHE + #define NO_MAIN_DRIVER +#endif + +#ifdef WOLFSSL_PICOTCP + #ifndef errno + #define errno pico_err + #endif + #include "pico_defines.h" + #include "pico_stack.h" + #include "pico_constants.h" + #include "pico_protocol.h" + #define CUSTOM_RAND_GENERATE pico_rand +#endif + +#ifdef WOLFSSL_PICOTCP_DEMO + #define WOLFSSL_STM32 + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define XMALLOC(s, h, type) PICO_ZALLOC((s)) + #define XFREE(p, h, type) PICO_FREE((p)) + #define SINGLE_THREADED + #define NO_WRITEV + #define WOLFSSL_USER_IO + #define NO_DEV_RANDOM + #define NO_FILESYSTEM +#endif + +#ifdef FREERTOS_WINSIM + #define FREERTOS + #define USE_WINDOWS_API +#endif + + +#ifdef WOLFSSL_VXWORKS + /* VxWorks simulator incorrectly detects building for i386 */ + #ifdef VXWORKS_SIM + #define TFM_NO_ASM + #endif + #define WOLFSSL_PTHREADS + #define WOLFSSL_HAVE_MIN + #define WOLFSSL_HAVE_MAX + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define NO_MAIN_DRIVER + #define NO_DEV_RANDOM + #define NO_WRITEV +#endif + + +#ifdef WOLFSSL_ARDUINO + #define NO_WRITEV + #define NO_WOLFSSL_DIR + #define SINGLE_THREADED + #define NO_DEV_RANDOM + #ifndef INTEL_GALILEO /* Galileo has time.h compatibility */ + #define TIME_OVERRIDES /* must define XTIME and XGMTIME externally */ + #endif + #define WOLFSSL_USER_IO + #define HAVE_ECC + #define NO_DH + #define NO_SESSION_CACHE + #define USE_SLOW_SHA + #define NO_WOLFSSL_SERVER + #define NO_ERROR_STRINGS +#endif + + +#ifdef WOLFSSL_UTASKER + /* uTasker configuration - used for fnRandom() */ + #include "config.h" + + #define SINGLE_THREADED + #define NO_WOLFSSL_DIR + #define WOLFSSL_HAVE_MIN + #define NO_WRITEV + + #define HAVE_ECC + #define ALT_ECC_SIZE + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + + /* used in wolfCrypt test */ + #define NO_MAIN_DRIVER + #define USE_CERT_BUFFERS_2048 + + /* uTasker port uses RAW sockets, use I/O callbacks + * See wolfSSL uTasker example for sample callbacks */ + #define WOLFSSL_USER_IO + + /* uTasker filesystem not ported */ + #define NO_FILESYSTEM + + /* uTasker RNG is abstracted, calls HW RNG when available */ + #define CUSTOM_RAND_GENERATE fnRandom + #define CUSTOM_RAND_TYPE unsigned short + + /* user needs to define XTIME to function that provides + * seconds since Unix epoch */ + #ifndef XTIME + #error XTIME must be defined in wolfSSL settings.h + /* #define XTIME fnSecondsSinceEpoch */ + #endif + + /* use uTasker std library replacements where available */ + #define STRING_USER + #define XMEMCPY(d,s,l) uMemcpy((d),(s),(l)) + #define XMEMSET(b,c,l) uMemset((b),(c),(l)) + #define XMEMCMP(s1,s2,n) uMemcmp((s1),(s2),(n)) + #define XMEMMOVE(d,s,l) memmove((d),(s),(l)) + + #define XSTRLEN(s1) uStrlen((s1)) + #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n)) + #define XSTRSTR(s1,s2) strstr((s1),(s2)) + #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n)) + #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n)) + #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n)) + #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n)) + #if defined(WOLFSSL_CERT_EXT) || defined(HAVE_ALPN) + #define XSTRTOK strtok_r + #endif +#endif + +#ifdef WOLFSSL_EMBOS + #define NO_FILESYSTEM /* Not ported at this time */ + #define USE_CERT_BUFFERS_2048 /* use when NO_FILESYSTEM */ + #define NO_MAIN_DRIVER + #define NO_RC4 + #define SINGLE_THREADED /* Not ported at this time */ +#endif + +#ifdef WOLFSSL_RIOT_OS + #define NO_WRITEV + #define TFM_NO_ASM + #define USE_FAST_MATH + #define NO_FILESYSTEM + #define USE_CERT_BUFFERS_2048 +#endif + +#ifdef WOLFSSL_CHIBIOS + /* ChibiOS definitions. This file is distributed with chibiOS. */ + #include "wolfssl_chibios.h" +#endif + +#ifdef WOLFSSL_NRF5x + #define SIZEOF_LONG 4 + #define SIZEOF_LONG_LONG 8 + #define NO_ASN_TIME + #define NO_DEV_RANDOM + #define NO_FILESYSTEM + #define NO_MAIN_DRIVER + #define NO_WRITEV + #define SINGLE_THREADED + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define USE_WOLFSSL_MEMORY + #define WOLFSSL_NRF51 + #define WOLFSSL_USER_IO + #define NO_SESSION_CACHE +#endif + +/* Micrium will use Visual Studio for compilation but not the Win32 API */ +#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ + !defined(FREERTOS_TCP) && !defined(EBSNET) && !defined(WOLFSSL_EROAD) && \ + !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) + #define USE_WINDOWS_API +#endif + +#if defined(WOLFSSL_uITRON4) + +#define XMALLOC_USER +#include +#define ITRON_POOL_SIZE 1024*20 +extern int uITRON4_minit(size_t poolsz) ; +extern void *uITRON4_malloc(size_t sz) ; +extern void *uITRON4_realloc(void *p, size_t sz) ; +extern void uITRON4_free(void *p) ; + +#define XMALLOC(sz, heap, type) uITRON4_malloc(sz) +#define XREALLOC(p, sz, heap, type) uITRON4_realloc(p, sz) +#define XFREE(p, heap, type) uITRON4_free(p) +#endif + +#if defined(WOLFSSL_uTKERNEL2) + #ifndef NO_TKERNEL_MEM_POOL + #define XMALLOC_OVERRIDE + int uTKernel_init_mpool(unsigned int sz); /* initializing malloc pool */ + void* uTKernel_malloc(unsigned int sz); + void* uTKernel_realloc(void *p, unsigned int sz); + void uTKernel_free(void *p); + #define XMALLOC(s, h, type) uTKernel_malloc((s)) + #define XREALLOC(p, n, h, t) uTKernel_realloc((p), (n)) + #define XFREE(p, h, type) uTKernel_free((p)) + #endif + + #ifndef NO_STDIO_FGETS_REMAP + #include + #include "tm/tmonitor.h" + + /* static char* gets(char *buff); */ + static char* fgets(char *buff, int sz, FILE *fp) { + char * p = buff; + *p = '\0'; + while (1) { + *p = tm_getchar(-1); + tm_putchar(*p); + if (*p == '\r') { + tm_putchar('\n'); + *p = '\0'; + break; + } + p++; + } + return buff; + } + #endif /* !NO_STDIO_FGETS_REMAP */ +#endif + + +#if defined(WOLFSSL_LEANPSK) && !defined(XMALLOC_USER) + #include + #define XMALLOC(s, h, type) malloc((s)) + #define XFREE(p, h, type) free((p)) + #define XREALLOC(p, n, h, t) realloc((p), (n)) +#endif + +#if defined(XMALLOC_USER) && defined(SSN_BUILDING_LIBYASSL) + #undef XMALLOC + #define XMALLOC yaXMALLOC + #undef XFREE + #define XFREE yaXFREE + #undef XREALLOC + #define XREALLOC yaXREALLOC +#endif + + +#ifdef FREERTOS + #include "FreeRTOS.h" + + /* FreeRTOS pvPortRealloc() only in AVR32_UC3 port */ + #if !defined(XMALLOC_USER) && !defined(NO_WOLFSSL_MEMORY) && \ + !defined(WOLFSSL_STATIC_MEMORY) + #define XMALLOC(s, h, type) pvPortMalloc((s)) + #define XFREE(p, h, type) vPortFree((p)) + #endif + + #ifndef NO_WRITEV + #define NO_WRITEV + #endif + #ifndef HAVE_SHA512 + #ifndef NO_SHA512 + #define NO_SHA512 + #endif + #endif + #ifndef HAVE_DH + #ifndef NO_DH + #define NO_DH + #endif + #endif + #ifndef NO_DSA + #define NO_DSA + #endif + #ifndef NO_HC128 + #define NO_HC128 + #endif + + #ifndef SINGLE_THREADED + #include "semphr.h" + #endif +#endif + +#ifdef FREERTOS_TCP + #if !defined(NO_WOLFSSL_MEMORY) && !defined(XMALLOC_USER) && \ + !defined(WOLFSSL_STATIC_MEMORY) + #define XMALLOC(s, h, type) pvPortMalloc((s)) + #define XFREE(p, h, type) vPortFree((p)) + #endif + + #define WOLFSSL_GENSEED_FORTEST + + #define NO_WOLFSSL_DIR + #define NO_WRITEV + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define NO_MAIN_DRIVER +#endif + +#ifdef WOLFSSL_TIRTOS + #define SIZEOF_LONG_LONG 8 + #define NO_WRITEV + #define NO_WOLFSSL_DIR + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + #define WC_RSA_BLINDING + #define NO_DEV_RANDOM + #define NO_FILESYSTEM + #define USE_CERT_BUFFERS_2048 + #define NO_ERROR_STRINGS + #define USER_TIME + #define HAVE_ECC + #define HAVE_ALPN + #define USE_WOLF_STRTOK /* use with HAVE_ALPN */ + #define HAVE_TLS_EXTENSIONS + #define HAVE_AESGCM + #define HAVE_SUPPORTED_CURVES + #define ALT_ECC_SIZE + + #ifdef __IAR_SYSTEMS_ICC__ + #pragma diag_suppress=Pa089 + #elif !defined(__GNUC__) + /* Suppress the sslpro warning */ + #pragma diag_suppress=11 + #endif + + #include +#endif + +#ifdef EBSNET + #include "rtip.h" + + /* #define DEBUG_WOLFSSL */ + #define NO_WOLFSSL_DIR /* tbd */ + + #if (POLLOS) + #define SINGLE_THREADED + #endif + + #if (RTPLATFORM) + #if (!RTP_LITTLE_ENDIAN) + #define BIG_ENDIAN_ORDER + #endif + #else + #if (!KS_LITTLE_ENDIAN) + #define BIG_ENDIAN_ORDER + #endif + #endif + + #if (WINMSP3) + #undef SIZEOF_LONG + #define SIZEOF_LONG_LONG 8 + #else + #sslpro: settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG + #endif + + #define XMALLOC(s, h, type) ((void *)rtp_malloc((s), SSL_PRO_MALLOC)) + #define XFREE(p, h, type) (rtp_free(p)) + #define XREALLOC(p, n, h, t) realloc((p), (n)) + +#endif /* EBSNET */ + +#ifdef WOLFSSL_GAME_BUILD + #define SIZEOF_LONG_LONG 8 + #if defined(__PPU) || defined(__XENON) + #define BIG_ENDIAN_ORDER + #endif +#endif + +#ifdef WOLFSSL_LSR + #define HAVE_WEBSERVER + #define SIZEOF_LONG_LONG 8 + #define WOLFSSL_LOW_MEMORY + #define NO_WRITEV + #define NO_SHA512 + #define NO_DH + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + #define NO_DSA + #define NO_HC128 + #define NO_DEV_RANDOM + #define NO_WOLFSSL_DIR + #define NO_RABBIT + #ifndef NO_FILESYSTEM + #define LSR_FS + #include "inc/hw_types.h" + #include "fs.h" + #endif + #define WOLFSSL_LWIP + #include /* for tcp errno */ + #define WOLFSSL_SAFERTOS + #if defined(__IAR_SYSTEMS_ICC__) + /* enum uses enum */ + #pragma diag_suppress=Pa089 + #endif +#endif + +#ifdef WOLFSSL_SAFERTOS + #ifndef SINGLE_THREADED + #include "SafeRTOS/semphr.h" + #endif + + #include "SafeRTOS/heap.h" + #define XMALLOC(s, h, type) pvPortMalloc((s)) + #define XFREE(p, h, type) vPortFree((p)) + #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n)) +#endif + +#ifdef WOLFSSL_LOW_MEMORY + #undef RSA_LOW_MEM + #define RSA_LOW_MEM + #undef WOLFSSL_SMALL_STACK + #define WOLFSSL_SMALL_STACK + #undef TFM_TIMING_RESISTANT + #define TFM_TIMING_RESISTANT +#endif + +#ifdef FREESCALE_MQX + #define FREESCALE_COMMON + #include "mqx.h" + #ifndef NO_FILESYSTEM + #include "mfs.h" + #if MQX_USE_IO_OLD + #include "fio.h" + #define NO_STDIO_FILESYSTEM + #else + #include "nio.h" + #endif + #endif + #ifndef SINGLE_THREADED + #include "mutex.h" + #endif + + #define XMALLOC_OVERRIDE + #define XMALLOC(s, h, t) (void *)_mem_alloc_system((s)) + #define XFREE(p, h, t) {void* xp = (p); if ((xp)) _mem_free((xp));} + /* Note: MQX has no realloc, using fastmath above */ +#endif + +#ifdef FREESCALE_KSDK_MQX + #define FREESCALE_COMMON + #include + #ifndef NO_FILESYSTEM + #if MQX_USE_IO_OLD + #include + #else + #include + #include + #endif + #endif + #ifndef SINGLE_THREADED + #include + #endif + + #define XMALLOC(s, h, t) (void *)_mem_alloc_system((s)) + #define XFREE(p, h, t) {void* xp = (p); if ((xp)) _mem_free((xp));} + #define XREALLOC(p, n, h, t) _mem_realloc((p), (n)) /* since MQX 4.1.2 */ + + #define MQX_FILE_PTR FILE * + #define IO_SEEK_SET SEEK_SET + #define IO_SEEK_END SEEK_END +#endif /* FREESCALE_KSDK_MQX */ + +#if defined(FREESCALE_FREE_RTOS) || defined(FREESCALE_KSDK_FREERTOS) + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + #define NO_FILESYSTEM + #define WOLFSSL_CRYPT_HW_MUTEX 1 + + #if !defined(XMALLOC_USER) && !defined(NO_WOLFSSL_MEMORY) + #define XMALLOC(s, h, type) pvPortMalloc((s)) + #define XFREE(p, h, type) vPortFree((p)) + #endif + + //#define USER_TICKS + /* Allows use of DH with fixed points if uncommented and NO_DH is removed */ + /* WOLFSSL_DH_CONST */ + #define WOLFSSL_LWIP + #define FREERTOS_TCP + + #define FREESCALE_FREE_RTOS + #define FREERTOS_SOCKET_ERROR ( -1 ) + #define FREERTOS_EWOULDBLOCK ( -2 ) + #define FREERTOS_EINVAL ( -4 ) + #define FREERTOS_EADDRNOTAVAIL ( -5 ) + #define FREERTOS_EADDRINUSE ( -6 ) + #define FREERTOS_ENOBUFS ( -7 ) + #define FREERTOS_ENOPROTOOPT ( -8 ) +#endif /* FREESCALE_FREE_RTOS || FREESCALE_KSDK_FREERTOS */ + +#ifdef FREESCALE_KSDK_BM + #define FREESCALE_COMMON + #define WOLFSSL_USER_IO + #define SINGLE_THREADED + #define NO_FILESYSTEM + #ifndef TIME_OVERRIDES + #define USER_TICKS + #endif +#endif /* FREESCALE_KSDK_BM */ + +#ifdef FREESCALE_COMMON + #define SIZEOF_LONG_LONG 8 + + /* disable features */ + #undef NO_WRITEV + #define NO_WRITEV + #undef NO_DEV_RANDOM + #define NO_DEV_RANDOM + #undef NO_RABBIT + #define NO_RABBIT + #undef NO_WOLFSSL_DIR + #define NO_WOLFSSL_DIR + #undef NO_RC4 + #define NO_RC4 + + /* enable features */ + #undef USE_FAST_MATH + #define USE_FAST_MATH + + #define USE_CERT_BUFFERS_2048 + #define BENCH_EMBEDDED + + #define TFM_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + + #undef HAVE_ECC + #define HAVE_ECC + #ifndef NO_AES + #undef HAVE_AESCCM + #define HAVE_AESCCM + #undef HAVE_AESGCM + #define HAVE_AESGCM + #undef WOLFSSL_AES_COUNTER + #define WOLFSSL_AES_COUNTER + #undef WOLFSSL_AES_DIRECT + #define WOLFSSL_AES_DIRECT + #endif + + #ifdef FREESCALE_KSDK_1_3 + #include "fsl_device_registers.h" + #elif !defined(FREESCALE_MQX) + /* Classic MQX does not have fsl_common.h */ + #include "fsl_common.h" + #endif + + /* random seed */ + #define NO_OLD_RNGNAME + #if defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0) + #define FREESCALE_KSDK_2_0_TRNG + #elif defined(FSL_FEATURE_SOC_RNG_COUNT) && (FSL_FEATURE_SOC_RNG_COUNT > 0) + #ifdef FREESCALE_KSDK_1_3 + #include "fsl_rnga_driver.h" + #define FREESCALE_RNGA + #define RNGA_INSTANCE (0) + #else + #define FREESCALE_KSDK_2_0_RNGA + #endif + #elif !defined(FREESCALE_KSDK_BM) && !defined(FREESCALE_FREE_RTOS) && !defined(FREESCALE_KSDK_FREERTOS) + #define FREESCALE_RNGA + #define RNGA_INSTANCE (0) + /* defaulting to K70 RNGA, user should change if different */ + /* #define FREESCALE_K53_RNGB */ + #define FREESCALE_K70_RNGA + #endif + + /* HW crypto */ + /* automatic enable based on Kinetis feature */ + /* if case manual selection is required, for example for benchmarking purposes, + * just define FREESCALE_USE_MMCAU or FREESCALE_USE_LTC or none of these two macros (for software only) + * both can be enabled simultaneously as LTC has priority over MMCAU in source code. + */ + /* #define FSL_HW_CRYPTO_MANUAL_SELECTION */ + #ifndef FSL_HW_CRYPTO_MANUAL_SELECTION + #if defined(FSL_FEATURE_SOC_MMCAU_COUNT) && FSL_FEATURE_SOC_MMCAU_COUNT + #define FREESCALE_USE_MMCAU + #endif + + #if defined(FSL_FEATURE_SOC_LTC_COUNT) && FSL_FEATURE_SOC_LTC_COUNT + #define FREESCALE_USE_LTC + #endif + #else + /* #define FREESCALE_USE_MMCAU */ + /* #define FREESCALE_USE_LTC */ + #endif +#endif /* FREESCALE_COMMON */ + +/* Classic pre-KSDK mmCAU library */ +#ifdef FREESCALE_USE_MMCAU_CLASSIC + #define FREESCALE_USE_MMCAU + #define FREESCALE_MMCAU_CLASSIC + #define FREESCALE_MMCAU_CLASSIC_SHA +#endif + +/* KSDK mmCAU library */ +#ifdef FREESCALE_USE_MMCAU + /* AES and DES */ + #define FREESCALE_MMCAU + /* MD5, SHA-1 and SHA-256 */ + #define FREESCALE_MMCAU_SHA +#endif /* FREESCALE_USE_MMCAU */ + +#ifdef FREESCALE_USE_LTC + #if defined(FSL_FEATURE_SOC_LTC_COUNT) && FSL_FEATURE_SOC_LTC_COUNT + #define FREESCALE_LTC + #define LTC_BASE LTC0 + + #if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES + #define FREESCALE_LTC_DES + #endif + + #if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM + #define FREESCALE_LTC_AES_GCM + #endif + + #if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + #define FREESCALE_LTC_SHA + #endif + + #if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + #define FREESCALE_LTC_ECC + #define FREESCALE_LTC_TFM + + /* the LTC PKHA hardware limit is 2048 bits (256 bytes) for integer arithmetic. + the LTC_MAX_INT_BYTES defines the size of local variables that hold big integers. */ + #ifndef LTC_MAX_INT_BYTES + #define LTC_MAX_INT_BYTES (256) + #endif + + /* This FREESCALE_LTC_TFM_RSA_4096_ENABLE macro can be defined. + * In such a case both software and hardware algorithm + * for TFM is linked in. The decision for which algorithm is used is determined at runtime + * from size of inputs. If inputs and result can fit into LTC (see LTC_MAX_INT_BYTES) + * then we call hardware algorithm, otherwise we call software algorithm. + * + * Chinese reminder theorem is used to break RSA 4096 exponentiations (both public and private key) + * into several computations with 2048-bit modulus and exponents. + */ + /* #define FREESCALE_LTC_TFM_RSA_4096_ENABLE */ + + /* ECC-384, ECC-256, ECC-224 and ECC-192 have been enabled with LTC PKHA acceleration */ + #ifdef HAVE_ECC + #undef ECC_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + + /* the LTC PKHA hardware limit is 512 bits (64 bytes) for ECC. + the LTC_MAX_ECC_BITS defines the size of local variables that hold ECC parameters + and point coordinates */ + #ifndef LTC_MAX_ECC_BITS + #define LTC_MAX_ECC_BITS (384) + #endif + + /* Enable curves up to 384 bits */ + #if !defined(ECC_USER_CURVES) && !defined(HAVE_ALL_CURVES) + #define ECC_USER_CURVES + #define HAVE_ECC192 + #define HAVE_ECC224 + #undef NO_ECC256 + #define HAVE_ECC384 + #endif + + /* enable features */ + #undef HAVE_CURVE25519 + #define HAVE_CURVE25519 + #undef HAVE_ED25519 + #define HAVE_ED25519 + #undef WOLFSSL_SHA512 + #define WOLFSSL_SHA512 + #endif + #endif + #endif +#endif /* FREESCALE_USE_LTC */ + +#ifdef FREESCALE_LTC_TFM_RSA_4096_ENABLE + #undef USE_CERT_BUFFERS_4096 + #define USE_CERT_BUFFERS_4096 + #undef FP_MAX_BITS + #define FP_MAX_BITS (8192) + + #undef NO_DH + #define NO_DH + #undef NO_DSA + #define NO_DSA +#endif /* FREESCALE_LTC_TFM_RSA_4096_ENABLE */ + +/* if LTC has AES engine but doesn't have GCM, use software with LTC AES ECB mode */ +#if defined(FREESCALE_USE_LTC) && !defined(FREESCALE_LTC_AES_GCM) + #define GCM_TABLE +#endif + +#if defined(WOLFSSL_STM32F2) || defined(WOLFSSL_STM32F4) || \ + defined(WOLFSSL_STM32F7) + + #define SIZEOF_LONG_LONG 8 + #define NO_DEV_RANDOM + #define NO_WOLFSSL_DIR + #undef NO_RABBIT + #define NO_RABBIT + #ifndef NO_STM32_RNG + #undef STM32_RNG + #define STM32_RNG + #endif + #ifndef NO_STM32_CRYPTO + #undef STM32_CRYPTO + #define STM32_CRYPTO + #endif + #ifndef NO_STM32_HASH + #undef STM32_HASH + #define STM32_HASH + #endif + #if !defined(__GNUC__) && !defined(__ICCARM__) + #define KEIL_INTRINSICS + #endif + #define NO_OLD_RNGNAME + #ifdef WOLFSSL_STM32_CUBEMX + #if defined(WOLFSSL_STM32F2) + #include "stm32f2xx_hal.h" + #elif defined(WOLFSSL_STM32F4) + #include "stm32f4xx_hal.h" + #elif defined(WOLFSSL_STM32F7) + #include "stm32f7xx_hal.h" + #endif + + #ifndef STM32_HAL_TIMEOUT + #define STM32_HAL_TIMEOUT 0xFF + #endif + #else + #if defined(WOLFSSL_STM32F2) + #include "stm32f2xx.h" + #ifdef STM32_CRYPTO + #include "stm32f2xx_cryp.h" + #endif + #ifdef STM32_HASH + #include "stm32f2xx_hash.h" + #endif + #elif defined(WOLFSSL_STM32F4) + #include "stm32f4xx.h" + #ifdef STM32_CRYPTO + #include "stm32f4xx_cryp.h" + #endif + #ifdef STM32_HASH + #include "stm32f4xx_hash.h" + #endif + #elif defined(WOLFSSL_STM32F7) + #include "stm32f7xx.h" + #endif + #endif /* WOLFSSL_STM32_CUBEMX */ +#endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32F7 */ + +#ifdef MICRIUM + #include + #include + #include + #include + #include + #include + #include + + #define USE_FAST_MATH + #define TFM_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + #define WC_RSA_BLINDING + #define HAVE_HASHDRBG + + #define HAVE_ECC + #define ALT_ECC_SIZE + #define TFM_ECC192 + #define TFM_ECC224 + #define TFM_ECC256 + #define TFM_ECC384 + #define TFM_ECC521 + + #define NO_RC4 + #define HAVE_TLS_EXTENSIONS + #define HAVE_SUPPORTED_CURVES + #define HAVE_EXTENDED_MASTER + + #define NO_WOLFSSL_DIR + #define NO_WRITEV + + #ifndef CUSTOM_RAND_GENERATE + #define CUSTOM_RAND_TYPE RAND_NBR + #define CUSTOM_RAND_GENERATE Math_Rand + #endif + + #define WOLFSSL_TYPES + typedef CPU_INT08U byte; + typedef CPU_INT16U word16; + typedef CPU_INT32U word32; + + #define STRING_USER + #define XSTRLEN(pstr) ((CPU_SIZE_T)Str_Len((CPU_CHAR *)(pstr))) + #define XSTRNCPY(pstr_dest, pstr_src, len_max) \ + ((CPU_CHAR *)Str_Copy_N((CPU_CHAR *)(pstr_dest), \ + (CPU_CHAR *)(pstr_src), (CPU_SIZE_T)(len_max))) + #define XSTRNCMP(pstr_1, pstr_2, len_max) \ + ((CPU_INT16S)Str_Cmp_N((CPU_CHAR *)(pstr_1), \ + (CPU_CHAR *)(pstr_2), (CPU_SIZE_T)(len_max))) + #define XSTRNCASECMP(pstr_1, pstr_2, len_max) \ + ((CPU_INT16S)Str_CmpIgnoreCase_N((CPU_CHAR *)(pstr_1), \ + (CPU_CHAR *)(pstr_2), (CPU_SIZE_T)(len_max))) + #define XSTRSTR(pstr, pstr_srch) \ + ((CPU_CHAR *)Str_Str((CPU_CHAR *)(pstr), \ + (CPU_CHAR *)(pstr_srch))) + #define XSTRNSTR(pstr, pstr_srch, len_max) \ + ((CPU_CHAR *)Str_Str_N((CPU_CHAR *)(pstr), \ + (CPU_CHAR *)(pstr_srch),(CPU_SIZE_T)(len_max))) + #define XSTRNCAT(pstr_dest, pstr_cat, len_max) \ + ((CPU_CHAR *)Str_Cat_N((CPU_CHAR *)(pstr_dest), \ + (const CPU_CHAR *)(pstr_cat),(CPU_SIZE_T)(len_max))) + #define XMEMSET(pmem, data_val, size) \ + ((void)Mem_Set((void *)(pmem), (CPU_INT08U) (data_val), \ + (CPU_SIZE_T)(size))) + #define XMEMCPY(pdest, psrc, size) ((void)Mem_Copy((void *)(pdest), \ + (void *)(psrc), (CPU_SIZE_T)(size))) + #define XMEMCMP(pmem_1, pmem_2, size) \ + (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1), (void *)(pmem_2), \ + (CPU_SIZE_T)(size))) ? DEF_NO : DEF_YES) + #define XMEMMOVE XMEMCPY + + #if (OS_CFG_MUTEX_EN == DEF_DISABLED) + #define SINGLE_THREADED + #endif + + #if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG) + #define BIG_ENDIAN_ORDER + #else + #undef BIG_ENDIAN_ORDER + #define LITTLE_ENDIAN_ORDER + #endif +#endif /* MICRIUM */ + + +#ifdef WOLFSSL_QL + #ifndef WOLFSSL_SEP + #define WOLFSSL_SEP + #endif + #ifndef OPENSSL_EXTRA + #define OPENSSL_EXTRA + #endif + #ifndef SESSION_CERTS + #define SESSION_CERTS + #endif + #ifndef HAVE_AESCCM + #define HAVE_AESCCM + #endif + #ifndef ATOMIC_USER + #define ATOMIC_USER + #endif + #ifndef WOLFSSL_DER_LOAD + #define WOLFSSL_DER_LOAD + #endif + #ifndef KEEP_PEER_CERT + #define KEEP_PEER_CERT + #endif + #ifndef HAVE_ECC + #define HAVE_ECC + #endif + #ifndef SESSION_INDEX + #define SESSION_INDEX + #endif +#endif /* WOLFSSL_QL */ + + +#if defined(WOLFSSL_XILINX) + #define USER_TIME /* XTIME in asn.c */ + #define NO_WOLFSSL_DIR + #define NO_DEV_RANDOM + #define HAVE_AESGCM +#endif + +#if defined(WOLFSSL_XILINX_CRYPT) + #if defined(WOLFSSL_ARMASM) + #error can not use both ARMv8 instructions and XILINX hardened crypto + #endif + #if defined(WOLFSSL_SHA3) + /* only SHA3-384 is supported */ + #undef WOLFSSL_NOSHA3_224 + #undef WOLFSSL_NOSHA3_256 + #undef WOLFSSL_NOSHA3_512 + #define WOLFSSL_NOSHA3_224 + #define WOLFSSL_NOSHA3_256 + #define WOLFSSL_NOSHA3_512 + #endif +#endif /*(WOLFSSL_XILINX_CRYPT)*/ + +#ifdef WOLFSSL_IMX6 + #ifndef SIZEOF_LONG_LONG + #define SIZEOF_LONG_LONG 8 + #endif +#endif + +/* if defined turn on all CAAM support */ +#ifdef WOLFSSL_IMX6_CAAM + #undef WOLFSSL_IMX6_CAAM_RNG + #define WOLFSSL_IMX6_CAAM_RNG + + #undef WOLFSSL_IMX6_CAAM_BLOB + #define WOLFSSL_IMX6_CAAM_BLOB + +#if defined(HAVE_AESGCM) || defined(WOLFSSL_AES_XTS) + /* large performance gain with HAVE_AES_ECB defined */ + #undef HAVE_AES_ECB + #define HAVE_AES_ECB +#endif +#endif + +#if !defined(XMALLOC_USER) && !defined(MICRIUM_MALLOC) && \ + !defined(WOLFSSL_LEANPSK) && !defined(NO_WOLFSSL_MEMORY) && \ + !defined(XMALLOC_OVERRIDE) + #define USE_WOLFSSL_MEMORY +#endif + + +#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) + #undef KEEP_PEER_CERT + #define KEEP_PEER_CERT +#endif + + +/* stream ciphers except arc4 need 32bit alignment, intel ok without */ +#ifndef XSTREAM_ALIGN + #if defined(__x86_64__) || defined(__ia64__) || defined(__i386__) + #define NO_XSTREAM_ALIGN + #else + #define XSTREAM_ALIGN + #endif +#endif + +/* write dup cannot be used with secure renegotiation because write dup + * make write side write only and read side read only */ +#if defined(HAVE_WRITE_DUP) && defined(HAVE_SECURE_RENEGOTIATION) + #error "WRITE DUP and SECURE RENEGOTIATION cannot both be on" +#endif + +#ifdef WOLFSSL_SGX + #ifdef _MSC_VER + #define NO_RC4 + #ifndef HAVE_FIPS + #define WOLFCRYPT_ONLY + #define NO_DES3 + #define NO_SHA + #define NO_MD5 + #else + #define TFM_TIMING_RESISTANT + #define NO_WOLFSSL_DIR + #define NO_FILESYSTEM + #define NO_WRITEV + #define NO_MAIN_DRIVER + #define WOLFSSL_LOG_PRINTF + #define WOLFSSL_DH_CONST + #endif + #else + #define HAVE_ECC + #define ECC_TIMING_RESISTANT + #define TFM_TIMING_RESISTANT + #define NO_FILESYSTEM + #define NO_WRITEV + #define NO_MAIN_DRIVER + #define USER_TICKS + #define WOLFSSL_LOG_PRINTF + #define WOLFSSL_DH_CONST + #endif /* _MSC_VER */ + #if !defined(HAVE_FIPS) && !defined(NO_RSA) + #define WC_RSA_BLINDING + #endif + #define SINGLE_THREADED + #define NO_ASN_TIME /* can not use headers such as windows.h */ + #define HAVE_AESGCM + #define USE_CERT_BUFFERS_2048 + #define USE_FAST_MATH +#endif /* WOLFSSL_SGX */ + +/* FreeScale MMCAU hardware crypto has 4 byte alignment. + However, KSDK fsl_mmcau.h gives API with no alignment + requirements (4 byte alignment is managed internally by fsl_mmcau.c) */ +#ifdef FREESCALE_MMCAU + #ifdef FREESCALE_MMCAU_CLASSIC + #define WOLFSSL_MMCAU_ALIGNMENT 4 + #else + #define WOLFSSL_MMCAU_ALIGNMENT 0 + #endif +#endif + +/* if using hardware crypto and have alignment requirements, specify the + requirement here. The record header of SSL/TLS will prevent easy alignment. + This hint tries to help as much as possible. */ +#ifndef WOLFSSL_GENERAL_ALIGNMENT + #ifdef WOLFSSL_AESNI + #define WOLFSSL_GENERAL_ALIGNMENT 16 + #elif defined(XSTREAM_ALIGN) + #define WOLFSSL_GENERAL_ALIGNMENT 4 + #elif defined(FREESCALE_MMCAU) || defined(FREESCALE_MMCAU_CLASSIC) + #define WOLFSSL_GENERAL_ALIGNMENT WOLFSSL_MMCAU_ALIGNMENT + #else + #define WOLFSSL_GENERAL_ALIGNMENT 0 + #endif +#endif + +#if defined(WOLFSSL_GENERAL_ALIGNMENT) && (WOLFSSL_GENERAL_ALIGNMENT > 0) + #if defined(_MSC_VER) + #define XGEN_ALIGN __declspec(align(WOLFSSL_GENERAL_ALIGNMENT)) + #elif defined(__GNUC__) + #define XGEN_ALIGN __attribute__((aligned(WOLFSSL_GENERAL_ALIGNMENT))) + #else + #define XGEN_ALIGN + #endif +#else + #define XGEN_ALIGN +#endif + +#ifdef HAVE_CRL + /* not widely supported yet */ + #undef NO_SKID + #define NO_SKID +#endif + + +#ifdef __INTEL_COMPILER + #pragma warning(disable:2259) /* explicit casts to smaller sizes, disable */ +#endif + +/* user can specify what curves they want with ECC_USER_CURVES otherwise + * all curves are on by default for now */ +#ifndef ECC_USER_CURVES + #if !defined(WOLFSSL_SP_MATH) && !defined(HAVE_ALL_CURVES) + #define HAVE_ALL_CURVES + #endif +#endif + +/* ECC Configs */ +#ifdef HAVE_ECC + /* By default enable Sign, Verify, DHE, Key Import and Key Export unless explicitly disabled */ + #ifndef NO_ECC_SIGN + #undef HAVE_ECC_SIGN + #define HAVE_ECC_SIGN + #endif + #ifndef NO_ECC_VERIFY + #undef HAVE_ECC_VERIFY + #define HAVE_ECC_VERIFY + #endif + #ifndef NO_ECC_CHECK_KEY + #undef HAVE_ECC_CHECK_KEY + #define HAVE_ECC_CHECK_KEY + #endif + #ifndef NO_ECC_DHE + #undef HAVE_ECC_DHE + #define HAVE_ECC_DHE + #endif + #ifndef NO_ECC_KEY_IMPORT + #undef HAVE_ECC_KEY_IMPORT + #define HAVE_ECC_KEY_IMPORT + #endif + #ifndef NO_ECC_KEY_EXPORT + #undef HAVE_ECC_KEY_EXPORT + #define HAVE_ECC_KEY_EXPORT + #endif +#endif /* HAVE_ECC */ + +/* Curve255519 Configs */ +#ifdef HAVE_CURVE25519 + /* By default enable shared secret, key export and import */ + #ifndef NO_CURVE25519_SHARED_SECRET + #undef HAVE_CURVE25519_SHARED_SECRET + #define HAVE_CURVE25519_SHARED_SECRET + #endif + #ifndef NO_CURVE25519_KEY_EXPORT + #undef HAVE_CURVE25519_KEY_EXPORT + #define HAVE_CURVE25519_KEY_EXPORT + #endif + #ifndef NO_CURVE25519_KEY_IMPORT + #undef HAVE_CURVE25519_KEY_IMPORT + #define HAVE_CURVE25519_KEY_IMPORT + #endif +#endif /* HAVE_CURVE25519 */ + +/* Ed255519 Configs */ +#ifdef HAVE_ED25519 + /* By default enable sign, verify, key export and import */ + #ifndef NO_ED25519_SIGN + #undef HAVE_ED25519_SIGN + #define HAVE_ED25519_SIGN + #endif + #ifndef NO_ED25519_VERIFY + #undef HAVE_ED25519_VERIFY + #define HAVE_ED25519_VERIFY + #endif + #ifndef NO_ED25519_KEY_EXPORT + #undef HAVE_ED25519_KEY_EXPORT + #define HAVE_ED25519_KEY_EXPORT + #endif + #ifndef NO_ED25519_KEY_IMPORT + #undef HAVE_ED25519_KEY_IMPORT + #define HAVE_ED25519_KEY_IMPORT + #endif +#endif /* HAVE_ED25519 */ + +/* AES Config */ +#ifndef NO_AES + /* By default enable all AES key sizes, decryption and CBC */ + #ifndef AES_MAX_KEY_SIZE + #undef AES_MAX_KEY_SIZE + #define AES_MAX_KEY_SIZE 256 + #endif + + #ifndef NO_AES_128 + #undef WOLFSSL_AES_128 + #define WOLFSSL_AES_128 + #endif + #if !defined(NO_AES_192) && AES_MAX_KEY_SIZE >= 192 + #undef WOLFSSL_AES_192 + #define WOLFSSL_AES_192 + #endif + #if !defined(NO_AES_256) && AES_MAX_KEY_SIZE >= 256 + #undef WOLFSSL_AES_256 + #define WOLFSSL_AES_256 + #endif + #if !defined(WOLFSSL_AES_128) && defined(HAVE_ECC_ENCRYPT) + #warning HAVE_ECC_ENCRYPT uses AES 128 bit keys + #endif + + #ifndef NO_AES_DECRYPT + #undef HAVE_AES_DECRYPT + #define HAVE_AES_DECRYPT + #endif + #ifndef NO_AES_CBC + #undef HAVE_AES_CBC + #define HAVE_AES_CBC + #else + #ifndef WOLFCRYPT_ONLY + #error "AES CBC is required for TLS and can only be disabled for WOLFCRYPT_ONLY builds" + #endif + #endif + #ifdef WOLFSSL_AES_XTS + /* AES-XTS makes calls to AES direct functions */ + #ifndef WOLFSSL_AES_DIRECT + #define WOLFSSL_AES_DIRECT + #endif + #endif + #ifdef WOLFSSL_AES_CFB + /* AES-CFB makes calls to AES direct functions */ + #ifndef WOLFSSL_AES_DIRECT + #define WOLFSSL_AES_DIRECT + #endif + #endif +#endif + +/* if desktop type system and fastmath increase default max bits */ +#ifdef WOLFSSL_X86_64_BUILD + #ifdef USE_FAST_MATH + #ifndef FP_MAX_BITS + #define FP_MAX_BITS 8192 + #endif + #endif +#endif + +/* If using the max strength build, ensure OLD TLS is disabled. */ +#ifdef WOLFSSL_MAX_STRENGTH + #undef NO_OLD_TLS + #define NO_OLD_TLS +#endif + + +/* Default AES minimum auth tag sz, allow user to override */ +#ifndef WOLFSSL_MIN_AUTH_TAG_SZ + #define WOLFSSL_MIN_AUTH_TAG_SZ 12 +#endif + + +/* sniffer requires: + * static RSA cipher suites + * session stats and peak stats + */ +#ifdef WOLFSSL_SNIFFER + #ifndef WOLFSSL_STATIC_RSA + #define WOLFSSL_STATIC_RSA + #endif + #ifndef WOLFSSL_SESSION_STATS + #define WOLFSSL_SESSION_STATS + #endif + #ifndef WOLFSSL_PEAK_SESSIONS + #define WOLFSSL_PEAK_SESSIONS + #endif +#endif + +/* Decode Public Key extras on by default, user can turn off with + * WOLFSSL_NO_DECODE_EXTRA */ +#ifndef WOLFSSL_NO_DECODE_EXTRA + #ifndef RSA_DECODE_EXTRA + #define RSA_DECODE_EXTRA + #endif + #ifndef ECC_DECODE_EXTRA + #define ECC_DECODE_EXTRA + #endif +#endif + +/* C Sharp wrapper defines */ +#ifdef HAVE_CSHARP + #ifndef WOLFSSL_DTLS + #define WOLFSSL_DTLS + #endif + #undef NO_PSK + #undef NO_SHA256 + #undef NO_DH +#endif + +/* Asynchronous Crypto */ +#ifdef WOLFSSL_ASYNC_CRYPT + /* Make sure wolf events are enabled */ + #undef HAVE_WOLF_EVENT + #define HAVE_WOLF_EVENT + + #ifdef WOLFSSL_ASYNC_CRYPT_TEST + #define WC_ASYNC_DEV_SIZE 320+24 + #else + #define WC_ASYNC_DEV_SIZE 320 + #endif + + #if !defined(HAVE_CAVIUM) && !defined(HAVE_INTEL_QA) && \ + !defined(WOLFSSL_ASYNC_CRYPT_TEST) + #error No async hardware defined with WOLFSSL_ASYNC_CRYPT! + #endif + + /* Enable ECC_CACHE_CURVE for ASYNC */ + #if !defined(ECC_CACHE_CURVE) + #define ECC_CACHE_CURVE + #endif +#endif /* WOLFSSL_ASYNC_CRYPT */ +#ifndef WC_ASYNC_DEV_SIZE + #define WC_ASYNC_DEV_SIZE 0 +#endif + +/* leantls checks */ +#ifdef WOLFSSL_LEANTLS + #ifndef HAVE_ECC + #error leantls build needs ECC + #endif +#endif /* WOLFSSL_LEANTLS*/ + +/* restriction with static memory */ +#ifdef WOLFSSL_STATIC_MEMORY + #if defined(HAVE_IO_POOL) || defined(XMALLOC_USER) || defined(NO_WOLFSSL_MEMORY) + #error static memory cannot be used with HAVE_IO_POOL, XMALLOC_USER or NO_WOLFSSL_MEMORY + #endif + #if !defined(USE_FAST_MATH) && !defined(NO_BIG_INT) + #error static memory requires fast math please define USE_FAST_MATH + #endif + #ifdef WOLFSSL_SMALL_STACK + #error static memory does not support small stack please undefine + #endif +#endif /* WOLFSSL_STATIC_MEMORY */ + +#ifdef HAVE_AES_KEYWRAP + #ifndef WOLFSSL_AES_DIRECT + #error AES key wrap requires AES direct please define WOLFSSL_AES_DIRECT + #endif +#endif + +#ifdef HAVE_PKCS7 + #if defined(NO_AES) && defined(NO_DES3) + #error PKCS7 needs either AES or 3DES enabled, please enable one + #endif + #ifndef HAVE_AES_KEYWRAP + #error PKCS7 requires AES key wrap please define HAVE_AES_KEYWRAP + #endif + #ifndef HAVE_X963_KDF + #error PKCS7 requires X963 KDF please define HAVE_X963_KDF + #endif +#endif + +#if !defined(WOLFCRYPT_ONLY) && !defined(NO_OLD_TLS) && \ + (defined(NO_SHA) || defined(NO_MD5)) + #error old TLS requires MD5 and SHA +#endif + +/* for backwards compatibility */ +#if defined(TEST_IPV6) && !defined(WOLFSSL_IPV6) + #define WOLFSSL_IPV6 +#endif + + +/* Place any other flags or defines here */ + +#if defined(WOLFSSL_MYSQL_COMPATIBLE) && defined(_WIN32) \ + && defined(HAVE_GMTIME_R) + #undef HAVE_GMTIME_R /* don't trust macro with windows */ +#endif /* WOLFSSL_MYSQL_COMPATIBLE */ + +#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) + #define SSL_OP_NO_COMPRESSION SSL_OP_NO_COMPRESSION + #define OPENSSL_NO_ENGINE + #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT + #ifndef OPENSSL_EXTRA + #define OPENSSL_EXTRA + #endif + #ifndef HAVE_SESSION_TICKET + #define HAVE_SESSION_TICKET + #endif + #ifndef HAVE_OCSP + #define HAVE_OCSP + #endif + #ifndef KEEP_OUR_CERT + #define KEEP_OUR_CERT + #endif + #ifndef HAVE_SNI + #define HAVE_SNI + #endif +#endif + +#if defined(WOLFSSL_NGINX) + #define SSL_CTRL_SET_TLSEXT_HOSTNAME +#endif + +/* both CURVE and ED small math should be enabled */ +#ifdef CURVED25519_SMALL + #define CURVE25519_SMALL + #define ED25519_SMALL +#endif + + +#ifndef WOLFSSL_ALERT_COUNT_MAX + #define WOLFSSL_ALERT_COUNT_MAX 5 +#endif + +/* warning for not using harden build options (default with ./configure) */ +#ifndef WC_NO_HARDEN + #if (defined(USE_FAST_MATH) && !defined(TFM_TIMING_RESISTANT)) || \ + (defined(HAVE_ECC) && !defined(ECC_TIMING_RESISTANT)) || \ + (!defined(NO_RSA) && !defined(WC_RSA_BLINDING) && !defined(HAVE_FIPS)) + + #ifndef _MSC_VER + #warning "For timing resistance / side-channel attack prevention consider using harden options" + #else + #pragma message("Warning: For timing resistance / side-channel attack prevention consider using harden options") + #endif + #endif +#endif + +#if defined(NO_OLD_WC_NAMES) || defined(OPENSSL_EXTRA) + /* added to have compatibility with SHA256() */ + #if !defined(NO_OLD_SHA256_NAMES) && !defined(HAVE_FIPS) + #define NO_OLD_SHA256_NAMES + #endif +#endif + +/* switch for compatibility layer functionality. Has subparts i.e. BIO/X509 + * When opensslextra is enabled all subparts should be turned on. */ +#ifdef OPENSSL_EXTRA + #undef OPENSSL_EXTRA_X509_SMALL + #define OPENSSL_EXTRA_X509_SMALL +#endif /* OPENSSL_EXTRA */ + + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif diff --git a/components/ssl/wolfssl/include/wolfssl/wolfcrypt/types.h b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/types.h new file mode 100755 index 00000000..e9584f8e --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/types.h @@ -0,0 +1,625 @@ +/* types.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + + +#ifndef WOLF_CRYPT_TYPES_H +#define WOLF_CRYPT_TYPES_H + + #include + #include + + #ifdef __cplusplus + extern "C" { + #endif + + + #if defined(WORDS_BIGENDIAN) + #define BIG_ENDIAN_ORDER + #endif + + #ifndef BIG_ENDIAN_ORDER + #define LITTLE_ENDIAN_ORDER + #endif + + #ifndef WOLFSSL_TYPES + #ifndef byte + typedef unsigned char byte; + #endif + typedef unsigned short word16; + typedef unsigned int word32; + typedef byte word24[3]; + #endif + + + /* try to set SIZEOF_LONG or LONG_LONG if user didn't */ + #if !defined(_MSC_VER) && !defined(__BCPLUSPLUS__) && !defined(__EMSCRIPTEN__) + #if !defined(SIZEOF_LONG_LONG) && !defined(SIZEOF_LONG) + #if (defined(__alpha__) || defined(__ia64__) || \ + defined(_ARCH_PPC64) || defined(__mips64) || \ + defined(__x86_64__) || \ + ((defined(sun) || defined(__sun)) && \ + (defined(LP64) || defined(_LP64)))) + /* long should be 64bit */ + #define SIZEOF_LONG 8 + #elif defined(__i386__) || defined(__CORTEX_M3__) + /* long long should be 64bit */ + #define SIZEOF_LONG_LONG 8 + #endif + #endif + #endif + + #if defined(_MSC_VER) || defined(__BCPLUSPLUS__) + #define WORD64_AVAILABLE + #define W64LIT(x) x##ui64 + typedef unsigned __int64 word64; + #elif defined(__EMSCRIPTEN__) + #define WORD64_AVAILABLE + #define W64LIT(x) x##ull + typedef unsigned long long word64; + #elif defined(SIZEOF_LONG) && SIZEOF_LONG == 8 + #define WORD64_AVAILABLE + #define W64LIT(x) x##LL + typedef unsigned long word64; + #elif defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG == 8 + #define WORD64_AVAILABLE + #define W64LIT(x) x##LL + typedef unsigned long long word64; + #elif defined(__SIZEOF_LONG_LONG__) && __SIZEOF_LONG_LONG__ == 8 + #define WORD64_AVAILABLE + #define W64LIT(x) x##LL + typedef unsigned long long word64; + #endif + +#if !defined(NO_64BIT) && defined(WORD64_AVAILABLE) + /* These platforms have 64-bit CPU registers. */ + #if (defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || \ + defined(__mips64) || defined(__x86_64__) || defined(_M_X64)) || \ + defined(__aarch64__) || defined(__sparc64__) + typedef word64 wolfssl_word; + #define WC_64BIT_CPU + #elif (defined(sun) || defined(__sun)) && \ + (defined(LP64) || defined(_LP64)) + /* LP64 with GNU GCC compiler is reserved for when long int is 64 bits + * and int uses 32 bits. When using Solaris Studio sparc and __sparc are + * avialable for 32 bit detection but __sparc64__ could be missed. This + * uses LP64 for checking 64 bit CPU arch. */ + typedef word64 wolfssl_word; + #define WC_64BIT_CPU + #else + typedef word32 wolfssl_word; + #ifdef WORD64_AVAILABLE + #define WOLFCRYPT_SLOW_WORD64 + #endif + #endif +#else + #undef WORD64_AVAILABLE + typedef word32 wolfssl_word; + #define MP_16BIT /* for mp_int, mp_word needs to be twice as big as + mp_digit, no 64 bit type so make mp_digit 16 bit */ +#endif + + enum { + WOLFSSL_WORD_SIZE = sizeof(wolfssl_word), + WOLFSSL_BIT_SIZE = 8, + WOLFSSL_WORD_BITS = WOLFSSL_WORD_SIZE * WOLFSSL_BIT_SIZE + }; + + #define WOLFSSL_MAX_16BIT 0xffffU + + /* use inlining if compiler allows */ + #ifndef INLINE + #ifndef NO_INLINE + #ifdef _MSC_VER + #define INLINE __inline + #elif defined(__GNUC__) + #ifdef WOLFSSL_VXWORKS + #define INLINE __inline__ + #else + #define INLINE inline + #endif + #elif defined(__IAR_SYSTEMS_ICC__) + #define INLINE inline + #elif defined(THREADX) + #define INLINE _Inline + #else + #define INLINE + #endif + #else + #define INLINE + #endif + #endif + + + /* set up rotate style */ + #if (defined(_MSC_VER) || defined(__BCPLUSPLUS__)) && \ + !defined(WOLFSSL_SGX) && !defined(INTIME_RTOS) + #define INTEL_INTRINSICS + #define FAST_ROTATE + #elif defined(__MWERKS__) && TARGET_CPU_PPC + #define PPC_INTRINSICS + #define FAST_ROTATE + #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + /* GCC does peephole optimizations which should result in using rotate + instructions */ + #define FAST_ROTATE + #endif + + + /* set up thread local storage if available */ + #ifdef HAVE_THREAD_LS + #if defined(_MSC_VER) + #define THREAD_LS_T __declspec(thread) + /* Thread local storage only in FreeRTOS v8.2.1 and higher */ + #elif defined(FREERTOS) + #define THREAD_LS_T + #else + #define THREAD_LS_T __thread + #endif + #else + #define THREAD_LS_T + #endif + + /* GCC 7 has new switch() fall-through detection */ + #if defined(__GNUC__) + #if ((__GNUC__ > 7) || ((__GNUC__ == 7) && (__GNUC_MINOR__ >= 1))) + #define FALL_THROUGH __attribute__ ((fallthrough)); + #endif + #endif + #ifndef FALL_THROUGH + #define FALL_THROUGH + #endif + + /* Micrium will use Visual Studio for compilation but not the Win32 API */ + #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ + !defined(FREERTOS_TCP) && !defined(EBSNET) && \ + !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) + #define USE_WINDOWS_API + #endif + + + /* idea to add global alloc override by Moises Guimaraes */ + /* default to libc stuff */ + /* XREALLOC is used once in normal math lib, not in fast math lib */ + /* XFREE on some embeded systems doesn't like free(0) so test */ + #if defined(HAVE_IO_POOL) + WOLFSSL_API void* XMALLOC(size_t n, void* heap, int type); + WOLFSSL_API void* XREALLOC(void *p, size_t n, void* heap, int type); + WOLFSSL_API void XFREE(void *p, void* heap, int type); + #elif defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_INTEL_QA) + #include + #undef USE_WOLFSSL_MEMORY + #ifdef WOLFSSL_DEBUG_MEMORY + #define XMALLOC(s, h, t) IntelQaMalloc((s), (h), (t), __func__, __LINE__) + #define XFREE(p, h, t) IntelQaFree((p), (h), (t), __func__, __LINE__) + #define XREALLOC(p, n, h, t) IntelQaRealloc((p), (n), (h), (t), __func__, __LINE__) + #else + #define XMALLOC(s, h, t) IntelQaMalloc((s), (h), (t)) + #define XFREE(p, h, t) IntelQaFree((p), (h), (t)) + #define XREALLOC(p, n, h, t) IntelQaRealloc((p), (n), (h), (t)) + #endif /* WOLFSSL_DEBUG_MEMORY */ + #elif defined(XMALLOC_USER) + /* prototypes for user heap override functions */ + #include /* for size_t */ + extern void *XMALLOC(size_t n, void* heap, int type); + extern void *XREALLOC(void *p, size_t n, void* heap, int type); + extern void XFREE(void *p, void* heap, int type); + #elif defined(XMALLOC_OVERRIDE) + /* override the XMALLOC, XFREE and XREALLOC macros */ + #elif defined(NO_WOLFSSL_MEMORY) + /* just use plain C stdlib stuff if desired */ + #include + #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) + #define XFREE(p, h, t) {void* xp = (p); if((xp)) free((xp));} + #define XREALLOC(p, n, h, t) realloc((p), (n)) + #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \ + && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \ + && !defined(FREESCALE_KSDK_MQX) && !defined(FREESCALE_FREE_RTOS) \ + && !defined(WOLFSSL_LEANPSK) && !defined(WOLFSSL_uITRON4) + /* default C runtime, can install different routines at runtime via cbs */ + #include + #ifdef WOLFSSL_STATIC_MEMORY + #ifdef WOLFSSL_DEBUG_MEMORY + #define XMALLOC(s, h, t) wolfSSL_Malloc((s), (h), (t), __func__, __LINE__) + #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), (h), (t), __func__, __LINE__);} + #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), (h), (t), __func__, __LINE__) + #else + #define XMALLOC(s, h, t) wolfSSL_Malloc((s), (h), (t)) + #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), (h), (t));} + #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), (h), (t)) + #endif /* WOLFSSL_DEBUG_MEMORY */ + #elif !defined(FREERTOS) && !defined(FREERTOS_TCP) + #ifdef WOLFSSL_DEBUG_MEMORY + #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s), __func__, __LINE__)) + #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), __func__, __LINE__);} + #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), __func__, __LINE__) + #else + #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) + #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} + #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n)) + #endif /* WOLFSSL_DEBUG_MEMORY */ + #endif /* WOLFSSL_STATIC_MEMORY */ + #endif + + /* declare/free variable handling for async */ + #ifdef WOLFSSL_ASYNC_CRYPT + #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \ + VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); + #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \ + VAR_TYPE* VAR_NAME = ({ \ + VAR_TYPE* ptr = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \ + if (ptr && INIT_VALUE) { \ + XMEMCPY(ptr, INIT_VALUE, sizeof(VAR_TYPE) * VAR_SIZE); \ + } \ + ptr; \ + }) + #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \ + VAR_TYPE* VAR_NAME[VAR_ITEMS]; \ + int idx##VAR_NAME; \ + for (idx##VAR_NAME=0; idx##VAR_NAME + #define XMEMCPY(d,s,l) memcpy((d),(s),(l)) + #define XMEMSET(b,c,l) memset((b),(c),(l)) + #define XMEMCMP(s1,s2,n) memcmp((s1),(s2),(n)) + #define XMEMMOVE(d,s,l) memmove((d),(s),(l)) + + #define XSTRLEN(s1) strlen((s1)) + #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n)) + /* strstr, strncmp, and strncat only used by wolfSSL proper, + * not required for wolfCrypt only */ + #define XSTRSTR(s1,s2) strstr((s1),(s2)) + #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n)) + #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n)) + #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n)) + + #if defined(MICROCHIP_PIC32) || defined(WOLFSSL_TIRTOS) + /* XC32 does not support strncasecmp, so use case sensitive one */ + #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) + #elif defined(USE_WINDOWS_API) + #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n)) + #else + #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n)) + #endif + + /* snprintf is used in asn.c for GetTimeString, PKCS7 test, and when + debugging is turned on */ + #ifndef USE_WINDOWS_API + #if defined(NO_FILESYSTEM) && defined(OPENSSL_EXTRA) && \ + !defined(NO_STDIO_FILESYSTEM) + /* case where stdio is not included else where but is needed for + * snprintf */ + #include + #endif + #define XSNPRINTF snprintf + #else + #define XSNPRINTF _snprintf + #endif + + #if defined(WOLFSSL_CERT_EXT) || defined(HAVE_ALPN) + /* use only Thread Safe version of strtok */ + #if defined(__MINGW32__) || defined(WOLFSSL_TIRTOS) || \ + defined(USE_WOLF_STRTOK) + #ifndef USE_WOLF_STRTOK + #define USE_WOLF_STRTOK + #endif + #define XSTRTOK wc_strtok + #elif defined(USE_WINDOWS_API) || defined(INTIME_RTOS) + #define XSTRTOK strtok_s + #else + #define XSTRTOK strtok_r + #endif + #endif + #endif + + #if !defined(NO_FILESYSTEM) && defined(OPENSSL_EXTRA) && \ + !defined(NO_STDIO_FILESYSTEM) + #ifndef XGETENV + #include + #define XGETENV getenv + #endif + #endif /* OPENSSL_EXTRA */ + + #ifndef CTYPE_USER + #include + #if defined(HAVE_ECC) || defined(HAVE_OCSP) || \ + defined(WOLFSSL_KEY_GEN) || !defined(NO_DSA) + #define XTOUPPER(c) toupper((c)) + #define XISALPHA(c) isalpha((c)) + #endif + /* needed by wolfSSL_check_domain_name() */ + #define XTOLOWER(c) tolower((c)) + #endif + + + /* memory allocation types for user hints */ + enum { + DYNAMIC_TYPE_CA = 1, + DYNAMIC_TYPE_CERT = 2, + DYNAMIC_TYPE_KEY = 3, + DYNAMIC_TYPE_FILE = 4, + DYNAMIC_TYPE_SUBJECT_CN = 5, + DYNAMIC_TYPE_PUBLIC_KEY = 6, + DYNAMIC_TYPE_SIGNER = 7, + DYNAMIC_TYPE_NONE = 8, + DYNAMIC_TYPE_BIGINT = 9, + DYNAMIC_TYPE_RSA = 10, + DYNAMIC_TYPE_METHOD = 11, + DYNAMIC_TYPE_OUT_BUFFER = 12, + DYNAMIC_TYPE_IN_BUFFER = 13, + DYNAMIC_TYPE_INFO = 14, + DYNAMIC_TYPE_DH = 15, + DYNAMIC_TYPE_DOMAIN = 16, + DYNAMIC_TYPE_SSL = 17, + DYNAMIC_TYPE_CTX = 18, + DYNAMIC_TYPE_WRITEV = 19, + DYNAMIC_TYPE_OPENSSL = 20, + DYNAMIC_TYPE_DSA = 21, + DYNAMIC_TYPE_CRL = 22, + DYNAMIC_TYPE_REVOKED = 23, + DYNAMIC_TYPE_CRL_ENTRY = 24, + DYNAMIC_TYPE_CERT_MANAGER = 25, + DYNAMIC_TYPE_CRL_MONITOR = 26, + DYNAMIC_TYPE_OCSP_STATUS = 27, + DYNAMIC_TYPE_OCSP_ENTRY = 28, + DYNAMIC_TYPE_ALTNAME = 29, + DYNAMIC_TYPE_SUITES = 30, + DYNAMIC_TYPE_CIPHER = 31, + DYNAMIC_TYPE_RNG = 32, + DYNAMIC_TYPE_ARRAYS = 33, + DYNAMIC_TYPE_DTLS_POOL = 34, + DYNAMIC_TYPE_SOCKADDR = 35, + DYNAMIC_TYPE_LIBZ = 36, + DYNAMIC_TYPE_ECC = 37, + DYNAMIC_TYPE_TMP_BUFFER = 38, + DYNAMIC_TYPE_DTLS_MSG = 39, + DYNAMIC_TYPE_X509 = 40, + DYNAMIC_TYPE_TLSX = 41, + DYNAMIC_TYPE_OCSP = 42, + DYNAMIC_TYPE_SIGNATURE = 43, + DYNAMIC_TYPE_HASHES = 44, + DYNAMIC_TYPE_SRP = 45, + DYNAMIC_TYPE_COOKIE_PWD = 46, + DYNAMIC_TYPE_USER_CRYPTO = 47, + DYNAMIC_TYPE_OCSP_REQUEST = 48, + DYNAMIC_TYPE_X509_EXT = 49, + DYNAMIC_TYPE_X509_STORE = 50, + DYNAMIC_TYPE_X509_CTX = 51, + DYNAMIC_TYPE_URL = 52, + DYNAMIC_TYPE_DTLS_FRAG = 53, + DYNAMIC_TYPE_DTLS_BUFFER = 54, + DYNAMIC_TYPE_SESSION_TICK = 55, + DYNAMIC_TYPE_PKCS = 56, + DYNAMIC_TYPE_MUTEX = 57, + DYNAMIC_TYPE_PKCS7 = 58, + DYNAMIC_TYPE_AES_BUFFER = 59, + DYNAMIC_TYPE_WOLF_BIGINT = 60, + DYNAMIC_TYPE_ASN1 = 61, + DYNAMIC_TYPE_LOG = 62, + DYNAMIC_TYPE_WRITEDUP = 63, + DYNAMIC_TYPE_PRIVATE_KEY = 64, + DYNAMIC_TYPE_HMAC = 65, + DYNAMIC_TYPE_ASYNC = 66, + DYNAMIC_TYPE_ASYNC_NUMA = 67, + DYNAMIC_TYPE_ASYNC_NUMA64 = 68, + DYNAMIC_TYPE_CURVE25519 = 69, + DYNAMIC_TYPE_ED25519 = 70, + DYNAMIC_TYPE_SECRET = 71, + DYNAMIC_TYPE_DIGEST = 72, + DYNAMIC_TYPE_RSA_BUFFER = 73, + DYNAMIC_TYPE_DCERT = 74, + DYNAMIC_TYPE_STRING = 75, + DYNAMIC_TYPE_PEM = 76, + DYNAMIC_TYPE_DER = 77, + DYNAMIC_TYPE_CERT_EXT = 78, + DYNAMIC_TYPE_ALPN = 79, + DYNAMIC_TYPE_ENCRYPTEDINFO= 80, + DYNAMIC_TYPE_DIRCTX = 81, + DYNAMIC_TYPE_HASHCTX = 82, + DYNAMIC_TYPE_SEED = 83, + DYNAMIC_TYPE_SYMETRIC_KEY = 84, + DYNAMIC_TYPE_ECC_BUFFER = 85, + DYNAMIC_TYPE_QSH = 86, + DYNAMIC_TYPE_SALT = 87, + DYNAMIC_TYPE_HASH_TMP = 88, + DYNAMIC_TYPE_BLOB = 89, + DYNAMIC_TYPE_NAME_ENTRY = 90, + }; + + /* max error buffer string size */ + #ifndef WOLFSSL_MAX_ERROR_SZ + #define WOLFSSL_MAX_ERROR_SZ 80 + #endif + + /* stack protection */ + enum { + MIN_STACK_BUFFER = 8 + }; + + + + /* settings detection for compile vs runtime math incompatibilities */ + enum { + #if !defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG) + CTC_SETTINGS = 0x0 + #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) + CTC_SETTINGS = 0x1 + #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8) + CTC_SETTINGS = 0x2 + #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4) + CTC_SETTINGS = 0x4 + #elif defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG) + CTC_SETTINGS = 0x8 + #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) + CTC_SETTINGS = 0x10 + #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8) + CTC_SETTINGS = 0x20 + #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4) + CTC_SETTINGS = 0x40 + #else + #error "bad math long / long long settings" + #endif + }; + + + WOLFSSL_API word32 CheckRunTimeSettings(void); + + /* If user uses RSA, DH, DSA, or ECC math lib directly then fast math and long + types need to match at compile time and run time, CheckCtcSettings will + return 1 if a match otherwise 0 */ + #define CheckCtcSettings() (CTC_SETTINGS == CheckRunTimeSettings()) + + /* invalid device id */ + #define INVALID_DEVID -2 + + + /* AESNI requires alignment and ARMASM gains some performance from it */ + #if defined(WOLFSSL_AESNI) || defined(WOLFSSL_ARMASM) || defined(USE_INTEL_SPEEDUP) + #if !defined(ALIGN16) + #if defined(__GNUC__) + #define ALIGN16 __attribute__ ( (aligned (16))) + #elif defined(_MSC_VER) + /* disable align warning, we want alignment ! */ + #pragma warning(disable: 4324) + #define ALIGN16 __declspec (align (16)) + #else + #define ALIGN16 + #endif + #endif /* !ALIGN16 */ + + #if !defined (ALIGN32) + #if defined (__GNUC__) + #define ALIGN32 __attribute__ ( (aligned (32))) + #elif defined(_MSC_VER) + /* disable align warning, we want alignment ! */ + #pragma warning(disable: 4324) + #define ALIGN32 __declspec (align (32)) + #else + #define ALIGN32 + #endif + #endif + + #if !defined(ALIGN32) + #if defined(__GNUC__) + #define ALIGN32 __attribute__ ( (aligned (32))) + #elif defined(_MSC_VER) + /* disable align warning, we want alignment ! */ + #pragma warning(disable: 4324) + #define ALIGN32 __declspec (align (32)) + #else + #define ALIGN32 + #endif + #endif /* !ALIGN32 */ + + #if defined(__GNUC__) + #define ALIGN128 __attribute__ ( (aligned (128))) + #elif defined(_MSC_VER) + /* disable align warning, we want alignment ! */ + #pragma warning(disable: 4324) + #define ALIGN128 __declspec (align (128)) + #else + #define ALIGN128 + #endif + + #if defined(__GNUC__) + #define ALIGN256 __attribute__ ( (aligned (256))) + #elif defined(_MSC_VER) + /* disable align warning, we want alignment ! */ + #pragma warning(disable: 4324) + #define ALIGN256 __declspec (align (256)) + #else + #define ALIGN256 + #endif + + #else + #ifndef ALIGN16 + #define ALIGN16 + #endif + #ifndef ALIGN32 + #define ALIGN32 + #endif + #ifndef ALIGN128 + #define ALIGN128 + #endif + #ifndef ALIGN256 + #define ALIGN256 + #endif + #endif /* WOLFSSL_AESNI || WOLFSSL_ARMASM */ + + + #ifndef TRUE + #define TRUE 1 + #endif + #ifndef FALSE + #define FALSE 0 + #endif + + + #ifdef WOLFSSL_RIOT_OS + #define EXIT_TEST(ret) exit(ret) + #elif defined(HAVE_STACK_SIZE) + #define EXIT_TEST(ret) return (void*)((size_t)(ret)) + #else + #define EXIT_TEST(ret) return ret + #endif + + + #if defined(__GNUC__) + #define WOLFSSL_PACK __attribute__ ((packed)) + #else + #define WOLFSSL_PACK + #endif + + #ifndef __GNUC_PREREQ + #if defined(__GNUC__) && defined(__GNUC_MINOR__) + #define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) + #else + #define __GNUC_PREREQ(maj, min) (0) /* not GNUC */ + #endif + #endif + + #if defined(__GNUC__) + #define WC_NORETURN __attribute__((noreturn)) + #else + #define WC_NORETURN + #endif + + + #ifdef __cplusplus + } /* extern "C" */ + #endif + +#endif /* WOLF_CRYPT_TYPES_H */ diff --git a/components/ssl/wolfssl/include/wolfssl/wolfcrypt/visibility.h b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/visibility.h new file mode 100644 index 00000000..9fa91c25 --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/visibility.h @@ -0,0 +1,67 @@ +/* visibility.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + +/* Visibility control macros */ + +#ifndef WOLF_CRYPT_VISIBILITY_H +#define WOLF_CRYPT_VISIBILITY_H + + +/* for compatibility and so that fips is using same name of macro @wc_fips */ +#ifdef HAVE_FIPS + #include + #define WOLFSSL_API CYASSL_API + #define WOLFSSL_LOCAL CYASSL_LOCAL +#else + +/* WOLFSSL_API is used for the public API symbols. + It either imports or exports (or does nothing for static builds) + + WOLFSSL_LOCAL is used for non-API symbols (private). +*/ + +#if defined(BUILDING_WOLFSSL) + #if defined(HAVE_VISIBILITY) && HAVE_VISIBILITY + #define WOLFSSL_API __attribute__ ((visibility("default"))) + #define WOLFSSL_LOCAL __attribute__ ((visibility("hidden"))) + #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) + #define WOLFSSL_API __global + #define WOLFSSL_LOCAL __hidden + #elif defined(_MSC_VER) || defined(__MINGW32__) + #if defined(WOLFSSL_DLL) + #define WOLFSSL_API __declspec(dllexport) + #else + #define WOLFSSL_API + #endif + #define WOLFSSL_LOCAL + #else + #define WOLFSSL_API + #define WOLFSSL_LOCAL + #endif /* HAVE_VISIBILITY */ +#else /* BUILDING_WOLFSSL */ + #if defined(_MSC_VER) || defined(__MINGW32__) + #if defined(WOLFSSL_DLL) + #define WOLFSSL_API __declspec(dllimport) + #else + #define WOLFSSL_API + #endif + #define WOLFSSL_LOCAL + #else + #define WOLFSSL_API + #define WOLFSSL_LOCAL + #endif +#endif /* BUILDING_WOLFSSL */ + +#endif /* HAVE_FIPS */ +#endif /* WOLF_CRYPT_VISIBILITY_H */ + diff --git a/components/ssl/wolfssl/include/wolfssl/wolfcrypt/wc_port.h b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/wc_port.h new file mode 100644 index 00000000..7e1b71de --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfcrypt/wc_port.h @@ -0,0 +1,473 @@ +/* wc_port.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + + +#ifndef WOLF_CRYPT_PORT_H +#define WOLF_CRYPT_PORT_H + +#include +#include + +#ifdef __cplusplus + extern "C" { +#endif + + +#ifdef USE_WINDOWS_API + #ifdef WOLFSSL_GAME_BUILD + #include "system/xtl.h" + #else + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef WOLFSSL_SGX + #if defined(_WIN32_WCE) || defined(WIN32_LEAN_AND_MEAN) + /* On WinCE winsock2.h must be included before windows.h */ + #include + #endif + #include + #endif /* WOLFSSL_SGX */ + #endif +#elif defined(THREADX) + #ifndef SINGLE_THREADED + #ifdef NEED_THREADX_TYPES + #include + #endif + #include + #endif +#elif defined(MICRIUM) + /* do nothing, just don't pick Unix */ +#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS) + /* do nothing */ +#elif defined(EBSNET) + /* do nothing */ +#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + /* do nothing */ +#elif defined(FREESCALE_FREE_RTOS) + #include "fsl_os_abstraction.h" +#elif defined(WOLFSSL_uITRON4) + #include "stddef.h" + #include "kernel.h" +#elif defined(WOLFSSL_uTKERNEL2) + #include "tk/tkernel.h" +#elif defined(WOLFSSL_CMSIS_RTOS) + #include "cmsis_os.h" +#elif defined(WOLFSSL_MDK_ARM) + #if defined(WOLFSSL_MDK5) + #include "cmsis_os.h" + #else + #include + #endif +#elif defined(WOLFSSL_CMSIS_RTOS) + #include "cmsis_os.h" +#elif defined(WOLFSSL_TIRTOS) + #include + #include +#elif defined(WOLFSSL_FROSTED) + #include +#elif defined(INTIME_RTOS) + #include + #include +#else + #ifndef SINGLE_THREADED + #define WOLFSSL_PTHREADS + #include + #endif + #if defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS) + #include /* for close of BIO */ + #endif +#endif + +/* For FIPS keep the function names the same */ +#ifdef HAVE_FIPS +#define wc_InitMutex InitMutex +#define wc_FreeMutex FreeMutex +#define wc_LockMutex LockMutex +#define wc_UnLockMutex UnLockMutex +#endif /* HAVE_FIPS */ + +#ifdef SINGLE_THREADED + typedef int wolfSSL_Mutex; +#else /* MULTI_THREADED */ + /* FREERTOS comes first to enable use of FreeRTOS Windows simulator only */ + #if defined(FREERTOS) + typedef xSemaphoreHandle wolfSSL_Mutex; + #elif defined(FREERTOS_TCP) + #include "FreeRTOS.h" + #include "semphr.h" + typedef SemaphoreHandle_t wolfSSL_Mutex; + #elif defined(WOLFSSL_SAFERTOS) + typedef struct wolfSSL_Mutex { + signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES]; + xSemaphoreHandle mutex; + } wolfSSL_Mutex; + #elif defined(USE_WINDOWS_API) + typedef CRITICAL_SECTION wolfSSL_Mutex; + #elif defined(WOLFSSL_PTHREADS) + typedef pthread_mutex_t wolfSSL_Mutex; + #elif defined(THREADX) + typedef TX_MUTEX wolfSSL_Mutex; + #elif defined(MICRIUM) + typedef OS_MUTEX wolfSSL_Mutex; + #elif defined(EBSNET) + typedef RTP_MUTEX wolfSSL_Mutex; + #elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + typedef MUTEX_STRUCT wolfSSL_Mutex; + #elif defined(FREESCALE_FREE_RTOS) + typedef mutex_t wolfSSL_Mutex; + #elif defined(WOLFSSL_uITRON4) + typedef struct wolfSSL_Mutex { + T_CSEM sem ; + ID id ; + } wolfSSL_Mutex; + #elif defined(WOLFSSL_uTKERNEL2) + typedef struct wolfSSL_Mutex { + T_CSEM sem ; + ID id ; + } wolfSSL_Mutex; + #elif defined(WOLFSSL_MDK_ARM) + #if defined(WOLFSSL_CMSIS_RTOS) + typedef osMutexId wolfSSL_Mutex; + #else + typedef OS_MUT wolfSSL_Mutex; + #endif + #elif defined(WOLFSSL_CMSIS_RTOS) + typedef osMutexId wolfSSL_Mutex; + #elif defined(WOLFSSL_TIRTOS) + typedef ti_sysbios_knl_Semaphore_Handle wolfSSL_Mutex; + #elif defined(WOLFSSL_FROSTED) + typedef mutex_t * wolfSSL_Mutex; + #elif defined(INTIME_RTOS) + typedef RTHANDLE wolfSSL_Mutex; + #else + #error Need a mutex type in multithreaded mode + #endif /* USE_WINDOWS_API */ +#endif /* SINGLE_THREADED */ + +/* Enable crypt HW mutex for Freescale MMCAU or PIC32MZ */ +#if defined(FREESCALE_MMCAU) || defined(WOLFSSL_MICROCHIP_PIC32MZ) + #ifndef WOLFSSL_CRYPT_HW_MUTEX + #define WOLFSSL_CRYPT_HW_MUTEX 1 + #endif +#endif /* FREESCALE_MMCAU */ + +#ifndef WOLFSSL_CRYPT_HW_MUTEX + #define WOLFSSL_CRYPT_HW_MUTEX 0 +#endif + +#if WOLFSSL_CRYPT_HW_MUTEX + /* wolfSSL_CryptHwMutexInit is called on first wolfSSL_CryptHwMutexLock, + however it's recommended to call this directly on Hw init to avoid possible + race condition where two calls to wolfSSL_CryptHwMutexLock are made at + the same time. */ + int wolfSSL_CryptHwMutexInit(void); + int wolfSSL_CryptHwMutexLock(void); + int wolfSSL_CryptHwMutexUnLock(void); +#else + /* Define stubs, since HW mutex is disabled */ + #define wolfSSL_CryptHwMutexInit() 0 /* Success */ + #define wolfSSL_CryptHwMutexLock() 0 /* Success */ + #define wolfSSL_CryptHwMutexUnLock() (void)0 /* Success */ +#endif /* WOLFSSL_CRYPT_HW_MUTEX */ + +/* Mutex functions */ +WOLFSSL_API int wc_InitMutex(wolfSSL_Mutex*); +WOLFSSL_API wolfSSL_Mutex* wc_InitAndAllocMutex(void); +WOLFSSL_API int wc_FreeMutex(wolfSSL_Mutex*); +WOLFSSL_API int wc_LockMutex(wolfSSL_Mutex*); +WOLFSSL_API int wc_UnLockMutex(wolfSSL_Mutex*); +#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) +/* dynamiclly set which mutex to use. unlock / lock is controlled by flag */ +typedef void (mutex_cb)(int flag, int type, const char* file, int line); + +WOLFSSL_API int wc_LockMutex_ex(int flag, int type, const char* file, int line); +WOLFSSL_API int wc_SetMutexCb(mutex_cb* cb); +#endif + +/* main crypto initialization function */ +WOLFSSL_API int wolfCrypt_Init(void); +WOLFSSL_API int wolfCrypt_Cleanup(void); + +/* filesystem abstraction layer, used by ssl.c */ +#ifndef NO_FILESYSTEM + +#if defined(EBSNET) + #include "vfapi.h" + #include "vfile.h" + + #define XFILE int + #define XFOPEN(NAME, MODE) vf_open((const char *)NAME, VO_RDONLY, 0); + #define XFSEEK vf_lseek + #define XFTELL vf_tell + #define XREWIND vf_rewind + #define XFREAD(BUF, SZ, AMT, FD) vf_read(FD, BUF, SZ*AMT) + #define XFWRITE(BUF, SZ, AMT, FD) vf_write(FD, BUF, SZ*AMT) + #define XFCLOSE vf_close + #define XSEEK_END VSEEK_END + #define XBADFILE -1 + #define XFGETS(b,s,f) -2 /* Not ported yet */ +#elif defined(LSR_FS) + #include + #define XFILE struct fs_file* + #define XFOPEN(NAME, MODE) fs_open((char*)NAME); + #define XFSEEK(F, O, W) (void)F + #define XFTELL(F) (F)->len + #define XREWIND(F) (void)F + #define XFREAD(BUF, SZ, AMT, F) fs_read(F, (char*)BUF, SZ*AMT) + #define XFWRITE(BUF, SZ, AMT, F) fs_write(F, (char*)BUF, SZ*AMT) + #define XFCLOSE fs_close + #define XSEEK_END 0 + #define XBADFILE NULL + #define XFGETS(b,s,f) -2 /* Not ported yet */ +#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + #define XFILE MQX_FILE_PTR + #define XFOPEN fopen + #define XFSEEK fseek + #define XFTELL ftell + #define XREWIND(F) fseek(F, 0, IO_SEEK_SET) + #define XFREAD fread + #define XFWRITE fwrite + #define XFCLOSE fclose + #define XSEEK_END IO_SEEK_END + #define XBADFILE NULL + #define XFGETS fgets +#elif defined(MICRIUM) + #include + #define XFILE FS_FILE* + #define XFOPEN fs_fopen + #define XFSEEK fs_fseek + #define XFTELL fs_ftell + #define XREWIND fs_rewind + #define XFREAD fs_fread + #define XFWRITE fs_fwrite + #define XFCLOSE fs_fclose + #define XSEEK_END FS_SEEK_END + #define XBADFILE NULL + #define XFGETS(b,s,f) -2 /* Not ported yet */ +#else + /* stdio, default case */ + #include + #define XFILE FILE* + #if defined(WOLFSSL_MDK_ARM) + extern FILE * wolfSSL_fopen(const char *name, const char *mode) ; + #define XFOPEN wolfSSL_fopen + #else + #define XFOPEN fopen + #endif + #define XFSEEK fseek + #define XFTELL ftell + #define XREWIND rewind + #define XFREAD fread + #define XFWRITE fwrite + #define XFCLOSE fclose + #define XSEEK_END SEEK_END + #define XBADFILE NULL + #define XFGETS fgets + + #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR) + #include + #include + #include + #endif +#endif + + #ifndef MAX_FILENAME_SZ + #define MAX_FILENAME_SZ 256 /* max file name length */ + #endif + #ifndef MAX_PATH + #define MAX_PATH 256 + #endif + +#if !defined(NO_WOLFSSL_DIR) + typedef struct ReadDirCtx { + #ifdef USE_WINDOWS_API + WIN32_FIND_DATAA FindFileData; + HANDLE hFind; + #else + struct dirent* entry; + DIR* dir; + struct stat s; + #endif + char name[MAX_FILENAME_SZ]; + } ReadDirCtx; + + WOLFSSL_API int wc_ReadDirFirst(ReadDirCtx* ctx, const char* path, char** name); + WOLFSSL_API int wc_ReadDirNext(ReadDirCtx* ctx, const char* path, char** name); + WOLFSSL_API void wc_ReadDirClose(ReadDirCtx* ctx); +#endif /* !NO_WOLFSSL_DIR */ + +#endif /* !NO_FILESYSTEM */ + +#ifdef USE_WOLF_STRTOK + WOLFSSL_LOCAL char* wc_strtok(char *str, const char *delim, char **nextp); +#endif + +/* Windows API defines its own min() macro. */ +#if defined(USE_WINDOWS_API) + #if defined(min) || defined(WOLFSSL_MYSQL_COMPATIBLE) + #define WOLFSSL_HAVE_MIN + #endif /* min */ + #if defined(max) || defined(WOLFSSL_MYSQL_COMPATIBLE) + #define WOLFSSL_HAVE_MAX + #endif /* max */ +#endif /* USE_WINDOWS_API */ + +/* Time functions */ +#ifndef NO_ASN_TIME +#if defined(USER_TIME) + /* Use our gmtime and time_t/struct tm types. + Only needs seconds since EPOCH using XTIME function. + time_t XTIME(time_t * timer) {} + */ + #define WOLFSSL_GMTIME + #define USE_WOLF_TM + #define USE_WOLF_TIME_T + +#elif defined(TIME_OVERRIDES) + /* Override XTIME() and XGMTIME() functionality. + Requires user to provide these functions: + time_t XTIME(time_t * timer) {} + struct tm* XGMTIME(const time_t* timer, struct tm* tmp) {} + */ + #ifndef HAVE_TIME_T_TYPE + #define USE_WOLF_TIME_T + #endif + #ifndef HAVE_TM_TYPE + #define USE_WOLF_TM + #endif + #define NEED_TMP_TIME + +#elif defined(HAVE_RTP_SYS) + #include "os.h" /* dc_rtc_api needs */ + #include "dc_rtc_api.h" /* to get current time */ + + /* uses parital structures */ + #define XTIME(tl) (0) + #define XGMTIME(c, t) rtpsys_gmtime((c)) + +#elif defined(MICRIUM) + #include + #include + #define XTIME(t1) micrium_time((t1)) + #define WOLFSSL_GMTIME + +#elif defined(MICROCHIP_TCPIP_V5) || defined(MICROCHIP_TCPIP) + #include + #define XTIME(t1) pic32_time((t1)) + #define XGMTIME(c, t) gmtime((c)) + +#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + #define XTIME(t1) mqx_time((t1)) + #define HAVE_GMTIME_R + +#elif defined(FREESCALE_KSDK_BM) || defined(FREESCALE_FREE_RTOS) || defined(FREESCALE_KSDK_FREERTOS) + #include + #ifndef XTIME + /*extern time_t ksdk_time(time_t* timer);*/ + #define XTIME(t1) ksdk_time((t1)) + #endif + #define XGMTIME(c, t) gmtime((c)) + +#elif defined(WOLFSSL_ATMEL) + #define XTIME(t1) atmel_get_curr_time_and_date((t1)) + #define WOLFSSL_GMTIME + #define USE_WOLF_TM + #define USE_WOLF_TIME_T + +#elif defined(IDIRECT_DEV_TIME) + /*Gets the timestamp from cloak software owned by VT iDirect + in place of time() from */ + #include + #define XTIME(t1) idirect_time((t1)) + #define XGMTIME(c, t) gmtime((c)) + +#elif defined(_WIN32_WCE) + #include + #define XTIME(t1) windows_time((t1)) + #define WOLFSSL_GMTIME + +#else + /* default */ + /* uses complete facility */ + #include + + /* PowerPC time_t is int */ + #ifdef __PPC__ + #define TIME_T_NOT_LONG + #endif +#endif + + +/* Map default time functions */ +#if !defined(XTIME) && !defined(TIME_OVERRIDES) && !defined(USER_TIME) + #define XTIME(tl) time((tl)) +#endif +#if !defined(XGMTIME) && !defined(TIME_OVERRIDES) + #if defined(WOLFSSL_GMTIME) || !defined(HAVE_GMTIME_R) + #define XGMTIME(c, t) gmtime((c)) + #else + #define XGMTIME(c, t) gmtime_r((c), (t)) + #define NEED_TMP_TIME + #endif +#endif +#if !defined(XVALIDATE_DATE) && !defined(HAVE_VALIDATE_DATE) + #define USE_WOLF_VALIDDATE + #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t)) +#endif + +/* wolf struct tm and time_t */ +#if defined(USE_WOLF_TM) + struct tm { + int tm_sec; /* seconds after the minute [0-60] */ + int tm_min; /* minutes after the hour [0-59] */ + int tm_hour; /* hours since midnight [0-23] */ + int tm_mday; /* day of the month [1-31] */ + int tm_mon; /* months since January [0-11] */ + int tm_year; /* years since 1900 */ + int tm_wday; /* days since Sunday [0-6] */ + int tm_yday; /* days since January 1 [0-365] */ + int tm_isdst; /* Daylight Savings Time flag */ + long tm_gmtoff; /* offset from CUT in seconds */ + char *tm_zone; /* timezone abbreviation */ + }; +#endif /* USE_WOLF_TM */ +#if defined(USE_WOLF_TIME_T) + typedef long time_t; +#endif + +/* forward declarations */ +#if defined(USER_TIME) + struct tm* gmtime(const time_t* timer); + extern time_t XTIME(time_t * timer); + + #ifdef STACK_TRAP + /* for stack trap tracking, don't call os gmtime on OS X/linux, + uses a lot of stack spce */ + extern time_t time(time_t * timer); + #define XTIME(tl) time((tl)) + #endif /* STACK_TRAP */ + +#elif defined(TIME_OVERRIDES) + extern time_t XTIME(time_t * timer); + extern struct tm* XGMTIME(const time_t* timer, struct tm* tmp); +#elif defined(WOLFSSL_GMTIME) + struct tm* gmtime(const time_t* timer); +#endif +#endif /* NO_ASN_TIME */ + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif /* WOLF_CRYPT_PORT_H */ + diff --git a/components/ssl/wolfssl/include/wolfssl/wolfio.h b/components/ssl/wolfssl/include/wolfssl/wolfio.h new file mode 100644 index 00000000..a224483d --- /dev/null +++ b/components/ssl/wolfssl/include/wolfssl/wolfio.h @@ -0,0 +1,420 @@ +/* io.h + * + * Copyright (C) 2006-2017 wolfSSL Inc. All rights reserved. + * + * This file is part of wolfSSL. + * + * Contact licensing@wolfssl.com with any questions or comments. + * + * http://www.wolfssl.com + */ + + + +#ifndef WOLFSSL_IO_H +#define WOLFSSL_IO_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* OCSP and CRL_IO require HTTP client */ +#if defined(HAVE_OCSP) || defined(HAVE_CRL_IO) + #ifndef HAVE_HTTP_CLIENT + #define HAVE_HTTP_CLIENT + #endif +#endif + +#if !defined(WOLFSSL_USER_IO) + /* Micrium uses NetSock I/O callbacks in wolfio.c */ + #if !defined(USE_WOLFSSL_IO) && !defined(MICRIUM) + #define USE_WOLFSSL_IO + #endif +#endif + + +#if defined(USE_WOLFSSL_IO) || defined(HAVE_HTTP_CLIENT) + +#ifdef HAVE_LIBZ + #include "zlib.h" +#endif + +#ifndef USE_WINDOWS_API + #ifdef WOLFSSL_LWIP + /* lwIP needs to be configured to use sockets API in this mode */ + /* LWIP_SOCKET 1 in lwip/opt.h or in build */ + #include "lwip/sockets.h" + #ifndef LWIP_PROVIDE_ERRNO + #include + #define LWIP_PROVIDE_ERRNO 1 + #endif + #elif defined(FREESCALE_MQX) + #include + #include + #elif defined(FREESCALE_KSDK_MQX) + #include + #elif (defined(WOLFSSL_MDK_ARM) || defined(WOLFSSL_KEIL_TCP_NET)) + #include "cmsis_os.h" + #include "rl_net.h" + #include "errno.h" + #elif defined(WOLFSSL_CMSIS_RTOS) + #include "cmsis_os.h" + #elif defined(WOLFSSL_TIRTOS) + #include + #elif defined(FREERTOS_TCP) + #include "FreeRTOS_Sockets.h" + #elif defined(WOLFSSL_IAR_ARM) + /* nothing */ + #elif defined(WOLFSSL_VXWORKS) + #include + #include + #elif defined(WOLFSSL_ATMEL) + #include "socket/include/socket.h" + #elif defined(INTIME_RTOS) + #undef MIN + #undef MAX + #include + #include + #include + #include + #include + #include + /* defines these, to avoid conflict, do undef */ + #undef SOCKADDR + #undef SOCKADDR_IN + #elif defined(WOLFSSL_PRCONNECT_PRO) + #include + #include + #include + #include + #include + #include + #include + #elif defined(WOLFSSL_SGX) + #include + #elif !defined(WOLFSSL_NO_SOCK) + #include + #include + #ifndef EBSNET + #include + #endif + #include + + #if defined(HAVE_RTP_SYS) + #include + #elif defined(EBSNET) + #include "rtipapi.h" /* errno */ + #include "socket.h" + #elif !defined(DEVKITPRO) && !defined(WOLFSSL_PICOTCP) + #include + #include + #include + #include + #ifdef __PPU + #include + #else + #include + #endif + #endif + #endif +#endif /* USE_WINDOWS_API */ + +#ifdef __sun + #include +#endif + +#ifdef USE_WINDOWS_API + /* no epipe yet */ + #ifndef WSAEPIPE + #define WSAEPIPE -12345 + #endif + #define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK + #define SOCKET_EAGAIN WSAETIMEDOUT + #define SOCKET_ECONNRESET WSAECONNRESET + #define SOCKET_EINTR WSAEINTR + #define SOCKET_EPIPE WSAEPIPE + #define SOCKET_ECONNREFUSED WSAENOTCONN + #define SOCKET_ECONNABORTED WSAECONNABORTED + #define close(s) closesocket(s) +#elif defined(__PPU) + #define SOCKET_EWOULDBLOCK SYS_NET_EWOULDBLOCK + #define SOCKET_EAGAIN SYS_NET_EAGAIN + #define SOCKET_ECONNRESET SYS_NET_ECONNRESET + #define SOCKET_EINTR SYS_NET_EINTR + #define SOCKET_EPIPE SYS_NET_EPIPE + #define SOCKET_ECONNREFUSED SYS_NET_ECONNREFUSED + #define SOCKET_ECONNABORTED SYS_NET_ECONNABORTED +#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX) + #if MQX_USE_IO_OLD + /* RTCS old I/O doesn't have an EWOULDBLOCK */ + #define SOCKET_EWOULDBLOCK EAGAIN + #define SOCKET_EAGAIN EAGAIN + #define SOCKET_ECONNRESET RTCSERR_TCP_CONN_RESET + #define SOCKET_EINTR EINTR + #define SOCKET_EPIPE EPIPE + #define SOCKET_ECONNREFUSED RTCSERR_TCP_CONN_REFUSED + #define SOCKET_ECONNABORTED RTCSERR_TCP_CONN_ABORTED + #else + #define SOCKET_EWOULDBLOCK NIO_EWOULDBLOCK + #define SOCKET_EAGAIN NIO_EAGAIN + #define SOCKET_ECONNRESET NIO_ECONNRESET + #define SOCKET_EINTR NIO_EINTR + #define SOCKET_EPIPE NIO_EPIPE + #define SOCKET_ECONNREFUSED NIO_ECONNREFUSED + #define SOCKET_ECONNABORTED NIO_ECONNABORTED + #endif +#elif defined(WOLFSSL_MDK_ARM)|| defined(WOLFSSL_KEIL_TCP_NET) + #define SOCKET_EWOULDBLOCK BSD_ERROR_WOULDBLOCK + #define SOCKET_EAGAIN BSD_ERROR_LOCKED + #define SOCKET_ECONNRESET BSD_ERROR_CLOSED + #define SOCKET_EINTR BSD_ERROR + #define SOCKET_EPIPE BSD_ERROR + #define SOCKET_ECONNREFUSED BSD_ERROR + #define SOCKET_ECONNABORTED BSD_ERROR +#elif defined(WOLFSSL_PICOTCP) + #define SOCKET_EWOULDBLOCK PICO_ERR_EAGAIN + #define SOCKET_EAGAIN PICO_ERR_EAGAIN + #define SOCKET_ECONNRESET PICO_ERR_ECONNRESET + #define SOCKET_EINTR PICO_ERR_EINTR + #define SOCKET_EPIPE PICO_ERR_EIO + #define SOCKET_ECONNREFUSED PICO_ERR_ECONNREFUSED + #define SOCKET_ECONNABORTED PICO_ERR_ESHUTDOWN +#elif defined(FREERTOS_TCP) + #define SOCKET_EWOULDBLOCK FREERTOS_EWOULDBLOCK + #define SOCKET_EAGAIN FREERTOS_EWOULDBLOCK + #define SOCKET_ECONNRESET FREERTOS_SOCKET_ERROR + #define SOCKET_EINTR FREERTOS_SOCKET_ERROR + #define SOCKET_EPIPE FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNREFUSED FREERTOS_SOCKET_ERROR + #define SOCKET_ECONNABORTED FREERTOS_SOCKET_ERROR +#else + #define SOCKET_EWOULDBLOCK EWOULDBLOCK + #define SOCKET_EAGAIN EAGAIN + #define SOCKET_ECONNRESET ECONNRESET + #define SOCKET_EINTR EINTR + #define SOCKET_EPIPE EPIPE + #define SOCKET_ECONNREFUSED ECONNREFUSED + #define SOCKET_ECONNABORTED ECONNABORTED +#endif /* USE_WINDOWS_API */ + + +#ifdef DEVKITPRO + /* from network.h */ + int net_send(int, const void*, int, unsigned int); + int net_recv(int, void*, int, unsigned int); + #define SEND_FUNCTION net_send + #define RECV_FUNCTION net_recv +#elif defined(WOLFSSL_LWIP) + #define SEND_FUNCTION lwip_send + #define RECV_FUNCTION lwip_recv +#elif defined(WOLFSSL_PICOTCP) + #define SEND_FUNCTION pico_send + #define RECV_FUNCTION pico_recv +#elif defined(FREERTOS_TCP) + #define RECV_FUNCTION(a,b,c,d) FreeRTOS_recv((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) + #define SEND_FUNCTION(a,b,c,d) FreeRTOS_send((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d)) +#elif defined(WOLFSSL_VXWORKS) + #define SEND_FUNCTION send + #define RECV_FUNCTION recv +#else + #define SEND_FUNCTION send + #define RECV_FUNCTION recv + #if !defined(HAVE_SOCKADDR) && !defined(WOLFSSL_NO_SOCK) + #define HAVE_SOCKADDR + #endif +#endif + +#ifdef USE_WINDOWS_API + typedef unsigned int SOCKET_T; +#else + typedef int SOCKET_T; +#endif + +#ifndef WOLFSSL_NO_SOCK + #ifndef XSOCKLENT + #ifdef USE_WINDOWS_API + #define XSOCKLENT int + #else + #define XSOCKLENT socklen_t + #endif + #endif + + /* Socket Addr Support */ + #ifdef HAVE_SOCKADDR + typedef struct sockaddr SOCKADDR; + typedef struct sockaddr_storage SOCKADDR_S; + typedef struct sockaddr_in SOCKADDR_IN; + #ifdef WOLFSSL_IPV6 + typedef struct sockaddr_in6 SOCKADDR_IN6; + #endif + typedef struct hostent HOSTENT; + #endif /* HAVE_SOCKADDR */ + + #ifdef HAVE_GETADDRINFO + typedef struct addrinfo ADDRINFO; + #endif +#endif /* WOLFSSL_NO_SOCK */ + + +/* IO API's */ +#ifdef HAVE_IO_TIMEOUT + WOLFSSL_API int wolfIO_SetBlockingMode(SOCKET_T sockfd, int non_blocking); + WOLFSSL_API void wolfIO_SetTimeout(int to_sec);; + WOLFSSL_API int wolfIO_Select(SOCKET_T sockfd, int to_sec); +#endif +WOLFSSL_API int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, + unsigned short port, int to_sec); +WOLFSSL_API int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags); +WOLFSSL_API int wolfIO_Recv(SOCKET_T sd, char *buf, int sz, int rdFlags); + +#endif /* USE_WOLFSSL_IO || HAVE_HTTP_CLIENT */ + + +WOLFSSL_API int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx); +WOLFSSL_API int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); +#if defined(USE_WOLFSSL_IO) + /* default IO callbacks */ + WOLFSSL_API int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); + WOLFSSL_API int EmbedSend(WOLFSSL* ssl, char* buf, int sz, void* ctx); + + #ifdef WOLFSSL_DTLS + WOLFSSL_API int EmbedReceiveFrom(WOLFSSL* ssl, char* buf, int sz, void*); + WOLFSSL_API int EmbedSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx); + WOLFSSL_API int EmbedGenerateCookie(WOLFSSL* ssl, unsigned char* buf, + int sz, void*); + #ifdef WOLFSSL_MULTICAST + WOLFSSL_API int EmbedReceiveFromMcast(WOLFSSL* ssl, + char* buf, int sz, void*); + #endif /* WOLFSSL_MULTICAST */ + #ifdef WOLFSSL_SESSION_EXPORT + WOLFSSL_API int EmbedGetPeer(WOLFSSL* ssl, char* ip, int* ipSz, + unsigned short* port, int* fam); + WOLFSSL_API int EmbedSetPeer(WOLFSSL* ssl, char* ip, int ipSz, + unsigned short port, int fam); + #endif /* WOLFSSL_SESSION_EXPORT */ + #endif /* WOLFSSL_DTLS */ +#endif /* USE_WOLFSSL_IO */ + +#ifdef HAVE_OCSP + WOLFSSL_API int wolfIO_HttpBuildRequestOcsp(const char* domainName, + const char* path, int ocspReqSz, unsigned char* buf, int bufSize); + WOLFSSL_API int wolfIO_HttpProcessResponseOcsp(int sfd, + unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz, + void* heap); + + WOLFSSL_API int EmbedOcspLookup(void*, const char*, int, unsigned char*, + int, unsigned char**); + WOLFSSL_API void EmbedOcspRespFree(void*, unsigned char*); +#endif + +#ifdef HAVE_CRL_IO + WOLFSSL_API int wolfIO_HttpBuildRequestCrl(const char* url, int urlSz, + const char* domainName, unsigned char* buf, int bufSize); + WOLFSSL_API int wolfIO_HttpProcessResponseCrl(WOLFSSL_CRL* crl, int sfd, + unsigned char* httpBuf, int httpBufSz); + + WOLFSSL_API int EmbedCrlLookup(WOLFSSL_CRL* crl, const char* url, + int urlSz); +#endif + + +#if defined(HAVE_HTTP_CLIENT) + WOLFSSL_API int wolfIO_DecodeUrl(const char* url, int urlSz, char* outName, + char* outPath, unsigned short* outPort); + + WOLFSSL_API int wolfIO_HttpBuildRequest(const char* reqType, + const char* domainName, const char* path, int pathLen, int reqSz, + const char* contentType, unsigned char* buf, int bufSize); + WOLFSSL_API int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, + unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz, + int dynType, void* heap); +#endif /* HAVE_HTTP_CLIENT */ + + +/* I/O callbacks */ +typedef int (*CallbackIORecv)(WOLFSSL *ssl, char *buf, int sz, void *ctx); +typedef int (*CallbackIOSend)(WOLFSSL *ssl, char *buf, int sz, void *ctx); +WOLFSSL_API void wolfSSL_SetIORecv(WOLFSSL_CTX*, CallbackIORecv); +WOLFSSL_API void wolfSSL_SetIOSend(WOLFSSL_CTX*, CallbackIOSend); + +WOLFSSL_API void wolfSSL_SetIOReadCtx( WOLFSSL* ssl, void *ctx); +WOLFSSL_API void wolfSSL_SetIOWriteCtx(WOLFSSL* ssl, void *ctx); + +WOLFSSL_API void* wolfSSL_GetIOReadCtx( WOLFSSL* ssl); +WOLFSSL_API void* wolfSSL_GetIOWriteCtx(WOLFSSL* ssl); + +WOLFSSL_API void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags); +WOLFSSL_API void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags); + + +#ifdef HAVE_NETX + WOLFSSL_LOCAL int NetX_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx); + WOLFSSL_LOCAL int NetX_Send(WOLFSSL *ssl, char *buf, int sz, void *ctx); + + WOLFSSL_API void wolfSSL_SetIO_NetX(WOLFSSL* ssl, NX_TCP_SOCKET* nxsocket, + ULONG waitoption); +#endif /* HAVE_NETX */ + +#ifdef MICRIUM + WOLFSSL_LOCAL int MicriumSend(WOLFSSL* ssl, char* buf, int sz, void* ctx); + WOLFSSL_LOCAL int MicriumReceive(WOLFSSL* ssl, char* buf, int sz, + void* ctx); + WOLFSSL_LOCAL int MicriumReceiveFrom(WOLFSSL* ssl, char* buf, int sz, + void* ctx); + WOLFSSL_LOCAL int MicriumSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx); +#endif /* MICRIUM */ + +#ifdef WOLFSSL_DTLS + typedef int (*CallbackGenCookie)(WOLFSSL* ssl, unsigned char* buf, int sz, + void* ctx); + WOLFSSL_API void wolfSSL_CTX_SetGenCookie(WOLFSSL_CTX*, CallbackGenCookie); + WOLFSSL_API void wolfSSL_SetCookieCtx(WOLFSSL* ssl, void *ctx); + WOLFSSL_API void* wolfSSL_GetCookieCtx(WOLFSSL* ssl); + + #ifdef WOLFSSL_SESSION_EXPORT + typedef int (*CallbackGetPeer)(WOLFSSL* ssl, char* ip, int* ipSz, + unsigned short* port, int* fam); + typedef int (*CallbackSetPeer)(WOLFSSL* ssl, char* ip, int ipSz, + unsigned short port, int fam); + + WOLFSSL_API void wolfSSL_CTX_SetIOGetPeer(WOLFSSL_CTX*, CallbackGetPeer); + WOLFSSL_API void wolfSSL_CTX_SetIOSetPeer(WOLFSSL_CTX*, CallbackSetPeer); + #endif /* WOLFSSL_SESSION_EXPORT */ +#endif + + + +#ifndef XINET_NTOP + #define XINET_NTOP(a,b,c,d) inet_ntop((a),(b),(c),(d)) + #ifdef USE_WINDOWS_API /* Windows-friendly definition */ + #undef XINET_NTOP + #define XINET_NTOP(a,b,c,d) InetNtop((a),(b),(c),(d)) + #endif +#endif +#ifndef XINET_PTON + #define XINET_PTON(a,b,c) inet_pton((a),(b),(c)) + #ifdef USE_WINDOWS_API /* Windows-friendly definition */ + #undef XINET_PTON + #define XINET_PTON(a,b,c) InetPton((a),(b),(c)) + #endif +#endif +#ifndef XHTONS + #define XHTONS(a) htons((a)) +#endif +#ifndef XNTOHS + #define XNTOHS(a) ntohs((a)) +#endif + +#ifndef WOLFSSL_IP4 + #define WOLFSSL_IP4 AF_INET +#endif +#ifndef WOLFSSL_IP6 + #define WOLFSSL_IP6 AF_INET6 +#endif + + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif /* WOLFSSL_IO_H */ diff --git a/components/ssl/wolfssl/lib/libwolfssl.a b/components/ssl/wolfssl/lib/libwolfssl.a new file mode 100644 index 0000000000000000000000000000000000000000..e025f84531c0c01034b0c1f3fe7ad569ab27c143 GIT binary patch literal 937674 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%0DK_U$GgCQ?f?tf6_CKk2Ete#7G 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�CLiq!5%|q>#GMEf z`cUk)42I4;EN37B{dGR5zuj-_ANuRJ8qkN|>U97D^J>2mPemXIY;y98 zy|fPGr>H-%U&jB#FKlJ|wBJ}S?GyQeu*kf7!H;EWOn#QdytEHTphT6cZD&lOPuz0< z)4b$ndl|EDS+|2}L!fO8g7)o1U<&ON#(r54Yq|EA66?6{#|#kWA=de(y9nhZ4>=hh ziNN|COB(`xW+1R0B?$b6B?|4t%6Szq^U=N@0ULPZe=TCQUkA*m+2pwsfkJ$X9~Eex*cl z>OAkSAL97rsz2?1Sk7w|cK3Q`-O0mP=i4M;3T?zXf2Pw2 zp`AE^Ku*p{mPdR70);**ep!I{g;jY7jCDR218bf41Exgf<=V%*j4AXX*1Rm65|#J= z%W~~;VY6B1k*pYmbtC3@u)Y%zC|YMbFYisvYp*BtjpIW!o0-F$+=HaPP-57 z{e#w%jHgxrN68Q=-b{dc-`8m9rR_66LRZ z7{-+U#D~6qS&)a<70WF~(7t6GDay$)qCewe1p2e>6#5X4Mxgy91d8S*W?qV2XZn^P z?8XF$`rC6-$6^H1^?EtPct`tlA4c9iEgxbXJNN!*m&H8*^YZVr8M8j@8~zat>&ZaT zdJ;#qOMTc@Eti}W&1;wYpVpZ?TCVP??DnY(&eA+5^+3YubV0&-xH^97_;JAy8;1 z);4n8=Dv>h@q+2kdm`ⅆ|i8J`~1&SrGH{C;d*Q4S{J35OjQbO;I$jJwM6KysU%P zho9?}hjl1Mpx=B13VDc!BGBH2K%t#@Zv=8)h(L)dSNE1~Kd3+J!?le3)igrLL(KJ` z_N53E<>%P@Wx*WKc~uOXwrf9N3jK*$Px4eCP-w3}&~^A2U<&QT>=*ixyBT(o=tUT8NbIy_f*9a8)5Ob}g{Rsr#!-(HNpwNd{eYOB| z-qXj&AkGy$5BOVxe+jJf?M~n!u;(E>0!$$%v924NfSE-5lK{+1|7U=CeX^|g=m4P) zvF804m`Sv6vFxAI2%(*rbs!I)98zc})_Wws0hK~Kr5M343u5*glgA?{&lF$^{fV`n zrvTHJ_Js)A|DC|B675|G>VE++g?3`SrhY&pgmwzA1-~qa5t%Y75L4(=fuQTdvB28@ z#{sK9=QHb8g0LJx>vkS6g*=ov_XS@6tPkVE5y<;}1PXbGbuQfitabY(u=c|S%l?36 z-)Px6C)IzGW&eX^e;Ifd0^4-}oYlV!fOVmL42=-##JUGN446r@^P7Iv{!PnXVcDly z_G;jn$VdL~15?ODygy>v@3s8-Exy_(Pg{1*bM2p3f%Amtbzofs{{cK)IQO6fgk=#I zBW78LT6SWct5YpIv93Qgz&l9Zxt0&{j$%IrSg-4QfpuQp4~&1N+>HRbmcB$Igmt6X zYi12}CUeeIAe11iN6_`eUf+mW7JY6*(0+Ifn43=5vTY{KAp90fH zAATb-*KOL%&_I61AYKKmKC6K_N2zb%#Ry?uV!dX6YuSl)yfy)kgfBU_0*?~B9|syj z9^xXzmI4yvJ>n4JlpcQ+VUahc(L3KmYrDZ@H@*+%=**+kHBmP>-`!qri8I? z2G;rTXTkJ;7kH-ljAuh2%uB4}djzm@9tEtNRlwSZlf<8X)xZ?;5G&72%TCPkrTK&%UQyQ7kN zA1?;xSkitVD-WSRvChxYz_iilPz&>yfGA8O*1F9CW)kf+0J>(*16CgX5)g$tvF7ar zW)kgP0P4To!e`R~!Zc#ddx>Qy);{5{c<6rk9?OSV_XGSDj{@+qjre#?Znzw zhFt8#y2s0*Iu;F_&#gH!L}R$Od%(+_UEy{Orm`TfaaYIOdIo_LVZlta&d4W)kgd0W|NWz?%0eVBLH0*T{5SZU?5&k682G1*~}= z0Hz!DjR0Eivou0zCszMgfOSv!iRDAA{m-)(?dKgaaTN2sMe9%ktehi&Db$InmLQA- z(6OE*cKS>K);699Orf1v*ZCe`R*&{xV7iqcECtZ@@V{t;(1*gz zs}LyUB&E(0{wMN|1P|-RnAbkbtwzwY z-1VmpX(b4D8;K`~ooj`zy}UP(kM;Zvf&D{$02>9NotXVh`;Nf6{_JP@Aj$MU>xqBn zGYI{sAZR_00oJl+0PFlY8JJWoYXJiF5`?=D)c@DOtOM=$At>jAz!c^so{hjf{8c{X z^UtBd{%uIWNh{G393j`m+xx>TmDK=|_L=eYBqCVxvE= z7w%Wca|Qy7rhO#>=Me2{5h%)U*N4|Q`B|pc=NrHj^(T*C7Vu31rhhGM2=tkQpli-a zz!chvc^_mQ&PSloPGP;t$+!lAoU0L(=R3d@`V(_4AkXg+D6|tdBGArz4TW}Mowx4V z&OT&Wm%vBY;cJ0uV_xntbRTsyFokwv^}pY;Gu`f=MbOE$41sRUyBvY-qWvrc<@qi! zg+3~NS%9>jj44q*y7n=qsE<9q)v&W%ULzFsA=a|~r+5m$$+9#q0p{93i7Hq9G>-DO z+hSik%E{}4*AMd^LL)@Wvh(sD$GYu}pyR@PyazGw;RqDwCDu7mMI%Hx8T(~{&g+Dn z2T07c0}*(AlG9y_=u7)42zo7Z{!*BinEPA$tw5mAPON2JK_i5A3a?+*hq0~|tb_9N z`lHaF_*ev&AEt~oihV>MmPygF?EZ}7!~P{tF#;uuhxMip*B?rhPaGcYpM3+GNS-)8 zx$46?>X!v`dn7RHJOP1yUV^~;Ci{fA1wrRnD{w;WZHNa8w#OHyjQ;0dj{Kan%ESKQ zbxM8)iuM&T>qgOguEz9bn<(mUk0W_m7WD|L{JmYX-|@zfzQwSp5rt*+#|`^|9-=7wq)meO~XC z`vFtbpIAAWm;Q_?>SJ?izZDygXdin%*gSUsb6&A5u4j7fmjH9_v0T=ZV@(_Px5EW< zEz;uaG`Uic^{{P?p`QQ1#YeMIN#{Yl0Uh>OW`#}DW@aUcu z?Y;F4-e~*+OAxmxYHRIHb=S9zUe?*xj2~U8>rT}-@wXpS-5vF9-e^s(uJ387P4)D& zc6K<%)n6$gGQywXwCUCDmQm*4opX&FwhUrIz>S(-WQ8(^B7^YLbF-_(av6 zg)iyBPwLclbaphfbv7=}=5Ok4i(q7z#L0=i?yc)eMfEm`>sW*6GOCGHX%`lGctXjg7~q zR@Bv=p52=5I)p5BqrL(CpID^ARJ?sh;hNnodqFogR@QRqQ7fJ=K3|b*jEA zyU3nYM?`Vmsm7%dzAa07oA@(O=@ln^Rrl8SMog4Nn0e+`rLuD{slF}M-CNg!Yqqm{ zMYhYb`i@{t$dQzz!>7!i9TZxJ1&%*ul~r5Uqb{OF$EH$UmEGO-DT1 zeMb|Pi^Zwgsh-Xy-HoXn9C7?O@N;`oliFHS9lfzN3DTohj`TCXy$+->uxorItl5!#T2@ zR2k79U6|C7BhO}VwOrKQxumPE9rsE!C4wN1k6e;id*-FOGw-?DBf-j(GZ`J4GYwg@ z(kk1yY^FBeqB~ z;U`s2!X{PsoH{hT7BiOJh^wltwV}Jddj)o`xn>l*7DTT*rHolVv>*3$Gk z?swZqvVI*JJ3BhC$;obvB-AycGqO|b8yizy5%!MMqR!sd$QvO#wz_9>XGbck>n7nR z89SCl+?$)*mh`k}e?;^r8`#_0p6Xl@Q5)@|EC;L)@*yF(se}y-Q$m~e_@Z!R!bCJH z>+^zX>->sveOIx?0vrdPSzOm>?x&bzZEX$pQCo7d#d5S+gAYA1ShwrQ?q>0=O}Op1_O8G#sUu>LUAM3^ z?M5%@NyQBa_|t36mn>VjVojVL)>xMr9ebes);+gwIvHt{MOLw4@?FLYM_3_Xh@9CQYxYo-*5f#*SW=YNyoJPM>vL-F6*KY33Ls zyOc03$KoedU7E^~&f&zOi%-eiJx1MytkkHR|Fkf3RC35a&+I#Lmmuj;BtaSdIE1Ct zn$wuz15NI-GQ4t^xLr3X7a#un={-%&QBHr!A%DNU2a0|=2ff$7Ls-g`j>a6F1_mbP zZbPorkbH8gA95zb zXlS%=ox%BLcA7a1%{J$9w+=+JGjXfIlf&qg^r2{Ua(FD7oo*Hd`(SjtF6JX&e_oMe z!E$ikk#RhlF<5k93$u*w@n(iYa4MQ%VpnZ9kNJcj9C&7Ab`C?co5?GP$DtXyV6@Ld zGtxNe`%8~L1&u7&IR}mOu}?y?9pnnkJPXZs!#ck`myij|fu4uvV(QmLj_9)U2B)Ig z_TXGJ+m2ex>1KACRJY%BjMDbfgY(gB`rw2#+a8>eX4`wxo1TcY;G8r&VG$;_oRmf< zI%lOB)6hC7&9>_hbaFZ6v!z2u9}>0JxQC)~e0Xr0U0wU=G&_|?gL-(Hoto?TG~1Ir zQ3t5mo}3?Z-6Pa&w-_#%Mb#Q@X8?9t=ZO26qR3l0Y zKZn6-J2cjoKVvGTPgEoL(Y;)k-80o}&v;(p>VwTru*c7)3Rbax9MHf0q#}Dns&l>? zmde4x>8WGTGuF^7r>vntM?5%Z&9<|xdeWLR)h;+ZGL3M@K=+rPapD?gcg|chhTWQj z)`4r7SKDX#*+;JZI${86zd2!I}tq{9>QiPr;lMXI@vvg&CbWRrVm-OleK>%T(GRjfv29t zhS|e3`|{W8ZBaO2b~0L+K0ytsG!rW-qiko=WRqFXWW(I{scdM~OcCd@8QsS+GY(}l zQnha)4_dPeBUz+tPSUJ%*4(5qT-oaphqBq6u47bpv+YZw4`#CoV>^;H>Touj(pnWW zk7pxXrK*isr`!YD+};rfow=QD>d52H|2%6{r?VgJqV%9Po1LDqTHsQ~tbKpkqH3OX zV4GcKj=i;i%XY{*VYomkzf?J!&Ec{HYi~{ujx82w>-;vG#Y*Q9Teicr zkRaM2EG5{S@sKc^CMZWdqKSf%`gIA*$~b=Qr^F1u{>qKvD5c}@LQixf+o|a}OY7eu zEM+_W37UR83;nr0m#{23-Obe?J;BXR4@$|M9u^^IyxA0(8>pzB<7TG^MP#IR2PYGg zYEPImsk*eh{4mV94AUXw#+YN^(ZMch65k6547wt8zbglweYV{_!n%H zaY2;+U;nz{2w39y&5G&AzlMs#w=|~Tx|n`Hjp=u9Ouv_6`h67BFNscx(=Ytyhd6%6 z#PsWk>8F2jxxM*vYfQdJWBR=x)6d7BX~1>6^Lf9Rev@PRHOBNiBc|U~G5vlM)9>w= zemme#isJNNX-vQAG5t=B>G$23ez(Q+do-rs>oNWQ9@B3y7S=fZd{9ik=`sD9WBRR( z>33;NznfzE@mu-g^vfGD{e1k1P8_~rG5sdQ^gAi0-&ryJu8Qe*XH360V*2qn599RT zK{5Si#PmBgrr*k#eiy~`yFI4gb20t?5z}vX{JCYEem*j$-<+6!D`Wcg#q|4aOux-B z{l1Fnw-^3QHBSE>64S3Drr+F{eoZm`PLJt#c}%}sWBNT9)9+6){l19lw;TQxJkGcs z9@B4OOuq|a`rQ`O@8y_&1Mz46aoT%WOurLi`t`*0yCkOHEiwI`i|Mx|rr$99IeVP` ztBmQ_5Yz9Bn0{Br^t(N#-=>&;@5S`X!&e~0>A#Yge&3Agw=kyP=`sB-j_G$}Ouq+W z`n?v@?_V+f2IH$8;*7_bn108{^gAo2-_K(Dy%5vy%b0$p_-dgz{W3MC-)S-Zu88Tk zF{a;pG5vPO*N(+$Z$(VM6*2v8jOq7$Ouzq*>31-`-Xu(BCQiQ`7SnHjOutnz{jQJc_h?MNEiwHH@Rdh#`ejs1znL-pI%E1>9MkXS zn10X3^!qfX-){Jtp*a0FF{WQrOuq|b`rRDUZ&OUa_hb6)g0Iht(=TIU`W+wBuREsS zx|n{q#PoYQrr(D#{gU{KwEp^!X_Q^X567cM#!0M^`h5+4_~>Z9*@|ho{Dw!AyO0?~ za6D*a82l8|aMW<$d=uqoDDWoeOv6^qt8(}*gKY|eigHYJ_%?!X44lY!3u5Iv(cyay zX@@D9_)(qX@NEHKDeUCCP5fBDPKS@*RN4um@epG+x@O=Qj^{}&kcZwg|dzZtv1?l`YH5IMj z9S-05_}W&j-`#N5`aSLN72tUYOleWR#~r@A!N>Zre)k|&z7HI}Qt%B=vju)s|LX8P zZ1LS^@eRONL!yZEbF1nc_4DDUbtV5Z7T^6A-+m6?!W?|X4&Q4Q-$sjXio>@YeEg<4 z6|GZ+!}l)u+Tg_gdkC@iUyH+cH~0=!GV!C@=vw^}_cHjtfD`#1L9F$=+2OkZ3)i=lO#GyKB=Qw_obNDTB{Ho!H zqwusSUl;roGqG#`@Opa&I@8#H-*NbAkPy{>*E@dmbND^t_$`DV%TiJNk>l5dgs64s zJ@{!Ja;!u1{_$g*uANW=yCf^?rGmU&>9ln>5 zupjIy$}!sEE5%Q~mBNX9uOL>wlN>&Fa*2|OAJw@IU$w>es`#;fXF7bP;ESr?a)+-p#>xfWx=I;(O2Ho8j?AY0>sR=kS$|2Zxi_N5j!o)cbCIgb5J-B z@+`hTI(%<}?~pWG*v1zfz6Ibr3Vy6#zQwoI;VZ)PxTt;3-yOayz^C(IfW=pW7bBsj z=hZmyMcoJYfuFXW)xXWE-yn-`hQl`>eAw!xMLDK9d>>f-x0A)!47J6n8rI(#>QZ%w+jVV~XZ@XZIG?w^NPe2+VPy_^?!_MaSc1hi~Dia6T7Vd9|+aP>HExuzNzA<=S$a$}#98(>>EAX>o zrEp^X_Okfe9lmPt@&2Zwd@T;&ec)RUC-M!m_|`dm>%oUxe_E99M#t|u_(iSH*E{9T zKR6t>Z&>BN=BvlmB-3UdU0u&mF!l@aZ~)kIZSl;(apb z)w|%skwRLuetW}DF%!?X`1tEPOym8$(&3}=2xbsbj-wpDKJe*vgspFyug>8+3Vf$3 z8Dix-$>A#)6Y}w0X06|u4&M#nyD)-pxx=>{d|Tkhd4(k|&3C!OHx8SZr4f9WID9RK z_}51RVS_X->)6Mp<}V`;!J|= zMOD*$Pdj|ehj`u(BI@_J!?zGW8Q2RR@_{}yzZi+iRT!;AU<2ql89lqPZr@yAne9E!6!&eHv`B-4sUcfZp zIEU~2BF}rwR3P|I`3`pYR^q1>H^GH`M_PPy9KIS{yuXRyo8|CT0hIMc5MewadOQNJnhQ_RE{P;Mz=_VXO8+*9FamwP_= zuymwFIa2Ub%*3r$JNV11OyhNVMR6wIdhneLyNYsruQ-!$NKJT7IN#!X0DgA;wt}xr z$q*~wJr3Vx;44Ks+k2A5w;6smU-7>9g`_+8Zg?)hU#Mld?7w}6XY#ECpZ;1UlGE)S3O}tY?JeMYSndl8ExyAXKK^>f zH<>|1Im#Wrkth4!Lin(~4Hn-Vhi@|YqSm2V4&Pevv3=xgviN!&zWLz0N$SQ(>(}A% zT>(C>qvUHw(Ehsseo)ibQT~C^*U^oR-yrx!?N6_VpVoo(c@2ZF?Px_oTJGZxUvUn; z-#L8mT6~Kwz7HL~3E@H-QwF3*A3KkzbqUP{vxE!mk&SX zHugH-D-*s>i|-o_-*pE?f9~GP;Tu^W&im6WzM~z!jo@3$3W#W(4tMw#fbR?Vu)RGN z-yDZ;#>nuO<4CD|vmCzpnCxSOZ;8d%s~b;`@oiHwG8aCZv<^42$nEhi~%1(VuJo z;`q&gpS7(^w_|s#v!GAUzxnW+5mCP(@YA+4`3uyq6fx`fZL5AqI(*mVDECyy@3tJ} zrkrw%7lq}nvdaCw!}kUFqMk#nbND8MPw)GyEx!95z5-0XD864id<(!=ApNq&;@j-- z4FlgH>_`#q+t(ew7Vzml?0k!F7j!<<^tjc4uS&@fE8kA=Q_SS+z_$=F$L%{7-vo#6 zGVoo&3?j-g*5S)<3Eu}@ZA7DYzfn% zeCIoSt8p`c$?&bS`0jQ19?QXZr^9!H#m8U#&IdQg`(20cUGNpdu0lV`+Ya9*i|;av zZ(r;$pr*%n5Dxq~PgRuf>+n;|v@I6jJ9_Fe}*JwNTU_{KSW!^TEG4>;K2n~%+it_Rmzd~+SX3h+gJUZ`>S zE(4#gSJzp5D;&N#;2XvP6wx;JI(&T=-}M&XWe#5#_y#E%V&%Kj@mmhR*%5xXJLTSl za&Lei*NvZB<-X|fZ35qp5q!@$d~@2u`@)SD-)9cr%Q^TycKF)Br~Q1h#rL%XGUwGh z;M*;teuePUK4S86i|GPPILJ3JHqxpXz{Ig_&&?Q_XCG-h{g9?i|+x4 z?~5FK_c(mREWY1ae48D<{PEG_`?|wdX7N30@$HPylTg$1r6332j_|YR%Q%bg_ZHt_ z4qs6YzH*1J!s2_v;#=tO4a>oIvcosS;(OBKTkY_b=HUCb!#CgJd)ngrslzui2VbAV z*JSZMYwVki5{GX=4!$mj?w)oz%_+EDSdUNnS@9;fi@x5*FZ56&e-ee#v z!B-SO^S{oKzdL-dflu%If42CNI1hrFJ`-ODK6}5xG|JcEHwbaUXr8woey<5;q~#tQ z;iqY~UsZ(Pj9o%P%`+#$Pt$C^R7}5R@MD|s@z@C4fuokRFpc4C_}TaQ`{6es?G^Y? zy;S%#>2vt?>EOVq{dW=k?0OHyq2CsCCig=hBQTBq{$q#laumuvhl=uDCYsk>k{MyrYi1D$2*$s+|i$K^i7Wbq@zFO=ubQPGmie8qd)KHFF5*(j?OpALrIu7!fpN4PytGKuRHpm z9Q`dvf7{Xj?C6+$mL$CQERE&8@8};o`p1s`iKGAB(f{G-e4{j!g!ivd0ZMrPcJwbC z{Yyvx%F)xyg0UyOyo}2xVcuj6vn0F$PWm86-^tMn9DQd;AL8hRj$Y*GdpJ7ZBnu^B z-UPGtVNUwj9sL`QKHSmy##1PXj3+eg{{x)#10DS!M<3tqfc}6>5hJkqaW+&GaY@FqaW|+wT?c= z(fQ;$l!V78&!HsDlVe-Q!!=719-rKXk}!85TW@gEn;gB_(QznkNy2M&^u>Ot#J^M4=?SGadabN9PlpP!irbj=sv#`D7%Ngtx}g z&v*3iIQm*gzu3`vG9OC9p`3GXsT=gD>`36Ce!p(H$>EQgZtcrqMH!sE$qC<(96 z(XVxMo{WZ)@UD0C8yx-Tj(($~-|XnOI{NL7&XcxK65a+!|COWjL@Shp#}lbg5*|;K zLP>Z$5eg;Y@kA$-g!iDM^F$?-gvS$+P!b+bG(t&uzjyQ}9Q{d0f7;QXb@b;Q{Y6LT zC)!Z3|8R7Eq6`K54@c)Gx=<3{TaM08RG}n1ej*Ab;r-Ro-*xo&9Q|*O{=TDs;OH4D z?q~MSoA)<+hfUr7mpVE=m|2qW@UX%X?2jys<>Bzs zl7xrDDN7O_4ht+vWc;NO^N+MrsgH8>(T;wwqwA;bz?{fEtjC>VNdZnXRIr=0= zpX}&U9DS;zPjmEYN1yKK$2j`2jy}WDXFB?Ejy}uLYaIP}N4K94vcGDb^f`_`*U{%W z`U#Fc-_cKW^phO@WJh1%=-+bmQyjg{(HA;;y`wicdZVK^IeN;`n;m_TqqjJEtD~Rl z=!+e_&C%N(y~EKv9lguZPjmEcNAGd;UPoWz=t~`anWHav^c9YNx}%@r=qnxlOh-S< z(ZB8JXFK{ij=sv#&vo?Gj{aYczQ)ndbM*5a{Q^h-j-y}b=xZJQB1ga2(ZB2H>m2*NB_B_|H9F4bo38>+mP@+a`cZK{S)6d3_<1{ECTAgI{Gk2-yixQ z1g>O-IR72vq}z9R^6?IwkHDQ`A>P=r??6oFie7*)&7|LHcma(t-Cn_{+barnUg6{) zicpC2WxYanH~KxE&WPbgzb}2l9i-pyZG@c?=o`&AZ6n;xCx&69VS@spEf>=p45~@A32} zPS&B&d%}B3(gS^yr=O_4ZqlFhzLIqIS)uooSCj_;3G}DE5uy)(t92c* z3FZu*4HbHS@sdE*cYy|=sxl1?A?U!|l6^Y3l%xD5Tz-pS&>v&sKguPsA=&pSu- zApiT`<)V|j5VPYK&{=+!(LeU?%FsXY9)`}m|7Ftu?!74ap_=;rN%X-c{U6?kq6h8y zr?*Y?Vw3(aZ%-Bm;dNSw^KSm`1SQbF@Q#Mg{@xd%5Z^R#f~3=jb>{C%@OnEAp%9P3 z&XM%pjGpIT2A!r+M$h+uCh1U3{yQXnFOxpNe^&Hhehu=sIQ|1UaUgpj6nZ=P`$DHn zkiWn`QqsB36nZ=RHPBf<-uVl?A^wSy4%L*u5IWn(oqQqwQoO}U?{@TMq6hQ2$iEai z`42Yv_waw=_}}B`k3wg^apzd*4fWr0(m#UE_5|}|FMkIVME+{yKg=&-!6M{2*wK#` zowSAC*Zt!}561Hwe!J*2cZ+_6@jt+S0y_Jv!RQD2Z%8^+ z)2_cc`ahtvp4@2_;xBX)0|UL;=%f4{p|gG082warBd+7lVg8$3pzYYm1Y<3_92TPLn>~|BjP>IrMOR4)d>f(ruY$e+<(`gpwGhuoE_Bkb zbo8G==Xl?TP>8>ny$?F;eY4Rg`p-ar2AJQ!Ux?=?Z#en?=IEa~dII@W$h()Lk971S z9DTZ@FLd-aM_=yft3?mi-%9@)(Sz%+%6|Yl=hs~bh4>4sKRNk7$;dy|-({zuH9`Jq z{%Fwy{^|al4E-4Y4ABoY{Kxv2iayimGyR{6&dapWo8{jldeZ2}`%j6^+hn0v>%Rv* zTwmw-UrBnfKF#xoBO}K%xF65=Cz42n{eLWU<}XDk#Pgs==p%u-lPttv0`@rmXFK{j zN59(9Z+7(GI{GV){x?VeCv?{Da8tii`~ozF>(B9KJ}>n5X5&QIo`W2{($P$*S`(Nk85n+2qKrchg@AxS6I{op`*&o6F_cVVxbmCrwLi~l;97*5X=u7+- z=;T>$^kx1^=GyPwS&S_QXo#np{o#j^>{o6jj zH=YutpW_e5#wtu-H_a{tzh^eg-{Swooz1k zZt!n|PE(c9f9^jl{=xX%=)aty-|TOpGbGsG-Rkeki3?$!3ccI?kAy_ttyM8td>Aw$=4LEnZ#SlJ?G~p4PEm`--04?hXVGp)J+nwWrz} z+q*pdC3gNeYjbxhOnMf}BP^V`UEZLK}M9)19Jl2MPVZ%_3&YHjQ3 zsdN!e&N}?Ut5(lS>Htk$Ye#RYyQ97>!l8%V)zR3sA|tJ*rM^4WBo*t)NRrAL-sbMk zcKLy6_O?S}bq6c7q^GrGQC&x8M+3TfahkKKw=FDyz1WW*Ivu|-pGtLS(7dO@#=DYIt>gmswkn2G3~-YG1g zHc)f<)pew6cx)=wRoUHLzapHlTuj7dLFHnG>iUi*TuzHqvr|2tOS&6zQEM`DL?q`h zYc3AW+@4hMW6!lqu%3jBx$GFVne~mesmAV9uUE-+ZZa++T(h{K%t}XfYA0%UQmVVt zYvwv>mxuh5(DO6vJ20KYA+c<%bg*W&F6u~i-{14UyU?K92KPpA1pqT^D_%(B&3 z$5ppKx3D&0?ztUpo%KzVD$)GLx*1qggrKo*Zil6&Cx1s1hdo^lbR(COMctiCy6Ujj z@=6VRvY({zio|b{_q29~69iKV*RX3v=eZ_0s%a*s#+(_oOAo0l5AHp|h*q|7La*Sj zucO1+|CPc2RV#RB@G6_oa+3i+7T(#EYT{UUHTB(?8AR-N$xLWFu|!GI&S3YOo|)9W zqN~@8Mn*^B{>Xundt=6}lfA*)XVsKx(~qm0G-dW2Z_06#0}$Bej~{b*-K5zwj6JOc zX_IR!>uP3CpJ&q2N{}{XQkbMTNSSTtN-IHH&D^TGW2c;G2o*~T$_bNHk+O~p3QMO? zu?;n;_BoxrM5^k0QiqPK3wqO=(>bTRzNxhrQ^2~nvis8+w1cs5r)@Reomd5Ws+Kf2 z2SZz%I&Dd+qcP<*jxF!)EFZ`D%&wM&oj3NzIw&>WtxK^+f=en8nDK-39JS!)7F=;b zPG(CrHsbc*ipA8h;Jy>ZLa!dPxd?JJ^J)$XnbV2#!pRU`ep5PljdNVJk=AlBxwWUC zRLuR><`vQb={Y+))mGn&Jzf-FP}r#bT+c zc)AK)Bpeg2Y<9z>277xcE5@YCNe$_|T)Q%ENa5Pk*4ofr-@U?&TiTx-EUyPs2NSNY zvA(e-Rfo;5)nDRb?^^J|GuArW^scwuxP&KC=^;4(Wya>@nq_8L_cXosw+>u(;+1qMw zQ_#KDJ@m0gc2ZlazGF$S8w%D_+ro`lbK8=h79GiO+&L<}t?jAKC1FE#*wv0ZL2WPt zf?oD!bS}frVh*yI+k_;hJ8DrlWzaOun@(ntGNaNq)^ ztv%J-(ivVEBxcdPGUWQpA{Uo%(a+^!li;ew*ar2iYwqlBuMfK^s!-cM-EG^c8IyC@ z%FS$-;MS-=-*jzcvxuJR!6Fb|b8L>ak(A9MKHr<0X0y8(nafE(!{`Xg1%!_vs7g3I z^u>^8>=3cE_h+kXaX-Z`>FzeyOK?Qc!_8s3O)Q`>!y%nCX?jidl-cH!amFQDJEgXE z`Yi0za-_}lvIuKP64h8_$ZixG8)*-zu!+oUBm8O0s*Pg|8L(Z^x`ZJ0(XUrudBkr>UE~%RrnI`xxLNROT4O^8_zMe6ocBJwFxj@Z6mK6yl`V z4L|G)VdJwJ`cxyPt1o|cR3UcSh?8QUDt4Y>o4$p^DZuPs^01%yn6C(j?0S6dw*>X! z<0;xH#7VL530#DSc9Ri*P4GU5DgLQJ-eO?-P>KVwD{9ToD{oh3l6OL42t55-Ha&@vLR+n#ZJ8lBs|Zj@HZRyJb+TPlVwK- z(8tU@JYXm{9^jWh!{SkO5g$B2h?8PBZR`!|Y~~MqXd_OFeK;`la=w&Wm~AK;9K5em zBADD9C))WOh2k#__^H!QAx?^&bBT6dPsM^qAvSgE4)Pu#cG`%OVy~th&z;sGUL*Ko z#6J-HGsHi(Fkre*Or7PK6>(Ibn7IufmP@RC!v1Bs>k&`1u$cpLU7R3x+KBafNs0YB z#2gZTdCj?R2Bi8lG)LH&KuUdR)BTia>wpWA~kI4Tu`tYSA2z6rm^SK)_FT)CA zOggrU*OFqB7xqc8QGEF`J<`#KLYx$PF|g+4dsxKN5u3K3AN0==VyBHbDR$PQ2p3l| zVzyZ^hB=Lm4;B-yC&ovx@eyo%FsX~xN3ih`YIqM zW*5+hnBvQyA)**#r;Rvi{duAvbc0zli-yw!=?t(J7!5qO4=)ag>r;dd#&Tq&sMNx^ zkl8n;e}K6zQHu5t#@e(Um}PN&FTw?VBx2Jp;0eH{{(_6ehjxm8QBb*qfSH#>OkI zaD6k^rtlmtcIIPW`0^*8M~j^{;-uK8iM<%{e8H^GVhgjcwJl4eX&(uU%iH*jK};!v5tombXJOiXPGE?+FNm|5&%nj7 zvn>C|!I%yOE`psl;-uKw-9?84>w}paz^ntsmp^?q*E{SK;-uK=r+MwNSQXl7Bi6Fm zeqYwHZ;B6X#2M=wI%ikdcBIePU~J8ORxr$-|C69yrQ$;yaZ>CBv~$8jSPx=e2Zm>S zaD5woVD<;azdqnh0`t4CD8xyzQ!hF+sGH$Gj27VsCjU+dMH7O(MxkKkr=4r+4r0fx zIk=W#-yN7beTXUkjX{iQ;T3UGLlz+rFGJjE;o*YY5SIyN7PejYW))(mjac_)$B4Zb zu^FQqgMK(p?6eUl#m@Q_VS(ow&o(PI*CUL)7AgMC))>(lV#Y}9rf#JG-n17vFTmlPqlZ2C!GaM)BoO#LfD^ixong z6g$^1^00i}KA?>sg>$sTq-W}A9mneN`BTkAP&?`ct*)B>^6+!^LB2z1h}@OU~yihy~~VcEpA?<|<>BG(|=*;cbA1LN`x?xBLY9@2;Q z`NZgiI>ctK0xtj_Dt2OuzcFaLsT(^DLYx%4>B9#DpBmW7NgHue?55vv<2oI-x%2@( z6>+=ZZp3EYfSq&AtjWNvC&f<$F)vHzr4T1!XIZ8WGQLcv4{gLc?lZ+selw=cL7mxt z`qM_NpGi|Q2(c*__*`K2Gwq8J?<06W#1y?A%{l`g3bEGTj5X}Vu$lJCxSRl;oU{>Z{d>fI z4&t)}AA|Tp!RruTB)9_cAOsz+%fwC_v5wcJw1eb2#CHmQ0`aSYpTSg_hCm+*mn~x2 ze`{fW8-&{bB6t8U@DD8e-z}U#8vUPy&9way0LUo_w9`hM6uW85qk&JG_|Qh26uX&| z$ji2zAwJ(ne2!q+&lAjVYgj9oeehk&eudyI@Zor~KFoWKWv8y~{e|FPBfd>A`|_89 z*@XK9vu}TA;m0f=&N=@fI76O8AU|!yNwL2y_Rrz=j^Hhb|1OxHTZRDZ{_P;>-^-mv}iw<(*H3SAoqx!HsYk%%b@%6)g;e}4{gLrv5%zBO)x-S6(8D&lVTqO z-G4mr*(yG?5humY8yoBP2JD=R{>}Igl8@luYM}Ygzb(LA7mAJz@OZ)Wtr9#Rv01C( zL%x&6z83L9!SrtvO#d~4=~FJ4>uv#pj)l2*fRi?J?~waN1$5S@3-J&He^bz2=BJ%D z;-uJNGWH7?BlxoCsS!JE#JU%nC-#Mi&HNGnMzPaItp2THXWy8)By-~|v75O>f3X8% zf5rdhENDi6&H4k>G;`bB}Ds=!u}crr+R08*x(X6D+8V=a48Gj_;J z8?o+1&7NG!Er4D3_O-yQ4{gM{7d2xIdj)LlcmJuNZl5L(MEwGOy=0yW3BmQH6 zONr&{d5Vc&4(w)3{}5n~z5h~xP5tHTe%Ma`g}`1w{Ct2-pYtMyn6b0IKFH_I2y!+; z5jwsY@uh-qK+Hfpg_kHXIc^jDCgKf(Sq|56`mp@_1iy)RqhQwYcY;~>#{|ELc#~kZ z?^(fY_X~pGMEtVgGQ_V7W?%kAF#Gru!Q&ABw_r0SXe#T*u^J?pW$|x;X=hn`2xdL^ z5zKm)3Z8*@gkX-Eonv+lvp`@30>fHwfI6(5edxu?TkhPwPf>{lbc zN-*uz$;ol+6U_1XsbKn40Q*eO`en2q$|966UX)v(P?0=>a{{!*c7OrMl(w48p zP8+edaYy85-aQZ}1(S1zRnNV|P8+e-bAPdO+(!#O6!8SXQxP9+Vd`3E<{>@>@nXx~ zW#Jmu;TNbZ_Eo^N zuSa~5g}L78p71iU(?+cOy+QQ3Dd4|Od}t%qeNi9n=Y(86Y zpdjY6mDJhX%V6(?opsWCSqCu7qK#PZW%Q$c9pZ0W*wp`wp#JBJoi<`^V*#+X@e1*w zjab{r{dy4&a9S{SA0rU&mOxnu#G6o|+YuCRv~bA|f&CrC-w`}>C)^_}{F>#nMeyST zk#9hd_bB*}5!?ox68sk8Z(I0w3-fQSSs(hmDwug2$qPIG*7!ofC&7M=g|8EgF7P%9 zX5K02Jmw`nLGYo7+XQo5&K7(b;)^Z(bHS64_cIG8cMLdTGS70!&%e7JA@&-?{5xCP zIWCg~&qh2`a6969!9(D4s^GH`UnThGh;JACF5-s-KaKbgmYsi7%d+TGj=E}l53}$$ zEj-1-$5{9T!LMLEPZ7*MZxLL;1dwf5j-AcHVWqFvt|po2<9B)UctW+1_&RKvhB1H>lyNQ#LkaS#Yofj=YFx% zMy%@(w}#~5dl;qk{|gL|e~O(p;-uJ%<@(~aR)#cP!z;v28?mn8{0*`T#x>IOz>xj z$C2~YpzSY-oi<|K^S>>2ey_u^vbL;7Jb`&-ZR{00ZN%EoE5$wv7vaT%UqO5n^Ge^| zD|Xt5wa@vzAM6LNV-@t5`{QR~r;S+q{0qx}GX15`zk&SZp^aGk{7A8HKwM4#zXts< zOYF1}C&fO);_MI~+K832Pwc-%Ttk1kPrWL3+K6=x|5)r>5q~cDaP%{E)_FhRJOtum z#B<0gpXqiJJ8i`JnQpAu$#baSGV~3sS`HJ>`|7a^V|crN1kR{dv*oi<{v z{{s5RxHO9oZNxe*9b#u$3+XT8@@=uxMy!4KUCY0T{?dm(5Ib$eT89?;NFDfHC2R|A z#9D_t#Lhaj(O>HDkl1M>);e_2NBa4B@u7`a`(L<=t8Av=M9GmGt3e88SkAXd_OFeWKV`BR1u|I|QV!^*c{5`>ah|jlpt`a+K#LB}wTJBoQ{~oc^ zMy&qpET8Aahc;sMc~|ToA%0)*&4ci{Lh!#4Z?)_LWM5H$nBU{V`n-VnGM4pj(Et03 zoi^g6*!jIJ^gj~u1i{=dUBSFO$b}pucG`%OVn0Fbt%%nn&Hr2A-zIk2h?8RP7W+EH zrwcwC@%e(eS7I9L!+q4{g4ZMNBmesW|Gi?TjW{Xx$He|DVg~Yjj=jfq%=`g3V+j=cvsjMi1$OxKs*jH1Mzgklp-98v#%&c3xfBIs4J%3 ze5`nhSW z*l8oy&rN1beQfX{-$Y={5yWc*vtOA;pGy&cSMY(zOPzL(56`BFN5jtY zh_6BXBf;0f{u9B!LTs*C_}m2ibFs7ksWUIf`BuT~|GNbL2Jt~{!KKW@Q);>39`>>Or%O8FC4E!a*?;(EE!rVU6hu8b37A|91tQ5qY&%lQ^b3P+> zv;O1eR&KoD&lfi!Uq>i{okE-x`!T>pP59gfH$(>40-HH3_J=K>w=BHX!e0vB8Pz+C zbw*yUPt}6Se}Z7HPc4>xnc%gE&$sM95PUo0TP(ZjXYfA@+f$bPBMTpZ@>qu{h${rM z4)ZK*o=3oEDQwfE{xcCXFmDUu*@Ej4;}&b|#3x%Ax2Uwg*-IerTG%MQtb3in?0*sb0pj-r4@3V@r$5)Fj|KCRr%wA;#QzY?anA?VYcmhL^r4Mdug#>` z+5fu=_7D$Z-ko8D>@9ZMh?8P36+81DEcgh-1@QA_4LnNhv=QstI7RH`h-V2t3Goo- z-6be@f!JvyPKrGx_SuL#1@jEptgAzUyeq{{8*x(X|0VWr#NQQsHDU(#&!vcmvJSfj zJlBeyHsYk%Z?yb32;PX;tha?h-iO3a8*x(XW(`DHcfrQ{9Lwdnzh>cL)r3XtC2qtoH~&uc$eg*SrQ|y*IUpx#aIFfw@*qL?{9# zf0tnL{Xj5%%>Eoc^flKJCkdnqfq7{o*7wt@#m;qcfnYY7*NncahHNG;ZN&OMQoGp4 zGe+?52+CS2cG`&bopy6wh|enVp^aF5%>3UY4;FdP69v+CAwp8@Oe<;)>S*w(0XBVm z3oSA(HwBpgYoD9@HEuF{psJ_AUc?&?hV3uRnPw`2>k9oNk zGAQR%@#p=pMlk!^jLSkeLd-o8d1)iozqvF0A9O>ouYeD2P4t1C_3S`kS!N7@_5C-~ z|FEa~U*^C{%ioLzADThV6+3Oj`uD7iw|wYT2FQ{>#!rJih=c=pWHLiP8+e#Pxg^7^8qkD2c`iR zwFUQ_`GV^aFAmG(1Ee7;+So>*7F+D5l(uvxoeh@huwB|RmYrd@>};THKeUT8 z$gnN#;%6C3cj+w7WEggq?&7e&-#O>G_m`U>ad-Ue?&q@)oSg4@&htL+dCz;!dEfWk z_Yc_eUg)b_rTU2d4l|2ZEmVu3d%w{<)y1j%@qA1Z>Z+4+R_Q$hP1AWzg?M?Ap@f*l375 z55aa(N4EVw3g-5fz-$KC_PaaxfSx+C?e~8O_Iqd>>eJON)1UI|a@Sl~HVGZseskfz z;ksBxwkK;R{7sp9>d4kku0Xm3gV}o!QzD)$L9RleoY*;^D-kCUY+pA7J#}Q;*AE1JKVrA9LtT9= z=&2)HU2(r!{j>)g>d00t4j{^TW;_KLM zgML=vZHUu>xlVW82b(WJ$3S}uAEzYK|F;A4dgMXmQU5UFmcX=e`w05SpmS{|EbF%2 zSHFMO6?*Er5Nup>brS50ptrWlcEfd1N4B=QHt0Xk7{T6O@x`F0j%?%7o}m9RVmIc5 zeQ`MGsUzFIm;tu2;&iZ~j%+qbu#H9WP(Rd>tq&%Gp7rX+b8HLi-(9nSS)XO}6Uwt7 z*i%Qgb(Pa5)S6v=3wT$Ag|aven5tv9F^2ZYUs|gPuCF_2u6U z`t{KNVc-hHeMpz|#$p4AUEc(M8ayZH$sY_{hnQl&Yu^RtvJ|rYuAL9I`#BeYX+s^^ z?vrHOwfja~n}iK@WSfh2?GSp7qY2t`VhYlZK%dl+?fnVB%x@we2AA-_4k6obB23%w zCeG#=YR21?V5RiWavRgGFOltT|I#5HE2R77G ztPJ#9veBvBI!a#l%)cdH^y8MRpFuxg?#8shw6S;BxG@lV3b~LIaY3T_zWuniy2&eD zTMc?@>|H}wf=j;aZOHbnA!@A5ZW}lIF=`?7C148oCHY3guFeo%eGJ5 z{tA6W`;M!_pf5rNnLX=@*OL@y@2lBgE9H4T+hIhRg3L)Zv0U1SzKJ3u_t`M=qQBe2My&en54W2oF60xH|rjtM7IZ3|Xb2+)u za}}9`JfxQVfaf~$gPt46&7Pad4|!fpZuQ(oX2*ndk=q=`ddO+dJdKOmJr9tVdEP+o z@H|NF^t^@qgy&)Mlb*MeyFKqDukgH^ywdXsd6nk_C+jB_vwe=3fi_spL+qECCCPX3JNBzeGdIr#<8Rphmv`Akz3&J*g$ z>%E>sRrFcUoU4ys^t_n-InQn6mppfozu>utywUR-^2?qF$b+6Yki&6dkQ~PUEo6+D zCf48CMUAHmmkC!1vx(dF8k?yxn~rfCIgA_JwZ?0NSsgZ>u;|7ZYBRiDc$e^q@IhhM z2lJtToJ266qr&Hf3)lvxKmp+#oN-c^*MX+5C5N%DUbtD9zp0r`mvEo(fH1F%Rcu07=@GjvIGA~>p2ZfIcpA;SyK2J_!K}Z3{)F=sn zln5tkK)i-czg^INcHQzKj_+(^F3`&=yCA>1R}FT6pR_x+onVe-x1 z=MLfB!uy2}2_GYu`(=6GzA>LaHRdFRaYC5)>)Z7L@6R``5}qsEAlxe4Cd}`@Mz{F# z@Sc3*^}>U~L&Dq1xB6vykG=7T@Im3D!Y74Ch0hBY;8<-w`5tBCB)P(`w?ep9xL&xK zTlyjZw{T;u)s2=@zb5Z)|2Ob*wcJA`)&?-xEKe2jdDU+*d5v%;J> zF&lor)_6KOT<4YvR|(G*ZV+xI*ZTFg33m&x5neAmC_E(0Z`+#BUF2}xJtBNi_^9wn z;Zfo9!UZ@twCi`id)qiETp?Ub{*d3sdf{f_CBppHt<4Ga2@eQwB!{_zEyCM`cM9(j zJ|KLA9OfC03!fG~M-KB3`8bC)E)t$0TrONATqoQ}uJd)WShz#Dhdkfg^b2ng-Yh&U zyo0>JFUxQ58t)fABz#Qx6!~ty>{;O$&Yex45S}hvMy~hERte7)ZV+x2ZX@60m+cl_ zBfMUCPO!$=WSz-Q=X6s4_PZur|t`eRr+#uX4+$P*D zyheDv@SyOJ@OI%{!Xv^5g^voK6dontAKJe#znyIQ65*t9g>bEKy>PSe65%f4KH&j! zqc6`!;Vr`3gm((>5k4S%MEJPyX>yZa*E!*QTz{Lsi2Q)JnIT**Tq9g3+$g+QxI?%{ zxLO!sWs>!ga!p!i$AFgnNYhg*OOq z79JMfA-r37zwja9W5TC|&kFNLW!v_I@O0ra;VR*|!VSW$!fnFc!fS-r3l9np32ztP zB|IX0Q240uN#Rl9^TGv~!?SuQ5l#wM2-gbN3pWcd5$+Q16CM!WD7-~@oA6HIJ;Dcs zj|d+ZJ}rDsI3IJ9w(Uj2Gla{9YlQ2B8-*7OcL?_g_X}?j-Yh&UyhC`m@P6S#!pDS9 z37-|_%?-Bg3E}C&Wx`d$bA=m(TZP+%yM@;XuNNK^9unRzyi0gQ_@MAn;giCn!smqx zFz;*i!0-GRC&?{-%&ZWu6|N^Q@;1%FON6_G`-BI`t$x{!!dry53GWo%BYZ&k2>D^} z^SJP7;dA6iyiGplt&NL>X9$-I*N`9e%hm}u3NI!v_BI{DJ;MFuk9wO8!kdMMg?9+= z7Tzy>Ncb4}W8VKM;j_YgSl4V4!qbJzgsX(-l0WYKHwd>1w+VNXmw5X%!s~?xg@?$G zdHe0cyM#x`pYS#Zg^voKBro+gqr&Hf3-B9)*^~$;$!&hw3gKGedf{f_CFHbUwoABA zc!1pQZ8i#T5#A=eQ+SW?0pTOU$AwP|pA*hcX3J0{JVUr#xJI~6xKVhqaEEY@aKG>d z;myLs!aIa_3-1>`Bz#Qxl<-+$-qdULpAeodTqay4JXg3uxK+4KxLbIQ@Ot4v;UVGe z!n=e=gb$LJ#he@!J}EpZe4gCl?F;Zbm2ru1Qn*66R=8fcS$K(XmvEo(fbd4)EyCM` zcM9(jJ|KKV__*+C;d8?I`2Eecy-0Y5aJg`eaGh|Y@M7T(;U3|B;SIu@g@=WA2=5l& zFMLS&nD8m#v%)d_erVgC5S}hvCR`;vSGYmARk%&KTX>D|df`FgA>r-9yM#xC4+wbxL&wfc!_Wq`3b*lpYVY2M&T{O+k|%t?-4#A ze1zQP*L7U@wD39da&ME5-)xPGgl7ns3)hf;$1hta+$g+QxI?&y{G?yDUwDJ?X5nGs z9m2bX_X{5qJ|=uh_^faYzb#vN62jBT-M*Y1pzu-QljIeCTSkS?3m24UZTKBXyWcV?Tp?U5Trb=#yhON5xR1QbmuEnDqwp5t zZR8$rzf*XR@B!f?!pDVA3!fu@()-MxmE|Jg8N%hlHNthmjlzqCJA`|L`-L|MZx$XF z-XXkOct5$mY?O`CAH@EY>d z-e$e;)c$e@9d5yO@D121-r0^*DS#N({xZu{Tp5OB{ncnu zMEJPyY2kCi`5%Cvjowd@@C@N{^2^?)Mz~J6k^Dt(vsk!8xJS63{7=072I0-Z!{kA4 zvqN~d@P6S#`v8O`jC5AaC*ZwZiqn&B9B_ zU-$N1!hOO6!W+rI>+QD)Zxh}ryodaI-u{5_5#i&)r^!R!{+w`rbyi;_JcIlVZ(lB4 zBU~rkNdA3qzgW0KxJS63{7=382I0-Z!@@hr!`^-Q;cFevR;Y;X&ac@*jBn?ZUf+M}!ZOzvbubKm1DX0Q4{G9zMfWV7zhKdWjSsipv$XNP z)_Yp!H!hl2b>;j8_syGgC5&gU?poc~+m~*S&F<@5(-)iFk?u>!X1A|i9h<#u)ru9J zE1_HCJkDNDkCT-`7_u}dy%SX57_n`>8d@?o*~!K1@RM?^0O3-0_}Rtz!_e!5{xB7n z5w42?(-WxMtnjCr+HBI?~E{?($~HE9kq!$cT`o?x>j-NHZgoHRv>Mn z$vs8xR{M|kXVWXm!K+6~)1N9$eSTm1#lz{(o=C4hlU^53e=afgt-Lq$=Uuih_0rnZ z7k;)W{^IkopFGi?UQ;?e@WiW^9sXYbLR|2aZk^tAc~R*=OZwAm)6e&&`=g&-7{Pmy zQ~lLjr(b{Db2F<`8=4Z)Ur@O=^?ahZ{lK}l!|M(m>T5}T`q+wZHI%G9aK0jMM&rN_ z*Cl2S%v|?!obMZ}NF>TDubP+eZlnEN{Ehg$MCDb{K5}XL+4j`4iE9$^wwYgEkb1c~ zweglWDx+u*GvA8CH&*t@t5;V>^9q`#MStSekCYanR0~pTDx1bD9!VZln@^P^_Ok6AIRwelGeP^~Vl}(njl< zJb2=Uzy8_#;xGQ$g%=~#%R*KTs_E0rE8V*LmQ+Pv)bA5plBt2};binIlh_PwV)P98 zjjQ6R&!M4IPTiM!@o?(1CsOOrq}KiJ)l)}f87ba-=*L@s{laVU#QPHQk=g5h{-rDa z=r^Cl_Pvq+Na>WS+3VhlKk`ccwSD>J`4u%c@2aaz+!;lGOYgPOj(MWrdg0tB zi}zM(VKSx4LUX|4y~F#`*S;37Sa3M~o)hVkGwEyM>Fe0gXT1>po!i>@wTCZ1G%q<) zkzBAh8T}1)*q3Xk%=xPemD3XS(SM<4&aW=~<*zO@R3v}7uJ(n}tv|S>9$WPKeS4!{ zF}L>hS*bg({&|G$Dvf`;VehOt?7^_~-{k~67miubln9WCBFTKdhr;=M&V+sbX*G(3oYyf0mP zIGx(JH(4?D<@kwo@=W^uZ|1+1*EDtBWtE9|dS*-d`nBoz_NJ%%s_#urN7m(~d+VaV z=IR^cv#u^pm90&^cUG!2bz@8F`dM=l@mcfJColA$_;EDrp?Oy|O{*+O{4Dw<&Eu(= zSna-4>ETrBL@IeE_5QJK0>yG-b-!tA56T!%e|%s1V~5ipJ&|5~CjID%!_jN;Gt<6P zT72ke#Vr>~XS{yPg~~)U$`$lZ`*zn*OT~9iydG6=eeUJ>UGpmPE2p)j7qzEbdeaZB zO*cpXnReA%KgO)mKTAd@nQl+D^rjwaNiABNYHo~=UbuSs`~_Qokp9JmSyw+h=c5n( zI(jKpx;HuRs*g0yoq~-y%4H6|TA8Tcn@rS1|DMTs>fr*Ax38c*N6__y|@Z#t1KL#?N0o~vw0&+zU38*#MOwefGS8EQw3??v}_ zm0CHiJ$*y3Yd4$FZhr0S`#D$NXgB}K*Y^#L@!r(+EvXrsQq$Rdu3r8SIz{?FTzGbV z)0AIFUr)U>=a$O3d812{y~9(ZU$_cy$8L62A5Y!9X?S>F>ZZe~8&9Ol&ZK6Juj?2j zTiCRf>#nvQmK*Sw}F zZ1QeXDyRAJ<@tDJg8jm6Ph;M1qC2lfA8_5bo!y{(h?~U@j822bguZauN19el8z@h< z3|INyd$Im7)KYpls*ZmL|vroUY8xjJdJ&=U;j){zhIR zp15XY=DJ_M@S9Iw@keh>NjCSrng7UF3Jxt=_sH!9^QI(@R8IZq)ypG4N-e&+y5bv6 zQ!1x)MVJ5GtwReJRD7khV)G3()!kpY_xm^8P+i@<`A7M&1r=W_t@tXnU%U7FQ>ynx z)!kp6H}$?K`j4!lhUorzmHE*d3ND{Z=>H1UnnrYnyp&-w#=!X2jH z=`hUAbFyh`n;WklIh=m@M7s4%dQm+6Xmz^rjVZ6i-^zdNvNtck_Dq30gJ_z%;&MOc z)($PG_zn(UZpS@ReK|&G-~S(r&zn|>Q-vnq{aaE^DEho9Es5_m@nCnH8}nNH^cnc$ z;WBX~I_6c!_Tiv^)uE=O-+`~i558KRYQ!Qx_4yz-8dN5DPQs0iryfPo_oW^=oO<{~ zs`X52(b%?Hy!Uuw!M^lmS9~)1AKu4MJW*XbKUO+Fs*TX%{~NUhpR7zANEh!-W_CZu z_C)-OIni4#d(N0a{$27}I-LLGw3M^g%2}O?v1gB6e##W?P_jUFrS9dP!?d*%K?(BUUsmGVET)w)ivm>^wdpWLKvgx}UA836S zuc6Q&?8wF|6iS(oVnrdIevx!Zj^36tKlvg5ou*kHK6T2t4k3;(h``26UtdDt6%VhB z{xgEL7_c)En@2b8#o^HzX8_=J>L>ep*?vDV%jedJ()@B>jAVS^UV$m z0)G)qVIGBXRPN&zFtfu=XD*NYo}lOTDT~czdJwKap#8H56za*miY!Io4;@zp4iml3 z1}e7?BdnMEgp(xn^J4@G{g8Q8N{|v$W{2XlMJO;KpIRmCxIT_O@j7WBR-kfnxUgVA?ZgJ<{IB z1hZlMZu+bY>%ASZm9q{^u`;~Va{ibK~W}>olQr*ij%%{6&H@7T|&9=mX zr%(8ErX&zRfP)j@0Jxg(fll5Bmy`6mx zE7HqapY7?)7RoXgb@s6ykbmFGm7Tp=18n8eE~v8_E)uqVsXsn0UD4UswW?!j=bA}a zjWt1iJzag429`CrXof90Ve`r^e~E1KlGFaO%bUTN7C1h8TpP@qWLsfY zN3XWu$G5{t*u`d#HJYfIxqW|Wvs_nJuJP??tgi{}a-B`o+%8_OF{^~DRh);PjUi!a zce=f^JEQR@zBx+FJumeRGImt?>dmMuIpMUvuT->FjC)vueE^A`-c>w{nylb)4|n!; zSy-SZXF(oaC^!&K%I@At+NCFH_w*#~_>(ZtA}_TaJR_To-RqOI`|C;CO~pzlv))@K zX?Oo5?H-$?9p8zL|Cg-4Z%xwf-%Zl)%}Lr_gVV3cl<$s7+I@VIcF$kJj%A{(3wAsc zrR4S_vwI14JafC0-Ipg=uU%!)zx7M%jH&0nX?&mC{a~K0GLOGBzLMjQ@5lQB^d{!x z8#(@X@5@0L(ckq5=I@6&{+hAQt!H&tl z&9R#cJG%m7zODCk&U$&z#(Ly)y?D$ev)*EqTiex9IIt@;m}UG;g`N4Pp7&oIMNEGw z1m>}xZ_V+y3zyUrmG7n;f4uL($~RN|wdD9~#sFtmOEAlnsVT=F?_sd=@pn@z-zRhY zB`?oj8LB_Nmr%Et_YUlW0k`*N@wX|*-zoUBD@678a*jX#uFv*Kf3w8jALaNfKxdg~ zdw1mcDpbe7}}mIjX;3 z=J-o~(7y|x{?G+7{)*sO+aKS##deo$KNq2-#qbm4aO7JABHz4W$-sGFeBzsZp^W(zKGpjId*lhP6&6;{Oep_ST75z~%g4eT(aWaLHIp=vT>{yrc4S;n8jZqO2l&F-_X z)ADfVA4UHC2n!LI$9DR)9Dff$$@h$!n7>Uq{*J;Q?dY!o!Tenf#*mPae?TPj>E1IZ2gG)2gA-7e;dm2%~n~^{K4#^k~gL&(;tuUS;=!pXie+LPJ13n zvy$hIgqoh2O@Q*;9Xwf8o;#9gnn!}Hj@}<;Ci9((`lD3v$wT=cLE(wY)Jcf&R4xF)a-e zp7LVSpj_HUZNHklF+GX)I2elLxmJ}`?K*rbMwQRz9yRh<+*v;tSZm_rl4ug1!pDC&HZb-KAQmLxi1T5Re5ei&~!s) z9HEx|5W`GHn0`+t<@0%tYr=eV(~K~EM<(U%wM5K+C@25noOC)T{Up-dtLqSo(Vt() z$={Td{wC682!1wxhC9bI6R!UUmO#w(4|CE7LYnnZj5EI@h-vqEmwtcjuMkg1*yqwI z_gw>^6WYbm)uJaVE)6e^LLZ zE`4h(d|nJGuU{MNE&WnXdJt*W2hTZ+G2VPVC;z)hvwk_!6l471b*>55`wOJ=5wpz2 zusS=&{H?my*rDGuAdH|3fjpA3d9oGlQi|pXylt^y=le zkyfngAg$7cStU4`)InZ=>Y{l}G8AWerXKdlB z-esL1>+D?>n|LzyzSZ;l8apwU9%k6M@S?7C_3d|X5|Xq0wp?b8bw#?nd)2ZSemYpW zY(-D(ajr&ZTx}L}>}=}T)S|vsy`65_->fH^JDo^p_G2eeQJC&dYJ1%dGyD>ADoZ!@Qjmgw?jmfa3CYmxuQ+B^d^P36$w)9D)$)^$bA|~^D z0qh&(YVchMWd6eZVc}=PvY$cRADBKr7x+tvDN#6-zXGNo3b`=o*=Nk=Pr$UHj%+sU z^VFY0d`Ou6Gvdh?j$9b@l|j#6 z*Exnnyf}f}5%koN3xoc*gP!%qaWlG$);RwRdg{o9LBB}sd2F)x)wTycb>zZu>hn8d zpQL^8^O>Nhj%@xv8}z(upiJyH1wD0Sv*$N0SXZe+whxO49b!4;QZnHY!XK86e9oe=q z74+OjuHLqh-*u-wb!6MdDzRrjp$+@T2LtoYjyn3`g&~B;4BFHME)4p5q@&-)AIPF$ zLmjy==o^qWoAzKs9ocLe#b#x&p^j`ek0M=ybPwY0z`cl{4&0A;W?=Sdp4ro$JX@IE z$@IWjRL8%*j;J>-tnYU${N!sUsK8#~(-+0{yU@1qji5@dx6T zz0NcLM(j|Kr3fW?-qvj|n6e6idM@{)zy}d05bT}8bwN)Zx$tiMfw11W?2i$1T!_Nu zh1(YBsUsH#{Sq+kcQZz?_YprH^wg0H>+uJ|qDOTkKi9}*saua=^*IAZv1JpK|pdY#t0Y)RE1` z)hEhB`7{FkP)D|M0yEzT`5L$+Tn@Q1)G;^azdsEd02ke-ZTi86((xf&VnFzsi&?MVWPTS20d-KIN9pW?ccC1tAh=7WV6w_ z-5zYHBU{~mH|R5cqyY*DuP3-()-Aa(=z*Ez!u{ZqE2#1FIksM{=T9JyHq?>L2Cg&j z&t)H^4Rz$gCj5c8ZLD+Xwu?5IZ47$d#&5%vHq?=A8-cNsEBzf?h#a%ex^`RW?*jZ2 z>cRg8@dpC4zq;`jdNRe{uetzCdkVR**d1vb@9HY>reH%I*=$^0wLk%J{Rr!#&h?|9KZ0}#l*bS+4E%G%6nif%O=&|R7e46F zw_7$+$WjE_u$*K&H|q>~`gdi1004Osf%epq3xl4kvG*807i_2_7q;RL#O>cZJ^vF# z^g|ul&hfq$^gm&YVCNgJ1U+?RJKtd2pdZ?Ed^h{=2R(IUv;RTR(|!hmouBLrdg{n_ zev$;+xyL~;*F_!K&OLyc<6SYB-%p^B?Ra-RnEKg>T{~fef|MgrPaU~1=z*DcIAZt5 zN~TeRe1?Y|x<7WDb?d##>&LAZ`U%$y{eJTEX5Ym8P-*{^#hqlD3 zk3t)0BZqz6MGpI@haC3B8gi(^0dlCT4dk$mz|3}`S!dX7OE}*s6TK^c(9adUD|67d zioQ*_TiBH?*smA;pzx6JcHv#ZBf{*DQP?j>g-;5P3ZEBt-#!e>^4h}uB!w%4YlZpy zzJ1fNS=fF1FtiQ#?Zd!*VlzNygM@4p=5?a!c|90~cC}O3efu!z-M0@zdpkm#z{iD8 z3!fv0Hkps@Hs*YtvHSL6fiIi;_F>=}+61l><~6*vXZP*H(6&27-$TCA`*hzv4D7yr z7{bfJ(fe#70ZyyG|`}Servtolu@XWFaGCKjpefuzQndqy8-M0^e zjr;at;8w9|BZvOWdkl=-w-1AUz32zYp^v}qw+}<#AEABVgTmv!eOTnTi}%XdSTXL~ zhhf|(L3^|@Bq{u^efuzsOK_Jq$IP8S<#& z?xr1@gp-TeU58wD_e{hz-dm*=kB z72&XU(fbX#pS0avtWDnqyUDca`U%#{{$OIeg>w$Z%-e-T8Db9QJVY~(hlf@Kme2ag z{oslE$YaoJA6bF)M15ox^z>))2LRU$g2M8C2Wc%I@B3qUSUw)6t$h7pTLu{W4ni3r zh~+(lwE8=V1nuaL;}7%bpJR;n;n$J=EP{#oW6Y*(!sFKn54Ol6>@jJf{LH88Pr+a|ua3U1S!utxiMs5?ka4}j)I5lw=?ogfW zeXCY4eWJ533~f9!mRb;I*j3b{}m+4TzZjJZ#Yrwij(%+8g|dY|p-^9R>UjiJ?d zgjd5%Vhmlv9fn|I=rwLnLMO6mYqNXCy5&T=IWgnScp`qhV%_2NLub+tzL6JCFG^PR zy_Nq+-erg8u6yL0Q=0Mj?kPR^`^)^wsQ+Y3x}iONUvK&&(O+E{;j{A%?Wy~EQy)2B zI&VtTWtGv2#ABEH=dJPB^a(siJ*{c#V^>9gN#ob}*tL6}yfX13IwPN(UWDT8OSK$M zJ#-?~d?xka*ypCL*uKmtB+86(zM1z{{0$T*k+RZXhiQ%z?5`UUctqqF z_H_gbTR)k*o%$h!YXiTEm|{JIzRYJkm_B<$K9_wCf$fyM34!94oy1`dZF+v^>bu*Q z)#ITzwCqQh_jU1ZfXu^h8H0O#)6W>Z%~3J4Os>=Hfiq*0>-OC{jK*$2y>J+~*zu8L z4P`FEWbAnSc{{r>|XJKipb4forn>{d^(UTZVR${cf63R8a`L-0w&Jl?Pl zxV;?fzKWpRaSCZ`N5G7~F9}nB9EIJEnEqI9^S293e^m&S=a69AG+`dYzedob!Vr`b z9l!rP*dubnYj^8!RL~dYCkVC=ncjdy3i}1i$L+N89Ru4kz}QJ71_?nd?`KG>zhU^J z9sThbZvL3IeFlv6p@aU45XAg3Mpi~zu@kDGEQZF)$L->gQ2nh(B|V*4YHZm>JqGhK zt=y}}A8)Nxmaiq_`n3d1YfUiCGq$X}^ZNp)xqZOxeFdQy<$Z6~o!h@<9I zCZy?aEkZF`WM@u3Z$p}Ju=9G}YZFYew?vJx54j6@b5h1v&H$FHM;X|^c>cjL-u<=$ z=GgzCpeN54zE>ESnGbn1=&2(Y@}L5F9Krl^FWKBkZ_ramE@Y#H@OVLc9+%i}ZEj?J z&{Ib)409%In>HWv#b84nxsVke#O7_>c7^6dwsJOtOQ7fawVaECo;tFXvn}XZc2`bz z6v*!&&<}Ow!l2i3_5~a2$YaWhZKpV&p`1+HIiK?rY&d?HzD&4E*c~r|eS_#*$-#e{ zaJTRpVb;0XqZ#$A>J2BFNxX^jQtzgmb6a>h<)yFJ53!=ry=xHh*OZyDq@&b@3nR%` zZT#ROyrd`@yAvmvnfKXP-s9I?mdMM=#C86UQ+QKcG2VA`{=x_|4SN&YfhW7a=8{UI@$#+ojzQ((Gs*6{v@*!z^Lqt}8cXwxc zpQ zW(&sYbGBhjzHG%9y_9#1e$1BO1+;kI?DD>r&d2Xw^%P%1`+vdt{cUI{5du!XocM7t zBoML1Q64~;j9teh?bc4xZp$R?zB@^~A6>$Z+ekTxK(;f#+>4;zf8Eg8 zs0YmWn+79m6VwliKb|6)zgu(saX;Fq$mPt(O*#H{!QXo1rw};0o4@;W{2fK!MBBSC z$6xKVZ2fWW%>3~=2>j2~-&t@9!NkhUcU83@edcKif(_@9wKLxR7Hn;8CEfciTJf3!=%@O=p8k8Q&G8h!kC z97_MfoFHw;m`7QYhAU&SIw)8-R?j?L&%M6ffI{;gFcb4<>51a;&wa6HWo7(xUEGSS z!}B#tb6&Bhxpz^i}SjJ)jfX&PQPTn}bk{k>nA?Cd_}#5{Q{@N67lW#@(lE zCd}^-`8?|?MyX!1OvKFpeFQG=^RIKigCOaI`R+jxIn^3}hJ~vfo`m_+p*0UZ)%jHC z-MyW7{>W=W_SmzN@T8D?LI?)g)03y&^7WnFo&Ncy>=+yLH;S_XbKg;-&>VQY;Jwila-lSnh=T}( z%kcgJ3b`=oIVMogvuhZtxT7FE#!*ilxiIK~vFQE$3mt;p zpG__ddgetb{$-nhP3Sh{!k}kfG?RaWO&EloP0%whLLE|E*+RXs-PnCX)5+W@ND{&B z?cvAfeB+b5+4q12K8!#su?5v1w6@xIoZxWBZaFt&9v{Y3i%CYyefv|87BL`*?%%w^W`7me5Z7{>*kW*x~cyC zrNgUkE;-u&{RR8K-hZa9`pYlo#rnUWL>$HX|6(DQ`5`8k^2Sasp+GC*r8mY}Zo<2q z-MuUBozFkr7f+qLP|G4*b1heJ&3kUT`?~&DtABXB|7=y+moLM1^`D^Q!*sl_KwkG8 z{ET}I^hEmV_F^~RR^5J$i|<@8b@a}bsiPa?35tKtIM>ICs`3Mv)Pv#+j`b7wAcGPo-Ws|4A2Z2I8 znK6BGh@~)1rhn?6N1#wo=1D01d>(;9J%w>p?&A-Fxh!u-u`<+wt<3j;DO`qZ`j1cv zp`OgsXs(OfLZP0*y5YJQ^YV-9V%Mj<6C2vo4~1o*AI22(Lw+YVEEE0M{+r0pJGG&| zQiO1Xny_r@b29e-%iBAN3BY?+w0CycSzu=R&uQIxUq;38@V*C^!t`mG_4CT{mV8Vb zzZ>26;CTB?*4r+X?zp>8rx&rJ%z}^h;tjeJX5(3MuJR%ayWEQ}9Lk&SSlFF@VuH8U zx_q~IFnF7p$+6X%of4Fa%__%K?KrisCa!BX4KuaiYj(W;;`X6h#xIhsld)^(y2e)N zMe?%_#yjWkkO~{S5n7$^-ef4RHaWOir}W2ND1z7kz-z_H*ws(c?xT~mTRBNPUUN>S zeA^~zw{Mbme>q9J3zM|tJ4`0C9ej3wGImQZVMia7&R}Qff4S|z?4AVhU~nlrK4;El zv|ZW3mg}>2)dM4A>Kk$7=XJ>}Fi#ek$7{5gbNr1!X9rYZ#>a*nf2}yO4kDlacv4~h zY;MrX$Lk+E_`)pX?;AP(PQqUq^69T6*s*;7GN*i;pPR_vt{i^_aAN*=4R7W9cRBv} zT#OymVU{W1FLUe~FJkvUa_m}>=DJLbuf&8m5u@$ak)6JWu`_;=V{dM-A*c5Yu%lSrp> z(qp&s|Gv3s&fsO`fBzkArCDd7JlsK|lIL1*R+EPos5QiP!@k7$IfP;mnrlX=XP-A= z`c_LIW_lq4k5~626yskrViV?n41sNw7huKk{`i>mweEf>sNC35jJpKaGXddPQjGg4 zzUorm2j7|Y&&Q;1i0ut&j*Z0_@qRic{XX|zBdWZ=WGpXKfKR7zVD9Z*xhgj1q`CW< zy};3X=^>T4(u$d1vbe`C=1ApSt$R>W*)QE1{dK~EjIFzD|J`uT`?+>6Ta2XZ$8 z*F_zh}?;swI@3cKy)zz^YQNqg$Z zg+b5bwE3ZmT!*+K@I8oKJwR`hA6AD~(k2goAY`jUrla8B*>I&0XA|^H+xsybBQuy~ z=ImXaW4#piXPbAQPBvpQ>W$*+Jg~C~T!uWesS;)#n!Z7p``h$w!rj8$XJ)frcu;sq zcsn_4%P!#&;e*0Qg-;5P3ZEBt^Zmg;+mY2(QkdthrmrQ3I^_AMakDVb`|Nj#F5y1m z0rF)i2xO!17U6B=aN@L6c#rS_GIu!Si12aY(`24(K+Xy0W4lf7p34q4?zwC>I*5BN zJ8%u{1J?<==d#0L(mj_QxPvx<-E-M&Xb|^Yc3}5hc3=)_E7E;kHj93#IrM6LXgulU z(sSrbP!=3)Gjr(I;^>AsVRw_}Q0d}$BLC5EPP=zzVR?1(w&8}ng|QeumzeLSies2> zPSj`boAkFtzN=Hmp@F&DippK&dO0_Od5lXDLIZN6ERs&lo}(4*7*p6tOvh!})9H)M z(ToxrlGD=<^GguuhxQa_Gl{7}9&$UDKe4=T=`w%!n%yjz$;eI&QpE>s{Q__M)M#dD zbDN!G%4CJFx46lrT-Wd3w9%xWk>Rlq-7vHFm{zg9&tuYL?3P}_jy@=z2;^|+34MV% zUd--EB)OL_WykY{-11qAq(|G19%1S$Fs8A~vt@C3qaD-k7=YM(@Hk^F6PWS$1!3xI z;iL*N{c#90e}4eh@-0T%S}`!=Z&;Xm{@zxGnEp6?nZJJpra!KW!tG-3F<~CV4-vRs zCYu1YmOxA!%D+c2X8I=x)&rTgyhC7?!DJ(xTmA7q2rJ(Suq{K|!w5r!AeQ$A(&}#u z{Lzlv%WGWomwUat5)S?g@=eSiV~!9e2dBhhNho=b2QGb`zaqrB*Sn{&qd#m5AvS-a z8i(WWEeZ#%U^)KYs}SXJw*$xvWHN=f!9#tY-?_dNFE=SJ>PK+#kG` z=@!H$tjAbppbKMQChc-$AjN$;Ef3s_NqOA8gFAy3xC