#ifndef _WIN_USER_SETTINGS_H_
#define _WIN_USER_SETTINGS_H_

/* Verify this is Windows */
#ifndef _WIN32
#error This user_settings.h header is only designed for Windows
#endif

// New for Curl build 7/13/2021
// 10/03/2021 - Curl failing on some sites suddenly. 
#define OPENSSL_EXTRA
#define WOLFSSL_DES_ECB				// for wolfSSL_DES_ecb_encrypt() used by curl

// Add 10/03/2021
#define WOLFSSL_ALLOW_NO_CN_IN_SAN	// per wolf 
#define WOLFSSL_ALT_CERT_CHAINS		// test
#define WOLFSSL_ALT_NAMES			// test

// Logging in debug
#define WOLFSSL_DEBUG

// Per: https://www.wolfssl.com/building-wolfssl-tls-1-3-windows/ 
//  Note TLSv1.3 never seems to be used - needs explicit call ??
#define WOLFSSL_TLS13
#define HAVE_TLS_EXTENSIONS
#define HAVE_SUPPORTED_CURVES
#define HAVE_ECC
#define HAVE_HKDF
#define HAVE_FFDHE_8192 
#define WC_RSA_PSS

// Lib only
//#define WOLFSSL_LIB - defined in project settings

// Enables blinding mode, to prevent timing attacks
#define WC_RSA_BLINDING
#define NO_MULTIBYTE_PRINT

#define WOLFSSL_RIPEMD
#define NO_PSK
#define HAVE_EXTENDED_MASTER
#define WOLFSSL_SNIFFER
#define HAVE_SECURE_RENEGOTIATION

#define HAVE_AESGCM
#define WOLFSSL_SHA384
#define WOLFSSL_SHA512

#define HAVE_SUPPORTED_CURVES
#define HAVE_TLS_EXTENSIONS

#define HAVE_ECC
#define ECC_SHAMIR
#define ECC_TIMING_RESISTANT

// Optional Performance Speedups:
//  Single Precision Support for RSA/DH 1024/2048/3072 and ECC P-256
#define WOLFSSL_SP
#define WOLFSSL_HAVE_SP_ECC
#define WOLFSSL_HAVE_SP_DH
#define WOLFSSL_HAVE_SP_RSA

// From wolf_ssl_options.h in curl project
#define FP_MAX_BITS 16384
#define TFM_TIMING_RESISTANT
#define WOLFSSL_STATIC_DH
#define WOLFSSL_STATIC_RSA
//#define OPENSSL_EXTRA			// above
#define TFM_TIMING_RESISTANT
//#define ECC_TIMING_RESISTANT	// above
#define WC_RSA_BLINDING
#define HAVE_AESGCM
#define WOLFSSL_RIPEMD
//#define WOLFSSL_SHA512			// above
//#define WOLFSSL_SHA384			// above
#define SESSION_CERTS
#define WOLFSSL_CERT_GEN
//#define HAVE_ECC				// above
#define TFM_ECC256
//#define ECC_SHAMIR				// above
#define WOLFSSL_ALLOW_SSLV3
#define NO_HC128
#define NO_RABBIT
#define HAVE_POLY1305
#define HAVE_ONE_TIME_AUTH
#define HAVE_CHACHA
#define HAVE_HASHDRBG
//#define HAVE_TLS_EXTENSIONS	// above
#define HAVE_SNI
#define HAVE_ALPN
//#define HAVE_SUPPORTED_CURVES	// above
#define HAVE_EXTENDED_MASTER
#define WOLFSSL_TEST_CERT
#define NO_PSK
#define NO_MD4
#define USE_FAST_MATH
#define WC_NO_ASYNC_THREADING


/* FIPS not used
 
/ * Configurations * /
#if defined(HAVE_FIPS)
    / * FIPS * /
    #define OPENSSL_EXTRA
    #define HAVE_THREAD_LS
    #define WOLFSSL_KEY_GEN
    #define HAVE_AESGCM
    #define HAVE_HASHDRBG
    #define WOLFSSL_SHA384
    #define WOLFSSL_SHA512
    #define NO_PSK
    #define NO_HC128
    #define NO_RC4
    #define NO_RABBIT
    #define NO_DSA
    #define NO_MD4

    #define GCM_NONCE_MID_SZ 12
#else
    / * Enables blinding mode, to prevent timing attacks * /
    #define WC_RSA_BLINDING
    #define NO_MULTIBYTE_PRINT

    #if defined(WOLFSSL_LIB)
        / * The lib * /
        #define OPENSSL_EXTRA
        #define WOLFSSL_RIPEMD
        #define NO_PSK
        #define HAVE_EXTENDED_MASTER
        #define WOLFSSL_SNIFFER
        #define HAVE_SECURE_RENEGOTIATION

        #define HAVE_AESGCM
        #define WOLFSSL_SHA384
        #define WOLFSSL_SHA512

        #define HAVE_SUPPORTED_CURVES
        #define HAVE_TLS_EXTENSIONS

        #define HAVE_ECC
        #define ECC_SHAMIR
        #define ECC_TIMING_RESISTANT

        / * Optional Performance Speedups * /
        #if 0
            / * AESNI on x64 * /
            #ifdef _WIN64
                #define HAVE_INTEL_RDSEED
                #define WOLFSSL_AESNI
            #endif

            / * Single Precision Support for RSA/DH 1024/2048/3072 and ECC P-256 * /
            #define WOLFSSL_SP
            #define WOLFSSL_HAVE_SP_ECC
            #define WOLFSSL_HAVE_SP_DH
            #define WOLFSSL_HAVE_SP_RSA
        #endif

    #else
        / * The servers and clients * /
        #define OPENSSL_EXTRA
        #define NO_PSK
    #endif
#endif / * HAVE_FIPS * /
*/

#endif /* _WIN_USER_SETTINGS_H_ */

