26#ifndef WOLF_CRYPT_PORT_H
27#define WOLF_CRYPT_PORT_H
29#include <wolfssl/wolfcrypt/settings.h>
30#include <wolfssl/wolfcrypt/visibility.h>
38#if !defined(WOLF_C99) && defined(__STDC_VERSION__) && \
39 !defined(WOLFSSL_ARDUINO) && !defined(NO_WOLF_C99)
40 #if __STDC_VERSION__ >= 199901L
47#if defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
49 #if (defined(MQX_USE_IO_OLD) && MQX_USE_IO_OLD) || \
50 defined(FREESCALE_MQX_5_0)
60 #ifdef WOLFSSL_GAME_BUILD
61 #include "system/xtl.h"
63 #ifndef WIN32_LEAN_AND_MEAN
64 #define WIN32_LEAN_AND_MEAN
67 #if defined(_WIN32_WCE) || defined(WIN32_LEAN_AND_MEAN)
75 #ifndef SINGLE_THREADED
76 #ifdef NEED_THREADX_TYPES
81#elif defined(WOLFSSL_DEOS)
85#elif defined(FREERTOS) || defined(FREERTOS_TCP) || defined(WOLFSSL_SAFERTOS)
89#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
91#elif defined(FREESCALE_FREE_RTOS)
92 #include "fsl_os_abstraction.h"
93#elif defined(WOLFSSL_VXWORKS)
95#elif defined(WOLFSSL_uITRON4)
98#elif defined(WOLFSSL_uTKERNEL2)
99 #include "tk/tkernel.h"
100#elif defined(WOLFSSL_CMSIS_RTOS)
101 #include "cmsis_os.h"
102#elif defined(WOLFSSL_CMSIS_RTOSv2)
103 #include "cmsis_os2.h"
104#elif defined(WOLFSSL_MDK_ARM)
105 #if defined(WOLFSSL_MDK5)
106 #include "cmsis_os.h"
110#elif defined(WOLFSSL_CMSIS_RTOS)
111 #include "cmsis_os.h"
112#elif defined(WOLFSSL_TIRTOS)
113 #include <ti/sysbios/BIOS.h>
114 #include <ti/sysbios/knl/Semaphore.h>
115#elif defined(WOLFSSL_FROSTED)
116 #include <semaphore.h>
117#elif defined(INTIME_RTOS)
120#elif defined(WOLFSSL_NUCLEUS_1_2)
123 #include "plus/nucleus.h"
125#elif defined(WOLFSSL_APACHE_MYNEWT)
127#elif defined(WOLFSSL_ZEPHYR)
128 #ifndef SINGLE_THREADED
131#elif defined(WOLFSSL_TELIT_M2MB)
139 #include "m2mb_types.h"
140 #include "m2mb_os_types.h"
141 #include "m2mb_os_api.h"
143 #include "m2mb_os_mtx.h"
145 #include "m2mb_rtc.h"
147 #ifndef NO_FILESYSTEM
148 #include "m2mb_fs_posix.h"
158 #ifndef SINGLE_THREADED
159 #define WOLFSSL_PTHREADS
162 #if (defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)) && \
163 !defined(NO_FILESYSTEM)
170#define wc_InitMutex InitMutex
171#define wc_FreeMutex FreeMutex
172#define wc_LockMutex LockMutex
173#define wc_UnLockMutex UnLockMutex
176#ifdef SINGLE_THREADED
177 typedef int wolfSSL_Mutex;
180 #if defined(FREERTOS)
181 typedef xSemaphoreHandle wolfSSL_Mutex;
182 #elif defined(FREERTOS_TCP)
183 #include "FreeRTOS.h"
185 typedef SemaphoreHandle_t wolfSSL_Mutex;
186 #elif defined(WOLFSSL_SAFERTOS)
187 typedef struct wolfSSL_Mutex {
188 signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES];
189 xSemaphoreHandle mutex;
191 #elif defined(USE_WINDOWS_API)
192 typedef CRITICAL_SECTION wolfSSL_Mutex;
193 #elif defined(WOLFSSL_PTHREADS)
194 typedef pthread_mutex_t wolfSSL_Mutex;
195 #elif defined(THREADX)
196 typedef TX_MUTEX wolfSSL_Mutex;
197 #elif defined(WOLFSSL_DEOS)
198 typedef mutex_handle_t wolfSSL_Mutex;
199 #elif defined(MICRIUM)
200 typedef OS_MUTEX wolfSSL_Mutex;
201 #elif defined(EBSNET)
202 typedef RTP_MUTEX wolfSSL_Mutex;
203 #elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
204 typedef MUTEX_STRUCT wolfSSL_Mutex;
205 #elif defined(FREESCALE_FREE_RTOS)
206 typedef mutex_t wolfSSL_Mutex;
207 #elif defined(WOLFSSL_VXWORKS)
208 typedef SEM_ID wolfSSL_Mutex;
209 #elif defined(WOLFSSL_uITRON4)
210 typedef struct wolfSSL_Mutex {
214 #elif defined(WOLFSSL_uTKERNEL2)
215 typedef struct wolfSSL_Mutex {
219 #elif defined(WOLFSSL_MDK_ARM)
220 #if defined(WOLFSSL_CMSIS_RTOS)
221 typedef osMutexId wolfSSL_Mutex;
223 typedef OS_MUT wolfSSL_Mutex;
225 #elif defined(WOLFSSL_CMSIS_RTOS)
226 typedef osMutexId wolfSSL_Mutex;
227 #elif defined(WOLFSSL_CMSIS_RTOSv2)
228 typedef osMutexId_t wolfSSL_Mutex;
229 #elif defined(WOLFSSL_TIRTOS)
230 typedef ti_sysbios_knl_Semaphore_Handle wolfSSL_Mutex;
231 #elif defined(WOLFSSL_FROSTED)
232 typedef mutex_t * wolfSSL_Mutex;
233 #elif defined(INTIME_RTOS)
234 typedef RTHANDLE wolfSSL_Mutex;
235 #elif defined(WOLFSSL_NUCLEUS_1_2)
236 typedef NU_SEMAPHORE wolfSSL_Mutex;
237 #elif defined(WOLFSSL_ZEPHYR)
238 typedef struct k_mutex wolfSSL_Mutex;
239 #elif defined(WOLFSSL_TELIT_M2MB)
240 typedef M2MB_OS_MTX_HANDLE wolfSSL_Mutex;
242 #error Need a mutex type in multithreaded mode
247#if defined(FREESCALE_MMCAU) || defined(WOLFSSL_MICROCHIP_PIC32MZ) || \
248 defined(STM32_CRYPTO)
249 #ifndef WOLFSSL_CRYPT_HW_MUTEX
250 #define WOLFSSL_CRYPT_HW_MUTEX 1
254#ifndef WOLFSSL_CRYPT_HW_MUTEX
255 #define WOLFSSL_CRYPT_HW_MUTEX 0
258#if WOLFSSL_CRYPT_HW_MUTEX
263 int wolfSSL_CryptHwMutexInit(
void);
264 int wolfSSL_CryptHwMutexLock(
void);
265 int wolfSSL_CryptHwMutexUnLock(
void);
268 #define wolfSSL_CryptHwMutexInit() 0
269 #define wolfSSL_CryptHwMutexLock() 0
270 #define wolfSSL_CryptHwMutexUnLock() (void)0
274WOLFSSL_API
int wc_InitMutex(wolfSSL_Mutex*);
275WOLFSSL_API wolfSSL_Mutex* wc_InitAndAllocMutex(
void);
276WOLFSSL_API
int wc_FreeMutex(wolfSSL_Mutex*);
277WOLFSSL_API
int wc_LockMutex(wolfSSL_Mutex*);
278WOLFSSL_API
int wc_UnLockMutex(wolfSSL_Mutex*);
279#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
281typedef void (mutex_cb)(
int flag,
int type,
const char* file,
int line);
283WOLFSSL_API
int wc_LockMutex_ex(
int flag,
int type,
const char* file,
int line);
284WOLFSSL_API
int wc_SetMutexCb(mutex_cb* cb);
300 int ebsnet_fseek(
int a,
long b,
int c);
304 #define XFOPEN(NAME, MODE) vf_open((const char *)NAME, VO_RDONLY, 0);
305 #define XFSEEK ebsnet_fseek
306 #define XFTELL vf_tell
307 #define XREWIND vf_rewind
308 #define XFREAD(BUF, SZ, AMT, FD) vf_read(FD, BUF, SZ*AMT)
309 #define XFWRITE(BUF, SZ, AMT, FD) vf_write(FD, BUF, SZ*AMT)
310 #define XFCLOSE vf_close
311 #define XSEEK_END VSEEK_END
313 #define XFGETS(b,s,f) -2
316 #define XFILE struct fs_file*
317 #define XFOPEN(NAME, MODE) fs_open((char*)NAME);
318 #define XFSEEK(F, O, W) (void)F
319 #define XFTELL(F) (F)->len
320 #define XREWIND(F) (void)F
321 #define XFREAD(BUF, SZ, AMT, F) fs_read(F, (char*)BUF, SZ*AMT)
322 #define XFWRITE(BUF, SZ, AMT, F) fs_write(F, (char*)BUF, SZ*AMT)
323 #define XFCLOSE fs_close
325 #define XBADFILE NULL
326 #define XFGETS(b,s,f) -2
327#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
328 #define XFILE MQX_FILE_PTR
332 #define XREWIND(F) fseek(F, 0, IO_SEEK_SET)
334 #define XFWRITE fwrite
335 #define XFCLOSE fclose
336 #define XSEEK_END IO_SEEK_END
337 #define XBADFILE NULL
339#elif defined(WOLFSSL_DEOS)
340 #define NO_FILESYSTEM
341 #warning "TODO - DDC-I Certifiable Fast File System for Deos is not integrated"
344#elif defined(MICRIUM)
346 #define XFILE FS_FILE*
347 #define XFOPEN fs_fopen
348 #define XFSEEK fs_fseek
349 #define XFTELL fs_ftell
350 #define XREWIND fs_rewind
351 #define XFREAD fs_fread
352 #define XFWRITE fs_fwrite
353 #define XFCLOSE fs_fclose
354 #define XSEEK_END FS_SEEK_END
355 #define XBADFILE NULL
356 #define XFGETS(b,s,f) -2
357#elif defined(WOLFSSL_NUCLEUS_1_2)
358 #include "fal/inc/fal.h"
363 #define XREWIND rewind
365 #define XFWRITE fwrite
366 #define XFCLOSE fclose
367 #define XSEEK_END PSEEK_END
368 #define XBADFILE NULL
369#elif defined(WOLFSSL_APACHE_MYNEWT)
371 #define XFILE struct fs_file*
373 #define XFOPEN mynewt_fopen
374 #define XFSEEK mynewt_fseek
375 #define XFTELL mynewt_ftell
376 #define XREWIND mynewt_rewind
377 #define XFREAD mynewt_fread
378 #define XFWRITE mynewt_fwrite
379 #define XFCLOSE mynewt_fclose
381 #define XBADFILE NULL
382 #define XFGETS(b,s,f) -2
383#elif defined(WOLFSSL_ZEPHYR)
386 #define XFILE struct fs_file_t*
387 #define STAT struct fs_dirent
389 XFILE z_fs_open(
const char* filename,
const char* perm);
390 int z_fs_close(XFILE file);
392 #define XFOPEN z_fs_open
393 #define XFCLOSE z_fs_close
394 #define XFSEEK fs_seek
395 #define XFTELL fs_tell
396 #define XFREWIND fs_rewind
397 #define XREWIND(F) fs_seek(F, 0, FS_SEEK_SET)
398 #define XFREAD(P,S,N,F) fs_read(F, P, S*N)
399 #define XFWRITE(P,S,N,F) fs_write(F, P, S*N)
400 #define XSEEK_END FS_SEEK_END
401 #define XBADFILE NULL
402 #define XFGETS(b,s,f) -2
404#elif defined(WOLFSSL_TELIT_M2MB)
406 #define XFOPEN(NAME, MODE) m2mb_fs_open((NAME), 0, (MODE))
407 #define XFSEEK(F, O, W) m2mb_fs_lseek((F), (O), (W))
408 #define XFTELL(F) m2mb_fs_lseek((F), 0, M2MB_SEEK_END)
409 #define XREWIND(F) (void)F
410 #define XFREAD(BUF, SZ, AMT, F) m2mb_fs_read((F), (BUF), (SZ)*(AMT))
411 #define XFWRITE(BUF, SZ, AMT, F) m2mb_fs_write((F), (BUF), (SZ)*(AMT))
412 #define XFCLOSE m2mb_fs_close
413 #define XSEEK_END M2MB_SEEK_END
415 #define XFGETS(b,s,f) -2
417#elif defined(WOLFSSL_USER_FILESYSTEM)
423 #if defined(WOLFSSL_MDK_ARM)
424 extern FILE * wolfSSL_fopen(
const char *name,
const char *mode) ;
425 #define XFOPEN wolfSSL_fopen
431 #define XREWIND rewind
433 #define XFWRITE fwrite
434 #define XFCLOSE fclose
435 #define XSEEK_END SEEK_END
436 #define XBADFILE NULL
439 #if !defined(USE_WINDOWS_API) && !defined(NO_WOLFSSL_DIR)\
440 && !defined(WOLFSSL_NUCLEUS) && !defined(WOLFSSL_NUCLEUS_1_2)
443 #include <sys/stat.h>
447 #ifndef MAX_FILENAME_SZ
448 #define MAX_FILENAME_SZ 256
454#if !defined(NO_WOLFSSL_DIR) && !defined(WOLFSSL_NUCLEUS) && \
455 !defined(WOLFSSL_NUCLEUS_1_2)
456 typedef struct ReadDirCtx {
457 #ifdef USE_WINDOWS_API
458 WIN32_FIND_DATAA FindFileData;
460 #elif defined(WOLFSSL_ZEPHYR)
461 struct fs_dirent entry;
464 struct fs_dir_t* dirp;
466 #elif defined(WOLFSSL_TELIT_M2MB)
468 struct M2MB_DIRENT* entry;
471 struct dirent* entry;
475 char name[MAX_FILENAME_SZ];
478 #define WC_READDIR_NOFILE -1
480 WOLFSSL_API
int wc_ReadDirFirst(ReadDirCtx* ctx,
const char* path,
char** name);
481 WOLFSSL_API
int wc_ReadDirNext(ReadDirCtx* ctx,
const char* path,
char** name);
482 WOLFSSL_API
void wc_ReadDirClose(ReadDirCtx* ctx);
490#if defined(USE_WINDOWS_API)
491 #if defined(min) || defined(WOLFSSL_MYSQL_COMPATIBLE)
492 #define WOLFSSL_HAVE_MIN
494 #if defined(max) || defined(WOLFSSL_MYSQL_COMPATIBLE)
495 #define WOLFSSL_HAVE_MAX
503#if defined(USER_TIME)
508 #define WOLFSSL_GMTIME
512 #ifndef HAVE_TIME_T_TYPE
513 #define USE_WOLF_TIME_T
516#elif defined(TIME_OVERRIDES)
522 #ifndef HAVE_TIME_T_TYPE
523 #define USE_WOLF_TIME_T
528 #define NEED_TMP_TIME
530#elif defined(WOLFSSL_XILINX)
534#elif defined(HAVE_RTP_SYS)
536 #include "dc_rtc_api.h"
539 #define XTIME(tl) (0)
540 #define XGMTIME(c, t) rtpsys_gmtime((c))
542#elif defined(WOLFSSL_DEOS)
543 #define XTIME(t1) deos_time((t1))
544 #define WOLFSSL_GMTIME
546 #define USE_WOLF_TIME_T
548#elif defined(MICRIUM)
551 #define XTIME(t1) micrium_time((t1))
552 #define WOLFSSL_GMTIME
554#elif defined(MICROCHIP_TCPIP_V5) || defined(MICROCHIP_TCPIP)
556 #define XTIME(t1) pic32_time((t1))
557 #define XGMTIME(c, t) gmtime((c))
559#elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
560 #ifdef FREESCALE_MQX_4_0
562 extern time_t mqx_time(time_t* timer);
564 #define HAVE_GMTIME_R
566 #define XTIME(t1) mqx_time((t1))
568#elif defined(FREESCALE_KSDK_BM) || defined(FREESCALE_FREE_RTOS) || defined(FREESCALE_KSDK_FREERTOS)
572 #define XTIME(t1) ksdk_time((t1))
574 #define XGMTIME(c, t) gmtime((c))
576#elif defined(WOLFSSL_ATMEL) && defined(WOLFSSL_ATMEL_TIME)
577 #define XTIME(t1) atmel_get_curr_time_and_date((t1))
578 #define WOLFSSL_GMTIME
580 #define USE_WOLF_TIME_T
582#elif defined(WOLFSSL_WICED)
584 time_t wiced_pseudo_unix_epoch_time(time_t * timer);
585 #define XTIME(t1) wiced_pseudo_unix_epoch_time((t1))
586 #define HAVE_GMTIME_R
588#elif defined(IDIRECT_DEV_TIME)
592 #define XTIME(t1) idirect_time((t1))
593 #define XGMTIME(c, t) gmtime((c))
595#elif defined(_WIN32_WCE)
597 #define XTIME(t1) windows_time((t1))
598 #define WOLFSSL_GMTIME
600#elif defined(WOLFSSL_APACHE_MYNEWT)
601 #include "os/os_time.h"
602 #define XTIME(t1) mynewt_time((t1))
603 #define WOLFSSL_GMTIME
605 #define USE_WOLF_TIME_T
607#elif defined(WOLFSSL_ZEPHYR)
608 #ifndef _POSIX_C_SOURCE
609 #include <posix/time.h>
611 #include <sys/time.h>
614 typedef signed int time_t;
616 time_t z_time(time_t *timer);
618 #define XTIME(tl) z_time((tl))
619 #define XGMTIME(c, t) gmtime((c))
620 #define WOLFSSL_GMTIME
624#elif defined(WOLFSSL_TELIT_M2MB)
626 extern time_t m2mb_xtime(time_t * timer);
627 #define XTIME(tl) m2mb_xtime((tl))
629 extern time_t m2mb_xtime_ms(time_t * timer);
630 #define XTIME_MS(tl) m2mb_xtime_ms((tl))
632 #ifndef NO_CRYPT_BENCHMARK
633 extern double m2mb_xtime_bench(
int reset);
634 #define WOLFSSL_CURRTIME_REMAP m2mb_xtime_bench
636 #define XGMTIME(c, t) gmtime((c))
637 #define WOLFSSL_GMTIME
644 #if defined(HAVE_SYS_TIME_H)
645 #include <sys/time.h>
650 #define TIME_T_NOT_64BIT
656 #if SIZEOF_TIME_T < 8
657 #undef TIME_T_NOT_64BIT
658 #define TIME_T_NOT_64BIT
661#ifdef TIME_T_NOT_LONG
664 #undef TIME_T_NOT_64BIT
665 #define TIME_T_NOT_64BIT
669#if !defined(XTIME) && !defined(TIME_OVERRIDES) && !defined(USER_TIME)
670 #ifdef TEST_BEFORE_DATE
671 #define XTIME(tl) (946681200UL)
673 #define XTIME(tl) time((tl))
676#if !defined(XGMTIME) && !defined(TIME_OVERRIDES)
677 #if defined(WOLFSSL_GMTIME) || !defined(HAVE_GMTIME_R) || defined(WOLF_C99)
678 #define XGMTIME(c, t) gmtime((c))
680 #define XGMTIME(c, t) gmtime_r((c), (t))
681 #define NEED_TMP_TIME
684#if !defined(XVALIDATE_DATE) && !defined(HAVE_VALIDATE_DATE)
685 #define USE_WOLF_VALIDDATE
686 #define XVALIDATE_DATE(d, f, t) ValidateDate((d), (f), (t))
690#if defined(USE_WOLF_TM)
705#if defined(USE_WOLF_TIME_T)
708#if defined(USE_WOLF_SUSECONDS_T)
709 typedef long suseconds_t;
711#if defined(USE_WOLF_TIMEVAL_T)
720#if defined(USER_TIME)
721 struct tm* gmtime(
const time_t* timer);
722 extern time_t XTIME(time_t * timer);
727 extern time_t time(time_t * timer);
728 #define XTIME(tl) time((tl))
731#elif defined(TIME_OVERRIDES)
732 extern time_t XTIME(time_t * timer);
733 extern struct tm* XGMTIME(
const time_t* timer,
struct tm* tmp);
734#elif defined(WOLFSSL_GMTIME)
735 struct tm* gmtime(
const time_t* timer);
740#ifndef WOLFSSL_LEANPSK
741 char* mystrnstr(
const char* s1,
const char* s2,
unsigned int n);
744#ifndef FILE_BUFFER_SIZE
745 #define FILE_BUFFER_SIZE 1024
749#ifdef HAVE_CAVIUM_OCTEON_SYNC
752 #include "cvmx-platform.h"
753 #define WOLFSSL_GLOBAL CVMX_SHARED
755 #define WOLFSSL_GLOBAL
759 #include "wolfssl_dsp.h"
762 typedef int (*wolfSSL_DSP_Handle_cb)(remote_handle64 *handle,
int finished,
764 WOLFSSL_API
int wolfSSL_GetHandleCbSet();
765 WOLFSSL_API
int wolfSSL_SetHandleCb(wolfSSL_DSP_Handle_cb in);
766 WOLFSSL_LOCAL
int wolfSSL_InitHandle();
767 WOLFSSL_LOCAL
void wolfSSL_CleanupHandle();
771 #ifndef WOLFSSL_SCE_GSCE_HANDLE
772 #define WOLFSSL_SCE_GSCE_HANDLE g_sce
WOLFSSL_API int wolfCrypt_Cleanup(void)
Used to clean up resources used by wolfCrypt.
Definition wc_port.c:264
WOLFSSL_API int wolfCrypt_Init(void)
Used to initialize resources used by wolfCrypt.
Definition wc_port.c:104
Definition wolfssl_MDK_ARM.h:51