wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Fri Jun 26 00:39:20 2015 +0000
Revision:
0:d92f9d21154c
wolfSSL 3.6.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:d92f9d21154c 1 /* wc_port.h
wolfSSL 0:d92f9d21154c 2 *
wolfSSL 0:d92f9d21154c 3 * Copyright (C) 2006-2015 wolfSSL Inc.
wolfSSL 0:d92f9d21154c 4 *
wolfSSL 0:d92f9d21154c 5 * This file is part of wolfSSL. (formerly known as CyaSSL)
wolfSSL 0:d92f9d21154c 6 *
wolfSSL 0:d92f9d21154c 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 0:d92f9d21154c 8 * it under the terms of the GNU General Public License as published by
wolfSSL 0:d92f9d21154c 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 0:d92f9d21154c 10 * (at your option) any later version.
wolfSSL 0:d92f9d21154c 11 *
wolfSSL 0:d92f9d21154c 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 0:d92f9d21154c 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 0:d92f9d21154c 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 0:d92f9d21154c 15 * GNU General Public License for more details.
wolfSSL 0:d92f9d21154c 16 *
wolfSSL 0:d92f9d21154c 17 * You should have received a copy of the GNU General Public License
wolfSSL 0:d92f9d21154c 18 * along with this program; if not, write to the Free Software
wolfSSL 0:d92f9d21154c 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
wolfSSL 0:d92f9d21154c 20 */
wolfSSL 0:d92f9d21154c 21
wolfSSL 0:d92f9d21154c 22
wolfSSL 0:d92f9d21154c 23 #ifndef WOLF_CRYPT_PORT_H
wolfSSL 0:d92f9d21154c 24 #define WOLF_CRYPT_PORT_H
wolfSSL 0:d92f9d21154c 25
wolfSSL 0:d92f9d21154c 26 #include <wolfssl/wolfcrypt/types.h>
wolfSSL 0:d92f9d21154c 27
wolfSSL 0:d92f9d21154c 28 #ifdef __cplusplus
wolfSSL 0:d92f9d21154c 29 extern "C" {
wolfSSL 0:d92f9d21154c 30 #endif
wolfSSL 0:d92f9d21154c 31
wolfSSL 0:d92f9d21154c 32
wolfSSL 0:d92f9d21154c 33 #ifdef USE_WINDOWS_API
wolfSSL 0:d92f9d21154c 34 #ifdef WOLFSSL_GAME_BUILD
wolfSSL 0:d92f9d21154c 35 #include "system/xtl.h"
wolfSSL 0:d92f9d21154c 36 #else
wolfSSL 0:d92f9d21154c 37 #ifndef WIN32_LEAN_AND_MEAN
wolfSSL 0:d92f9d21154c 38 #define WIN32_LEAN_AND_MEAN
wolfSSL 0:d92f9d21154c 39 #endif
wolfSSL 0:d92f9d21154c 40 #if defined(_WIN32_WCE) || defined(WIN32_LEAN_AND_MEAN)
wolfSSL 0:d92f9d21154c 41 /* On WinCE winsock2.h must be included before windows.h */
wolfSSL 0:d92f9d21154c 42 #include <winsock2.h>
wolfSSL 0:d92f9d21154c 43 #endif
wolfSSL 0:d92f9d21154c 44 #include <windows.h>
wolfSSL 0:d92f9d21154c 45 #endif
wolfSSL 0:d92f9d21154c 46 #elif defined(THREADX)
wolfSSL 0:d92f9d21154c 47 #ifndef SINGLE_THREADED
wolfSSL 0:d92f9d21154c 48 #include "tx_api.h"
wolfSSL 0:d92f9d21154c 49 #endif
wolfSSL 0:d92f9d21154c 50 #elif defined(MICRIUM)
wolfSSL 0:d92f9d21154c 51 /* do nothing, just don't pick Unix */
wolfSSL 0:d92f9d21154c 52 #elif defined(FREERTOS) || defined(WOLFSSL_SAFERTOS)
wolfSSL 0:d92f9d21154c 53 /* do nothing */
wolfSSL 0:d92f9d21154c 54 #elif defined(EBSNET)
wolfSSL 0:d92f9d21154c 55 /* do nothing */
wolfSSL 0:d92f9d21154c 56 #elif defined(FREESCALE_MQX)
wolfSSL 0:d92f9d21154c 57 /* do nothing */
wolfSSL 0:d92f9d21154c 58 #elif defined(WOLFSSL_MDK_ARM)
wolfSSL 0:d92f9d21154c 59 #if defined(WOLFSSL_MDK5)
wolfSSL 0:d92f9d21154c 60 #include "cmsis_os.h"
wolfSSL 0:d92f9d21154c 61 #else
wolfSSL 0:d92f9d21154c 62 #include <rtl.h>
wolfSSL 0:d92f9d21154c 63 #endif
wolfSSL 0:d92f9d21154c 64 #elif defined(WOLFSSL_CMSIS_RTOS)
wolfSSL 0:d92f9d21154c 65 #include "cmsis_os.h"
wolfSSL 0:d92f9d21154c 66 #elif defined(WOLFSSL_TIRTOS)
wolfSSL 0:d92f9d21154c 67 #include <ti/sysbios/BIOS.h>
wolfSSL 0:d92f9d21154c 68 #include <ti/sysbios/knl/Semaphore.h>
wolfSSL 0:d92f9d21154c 69 #else
wolfSSL 0:d92f9d21154c 70 #ifndef SINGLE_THREADED
wolfSSL 0:d92f9d21154c 71 #define WOLFSSL_PTHREADS
wolfSSL 0:d92f9d21154c 72 #include <pthread.h>
wolfSSL 0:d92f9d21154c 73 #endif
wolfSSL 0:d92f9d21154c 74 #if defined(OPENSSL_EXTRA) || defined(GOAHEAD_WS)
wolfSSL 0:d92f9d21154c 75 #include <unistd.h> /* for close of BIO */
wolfSSL 0:d92f9d21154c 76 #endif
wolfSSL 0:d92f9d21154c 77 #endif
wolfSSL 0:d92f9d21154c 78
wolfSSL 0:d92f9d21154c 79
wolfSSL 0:d92f9d21154c 80 #ifdef SINGLE_THREADED
wolfSSL 0:d92f9d21154c 81 typedef int wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 82 #else /* MULTI_THREADED */
wolfSSL 0:d92f9d21154c 83 /* FREERTOS comes first to enable use of FreeRTOS Windows simulator only */
wolfSSL 0:d92f9d21154c 84 #ifdef FREERTOS
wolfSSL 0:d92f9d21154c 85 typedef xSemaphoreHandle wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 86 #elif defined(WOLFSSL_SAFERTOS)
wolfSSL 0:d92f9d21154c 87 typedef struct wolfSSL_Mutex {
wolfSSL 0:d92f9d21154c 88 signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES];
wolfSSL 0:d92f9d21154c 89 xSemaphoreHandle mutex;
wolfSSL 0:d92f9d21154c 90 } wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 91 #elif defined(USE_WINDOWS_API)
wolfSSL 0:d92f9d21154c 92 typedef CRITICAL_SECTION wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 93 #elif defined(WOLFSSL_PTHREADS)
wolfSSL 0:d92f9d21154c 94 typedef pthread_mutex_t wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 95 #elif defined(THREADX)
wolfSSL 0:d92f9d21154c 96 typedef TX_MUTEX wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 97 #elif defined(MICRIUM)
wolfSSL 0:d92f9d21154c 98 typedef OS_MUTEX wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 99 #elif defined(EBSNET)
wolfSSL 0:d92f9d21154c 100 typedef RTP_MUTEX wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 101 #elif defined(FREESCALE_MQX)
wolfSSL 0:d92f9d21154c 102 typedef MUTEX_STRUCT wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 103 #elif defined(WOLFSSL_MDK_ARM)
wolfSSL 0:d92f9d21154c 104 #if defined(WOLFSSL_CMSIS_RTOS)
wolfSSL 0:d92f9d21154c 105 typedef osMutexId wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 106 #else
wolfSSL 0:d92f9d21154c 107 typedef OS_MUT wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 108 #endif
wolfSSL 0:d92f9d21154c 109 #elif defined(WOLFSSL_CMSIS_RTOS)
wolfSSL 0:d92f9d21154c 110 typedef osMutexId wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 111 #elif defined(WOLFSSL_TIRTOS)
wolfSSL 0:d92f9d21154c 112 typedef ti_sysbios_knl_Semaphore_Handle wolfSSL_Mutex;
wolfSSL 0:d92f9d21154c 113 #else
wolfSSL 0:d92f9d21154c 114 #error Need a mutex type in multithreaded mode
wolfSSL 0:d92f9d21154c 115 #endif /* USE_WINDOWS_API */
wolfSSL 0:d92f9d21154c 116 #endif /* SINGLE_THREADED */
wolfSSL 0:d92f9d21154c 117
wolfSSL 0:d92f9d21154c 118 WOLFSSL_LOCAL int InitMutex(wolfSSL_Mutex*);
wolfSSL 0:d92f9d21154c 119 WOLFSSL_LOCAL int FreeMutex(wolfSSL_Mutex*);
wolfSSL 0:d92f9d21154c 120 WOLFSSL_LOCAL int LockMutex(wolfSSL_Mutex*);
wolfSSL 0:d92f9d21154c 121 WOLFSSL_LOCAL int UnLockMutex(wolfSSL_Mutex*);
wolfSSL 0:d92f9d21154c 122
wolfSSL 0:d92f9d21154c 123
wolfSSL 0:d92f9d21154c 124 /* filesystem abstraction layer, used by ssl.c */
wolfSSL 0:d92f9d21154c 125 #ifndef NO_FILESYSTEM
wolfSSL 0:d92f9d21154c 126
wolfSSL 0:d92f9d21154c 127 #if defined(EBSNET)
wolfSSL 0:d92f9d21154c 128 #define XFILE int
wolfSSL 0:d92f9d21154c 129 #define XFOPEN(NAME, MODE) vf_open((const char *)NAME, VO_RDONLY, 0);
wolfSSL 0:d92f9d21154c 130 #define XFSEEK vf_lseek
wolfSSL 0:d92f9d21154c 131 #define XFTELL vf_tell
wolfSSL 0:d92f9d21154c 132 #define XREWIND vf_rewind
wolfSSL 0:d92f9d21154c 133 #define XFREAD(BUF, SZ, AMT, FD) vf_read(FD, BUF, SZ*AMT)
wolfSSL 0:d92f9d21154c 134 #define XFWRITE(BUF, SZ, AMT, FD) vf_write(FD, BUF, SZ*AMT)
wolfSSL 0:d92f9d21154c 135 #define XFCLOSE vf_close
wolfSSL 0:d92f9d21154c 136 #define XSEEK_END VSEEK_END
wolfSSL 0:d92f9d21154c 137 #define XBADFILE -1
wolfSSL 0:d92f9d21154c 138 #elif defined(LSR_FS)
wolfSSL 0:d92f9d21154c 139 #include <fs.h>
wolfSSL 0:d92f9d21154c 140 #define XFILE struct fs_file*
wolfSSL 0:d92f9d21154c 141 #define XFOPEN(NAME, MODE) fs_open((char*)NAME);
wolfSSL 0:d92f9d21154c 142 #define XFSEEK(F, O, W) (void)F
wolfSSL 0:d92f9d21154c 143 #define XFTELL(F) (F)->len
wolfSSL 0:d92f9d21154c 144 #define XREWIND(F) (void)F
wolfSSL 0:d92f9d21154c 145 #define XFREAD(BUF, SZ, AMT, F) fs_read(F, (char*)BUF, SZ*AMT)
wolfSSL 0:d92f9d21154c 146 #define XFWRITE(BUF, SZ, AMT, F) fs_write(F, (char*)BUF, SZ*AMT)
wolfSSL 0:d92f9d21154c 147 #define XFCLOSE fs_close
wolfSSL 0:d92f9d21154c 148 #define XSEEK_END 0
wolfSSL 0:d92f9d21154c 149 #define XBADFILE NULL
wolfSSL 0:d92f9d21154c 150 #elif defined(FREESCALE_MQX)
wolfSSL 0:d92f9d21154c 151 #define XFILE MQX_FILE_PTR
wolfSSL 0:d92f9d21154c 152 #define XFOPEN fopen
wolfSSL 0:d92f9d21154c 153 #define XFSEEK fseek
wolfSSL 0:d92f9d21154c 154 #define XFTELL ftell
wolfSSL 0:d92f9d21154c 155 #define XREWIND(F) fseek(F, 0, IO_SEEK_SET)
wolfSSL 0:d92f9d21154c 156 #define XFREAD fread
wolfSSL 0:d92f9d21154c 157 #define XFWRITE fwrite
wolfSSL 0:d92f9d21154c 158 #define XFCLOSE fclose
wolfSSL 0:d92f9d21154c 159 #define XSEEK_END IO_SEEK_END
wolfSSL 0:d92f9d21154c 160 #define XBADFILE NULL
wolfSSL 0:d92f9d21154c 161 #elif defined(MICRIUM)
wolfSSL 0:d92f9d21154c 162 #include <fs.h>
wolfSSL 0:d92f9d21154c 163 #define XFILE FS_FILE*
wolfSSL 0:d92f9d21154c 164 #define XFOPEN fs_fopen
wolfSSL 0:d92f9d21154c 165 #define XFSEEK fs_fseek
wolfSSL 0:d92f9d21154c 166 #define XFTELL fs_ftell
wolfSSL 0:d92f9d21154c 167 #define XREWIND fs_rewind
wolfSSL 0:d92f9d21154c 168 #define XFREAD fs_fread
wolfSSL 0:d92f9d21154c 169 #define XFWRITE fs_fwrite
wolfSSL 0:d92f9d21154c 170 #define XFCLOSE fs_fclose
wolfSSL 0:d92f9d21154c 171 #define XSEEK_END FS_SEEK_END
wolfSSL 0:d92f9d21154c 172 #define XBADFILE NULL
wolfSSL 0:d92f9d21154c 173 #else
wolfSSL 0:d92f9d21154c 174 /* stdio, default case */
wolfSSL 0:d92f9d21154c 175 #define XFILE FILE*
wolfSSL 0:d92f9d21154c 176 #if defined(WOLFSSL_MDK_ARM)
wolfSSL 0:d92f9d21154c 177 #include <stdio.h>
wolfSSL 0:d92f9d21154c 178 extern FILE * wolfSSL_fopen(const char *name, const char *mode) ;
wolfSSL 0:d92f9d21154c 179 #define XFOPEN wolfSSL_fopen
wolfSSL 0:d92f9d21154c 180 #else
wolfSSL 0:d92f9d21154c 181 #define XFOPEN fopen
wolfSSL 0:d92f9d21154c 182 #endif
wolfSSL 0:d92f9d21154c 183 #define XFSEEK fseek
wolfSSL 0:d92f9d21154c 184 #define XFTELL ftell
wolfSSL 0:d92f9d21154c 185 #define XREWIND rewind
wolfSSL 0:d92f9d21154c 186 #define XFREAD fread
wolfSSL 0:d92f9d21154c 187 #define XFWRITE fwrite
wolfSSL 0:d92f9d21154c 188 #define XFCLOSE fclose
wolfSSL 0:d92f9d21154c 189 #define XSEEK_END SEEK_END
wolfSSL 0:d92f9d21154c 190 #define XBADFILE NULL
wolfSSL 0:d92f9d21154c 191 #endif
wolfSSL 0:d92f9d21154c 192
wolfSSL 0:d92f9d21154c 193 #endif /* NO_FILESYSTEM */
wolfSSL 0:d92f9d21154c 194
wolfSSL 0:d92f9d21154c 195
wolfSSL 0:d92f9d21154c 196 /* Windows API defines its own min() macro. */
wolfSSL 0:d92f9d21154c 197 #if defined(USE_WINDOWS_API) && defined(min)
wolfSSL 0:d92f9d21154c 198 #define WOLFSSL_HAVE_MIN
wolfSSL 0:d92f9d21154c 199 #endif
wolfSSL 0:d92f9d21154c 200
wolfSSL 0:d92f9d21154c 201
wolfSSL 0:d92f9d21154c 202 #ifdef __cplusplus
wolfSSL 0:d92f9d21154c 203 } /* extern "C" */
wolfSSL 0:d92f9d21154c 204 #endif
wolfSSL 0:d92f9d21154c 205
wolfSSL 0:d92f9d21154c 206 #endif /* WOLF_CRYPT_PORT_H */
wolfSSL 0:d92f9d21154c 207
wolfSSL 0:d92f9d21154c 208