diff --git a/IDE/VisualDSP/include.am b/IDE/VisualDSP/include.am new file mode 100644 index 000000000..a2d6f62e2 --- /dev/null +++ b/IDE/VisualDSP/include.am @@ -0,0 +1,6 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root + +EXTRA_DIST+= IDE/VisualDSP/user_settings.h +EXTRA_DIST+= IDE/VisualDSP/wolf_tasks.c diff --git a/IDE/VisualDSP/user_settings.h b/IDE/VisualDSP/user_settings.h new file mode 100644 index 000000000..f0fa67553 --- /dev/null +++ b/IDE/VisualDSP/user_settings.h @@ -0,0 +1,752 @@ +/* user_settings.h + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* Custom wolfSSL user settings for FIPS VALIDATION START */ + +#ifndef WOLFSSL_USER_SETTINGS_H +#define WOLFSSL_USER_SETTINGS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "fusioncfg.h" + +/* Previously was included in ssl.c but for the sake of portability and existing + * projects, moved to IDE specific user_settings.h (stdarg.h include) + */ +#include + +/* ------------------------------------------------------------------------- */ +/* Platform */ +/* ------------------------------------------------------------------------- */ +#undef WOLFSSL_GENERAL_ALIGNMENT +#define WOLFSSL_GENERAL_ALIGNMENT 4 + +#undef SINGLE_THREADED +#define SINGLE_THREADED + +#undef WOLFSSL_SMALL_STACK +//#define WOLFSSL_SMALL_STACK + +#undef WOLFSSL_USER_IO +// #define WOLFSSL_USER_IO + +#define HAVE_PKCS8 + +/* ------------------------------------------------------------------------- */ +/* Math Configuration */ +/* ------------------------------------------------------------------------- */ +#undef SIZEOF_LONG_LONG +#define SIZEOF_LONG_LONG 8 + +#undef USE_FAST_MATH +#if 1 + #define USE_FAST_MATH + + #undef TFM_TIMING_RESISTANT + #define TFM_TIMING_RESISTANT + + /* Optimizations */ + //#define TFM_ARM +#endif + +/* Wolf Single Precision Math */ +#undef WOLFSSL_SP +#if 0 + #define WOLFSSL_SP + //#define WOLFSSL_SP_SMALL /* use smaller version of code */ + #define WOLFSSL_HAVE_SP_RSA + #define WOLFSSL_HAVE_SP_DH + #define WOLFSSL_HAVE_SP_ECC + #define WOLFSSL_SP_CACHE_RESISTANT + //#define WOLFSSL_SP_MATH /* only SP math - eliminates fast math code */ + + /* 64 or 32 bit version */ + //#define WOLFSSL_SP_ASM /* required if using the ASM versions */ + //#define WOLFSSL_SP_ARM32_ASM + //#define WOLFSSL_SP_ARM64_ASM +#endif + +/* ------------------------------------------------------------------------- */ +/* FIPS - Requires eval or license from wolfSSL */ +/* ------------------------------------------------------------------------- */ +#undef HAVE_FIPS +#if 1 + #define HAVE_FIPS + + #undef HAVE_FIPS_VERSION + #define HAVE_FIPS_VERSION 2 + + #ifdef SINGLE_THREADED + #undef NO_THREAD_LS + #define NO_THREAD_LS + #endif + + #define NO_ATTRIBUTE_CONSTRUCTOR /* Required on ADSP BLACKFIN where memory + * is zeroized after + * __attribute__((constructor)) and before + * main(); + */ +#endif + + +/* ------------------------------------------------------------------------- */ +/* Crypto */ +/* ------------------------------------------------------------------------- */ +/* RSA */ +#undef NO_RSA +#if 1 + #ifdef USE_FAST_MATH + /* Maximum math bits (Max RSA key bits * 2) */ + #undef FP_MAX_BITS + #define FP_MAX_BITS 8192 + #endif + + /* half as much memory but twice as slow */ + #undef RSA_LOW_MEM + //#define RSA_LOW_MEM + + /* Enables blinding mode, to prevent timing attacks */ + #if 1 + #undef WC_RSA_BLINDING + #define WC_RSA_BLINDING + #else + #undef WC_NO_HARDEN + #define WC_NO_HARDEN + #endif + + /* RSA PSS Support */ + #if 1 + #define WC_RSA_PSS + #endif + + #if 1 + #define WC_RSA_NO_PADDING + #endif +#else + #define NO_RSA +#endif + +/* ECC */ +#undef HAVE_ECC +#if 1 + #define HAVE_ECC + + /* Manually define enabled curves */ + #undef ECC_USER_CURVES + //#define ECC_USER_CURVES + + #ifdef ECC_USER_CURVES + /* Manual Curve Selection */ + //#define HAVE_ECC192 + //#define HAVE_ECC224 + #undef NO_ECC256 + //#define HAVE_ECC384 + //#define HAVE_ECC521 + #endif + + /* Fixed point cache (speeds repeated operations against same private key) */ + #undef FP_ECC + //#define FP_ECC + #ifdef FP_ECC + /* Bits / Entries */ + #undef FP_ENTRIES + #define FP_ENTRIES 2 + #undef FP_LUT + #define FP_LUT 4 + #endif + + /* Optional ECC calculation method */ + /* Note: doubles heap usage, but slightly faster */ + #undef ECC_SHAMIR + #define ECC_SHAMIR + + /* Reduces heap usage, but slower */ + #undef ECC_TIMING_RESISTANT + #define ECC_TIMING_RESISTANT + + /* Enable cofactor support */ + #ifdef HAVE_FIPS + #undef HAVE_ECC_CDH + #define HAVE_ECC_CDH + + #define NO_STRICT_ECDSA_LEN + #endif + + /* Validate import */ + #ifdef HAVE_FIPS + #undef WOLFSSL_VALIDATE_ECC_IMPORT + #define WOLFSSL_VALIDATE_ECC_IMPORT + #endif + + /* Compressed Key Support */ + #undef HAVE_COMP_KEY + //#define HAVE_COMP_KEY + + /* Use alternate ECC size for ECC math */ + #ifdef USE_FAST_MATH + #ifdef NO_RSA + /* Custom fastmath size if not using RSA */ + /* MAX = ROUND32(ECC BITS 256) + SIZE_OF_MP_DIGIT(32) */ + #undef FP_MAX_BITS + #define FP_MAX_BITS (256 + 32) + #else + #undef ALT_ECC_SIZE + #define ALT_ECC_SIZE + #endif + + /* Speedups specific to curve */ + #ifndef NO_ECC256 + #undef TFM_ECC256 + #define TFM_ECC256 + #endif + #endif +#endif + +/* DH */ +#undef NO_DH +#if 1 + /* Use table for DH instead of -lm (math) lib dependency */ + #if 0 + #define WOLFSSL_DH_CONST + #define HAVE_FFDHE_2048 + #define HAVE_FFDHE_4096 + #define HAVE_DH_DEFAULT_PARAMS + //#define HAVE_FFDHE_6144 + //#define HAVE_FFDHE_8192 + #endif + + #ifdef HAVE_FIPS + #define WOLFSSL_VALIDATE_FFC_IMPORT + #define HAVE_FFDHE_Q + #endif +#else + #define NO_DH +#endif + + +/* AES */ +#undef NO_AES +#if 1 + #undef HAVE_AES_CBC + #define HAVE_AES_CBC + + #undef HAVE_AESGCM + #define HAVE_AESGCM + + /* GCM Method: GCM_SMALL, GCM_WORD32 or GCM_TABLE */ + #define GCM_SMALL + + #undef WOLFSSL_AES_DIRECT + #define WOLFSSL_AES_DIRECT + + #undef HAVE_AES_ECB + #define HAVE_AES_ECB + + #undef WOLFSSL_AES_COUNTER + #define WOLFSSL_AES_COUNTER + + #undef HAVE_AESCCM + #define HAVE_AESCCM +#else + #define NO_AES +#endif + + +/* DES3 */ +#undef NO_DES3 +#if 1 +#else + #define NO_DES3 +#endif + +/* ChaCha20 / Poly1305 */ +#undef HAVE_CHACHA +#undef HAVE_POLY1305 +#if 0 + #define HAVE_CHACHA + #define HAVE_POLY1305 + + /* Needed for Poly1305 */ + #undef HAVE_ONE_TIME_AUTH + #define HAVE_ONE_TIME_AUTH +#endif + +/* Ed25519 / Curve25519 */ +#undef HAVE_CURVE25519 +#undef HAVE_ED25519 +#if 0 + #define HAVE_CURVE25519 + #define HAVE_ED25519 /* ED25519 Requires SHA512 */ + + /* Optionally use small math (less flash usage, but much slower) */ + #if 1 + #define CURVED25519_SMALL + #endif +#endif + + +/* ------------------------------------------------------------------------- */ +/* Hashing */ +/* ------------------------------------------------------------------------- */ +/* Sha */ +#undef NO_SHA +#if 1 + /* 1k smaller, but 25% slower */ + //#define USE_SLOW_SHA +#else + #define NO_SHA +#endif + +/* Sha256 */ +#undef NO_SHA256 +#if 1 + /* not unrolled - ~2k smaller and ~25% slower */ + //#define USE_SLOW_SHA256 + + /* Sha224 */ + #if 1 + #define WOLFSSL_SHA224 + #endif +#else + #define NO_SHA256 +#endif + +/* Sha512 */ +#undef WOLFSSL_SHA512 +#if 1 + #define WOLFSSL_SHA512 + + /* Sha384 */ + #undef WOLFSSL_SHA384 + #if 1 + #define WOLFSSL_SHA384 + #endif + + /* over twice as small, but 50% slower */ + //#define USE_SLOW_SHA512 +#endif + +/* Sha3 */ +#undef WOLFSSL_SHA3 +#if 1 + #define WOLFSSL_SHA3 + #ifdef HAVE_FIPS + #define WOLFSSL_NO_SHAKE256 + #endif +#endif + +/* MD5 */ +#undef NO_MD5 +#if 1 + +#else + #define NO_MD5 +#endif + +/* HKDF */ +#undef HAVE_HKDF +#if 1 + #define HAVE_HKDF +#endif + +/* CMAC */ +#undef WOLFSSL_CMAC +#if 1 + #define WOLFSSL_CMAC +#endif + + +/* ------------------------------------------------------------------------- */ +/* Benchmark / Test */ +/* ------------------------------------------------------------------------- */ +/* Use reduced benchmark / test sizes */ +#undef BENCH_EMBEDDED +#define BENCH_EMBEDDED + +#undef USE_CERT_BUFFERS_2048 +//#define USE_CERT_BUFFERS_2048 + +//#undef USE_CERT_BUFFERS_1024 +//#define USE_CERT_BUFFERS_1024 + +#undef USE_CERT_BUFFERS_256 +//#define USE_CERT_BUFFERS_256 + + +/* ------------------------------------------------------------------------- */ +/* Debugging */ +/* ------------------------------------------------------------------------- */ + +#undef DEBUG_WOLFSSL +#undef NO_ERROR_STRINGS +#if 1 //for debug wolfssl_init. + #define DEBUG_WOLFSSL +#else + #if 0 + #define NO_ERROR_STRINGS + #endif +#endif + + +/* ------------------------------------------------------------------------- */ +/* Memory */ +/* ------------------------------------------------------------------------- */ + +/* Override Memory API's */ +#if 1 + #undef XMALLOC_OVERRIDE + #define XMALLOC_OVERRIDE + + #include + + #define XMALLOC(n, h, t) FCL_MALLOC(n) + #define XFREE(p, h, t) FCL_FREE(p) + #define XREALLOC(p, n, h, t) FCL_REALLOC(p, n) + + #define XATOI(s) FCL_ATOI(s) +#endif + +#if 0 + /* Static memory requires fast math */ + #define WOLFSSL_STATIC_MEMORY + + /* Disable fallback malloc/free */ + #define WOLFSSL_NO_MALLOC + #if 0 + #define WOLFSSL_MALLOC_CHECK /* trap malloc failure */ + #endif +#endif + +/* Memory callbacks */ +#if 0 + #undef USE_WOLFSSL_MEMORY + #define USE_WOLFSSL_MEMORY + + /* Use this to measure / print heap usage */ + #if 0 + #undef WOLFSSL_TRACK_MEMORY + #define WOLFSSL_TRACK_MEMORY + + #undef WOLFSSL_DEBUG_MEMORY + #define WOLFSSL_DEBUG_MEMORY + #endif +#else + #ifndef WOLFSSL_STATIC_MEMORY + #define NO_WOLFSSL_MEMORY + /* Otherwise we will use stdlib malloc, free and realloc */ + #endif +#endif + + +/* ------------------------------------------------------------------------- */ +/* Port */ +/* ------------------------------------------------------------------------- */ + +/* Override Current Time */ +/* Allows custom "custom_time()" function to be used for benchmark */ +//#define WOLFSSL_USER_CURRTIME +//#define WOLFSSL_GMTIME +//#define USER_TICKS +//extern unsigned long my_time(unsigned long* timer); +//#define XTIME my_time +#if 1 + #include "fcltime.h" + #define time_t fclTime_t + #define USER_TIME + time_t fclTime( time_t* tod ); + #define XTIME fclTime + #define XCTIME fclCtime + #define HAVE_TIME_T_TYPE +#endif + +/* ------------------------------------------------------------------------- */ +/* RNG */ +/* ------------------------------------------------------------------------- */ + +/* Seed Source */ +/* Size of returned HW RNG value */ +#if 0 + #define CUSTOM_RAND_TYPE unsigned int + extern unsigned int my_rng_seed_gen(void); + #undef CUSTOM_RAND_GENERATE + #define CUSTOM_RAND_GENERATE my_rng_seed_gen +#endif + +/* Choose RNG method */ +#if 1 + /* Use built-in P-RNG (SHA256 based) with HW RNG */ + /* P-RNG + HW RNG (P-RNG is ~8K) */ + #undef HAVE_HASHDRBG + #define HAVE_HASHDRBG +#else + #undef WC_NO_HASHDRBG + #define WC_NO_HASHDRBG + /* Bypass P-RNG and use only HW RNG */ + extern int my_rng_gen_block(unsigned char* output, unsigned int sz); + #undef CUSTOM_RAND_GENERATE_BLOCK + #define CUSTOM_RAND_GENERATE_BLOCK my_rng_gen_block +#endif + + +/* ------------------------------------------------------------------------- */ +/* Custom Standard Lib */ +/* ------------------------------------------------------------------------- */ +/* Allows override of all standard library functions */ +#undef STRING_USER +#if 1 + #define STRING_USER + + #include + + #undef USE_WOLF_STRSEP + #define USE_WOLF_STRSEP + #define XSTRSEP(s1,d) wc_strsep((s1),(d)) + + #undef USE_WOLF_STRTOK + #define USE_WOLF_STRTOK + #define XSTRTOK(s1,d,ptr) wc_strtok((s1),(d),(ptr)) + + #define XSTRNSTR(s1,s2,n) FCL_STRSTR((s1),(s2)) + + #define XMEMCPY(d,s,l) FCL_MEMCPY((d),(s),(l)) + #define XMEMSET(b,c,l) FCL_MEMSET((b),(c),(l)) + #define XMEMCMP(s1,s2,n) FCL_MEMCMP((s1),(s2),(n)) + #define XMEMMOVE(d,s,l) FCL_MEMMOVE((d),(s),(l)) + + #define XSTRLEN(s1) FCL_STRLEN((s1)) + #define XSTRNCPY(s1,s2,n) FCL_STRNCPY((s1),(s2),(n)) + #define XSTRSTR(s1,s2) FCL_STRSTR((s1),(s2)) + + #define XSTRNCMP(s1,s2,n) FCL_STRNCMP((s1),(s2),(n)) + #define XSTRNCAT(s1,s2,n) FCL_STRNCAT((s1),(s2),(n)) + #define XSTRNCASECMP(s1,s2,n) FCL_STRNCASECMP((s1),(s2),(n)) + + #define XSNPRINTF FCL_SNPRINTF +#endif + + + +/* ------------------------------------------------------------------------- */ +/* Enable Features */ +/* ------------------------------------------------------------------------- */ +#undef WOLFSSL_TLS13 +#if 0 + #define WOLFSSL_TLS13 +#endif + +#undef WOLFSSL_KEY_GEN +#if 1 + #define WOLFSSL_KEY_GEN +#endif + +#if defined(HAVE_FIPS) && !defined(WOLFSSL_KEY_GEN) + #define WOLFSSL_OLD_PRIME_CHECK +#endif + +#undef KEEP_PEER_CERT +//#define KEEP_PEER_CERT + +#undef HAVE_COMP_KEY +//#define HAVE_COMP_KEY + +#undef HAVE_TLS_EXTENSIONS +//#define HAVE_TLS_EXTENSIONS + +#undef HAVE_SUPPORTED_CURVES +#define HAVE_SUPPORTED_CURVES + +#undef WOLFSSL_BASE64_ENCODE +#define WOLFSSL_BASE64_ENCODE + +/* TLS Session Cache */ +#if 0 + #define SMALL_SESSION_CACHE +#else + // #define NO_SESSION_CACHE +#endif + + +#undef WOLFSSL_ALLOW_SSLV3 +#define WOLFSSL_ALLOW_SSLV3 + +#undef WOLFSSL_ALLOW_TLSV10 +#define WOLFSSL_ALLOW_TLSV10 + + +/* ------------------------------------------------------------------------- */ +/* Disable Features */ +/* ------------------------------------------------------------------------- */ +#undef NO_WOLFSSL_SERVER +//#define NO_WOLFSSL_SERVER + +#undef NO_WOLFSSL_CLIENT +//#define NO_WOLFSSL_CLIENT + +#undef NO_CRYPT_TEST +//#define NO_CRYPT_TEST + +#undef NO_CRYPT_BENCHMARK +//#define NO_CRYPT_BENCHMARK + +#undef WOLFCRYPT_ONLY +//#define WOLFCRYPT_ONLY + +/* In-lining of misc.c functions */ +/* If defined, must include wolfcrypt/src/misc.c in build */ +/* Slower, but about 1k smaller */ +#undef NO_INLINE +//#define NO_INLINE + +#undef NO_FILESYSTEM +//#define NO_FILESYSTEM + +#undef NO_WRITEV +#define NO_WRITEV + +#undef NO_MAIN_DRIVER +#define NO_MAIN_DRIVER + +#undef NO_DEV_RANDOM +//#define NO_DEV_RANDOM + +#undef NO_DSA +//#define NO_DSA + +#undef NO_RC4 +#define NO_RC4 + +#undef NO_OLD_TLS +//#define NO_OLD_TLS + +#undef NO_HC128 +#define NO_HC128 + +#undef NO_RABBIT +#define NO_RABBIT + +#undef NO_PSK +#define NO_PSK + +#undef NO_MD4 +#define NO_MD4 + +#undef NO_PWDBASED +//#define NO_PWDBASED + +#undef NO_CODING +//#define NO_CODING + +#undef NO_ASN_TIME +//#define NO_ASN_TIME + +#undef NO_CERTS +//#define NO_CERTS + +#undef NO_SIG_WRAPPER +//#define NO_SIG_WRAPPER + +#undef NO_MAIN_DRIVER +#define NO_MAIN_DRIVER + +#undef BLACKFIN_BUILD +#define BLACKFIN_BUILD + +#ifdef BLACKFIN_BUILD + + #include + + #undef WOLFSSL_HAVE_MAX + #define WOLFSSL_HAVE_MAX + + #undef WOLFSSL_HAVE_MIN + #define WOLFSSL_HAVE_MIN + + #include + + #define XMALLOC_OVERRIDE /* Need to use FCL stdlib instead of stdlib.h */ + + extern void * fclMalloc (unsigned int size); + extern void fclFree (void * memoryPointer); + extern void * fclRealloc (void * memoryPointer, unsigned int size); + #define XMALLOC(a, b, c) fclMalloc(a) + #define XFREE(a, b, c) fclFree(a) + #define XREALLOC(a, b, c, d) fclRealloc(a, b) + + /************************************************************* + * wolfSSL testing + */ + + typedef struct wolfArgs { + int argc; + char** argv; + int return_code; + struct fssShellInfo* info; + } wolfArgs; + + #define printf FCL_PRINTF + + #define WOLFSSL_BASE16 + + extern int aes_test_for_fips_hash(void); + int wolfcrypt_test_taskEnter(void *args); + int wolfcrypt_harness_taskEnter(void *args); + int wolf_task_start(void* voidinfo, char* argline); + int wolf_task_results(void* voidinfo, char* argline); + void wolfFIPS_Module_start(void); + + /* For op testing */ + #define USE_CERT_BUFFERS_2048 + #define USE_CERT_BUFFERS_256 + //#define NO_FILESYSTEM + + #define OPENSSL_EXTRA + #define OPENSSL_ALL + #define HAVE_EX_DATA + #define WOLFSSL_EVP_DECRYPT_LEGACY + + + /* TLS 1.3 support */ + #define WOLFSSL_TLS13 + #define HAVE_TLS_EXTENSIONS + #define HAVE_SUPPORTED_CURVES + #define HAVE_ECC + #define HAVE_HKDF + #define HAVE_FFDHE_4096 + #define WC_RSA_PSS + + /* for static ciphers */ + #define WOLFSSL_STATIC_RSA + #define WOLFSSL_STATIC_PSK + #define WOLFSSL_STATIC_EPHEMERAL + #define WOLFSSL_SNIFFER + + /* TEMPORARY */ + #define USING_JTAG +#endif /* BLACKFIN_BUILD */ + +#ifdef __cplusplus +} +#endif + +#endif /* WOLFSSL_USER_SETTINGS_H */ + diff --git a/IDE/VisualDSP/wolf_tasks.c b/IDE/VisualDSP/wolf_tasks.c new file mode 100644 index 000000000..aff69ed15 --- /dev/null +++ b/IDE/VisualDSP/wolf_tasks.c @@ -0,0 +1,117 @@ +/* wolf-tasks.c + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +#include +#include +#include +#include +#ifdef FUSION_RTOS +#include + +#define RESULT_BUF_SIZE 1024 + +typedef struct { + int isRunning; + u8 buf[RESULT_BUF_SIZE]; + int len; +} wolf_result_t; + +static wolf_result_t _result = {0}; + +static void myFipsCb(int ok, int err, const char* hash); + +static void myFipsCb(int ok, int err, const char* hash) +{ + + FCL_PRINTF("in my Fips callback, ok = %d, err = %d\n", ok, err); + FCL_PRINTF("message = %s\n", wc_GetErrorString(err)); + FCL_PRINTF("hash = %s\n", hash); + + if (err == IN_CORE_FIPS_E) { + FCL_PRINTF("In core integrity hash check failure, copy above hash\n"); + FCL_PRINTF("into verifyCore[] in fips_test.c and rebuild\n"); + } +} + +static fclThreadHandle _task = NULL; +#define WOLF_TASK_STACK_SIZE (1024 * 100) +fclThreadPriority WOLF_TASK_PRIORITY = (fclThreadPriority) (FCL_THREAD_PRIORITY_TIME_CRITICAL+1); + +int wolfcrypt_test_taskEnter(void *args) +{ + int ret; + + wolfCrypt_SetCb_fips(myFipsCb); + + ret = wolfcrypt_test(args); + + printf("Result of test was %d\n", ret); + + _result.isRunning = 0; + fosTaskDelete(_task); + return 0; +} + +/* Was only needed for CAVP testing purposes, not required for release. +int wolfcrypt_harness_taskEnter(void *args) +{ + wolfCrypt_SetCb_fips(myFipsCb); + wolfcrypt_harness(args); + _result.isRunning = 0; + fosTaskDelete(_task); + return 0; +} +*/ + +int wolf_task_start(void* voidinfo, char* argline) +{ + char optionA[] = "wolfcrypt_test"; + fssShellInfo *info = (fssShellInfo*)voidinfo; + struct wolfArgs args; + + if (_result.isRunning) { + fssShellPuts(info, "previous task still running\r\n"); + return 1; + } + + _result.isRunning = 1; + + if (FCL_STRNCMP(argline, optionA, FCL_STRLEN(optionA)) == 0) { + _task = fclThreadCreate(wolfcrypt_test_taskEnter, + &args, + WOLF_TASK_STACK_SIZE, + WOLF_TASK_PRIORITY); + } else if (FCL_STRNCMP(argline, optionB, FCL_STRLEN(optionB)) == 0) { + _task = fclThreadCreate(wolfcrypt_harness_taskEnter, + &args, + WOLF_TASK_STACK_SIZE, + WOLF_TASK_PRIORITY); + } else { + printf("Invalid input: %s\n", argline); + printf("Please try with either wolfcrypt_test or wolfcrypt_harness\n"); + return -1; + } + + FCL_ASSERT(_task != FCL_THREAD_HANDLE_INVALID); + + return 0; +} +#endif /* FUSION_RTOS */ diff --git a/IDE/include.am b/IDE/include.am index d88f1bbec..17b5e8ab8 100644 --- a/IDE/include.am +++ b/IDE/include.am @@ -35,6 +35,7 @@ include IDE/M68K/include.am include IDE/HEXAGON/include.am include IDE/RISCV/include.am include IDE/XilinxSDK/include.am +include IDE/VisualDSP/include.am EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL IDE/LPCXPRESSO IDE/HEXIWEAR IDE/Espressif IDE/zephyr EXTRA_DIST+= IDE/OPENSTM32/README.md diff --git a/src/internal.c b/src/internal.c index a7ef30fc2..24797dc54 100644 --- a/src/internal.c +++ b/src/internal.c @@ -95,7 +95,11 @@ #if defined(DEBUG_WOLFSSL) || defined(SHOW_SECRETS) || \ defined(CHACHA_AEAD_TEST) || defined(WOLFSSL_SESSION_EXPORT_DEBUG) #ifndef NO_STDIO_FILESYSTEM - #include + #ifdef FUSION_RTOS + #include + #else + #include + #endif #endif #endif diff --git a/src/sniffer.c b/src/sniffer.c index 6183e4b77..3411bc7c5 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -25,6 +25,42 @@ #endif #include +#include + +/* xctime */ +#ifndef XCTIME + #define XCTIME ctime +#endif + +/* only in this file, to avoid confusing future ports leave + * these defines here. Do not move to wc_port.h */ +#ifdef USER_CUSTOM_SNIFFX + /* To be implemented in user_settings.h */ +#elif defined(FUSION_RTOS) + #include + #define XINET_NTOA FNS_INET_NTOA + #define XINET_ATON FNS_INET_ATON + #define XINET_PTON(a,b,c,d) FNS_INET_PTON((a),(b),(c),(d),NULL) + #define XINET_NTOP(a,b,c,d) FNS_INET_NTOP((a),(b),(c),(d),NULL) + #define XINET_ADDR FNS_INET_ADDR + #define XHTONS FNS_HTONS + #define XNTOHS FNS_NTOHS + #define XHTONL FNS_HTONL + #define XNTOHL FNS_NTOHL + #define XINADDR_NONE FNS_INADDR_NONE +#else + /* default */ + #define XINET_NTOA inet_ntoa + #define XINET_ATON inet_aton + #define XINET_PTON(a,b,c) inet_pton((a),(b),(c)) + #define XINET_NTOP inet_ntop + #define XINET_ADDR inet_addr + #define XHTONS htons + #define XNTOHS ntohs + #define XHTONL htonl + #define XNTOHL ntohl + #define XINADDR_NONE INADDR_NONE +#endif #if !defined(WOLFCRYPT_ONLY) && !defined(NO_FILESYSTEM) #ifdef WOLFSSL_SNIFFER @@ -32,10 +68,17 @@ #include #include -#ifndef _WIN32 - #include +#ifdef FUSION_RTOS + #include + #ifdef TCP_PROTOCOL + #undef TCP_PROTOCOL + #endif #else - #include + #ifndef _WIN32 + #include + #else + #include + #endif #endif #ifdef _WIN32 @@ -95,7 +138,7 @@ enum { EXT_TYPE_SZ = 2, /* Extension type length */ MAX_INPUT_SZ = MAX_RECORD_SIZE + COMP_EXTRA + MAX_MSG_EXTRA + MTU_EXTRA, /* Max input sz of reassembly */ - + /* TLS Extensions */ EXT_SERVER_NAME = 0x0000, /* a.k.a. SNI */ EXT_MAX_FRAGMENT_LENGTH = 0x0001, @@ -160,7 +203,7 @@ BOOL APIENTRY DllMain( HMODULE hModule, static WOLFSSL_GLOBAL int TraceOn = 0; /* Trace is off by default */ -static WOLFSSL_GLOBAL FILE* TraceFile = 0; +static WOLFSSL_GLOBAL XFILE TraceFile = 0; /* windows uses .rc table for this */ @@ -716,7 +759,7 @@ void ssl_FreeSniffer(void) if (TraceFile) { TraceOn = 0; - fclose(TraceFile); + XFCLOSE(TraceFile); TraceFile = NULL; } @@ -955,9 +998,9 @@ static void Trace(int idx) if (TraceOn) { char myBuffer[MAX_ERROR_LEN]; GetError(idx, myBuffer); - fprintf(TraceFile, "\t%s\n", myBuffer); + XFPRINTF(TraceFile, "\t%s\n", myBuffer); #ifdef DEBUG_SNIFFER - fprintf(stderr, "\t%s\n", myBuffer); + XFPRINTF(stderr, "\t%s\n", myBuffer); #endif } } @@ -967,8 +1010,8 @@ static void Trace(int idx) static void TraceHeader(void) { if (TraceOn) { - time_t ticks = time(NULL); - fprintf(TraceFile, "\n%s", ctime(&ticks)); + time_t ticks = XTIME(NULL); + XFPRINTF(TraceFile, "\n%s", XCTIME(&ticks)); } } @@ -977,8 +1020,8 @@ static void TraceHeader(void) static void TraceSetServer(const char* srv, int port, const char* keyFile) { if (TraceOn) { - fprintf(TraceFile, "\tTrying to install a new Sniffer Server with\n"); - fprintf(TraceFile, "\tserver: %s, port: %d, keyFile: %s\n", srv, port, + XFPRINTF(TraceFile, "\tTrying to install a new Sniffer Server with\n"); + XFPRINTF(TraceFile, "\tserver: %s, port: %d, keyFile: %s\n", srv, port, keyFile); } } @@ -991,8 +1034,8 @@ static void TraceSetNamedServer(const char* name, const char* srv, int port, const char* keyFile) { if (TraceOn) { - fprintf(TraceFile, "\tTrying to install a new Sniffer Server with\n"); - fprintf(TraceFile, "\tname: %s, server: %s, port: %d, keyFile: %s\n", + XFPRINTF(TraceFile, "\tTrying to install a new Sniffer Server with\n"); + XFPRINTF(TraceFile, "\tname: %s, server: %s, port: %d, keyFile: %s\n", name ? name : "", srv ? srv : "", port, @@ -1008,7 +1051,7 @@ static void TracePacket(void) { if (TraceOn) { static word32 packetNumber = 0; - fprintf(TraceFile, "\tGot a Packet to decode, packet %u\n", + XFPRINTF(TraceFile, "\tGot a Packet to decode, packet %u\n", ++packetNumber); } } @@ -1017,7 +1060,7 @@ static void TracePacket(void) /* Convert network byte order address into human readable */ static const char* IpToS(int version, void* src, char* dst) { - return inet_ntop(version, src, dst, TRACE_MSG_SZ); + return XINET_NTOP(version, src, dst, TRACE_MSG_SZ); } @@ -1027,7 +1070,7 @@ static void TraceIP(IpHdr* iphdr) if (TraceOn) { char src[TRACE_MSG_SZ]; char dst[TRACE_MSG_SZ]; - fprintf(TraceFile, "\tdst:%s src:%s\n", + XFPRINTF(TraceFile, "\tdst:%s src:%s\n", IpToS(AF_INET, &iphdr->dst, dst), IpToS(AF_INET, &iphdr->src, src)); } @@ -1040,7 +1083,7 @@ static void TraceIP6(Ip6Hdr* iphdr) if (TraceOn) { char src[TRACE_MSG_SZ]; char dst[TRACE_MSG_SZ]; - fprintf(TraceFile, "\tdst: %s src: %s\n", + XFPRINTF(TraceFile, "\tdst: %s src: %s\n", IpToS(AF_INET6, iphdr->dst, dst), IpToS(AF_INET6, iphdr->src, src)); } @@ -1051,8 +1094,8 @@ static void TraceIP6(Ip6Hdr* iphdr) static void TraceTcp(TcpHdr* tcphdr) { if (TraceOn) { - fprintf(TraceFile, "\tdstPort:%u srcPort:%u\n", ntohs(tcphdr->dstPort), - ntohs(tcphdr->srcPort)); + XFPRINTF(TraceFile, "\tdstPort:%u srcPort:%u\n", XNTOHS(tcphdr->dstPort), + XNTOHS(tcphdr->srcPort)); } } @@ -1061,7 +1104,7 @@ static void TraceTcp(TcpHdr* tcphdr) static void TraceSequence(word32 seq, int len) { if (TraceOn) { - fprintf(TraceFile, "\tSequence:%u, payload length:%d\n", seq, len); + XFPRINTF(TraceFile, "\tSequence:%u, payload length:%d\n", seq, len); } } @@ -1070,7 +1113,7 @@ static void TraceSequence(word32 seq, int len) static void TraceAck(word32 ack, word32 expected) { if (TraceOn) { - fprintf(TraceFile, "\tAck:%u Expected:%u\n", ack, expected); + XFPRINTF(TraceFile, "\tAck:%u Expected:%u\n", ack, expected); } } @@ -1079,7 +1122,7 @@ static void TraceAck(word32 ack, word32 expected) static void TraceRelativeSequence(word32 expected, word32 got) { if (TraceOn) { - fprintf(TraceFile, "\tExpected sequence:%u, received sequence:%u\n", + XFPRINTF(TraceFile, "\tExpected sequence:%u, received sequence:%u\n", expected, got); } } @@ -1089,7 +1132,7 @@ static void TraceRelativeSequence(word32 expected, word32 got) static void TraceServerSyn(word32 seq) { if (TraceOn) { - fprintf(TraceFile, "\tServer SYN, Sequence Start:%u\n", seq); + XFPRINTF(TraceFile, "\tServer SYN, Sequence Start:%u\n", seq); } } @@ -1098,7 +1141,7 @@ static void TraceServerSyn(word32 seq) static void TraceClientSyn(word32 seq) { if (TraceOn) { - fprintf(TraceFile, "\tClient SYN, Sequence Start:%u\n", seq); + XFPRINTF(TraceFile, "\tClient SYN, Sequence Start:%u\n", seq); } } @@ -1107,7 +1150,7 @@ static void TraceClientSyn(word32 seq) static void TraceClientFin(word32 finSeq, word32 relSeq) { if (TraceOn) { - fprintf(TraceFile, "\tClient FIN capture:%u, current SEQ:%u\n", + XFPRINTF(TraceFile, "\tClient FIN capture:%u, current SEQ:%u\n", finSeq, relSeq); } } @@ -1117,7 +1160,7 @@ static void TraceClientFin(word32 finSeq, word32 relSeq) static void TraceServerFin(word32 finSeq, word32 relSeq) { if (TraceOn) { - fprintf(TraceFile, "\tServer FIN capture:%u, current SEQ:%u\n", + XFPRINTF(TraceFile, "\tServer FIN capture:%u, current SEQ:%u\n", finSeq, relSeq); } } @@ -1127,7 +1170,7 @@ static void TraceServerFin(word32 finSeq, word32 relSeq) static void TraceGotData(int bytes) { if (TraceOn) { - fprintf(TraceFile, "\t%d bytes of SSL App data processed\n", bytes); + XFPRINTF(TraceFile, "\t%d bytes of SSL App data processed\n", bytes); } } @@ -1136,7 +1179,7 @@ static void TraceGotData(int bytes) static void TraceAddedData(int newBytes, int existingBytes) { if (TraceOn) { - fprintf(TraceFile, + XFPRINTF(TraceFile, "\t%d bytes added to %d existing bytes in User Buffer\n", newBytes, existingBytes); } @@ -1147,7 +1190,7 @@ static void TraceAddedData(int newBytes, int existingBytes) static void TraceStaleSession(void) { if (TraceOn) { - fprintf(TraceFile, "\tFound a stale session\n"); + XFPRINTF(TraceFile, "\tFound a stale session\n"); } } @@ -1156,7 +1199,7 @@ static void TraceStaleSession(void) static void TraceFindingStale(void) { if (TraceOn) { - fprintf(TraceFile, "\tTrying to find Stale Sessions\n"); + XFPRINTF(TraceFile, "\tTrying to find Stale Sessions\n"); } } @@ -1165,7 +1208,7 @@ static void TraceFindingStale(void) static void TraceRemovedSession(void) { if (TraceOn) { - fprintf(TraceFile, "\tRemoved it\n"); + XFPRINTF(TraceFile, "\tRemoved it\n"); } } @@ -1175,7 +1218,7 @@ static void TraceSessionInfo(SSLInfo* sslInfo) { if (TraceOn) { if (sslInfo != NULL && sslInfo->isValid) { - fprintf(TraceFile, + XFPRINTF(TraceFile, "\tver:(%u %u) suiteId:(%02x %02x) suiteName:(%s) " #ifdef HAVE_SNI "sni:(%s) " @@ -1201,7 +1244,7 @@ static void TraceSessionInfo(SSLInfo* sslInfo) static void TraceStat(const char* name, int add) { if (TraceOn) { - fprintf(TraceFile, "\tAdding %d to %s\n", add, name); + XFPRINTF(TraceFile, "\tAdding %d to %s\n", add, name); } } @@ -1368,7 +1411,7 @@ static word32 SessionHash(IpInfo* ipInfo, TcpInfo* tcpInfo) static SnifferSession* GetSnifferSession(IpInfo* ipInfo, TcpInfo* tcpInfo) { SnifferSession* session; - time_t currTime = time(NULL); + time_t currTime = XTIME(NULL); word32 row = SessionHash(ipInfo, tcpInfo); assert(row <= HASH_SIZE); @@ -1581,9 +1624,14 @@ static int SetNamedPrivateKey(const char* name, const char* address, int port, #endif serverIp.version = IPV4; - serverIp.ip4 = inet_addr(address); - if (serverIp.ip4 == INADDR_NONE) { - if (inet_pton(AF_INET6, address, serverIp.ip6) == 1) { + serverIp.ip4 = XINET_ADDR(address); + if (serverIp.ip4 == XINADDR_NONE) { + #ifdef FUSION_RTOS + if (XINET_PTON(AF_INET6, address, serverIp.ip6, + sizeof(serverIp.ip4)) == 1) { + #else + if (XINET_PTON(AF_INET6, address, serverIp.ip6) == 1) { + #endif serverIp.version = IPV6; } } @@ -1896,7 +1944,7 @@ static int CheckIp6Hdr(Ip6Hdr* iphdr, IpInfo* info, int length, char* error) #endif info->length = exthdrsz; - info->total = ntohs(iphdr->length) + info->length; + info->total = XNTOHS(iphdr->length) + info->length; /* IPv6 doesn't include its own header size in the length like v4. */ info->src.version = IPV6; XMEMCPY(info->src.ip6, iphdr->src, sizeof(info->src.ip6)); @@ -1938,7 +1986,7 @@ static int CheckIpHdr(IpHdr* iphdr, IpInfo* info, int length, char* error) #endif info->length = IP_HL(iphdr); - info->total = ntohs(iphdr->length); + info->total = XNTOHS(iphdr->length); info->src.version = IPV4; info->src.ip4 = iphdr->src; info->dst.version = IPV4; @@ -1957,16 +2005,16 @@ static int CheckTcpHdr(TcpHdr* tcphdr, TcpInfo* info, char* error) { TraceTcp(tcphdr); Trace(TCP_CHECK_STR); - info->srcPort = ntohs(tcphdr->srcPort); - info->dstPort = ntohs(tcphdr->dstPort); + info->srcPort = XNTOHS(tcphdr->srcPort); + info->dstPort = XNTOHS(tcphdr->dstPort); info->length = TCP_LEN(tcphdr); - info->sequence = ntohl(tcphdr->sequence); + info->sequence = XNTOHL(tcphdr->sequence); info->fin = tcphdr->flags & TCP_FIN; info->rst = tcphdr->flags & TCP_RST; info->syn = tcphdr->flags & TCP_SYN; info->ack = tcphdr->flags & TCP_ACK; if (info->ack) - info->ackNumber = ntohl(tcphdr->ack); + info->ackNumber = XNTOHL(tcphdr->ack); #ifndef WOLFSSL_SNIFFER_WATCH if (!IsPortRegistered(info->srcPort) && !IsPortRegistered(info->dstPort)) { @@ -4010,7 +4058,7 @@ static void RemoveStaleSessions(void) session = SessionTable[i]; while (session) { SnifferSession* next = session->next; - if (time(NULL) >= session->lastUsed + WOLFSSL_SNIFFER_TIMEOUT) { + if (XTIME(NULL) >= session->lastUsed + WOLFSSL_SNIFFER_TIMEOUT) { TraceStaleSession(); RemoveSession(session, NULL, NULL, i); } @@ -4059,7 +4107,7 @@ static SnifferSession* CreateSession(IpInfo* ipInfo, TcpInfo* tcpInfo, session->cliPort = (word16)tcpInfo->srcPort; session->cliSeqStart = tcpInfo->sequence; session->cliExpected = 1; /* relative */ - session->lastUsed= time(NULL); + session->lastUsed= XTIME(NULL); session->keySz = 0; #ifdef HAVE_SNI session->sni = NULL; diff --git a/src/ssl.c b/src/ssl.c index f13dbeca4..314f1e8e2 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -548,7 +548,7 @@ WOLFSSL* wolfSSL_new(WOLFSSL_CTX* ctx) ssl = (WOLFSSL*) XMALLOC(sizeof(WOLFSSL), ctx->heap, DYNAMIC_TYPE_SSL); if (ssl) - if (InitSSL(ssl, ctx, 0) < 0) { + if ( (ret = InitSSL(ssl, ctx, 0)) < 0) { FreeSSL(ssl, ctx->heap); ssl = 0; } @@ -4017,7 +4017,7 @@ void wolfSSL_ERR_print_errors_fp(XFILE fp, int err) WOLFSSL_ENTER("wolfSSL_ERR_print_errors_fp"); SetErrorString(err, data); - fprintf(fp, "%s", data); + XFPRINTF(fp, "%s", data); } #if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) @@ -5153,7 +5153,7 @@ static int ProcessBufferTryDecode(WOLFSSL_CTX* ctx, WOLFSSL* ssl, DerBuffer* der if (key == NULL) return MEMORY_E; #endif - + ret = wc_InitRsaKey_ex(key, heap, devId); if (ret == 0) { *idx = 0; @@ -15839,9 +15839,18 @@ int wolfSSL_set_compression(WOLFSSL* ssl) { /* wolfSSL has internal buffer, compatibility only */ WOLFSSL_ENTER("BIO_set_write_buffer_size"); + WOLFSSL_MSG("Buffer resize failed"); WOLFSSL_STUB("BIO_set_write_buffer_size"); (void)bio; - return size; + (void) size; + + /* Even though this is only a STUB at the moment many user applications + * may attempt to use this. OpenSSL documentation specifies the return + * "return 1 if the buffer was successfully resized or 0 for failure." + * since wolfSSL does not resize the buffer will always return failure + * by default due to memory concerns until this stub is promoted to + * a non-stub function */ + return WOLFSSL_FAILURE; /* 0, no resize happened */ } #endif @@ -16150,7 +16159,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) #ifdef CloseSocket if (bio->type == WOLFSSL_BIO_SOCKET && bio->num) CloseSocket(bio->num); - #endif + #endif } #ifndef NO_FILESYSTEM @@ -29391,7 +29400,7 @@ int wolfSSL_BIO_vprintf(WOLFSSL_BIO* bio, const char* format, va_list args) va_end(args); return -1; } - ret = vfprintf((XFILE)bio->ptr, format, args); + ret = XVFPRINTF((XFILE)bio->ptr, format, args); break; case WOLFSSL_BIO_MEMORY: @@ -29405,15 +29414,20 @@ int wolfSSL_BIO_vprintf(WOLFSSL_BIO* bio, const char* format, va_list args) char* pt = NULL; va_list copy; - va_copy(copy, args); - count = vsnprintf(NULL, 0, format, args); + #ifdef FUSION_RTOS + copy = args; /* hack, depends on internal implementation + * of va_list in VisualDSP++ */ + #else + va_copy(copy, args); + #endif + count = XVSNPRINTF(NULL, 0, format, args); if (count >= 0) { pt = (char*)XMALLOC(count + 1, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); if (pt != NULL) { - count = vsnprintf(pt, count + 1, format, copy); + count = XVSNPRINTF(pt, count + 1, format, copy); if (count >= 0) { ret = wolfSSL_BIO_write(bio, pt, count); @@ -29469,24 +29483,24 @@ int wolfSSL_BIO_dump(WOLFSSL_BIO *bio, const char *buf, int length) char line[80]; if (!buf) { - return fputs("\tNULL", (XFILE)bio->ptr); + return XFPUTS("\tNULL", (XFILE)bio->ptr); } - sprintf(line, "\t"); + XSPRINTF(line, "\t"); for (i = 0; i < LINE_LEN; i++) { if (i < length) - sprintf(line + 1 + i * 3,"%02x ", buf[i]); + XSPRINTF(line + 1 + i * 3,"%02x ", buf[i]); else - sprintf(line + 1 + i * 3, " "); + XSPRINTF(line + 1 + i * 3, " "); } - sprintf(line + 1 + LINE_LEN * 3, "| "); + XSPRINTF(line + 1 + LINE_LEN * 3, "| "); for (i = 0; i < LINE_LEN; i++) { if (i < length) { - sprintf(line + 3 + LINE_LEN * 3 + i, + XSPRINTF(line + 3 + LINE_LEN * 3 + i, "%c", 31 < buf[i] && buf[i] < 127 ? buf[i] : '.'); } } - ret += fputs(line, (XFILE)bio->ptr); + ret += XFPUTS(line, (XFILE)bio->ptr); if (length > LINE_LEN) ret += wolfSSL_BIO_dump(bio, buf + LINE_LEN, length - LINE_LEN); @@ -31804,7 +31818,8 @@ int SetDhInternal(WOLFSSL_DH* dh) return ret; } -#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(WOLFSSL_OPENSSH)) +#if !defined(NO_DH) && (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) \ + || defined(WOLFSSL_OPENSSH)) #ifdef WOLFSSL_DH_EXTRA WOLFSSL_DH* wolfSSL_DH_dup(WOLFSSL_DH* dh) @@ -36406,6 +36421,7 @@ WOLFSSL_BIGNUM *wolfSSL_EC_POINT_point2bn(const WOLFSSL_EC_GROUP *group, return ret; } +#endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ #ifdef USE_ECC_B_PARAM int wolfSSL_EC_POINT_is_on_curve(const WOLFSSL_EC_GROUP *group, @@ -36429,7 +36445,6 @@ int wolfSSL_EC_POINT_is_on_curve(const WOLFSSL_EC_GROUP *group, == MP_OKAY ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; } #endif /* USE_ECC_B_PARAM */ -#endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ WOLFSSL_EC_POINT *wolfSSL_EC_POINT_new(const WOLFSSL_EC_GROUP *group) { @@ -50711,7 +50726,7 @@ int wolfSSL_BN_print_fp(XFILE fp, const WOLFSSL_BIGNUM *bn) return WOLFSSL_FAILURE; } - fprintf(fp, "%s", buf); + XFPRINTF(fp, "%s", buf); XFREE(buf, NULL, DYNAMIC_TYPE_OPENSSL); return WOLFSSL_SUCCESS; diff --git a/src/tls13.c b/src/tls13.c index a8ce41d10..a108551bf 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -1468,6 +1468,23 @@ end: return (word32)(ktime_get_real_ns() / (ktime_t)1000000); #endif } +#elif defined(FUSION_RTOS) + /* The time in milliseconds. + * Used for tickets to represent difference between when first seen and when + * sending. + * + * returns the time in milliseconds as a 32-bit value. + */ + word32 TimeNowInMilliseconds(void) + { + struct timeval now; + if (FCL_GETTIMEOFDAY(&now, 0) < 0) + return (word32)GETTIME_ERROR; /* TODO: return 0 for failure */ + + /* Convert to milliseconds number. */ + return (word32)(now.tv_sec * 1000 + now.tv_usec / 1000); + } + #else /* The time in milliseconds. * Used for tickets to represent difference between when first seen and when @@ -1480,7 +1497,8 @@ end: struct timeval now; if (gettimeofday(&now, 0) < 0) - return GETTIME_ERROR; + return (word32)GETTIME_ERROR; /* TODO: return 0 for failure */ + /* Convert to milliseconds number. */ return (word32)(now.tv_sec * 1000 + now.tv_usec / 1000); } diff --git a/src/wolfio.c b/src/wolfio.c index 84021fc0f..27b335c66 100644 --- a/src/wolfio.c +++ b/src/wolfio.c @@ -98,6 +98,9 @@ static WC_INLINE int wolfSSL_LastError(int err) return xn_getlasterror(); #elif defined(WOLFSSL_LINUXKM) return err; /* Return provided error value */ +#elif defined(FUSION_RTOS) + #include + return FCL_GET_ERRNO; #else return errno; #endif @@ -785,6 +788,8 @@ int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags) } } } + + WOLFSSL_MSG("Select error"); return SOCKET_ERROR_E; } #endif /* HAVE_IO_TIMEOUT */ diff --git a/wolfcrypt/src/logging.c b/wolfcrypt/src/logging.c index 738cc5419..f6fc1fca1 100644 --- a/wolfcrypt/src/logging.c +++ b/wolfcrypt/src/logging.c @@ -266,8 +266,12 @@ void WOLFSSL_TIME(int count) #include "xil_printf.h" #elif defined(WOLFSSL_LINUXKM) /* the requisite linux/kernel.h is included in wc_port.h, with incompatible warnings masked out. */ +#elif defined(FUSION_RTOS) + #include + #include + #define fprintf FCL_FPRINTF #else - #include /* for default printf stuff */ + #include /* for default printf stuff */ #endif #if defined(THREADX) && !defined(THREADX_NO_DC_PRINTF) @@ -856,7 +860,7 @@ void wc_ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), while (current != NULL) { next = current->next; - cb(current->error, strlen(current->error), u); + cb(current->error, XSTRLEN(current->error), u); XFREE(current, current->heap, DYNAMIC_TYPE_LOG); current = next; } diff --git a/wolfssl/internal.h b/wolfssl/internal.h index c319cec57..48da5cf2b 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -208,7 +208,11 @@ #endif #endif #if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM) - #include /* for close of BIO */ + #ifdef FUSION_RTOS + #include + #else + #include /* for close of BIO */ + #endif #endif #endif diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 25f94ea94..f315b0436 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -1883,7 +1883,11 @@ enum { #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 +#ifdef FUSION_RTOS + #include +#else + #include +#endif WOLFSSL_API void wolfSSL_ERR_print_errors_fp(XFILE, int err); #if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) WOLFSSL_API void wolfSSL_ERR_dump_errors_fp(XFILE fp); diff --git a/wolfssl/test.h b/wolfssl/test.h index a28be6fc4..5da853e60 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -3,8 +3,13 @@ #ifndef wolfSSL_TEST_H #define wolfSSL_TEST_H -#include -#include +#ifdef FUSION_RTOS + #include + #include +#else + #include + #include +#endif #include #include #include diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index d2a6928b4..1ce533e8a 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -323,7 +323,11 @@ #endif #if (defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)) && \ !defined(NO_FILESYSTEM) - #include /* for close of BIO */ + #ifdef FUSION_RTOS + #include + #else + #include /* for close of BIO */ + #endif #endif #endif @@ -487,6 +491,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #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* @@ -499,7 +504,8 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XFCLOSE fs_close #define XSEEK_END 0 #define XBADFILE NULL - #define XFGETS(b,s,f) -2 /* Not ported yet */ + #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 @@ -512,10 +518,11 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XSEEK_END IO_SEEK_END #define XBADFILE NULL #define XFGETS fgets + #elif defined(WOLFSSL_DEOS) #define NO_FILESYSTEM #warning "TODO - DDC-I Certifiable Fast File System for Deos is not integrated" - //#define XFILE bfd * + /* #define XFILE bfd * */ #elif defined(MICRIUM) #include @@ -530,6 +537,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XSEEK_END FS_SEEK_END #define XBADFILE NULL #define XFGETS(b,s,f) -2 /* Not ported yet */ + #elif defined(WOLFSSL_NUCLEUS_1_2) #include "fal/inc/fal.h" #define XFILE FILE* @@ -542,6 +550,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XFCLOSE fclose #define XSEEK_END PSEEK_END #define XBADFILE NULL + #elif defined(WOLFSSL_APACHE_MYNEWT) #include #define XFILE struct fs_file* @@ -556,6 +565,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XSEEK_END 2 #define XBADFILE NULL #define XFGETS(b,s,f) -2 /* Not ported yet */ + #elif defined(WOLFSSL_ZEPHYR) #include @@ -607,6 +617,41 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XBADFILE NULL #define XFGETS(b,s,f) f_gets((b), (s), (f)) +#elif defined(FUSION_RTOS) + #include + #include + #include + #include + #include + #include + #define XFILE FCL_FILE* + #define XFOPEN FCL_FOPEN + #define XFSEEK FCL_FSEEK + #define XFTELL FCL_FTELL + #define XREWIND FCL_REWIND + #define XFREAD FCL_FREAD + #define XFWRITE FCL_FWRITE + #define XFCLOSE FCL_FCLOSE + #define XSEEK_END SEEK_END + #define XBADFILE NULL + #define XFGETS FCL_FGETS + #define XFPUTS FCL_FPUTS + #define XFPRINTF FCL_FPRINTF + #define XVFPRINTF FCL_VFPRINTF + #define XVSNPRINTF FCL_VSNPRINTF + #define XSNPRINTF FCL_SNPRINTF + #define XSPRINTF FCL_SPRINTF + #define DIR FCL_DIR + #define stat FCL_STAT + #define opendir FCL_OPENDIR + #define closedir FCL_CLOSEDIR + #define readdir FCL_READDIR + #define dirent fclDirent + #define strncasecmp FCL_STRNCASECMP + + /* FUSION SPECIFIC ERROR CODE */ + #define FUSION_IO_SEND_E 63 + #elif defined(WOLFSSL_USER_FILESYSTEM) /* To be defined in user_settings.h */ #else @@ -629,6 +674,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #define XSEEK_END SEEK_END #define XBADFILE NULL #define XFGETS fgets + #define XFPRINTF fprintf #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\ && !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2) @@ -641,6 +687,22 @@ WOLFSSL_API int wolfCrypt_Cleanup(void); #endif #endif +/* Defaults, user may over-ride with user_settings.h or in a porting section + * above + */ +#ifndef XVFPRINTF + #define XVFPRINTF vfprintf +#endif +#ifndef XVSNPRINTF + #define XVSNPRINTF vsnprintf +#endif +#ifndef XFPUTS + #define XFPUTS fputs +#endif +#ifndef XSPRINTF + #define XSPRINTF sprintf +#endif + #ifndef MAX_FILENAME_SZ #define MAX_FILENAME_SZ 256 /* max file name length */ #endif diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index d8e16df01..77fcf83ff 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -133,6 +133,10 @@ #elif defined(HAVE_NETX) #include "nx_api.h" #include "errno.h" + #elif defined(FUSION_RTOS) + #include + #include + #include #elif !defined(WOLFSSL_NO_SOCK) #include #include @@ -259,6 +263,14 @@ #define SOCKET_EPIPE NX_NOT_CONNECTED #define SOCKET_ECONNREFUSED NX_NOT_CONNECTED #define SOCKET_ECONNABORTED NX_NOT_CONNECTED +#elif defined(FUSION_RTOS) + #define SOCKET_EWOULDBLOCK FCL_EWOULDBLOCK + #define SOCKET_EAGAIN FCL_EAGAIN + #define SOCKET_ECONNRESET FNS_ECONNRESET + #define SOCKET_EINTR FCL_EINTR + #define SOCKET_EPIPE FCL_EPIPE + #define SOCKET_ECONNREFUSED FCL_ECONNREFUSED + #define SOCKET_ECONNABORTED FNS_ECONNABORTED #else #define SOCKET_EWOULDBLOCK EWOULDBLOCK #define SOCKET_EAGAIN EAGAIN @@ -290,6 +302,9 @@ #elif defined(WOLFSSL_NUCLEUS_1_2) #define SEND_FUNCTION NU_Send #define RECV_FUNCTION NU_Recv +#elif defined(FUSION_RTOS) + #define SEND_FUNCTION FNS_SEND + #define RECV_FUNCTION FNS_RECV #elif defined(WOLFSSL_ZEPHYR) #ifndef WOLFSSL_MAX_SEND_SZ #define WOLFSSL_MAX_SEND_SZ 256 @@ -372,6 +387,13 @@ WOLFSSL_API int wolfIO_Recv(SOCKET_T sd, char *buf, int sz, int rdFlags); #define CloseSocket(s) closesocket(s) #endif #define StartTCP() +#elif defined(FUSION_RTOS) + #ifndef CloseSocket + #define CloseSocket(s) do { \ + int err; \ + FNS_CLOSE(s, &err); \ + } while(0) + #endif #else #ifndef CloseSocket #define CloseSocket(s) close(s)