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) 59 #ifdef USE_WINDOWS_API 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) 74 #elif defined(THREADX) 75 #ifndef SINGLE_THREADED 76 #ifdef NEED_THREADX_TYPES 81 #elif defined(WOLFSSL_DEOS) 83 #elif defined(MICRIUM) 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 274 WOLFSSL_API
int wc_InitMutex(wolfSSL_Mutex*);
275 WOLFSSL_API wolfSSL_Mutex* wc_InitAndAllocMutex(
void);
276 WOLFSSL_API
int wc_FreeMutex(wolfSSL_Mutex*);
277 WOLFSSL_API
int wc_LockMutex(wolfSSL_Mutex*);
278 WOLFSSL_API
int wc_UnLockMutex(wolfSSL_Mutex*);
279 #if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) 281 typedef void (mutex_cb)(
int flag,
int type,
const char* file,
int line);
283 WOLFSSL_API
int wc_LockMutex_ex(
int flag,
int type,
const char* file,
int line);
284 WOLFSSL_API
int wc_SetMutexCb(mutex_cb* cb);
294 #ifndef NO_FILESYSTEM 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 314 #elif defined(LSR_FS) 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 Definition: wolfssl_MDK_ARM.h:51
WOLFSSL_API int wolfCrypt_Init(void)
Used to initialize resources used by wolfCrypt.
Definition: wc_port.c:104
WOLFSSL_API int wolfCrypt_Cleanup(void)
Used to clean up resources used by wolfCrypt.
Definition: wc_port.c:264