wolfSSL SSL/TLS library, support up to TLS1.3
Dependents: CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more
wolfssl/wolfcrypt/types.h@13:f67a6c6013ca, 2017-08-22 (annotated)
- Committer:
- wolfSSL
- Date:
- Tue Aug 22 10:48:22 2017 +0000
- Revision:
- 13:f67a6c6013ca
wolfSSL3.12.0 with TLS1.3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wolfSSL | 13:f67a6c6013ca | 1 | /* types.h |
wolfSSL | 13:f67a6c6013ca | 2 | * |
wolfSSL | 13:f67a6c6013ca | 3 | * Copyright (C) 2006-2016 wolfSSL Inc. |
wolfSSL | 13:f67a6c6013ca | 4 | * |
wolfSSL | 13:f67a6c6013ca | 5 | * This file is part of wolfSSL. |
wolfSSL | 13:f67a6c6013ca | 6 | * |
wolfSSL | 13:f67a6c6013ca | 7 | * wolfSSL is free software; you can redistribute it and/or modify |
wolfSSL | 13:f67a6c6013ca | 8 | * it under the terms of the GNU General Public License as published by |
wolfSSL | 13:f67a6c6013ca | 9 | * the Free Software Foundation; either version 2 of the License, or |
wolfSSL | 13:f67a6c6013ca | 10 | * (at your option) any later version. |
wolfSSL | 13:f67a6c6013ca | 11 | * |
wolfSSL | 13:f67a6c6013ca | 12 | * wolfSSL is distributed in the hope that it will be useful, |
wolfSSL | 13:f67a6c6013ca | 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
wolfSSL | 13:f67a6c6013ca | 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
wolfSSL | 13:f67a6c6013ca | 15 | * GNU General Public License for more details. |
wolfSSL | 13:f67a6c6013ca | 16 | * |
wolfSSL | 13:f67a6c6013ca | 17 | * You should have received a copy of the GNU General Public License |
wolfSSL | 13:f67a6c6013ca | 18 | * along with this program; if not, write to the Free Software |
wolfSSL | 13:f67a6c6013ca | 19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA |
wolfSSL | 13:f67a6c6013ca | 20 | */ |
wolfSSL | 13:f67a6c6013ca | 21 | |
wolfSSL | 13:f67a6c6013ca | 22 | |
wolfSSL | 13:f67a6c6013ca | 23 | |
wolfSSL | 13:f67a6c6013ca | 24 | #ifndef WOLF_CRYPT_TYPES_H |
wolfSSL | 13:f67a6c6013ca | 25 | #define WOLF_CRYPT_TYPES_H |
wolfSSL | 13:f67a6c6013ca | 26 | |
wolfSSL | 13:f67a6c6013ca | 27 | #include <wolfssl/wolfcrypt/settings.h> |
wolfSSL | 13:f67a6c6013ca | 28 | #include <wolfssl/wolfcrypt/wc_port.h> |
wolfSSL | 13:f67a6c6013ca | 29 | |
wolfSSL | 13:f67a6c6013ca | 30 | #ifdef __cplusplus |
wolfSSL | 13:f67a6c6013ca | 31 | extern "C" { |
wolfSSL | 13:f67a6c6013ca | 32 | #endif |
wolfSSL | 13:f67a6c6013ca | 33 | |
wolfSSL | 13:f67a6c6013ca | 34 | |
wolfSSL | 13:f67a6c6013ca | 35 | #if defined(WORDS_BIGENDIAN) |
wolfSSL | 13:f67a6c6013ca | 36 | #define BIG_ENDIAN_ORDER |
wolfSSL | 13:f67a6c6013ca | 37 | #endif |
wolfSSL | 13:f67a6c6013ca | 38 | |
wolfSSL | 13:f67a6c6013ca | 39 | #ifndef BIG_ENDIAN_ORDER |
wolfSSL | 13:f67a6c6013ca | 40 | #define LITTLE_ENDIAN_ORDER |
wolfSSL | 13:f67a6c6013ca | 41 | #endif |
wolfSSL | 13:f67a6c6013ca | 42 | |
wolfSSL | 13:f67a6c6013ca | 43 | #ifndef WOLFSSL_TYPES |
wolfSSL | 13:f67a6c6013ca | 44 | #ifndef byte |
wolfSSL | 13:f67a6c6013ca | 45 | typedef unsigned char byte; |
wolfSSL | 13:f67a6c6013ca | 46 | #endif |
wolfSSL | 13:f67a6c6013ca | 47 | typedef unsigned short word16; |
wolfSSL | 13:f67a6c6013ca | 48 | typedef unsigned int word32; |
wolfSSL | 13:f67a6c6013ca | 49 | #endif |
wolfSSL | 13:f67a6c6013ca | 50 | |
wolfSSL | 13:f67a6c6013ca | 51 | |
wolfSSL | 13:f67a6c6013ca | 52 | /* try to set SIZEOF_LONG or LONG_LONG if user didn't */ |
wolfSSL | 13:f67a6c6013ca | 53 | #if !defined(_MSC_VER) && !defined(__BCPLUSPLUS__) |
wolfSSL | 13:f67a6c6013ca | 54 | #if !defined(SIZEOF_LONG_LONG) && !defined(SIZEOF_LONG) |
wolfSSL | 13:f67a6c6013ca | 55 | #if (defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) \ |
wolfSSL | 13:f67a6c6013ca | 56 | || defined(__mips64) || defined(__x86_64__)) |
wolfSSL | 13:f67a6c6013ca | 57 | /* long should be 64bit */ |
wolfSSL | 13:f67a6c6013ca | 58 | #define SIZEOF_LONG 8 |
wolfSSL | 13:f67a6c6013ca | 59 | #elif defined(__i386__) || defined(__CORTEX_M3__) |
wolfSSL | 13:f67a6c6013ca | 60 | /* long long should be 64bit */ |
wolfSSL | 13:f67a6c6013ca | 61 | #define SIZEOF_LONG_LONG 8 |
wolfSSL | 13:f67a6c6013ca | 62 | #endif |
wolfSSL | 13:f67a6c6013ca | 63 | #endif |
wolfSSL | 13:f67a6c6013ca | 64 | #endif |
wolfSSL | 13:f67a6c6013ca | 65 | |
wolfSSL | 13:f67a6c6013ca | 66 | |
wolfSSL | 13:f67a6c6013ca | 67 | #if defined(_MSC_VER) || defined(__BCPLUSPLUS__) |
wolfSSL | 13:f67a6c6013ca | 68 | #define WORD64_AVAILABLE |
wolfSSL | 13:f67a6c6013ca | 69 | #define W64LIT(x) x##ui64 |
wolfSSL | 13:f67a6c6013ca | 70 | typedef unsigned __int64 word64; |
wolfSSL | 13:f67a6c6013ca | 71 | #elif defined(SIZEOF_LONG) && SIZEOF_LONG == 8 |
wolfSSL | 13:f67a6c6013ca | 72 | #define WORD64_AVAILABLE |
wolfSSL | 13:f67a6c6013ca | 73 | #define W64LIT(x) x##LL |
wolfSSL | 13:f67a6c6013ca | 74 | typedef unsigned long word64; |
wolfSSL | 13:f67a6c6013ca | 75 | #elif defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG == 8 |
wolfSSL | 13:f67a6c6013ca | 76 | #define WORD64_AVAILABLE |
wolfSSL | 13:f67a6c6013ca | 77 | #define W64LIT(x) x##LL |
wolfSSL | 13:f67a6c6013ca | 78 | typedef unsigned long long word64; |
wolfSSL | 13:f67a6c6013ca | 79 | #elif defined(__SIZEOF_LONG_LONG__) && __SIZEOF_LONG_LONG__ == 8 |
wolfSSL | 13:f67a6c6013ca | 80 | #define WORD64_AVAILABLE |
wolfSSL | 13:f67a6c6013ca | 81 | #define W64LIT(x) x##LL |
wolfSSL | 13:f67a6c6013ca | 82 | typedef unsigned long long word64; |
wolfSSL | 13:f67a6c6013ca | 83 | #else |
wolfSSL | 13:f67a6c6013ca | 84 | #define MP_16BIT /* for mp_int, mp_word needs to be twice as big as |
wolfSSL | 13:f67a6c6013ca | 85 | mp_digit, no 64 bit type so make mp_digit 16 bit */ |
wolfSSL | 13:f67a6c6013ca | 86 | #endif |
wolfSSL | 13:f67a6c6013ca | 87 | |
wolfSSL | 13:f67a6c6013ca | 88 | |
wolfSSL | 13:f67a6c6013ca | 89 | /* These platforms have 64-bit CPU registers. */ |
wolfSSL | 13:f67a6c6013ca | 90 | #if (defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || \ |
wolfSSL | 13:f67a6c6013ca | 91 | defined(__mips64) || defined(__x86_64__) || defined(_M_X64)) || \ |
wolfSSL | 13:f67a6c6013ca | 92 | defined(__aarch64__) || defined(__sparc64__) |
wolfSSL | 13:f67a6c6013ca | 93 | typedef word64 wolfssl_word; |
wolfSSL | 13:f67a6c6013ca | 94 | #define WC_64BIT_CPU |
wolfSSL | 13:f67a6c6013ca | 95 | #elif (defined(sun) || defined(__sun)) && \ |
wolfSSL | 13:f67a6c6013ca | 96 | (defined(LP64) || defined(_LP64)) |
wolfSSL | 13:f67a6c6013ca | 97 | /* LP64 with GNU GCC compiler is reserved for when long int is 64 bits |
wolfSSL | 13:f67a6c6013ca | 98 | * and int uses 32 bits. When using Solaris Studio sparc and __sparc are |
wolfSSL | 13:f67a6c6013ca | 99 | * avialable for 32 bit detection but __sparc64__ could be missed. This |
wolfSSL | 13:f67a6c6013ca | 100 | * uses LP64 for checking 64 bit CPU arch. */ |
wolfSSL | 13:f67a6c6013ca | 101 | typedef word64 wolfssl_word; |
wolfSSL | 13:f67a6c6013ca | 102 | #define WC_64BIT_CPU |
wolfSSL | 13:f67a6c6013ca | 103 | #else |
wolfSSL | 13:f67a6c6013ca | 104 | typedef word32 wolfssl_word; |
wolfSSL | 13:f67a6c6013ca | 105 | #ifdef WORD64_AVAILABLE |
wolfSSL | 13:f67a6c6013ca | 106 | #define WOLFCRYPT_SLOW_WORD64 |
wolfSSL | 13:f67a6c6013ca | 107 | #endif |
wolfSSL | 13:f67a6c6013ca | 108 | #endif |
wolfSSL | 13:f67a6c6013ca | 109 | |
wolfSSL | 13:f67a6c6013ca | 110 | |
wolfSSL | 13:f67a6c6013ca | 111 | enum { |
wolfSSL | 13:f67a6c6013ca | 112 | WOLFSSL_WORD_SIZE = sizeof(wolfssl_word), |
wolfSSL | 13:f67a6c6013ca | 113 | WOLFSSL_BIT_SIZE = 8, |
wolfSSL | 13:f67a6c6013ca | 114 | WOLFSSL_WORD_BITS = WOLFSSL_WORD_SIZE * WOLFSSL_BIT_SIZE |
wolfSSL | 13:f67a6c6013ca | 115 | }; |
wolfSSL | 13:f67a6c6013ca | 116 | |
wolfSSL | 13:f67a6c6013ca | 117 | #define WOLFSSL_MAX_16BIT 0xffffU |
wolfSSL | 13:f67a6c6013ca | 118 | |
wolfSSL | 13:f67a6c6013ca | 119 | /* use inlining if compiler allows */ |
wolfSSL | 13:f67a6c6013ca | 120 | #ifndef INLINE |
wolfSSL | 13:f67a6c6013ca | 121 | #ifndef NO_INLINE |
wolfSSL | 13:f67a6c6013ca | 122 | #ifdef _MSC_VER |
wolfSSL | 13:f67a6c6013ca | 123 | #define INLINE __inline |
wolfSSL | 13:f67a6c6013ca | 124 | #elif defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 125 | #ifdef WOLFSSL_VXWORKS |
wolfSSL | 13:f67a6c6013ca | 126 | #define INLINE __inline__ |
wolfSSL | 13:f67a6c6013ca | 127 | #else |
wolfSSL | 13:f67a6c6013ca | 128 | #define INLINE inline |
wolfSSL | 13:f67a6c6013ca | 129 | #endif |
wolfSSL | 13:f67a6c6013ca | 130 | #elif defined(__IAR_SYSTEMS_ICC__) |
wolfSSL | 13:f67a6c6013ca | 131 | #define INLINE inline |
wolfSSL | 13:f67a6c6013ca | 132 | #elif defined(THREADX) |
wolfSSL | 13:f67a6c6013ca | 133 | #define INLINE _Inline |
wolfSSL | 13:f67a6c6013ca | 134 | #else |
wolfSSL | 13:f67a6c6013ca | 135 | #define INLINE |
wolfSSL | 13:f67a6c6013ca | 136 | #endif |
wolfSSL | 13:f67a6c6013ca | 137 | #else |
wolfSSL | 13:f67a6c6013ca | 138 | #define INLINE |
wolfSSL | 13:f67a6c6013ca | 139 | #endif |
wolfSSL | 13:f67a6c6013ca | 140 | #endif |
wolfSSL | 13:f67a6c6013ca | 141 | |
wolfSSL | 13:f67a6c6013ca | 142 | |
wolfSSL | 13:f67a6c6013ca | 143 | /* set up rotate style */ |
wolfSSL | 13:f67a6c6013ca | 144 | #if (defined(_MSC_VER) || defined(__BCPLUSPLUS__)) && \ |
wolfSSL | 13:f67a6c6013ca | 145 | !defined(WOLFSSL_SGX) && !defined(INTIME_RTOS) |
wolfSSL | 13:f67a6c6013ca | 146 | #define INTEL_INTRINSICS |
wolfSSL | 13:f67a6c6013ca | 147 | #define FAST_ROTATE |
wolfSSL | 13:f67a6c6013ca | 148 | #elif defined(__MWERKS__) && TARGET_CPU_PPC |
wolfSSL | 13:f67a6c6013ca | 149 | #define PPC_INTRINSICS |
wolfSSL | 13:f67a6c6013ca | 150 | #define FAST_ROTATE |
wolfSSL | 13:f67a6c6013ca | 151 | #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) |
wolfSSL | 13:f67a6c6013ca | 152 | /* GCC does peephole optimizations which should result in using rotate |
wolfSSL | 13:f67a6c6013ca | 153 | instructions */ |
wolfSSL | 13:f67a6c6013ca | 154 | #define FAST_ROTATE |
wolfSSL | 13:f67a6c6013ca | 155 | #endif |
wolfSSL | 13:f67a6c6013ca | 156 | |
wolfSSL | 13:f67a6c6013ca | 157 | |
wolfSSL | 13:f67a6c6013ca | 158 | /* set up thread local storage if available */ |
wolfSSL | 13:f67a6c6013ca | 159 | #ifdef HAVE_THREAD_LS |
wolfSSL | 13:f67a6c6013ca | 160 | #if defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 161 | #define THREAD_LS_T __declspec(thread) |
wolfSSL | 13:f67a6c6013ca | 162 | /* Thread local storage only in FreeRTOS v8.2.1 and higher */ |
wolfSSL | 13:f67a6c6013ca | 163 | #elif defined(FREERTOS) |
wolfSSL | 13:f67a6c6013ca | 164 | #define THREAD_LS_T |
wolfSSL | 13:f67a6c6013ca | 165 | #else |
wolfSSL | 13:f67a6c6013ca | 166 | #define THREAD_LS_T __thread |
wolfSSL | 13:f67a6c6013ca | 167 | #endif |
wolfSSL | 13:f67a6c6013ca | 168 | #else |
wolfSSL | 13:f67a6c6013ca | 169 | #define THREAD_LS_T |
wolfSSL | 13:f67a6c6013ca | 170 | #endif |
wolfSSL | 13:f67a6c6013ca | 171 | |
wolfSSL | 13:f67a6c6013ca | 172 | /* GCC 7 has new switch() fall-through detection */ |
wolfSSL | 13:f67a6c6013ca | 173 | #if defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 174 | #if ((__GNUC__ > 7) || ((__GNUC__ == 7) && (__GNUC_MINOR__ >= 1))) |
wolfSSL | 13:f67a6c6013ca | 175 | #define FALL_THROUGH __attribute__ ((fallthrough)); |
wolfSSL | 13:f67a6c6013ca | 176 | #endif |
wolfSSL | 13:f67a6c6013ca | 177 | #endif |
wolfSSL | 13:f67a6c6013ca | 178 | #ifndef FALL_THROUGH |
wolfSSL | 13:f67a6c6013ca | 179 | #define FALL_THROUGH |
wolfSSL | 13:f67a6c6013ca | 180 | #endif |
wolfSSL | 13:f67a6c6013ca | 181 | |
wolfSSL | 13:f67a6c6013ca | 182 | /* Micrium will use Visual Studio for compilation but not the Win32 API */ |
wolfSSL | 13:f67a6c6013ca | 183 | #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ |
wolfSSL | 13:f67a6c6013ca | 184 | !defined(FREERTOS_TCP) && !defined(EBSNET) && \ |
wolfSSL | 13:f67a6c6013ca | 185 | !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) |
wolfSSL | 13:f67a6c6013ca | 186 | #define USE_WINDOWS_API |
wolfSSL | 13:f67a6c6013ca | 187 | #endif |
wolfSSL | 13:f67a6c6013ca | 188 | |
wolfSSL | 13:f67a6c6013ca | 189 | |
wolfSSL | 13:f67a6c6013ca | 190 | /* idea to add global alloc override by Moises Guimaraes */ |
wolfSSL | 13:f67a6c6013ca | 191 | /* default to libc stuff */ |
wolfSSL | 13:f67a6c6013ca | 192 | /* XREALLOC is used once in normal math lib, not in fast math lib */ |
wolfSSL | 13:f67a6c6013ca | 193 | /* XFREE on some embeded systems doesn't like free(0) so test */ |
wolfSSL | 13:f67a6c6013ca | 194 | #if defined(HAVE_IO_POOL) |
wolfSSL | 13:f67a6c6013ca | 195 | WOLFSSL_API void* XMALLOC(size_t n, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 196 | WOLFSSL_API void* XREALLOC(void *p, size_t n, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 197 | WOLFSSL_API void XFREE(void *p, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 198 | #elif defined(WOLFSSL_ASYNC_CRYPT) && defined(HAVE_INTEL_QA) |
wolfSSL | 13:f67a6c6013ca | 199 | #include <wolfssl/wolfcrypt/port/intel/quickassist_mem.h> |
wolfSSL | 13:f67a6c6013ca | 200 | #undef USE_WOLFSSL_MEMORY |
wolfSSL | 13:f67a6c6013ca | 201 | #ifdef WOLFSSL_DEBUG_MEMORY |
wolfSSL | 13:f67a6c6013ca | 202 | #define XMALLOC(s, h, t) IntelQaMalloc((s), (h), (t), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 203 | #define XFREE(p, h, t) IntelQaFree((p), (h), (t), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 204 | #define XREALLOC(p, n, h, t) IntelQaRealloc((p), (n), (h), (t), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 205 | #else |
wolfSSL | 13:f67a6c6013ca | 206 | #define XMALLOC(s, h, t) IntelQaMalloc((s), (h), (t)) |
wolfSSL | 13:f67a6c6013ca | 207 | #define XFREE(p, h, t) IntelQaFree((p), (h), (t)) |
wolfSSL | 13:f67a6c6013ca | 208 | #define XREALLOC(p, n, h, t) IntelQaRealloc((p), (n), (h), (t)) |
wolfSSL | 13:f67a6c6013ca | 209 | #endif /* WOLFSSL_DEBUG_MEMORY */ |
wolfSSL | 13:f67a6c6013ca | 210 | #elif defined(XMALLOC_USER) |
wolfSSL | 13:f67a6c6013ca | 211 | /* prototypes for user heap override functions */ |
wolfSSL | 13:f67a6c6013ca | 212 | #include <stddef.h> /* for size_t */ |
wolfSSL | 13:f67a6c6013ca | 213 | extern void *XMALLOC(size_t n, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 214 | extern void *XREALLOC(void *p, size_t n, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 215 | extern void XFREE(void *p, void* heap, int type); |
wolfSSL | 13:f67a6c6013ca | 216 | #elif defined(XMALLOC_OVERRIDE) |
wolfSSL | 13:f67a6c6013ca | 217 | /* override the XMALLOC, XFREE and XREALLOC macros */ |
wolfSSL | 13:f67a6c6013ca | 218 | #elif defined(NO_WOLFSSL_MEMORY) |
wolfSSL | 13:f67a6c6013ca | 219 | /* just use plain C stdlib stuff if desired */ |
wolfSSL | 13:f67a6c6013ca | 220 | #include <stdlib.h> |
wolfSSL | 13:f67a6c6013ca | 221 | #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) |
wolfSSL | 13:f67a6c6013ca | 222 | #define XFREE(p, h, t) {void* xp = (p); if((xp)) free((xp));} |
wolfSSL | 13:f67a6c6013ca | 223 | #define XREALLOC(p, n, h, t) realloc((p), (n)) |
wolfSSL | 13:f67a6c6013ca | 224 | #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \ |
wolfSSL | 13:f67a6c6013ca | 225 | && !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \ |
wolfSSL | 13:f67a6c6013ca | 226 | && !defined(FREESCALE_KSDK_MQX) && !defined(FREESCALE_FREE_RTOS) \ |
wolfSSL | 13:f67a6c6013ca | 227 | && !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\ |
wolfSSL | 13:f67a6c6013ca | 228 | && !defined(WOLFSSL_uITRON4) |
wolfSSL | 13:f67a6c6013ca | 229 | /* default C runtime, can install different routines at runtime via cbs */ |
wolfSSL | 13:f67a6c6013ca | 230 | #include <wolfssl/wolfcrypt/memory.h> |
wolfSSL | 13:f67a6c6013ca | 231 | #ifdef WOLFSSL_STATIC_MEMORY |
wolfSSL | 13:f67a6c6013ca | 232 | #ifdef WOLFSSL_DEBUG_MEMORY |
wolfSSL | 13:f67a6c6013ca | 233 | #define XMALLOC(s, h, t) wolfSSL_Malloc((s), (h), (t), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 234 | #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), (h), (t), __func__, __LINE__);} |
wolfSSL | 13:f67a6c6013ca | 235 | #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), (h), (t), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 236 | #else |
wolfSSL | 13:f67a6c6013ca | 237 | #define XMALLOC(s, h, t) wolfSSL_Malloc((s), (h), (t)) |
wolfSSL | 13:f67a6c6013ca | 238 | #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), (h), (t));} |
wolfSSL | 13:f67a6c6013ca | 239 | #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), (h), (t)) |
wolfSSL | 13:f67a6c6013ca | 240 | #endif /* WOLFSSL_DEBUG_MEMORY */ |
wolfSSL | 13:f67a6c6013ca | 241 | #else |
wolfSSL | 13:f67a6c6013ca | 242 | #ifdef WOLFSSL_DEBUG_MEMORY |
wolfSSL | 13:f67a6c6013ca | 243 | #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s), __func__, __LINE__)) |
wolfSSL | 13:f67a6c6013ca | 244 | #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp), __func__, __LINE__);} |
wolfSSL | 13:f67a6c6013ca | 245 | #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n), __func__, __LINE__) |
wolfSSL | 13:f67a6c6013ca | 246 | #else |
wolfSSL | 13:f67a6c6013ca | 247 | #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) |
wolfSSL | 13:f67a6c6013ca | 248 | #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} |
wolfSSL | 13:f67a6c6013ca | 249 | #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n)) |
wolfSSL | 13:f67a6c6013ca | 250 | #endif /* WOLFSSL_DEBUG_MEMORY */ |
wolfSSL | 13:f67a6c6013ca | 251 | #endif /* WOLFSSL_STATIC_MEMORY */ |
wolfSSL | 13:f67a6c6013ca | 252 | #endif |
wolfSSL | 13:f67a6c6013ca | 253 | |
wolfSSL | 13:f67a6c6013ca | 254 | /* declare/free variable handling for async */ |
wolfSSL | 13:f67a6c6013ca | 255 | #ifdef WOLFSSL_ASYNC_CRYPT |
wolfSSL | 13:f67a6c6013ca | 256 | #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 257 | VAR_TYPE* VAR_NAME = (VAR_TYPE*)XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); |
wolfSSL | 13:f67a6c6013ca | 258 | #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 259 | VAR_TYPE* VAR_NAME = ({ \ |
wolfSSL | 13:f67a6c6013ca | 260 | VAR_TYPE* ptr = XMALLOC(sizeof(VAR_TYPE) * VAR_SIZE, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \ |
wolfSSL | 13:f67a6c6013ca | 261 | if (ptr && INIT_VALUE) { \ |
wolfSSL | 13:f67a6c6013ca | 262 | XMEMCPY(ptr, INIT_VALUE, sizeof(VAR_TYPE) * VAR_SIZE); \ |
wolfSSL | 13:f67a6c6013ca | 263 | } \ |
wolfSSL | 13:f67a6c6013ca | 264 | ptr; \ |
wolfSSL | 13:f67a6c6013ca | 265 | }) |
wolfSSL | 13:f67a6c6013ca | 266 | #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 267 | VAR_TYPE* VAR_NAME[VAR_ITEMS]; \ |
wolfSSL | 13:f67a6c6013ca | 268 | int idx##VAR_NAME; \ |
wolfSSL | 13:f67a6c6013ca | 269 | for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \ |
wolfSSL | 13:f67a6c6013ca | 270 | VAR_NAME[idx##VAR_NAME] = (VAR_TYPE*)XMALLOC(VAR_SIZE, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \ |
wolfSSL | 13:f67a6c6013ca | 271 | } |
wolfSSL | 13:f67a6c6013ca | 272 | #define FREE_VAR(VAR_NAME, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 273 | XFREE(VAR_NAME, HEAP, DYNAMIC_TYPE_WOLF_BIGINT); |
wolfSSL | 13:f67a6c6013ca | 274 | #define FREE_ARRAY(VAR_NAME, VAR_ITEMS, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 275 | for (idx##VAR_NAME=0; idx##VAR_NAME<VAR_ITEMS; idx##VAR_NAME++) { \ |
wolfSSL | 13:f67a6c6013ca | 276 | XFREE(VAR_NAME[idx##VAR_NAME], HEAP, DYNAMIC_TYPE_WOLF_BIGINT); \ |
wolfSSL | 13:f67a6c6013ca | 277 | } |
wolfSSL | 13:f67a6c6013ca | 278 | #else |
wolfSSL | 13:f67a6c6013ca | 279 | #define DECLARE_VAR(VAR_NAME, VAR_TYPE, VAR_SIZE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 280 | VAR_TYPE VAR_NAME[VAR_SIZE] |
wolfSSL | 13:f67a6c6013ca | 281 | #define DECLARE_VAR_INIT(VAR_NAME, VAR_TYPE, VAR_SIZE, INIT_VALUE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 282 | VAR_TYPE* VAR_NAME = (VAR_TYPE*)INIT_VALUE |
wolfSSL | 13:f67a6c6013ca | 283 | #define DECLARE_ARRAY(VAR_NAME, VAR_TYPE, VAR_ITEMS, VAR_SIZE, HEAP) \ |
wolfSSL | 13:f67a6c6013ca | 284 | VAR_TYPE VAR_NAME[VAR_ITEMS][VAR_SIZE] |
wolfSSL | 13:f67a6c6013ca | 285 | #define FREE_VAR(VAR_NAME, HEAP) /* nothing to free, its stack */ |
wolfSSL | 13:f67a6c6013ca | 286 | #define FREE_ARRAY(VAR_NAME, VAR_ITEMS, HEAP) /* nothing to free, its stack */ |
wolfSSL | 13:f67a6c6013ca | 287 | #endif |
wolfSSL | 13:f67a6c6013ca | 288 | |
wolfSSL | 13:f67a6c6013ca | 289 | #ifndef WOLFSSL_LEANPSK |
wolfSSL | 13:f67a6c6013ca | 290 | char* mystrnstr(const char* s1, const char* s2, unsigned int n); |
wolfSSL | 13:f67a6c6013ca | 291 | #endif |
wolfSSL | 13:f67a6c6013ca | 292 | |
wolfSSL | 13:f67a6c6013ca | 293 | #ifndef STRING_USER |
wolfSSL | 13:f67a6c6013ca | 294 | #include <string.h> |
wolfSSL | 13:f67a6c6013ca | 295 | #define XMEMCPY(d,s,l) memcpy((d),(s),(l)) |
wolfSSL | 13:f67a6c6013ca | 296 | #define XMEMSET(b,c,l) memset((b),(c),(l)) |
wolfSSL | 13:f67a6c6013ca | 297 | #define XMEMCMP(s1,s2,n) memcmp((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 298 | #define XMEMMOVE(d,s,l) memmove((d),(s),(l)) |
wolfSSL | 13:f67a6c6013ca | 299 | |
wolfSSL | 13:f67a6c6013ca | 300 | #define XSTRLEN(s1) strlen((s1)) |
wolfSSL | 13:f67a6c6013ca | 301 | #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 302 | /* strstr, strncmp, and strncat only used by wolfSSL proper, |
wolfSSL | 13:f67a6c6013ca | 303 | * not required for wolfCrypt only */ |
wolfSSL | 13:f67a6c6013ca | 304 | #define XSTRSTR(s1,s2) strstr((s1),(s2)) |
wolfSSL | 13:f67a6c6013ca | 305 | #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 306 | #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 307 | #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 308 | |
wolfSSL | 13:f67a6c6013ca | 309 | #ifdef MICROCHIP_PIC32 |
wolfSSL | 13:f67a6c6013ca | 310 | /* XC32 does not support strncasecmp, so use case sensitive one */ |
wolfSSL | 13:f67a6c6013ca | 311 | #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 312 | #elif defined(USE_WINDOWS_API) |
wolfSSL | 13:f67a6c6013ca | 313 | #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 314 | #else |
wolfSSL | 13:f67a6c6013ca | 315 | #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n)) |
wolfSSL | 13:f67a6c6013ca | 316 | #endif |
wolfSSL | 13:f67a6c6013ca | 317 | |
wolfSSL | 13:f67a6c6013ca | 318 | /* snprintf is used in asn.c for GetTimeString and PKCS7 test */ |
wolfSSL | 13:f67a6c6013ca | 319 | #ifndef USE_WINDOWS_API |
wolfSSL | 13:f67a6c6013ca | 320 | #define XSNPRINTF snprintf |
wolfSSL | 13:f67a6c6013ca | 321 | #else |
wolfSSL | 13:f67a6c6013ca | 322 | #define XSNPRINTF _snprintf |
wolfSSL | 13:f67a6c6013ca | 323 | #endif |
wolfSSL | 13:f67a6c6013ca | 324 | |
wolfSSL | 13:f67a6c6013ca | 325 | #if defined(WOLFSSL_CERT_EXT) || defined(HAVE_ALPN) |
wolfSSL | 13:f67a6c6013ca | 326 | /* use only Thread Safe version of strtok */ |
wolfSSL | 13:f67a6c6013ca | 327 | #if !defined(USE_WINDOWS_API) && !defined(INTIME_RTOS) |
wolfSSL | 13:f67a6c6013ca | 328 | #define XSTRTOK strtok_r |
wolfSSL | 13:f67a6c6013ca | 329 | #else |
wolfSSL | 13:f67a6c6013ca | 330 | #define XSTRTOK strtok_s |
wolfSSL | 13:f67a6c6013ca | 331 | |
wolfSSL | 13:f67a6c6013ca | 332 | #ifdef __MINGW32__ |
wolfSSL | 13:f67a6c6013ca | 333 | #pragma GCC diagnostic push |
wolfSSL | 13:f67a6c6013ca | 334 | #pragma GCC diagnostic warning "-Wcpp" |
wolfSSL | 13:f67a6c6013ca | 335 | #warning "MinGW may be missing strtok_s. You can find a public domain implementation here: https://github.com/fletcher/MultiMarkdown-4/blob/master/strtok.c" |
wolfSSL | 13:f67a6c6013ca | 336 | #pragma GCC diagnostic pop |
wolfSSL | 13:f67a6c6013ca | 337 | #endif |
wolfSSL | 13:f67a6c6013ca | 338 | #endif |
wolfSSL | 13:f67a6c6013ca | 339 | #endif |
wolfSSL | 13:f67a6c6013ca | 340 | #endif |
wolfSSL | 13:f67a6c6013ca | 341 | |
wolfSSL | 13:f67a6c6013ca | 342 | #ifndef CTYPE_USER |
wolfSSL | 13:f67a6c6013ca | 343 | #include <ctype.h> |
wolfSSL | 13:f67a6c6013ca | 344 | #if defined(HAVE_ECC) || defined(HAVE_OCSP) || defined(WOLFSSL_KEY_GEN) |
wolfSSL | 13:f67a6c6013ca | 345 | #define XTOUPPER(c) toupper((c)) |
wolfSSL | 13:f67a6c6013ca | 346 | #define XISALPHA(c) isalpha((c)) |
wolfSSL | 13:f67a6c6013ca | 347 | #endif |
wolfSSL | 13:f67a6c6013ca | 348 | /* needed by wolfSSL_check_domain_name() */ |
wolfSSL | 13:f67a6c6013ca | 349 | #define XTOLOWER(c) tolower((c)) |
wolfSSL | 13:f67a6c6013ca | 350 | #endif |
wolfSSL | 13:f67a6c6013ca | 351 | |
wolfSSL | 13:f67a6c6013ca | 352 | |
wolfSSL | 13:f67a6c6013ca | 353 | /* memory allocation types for user hints */ |
wolfSSL | 13:f67a6c6013ca | 354 | enum { |
wolfSSL | 13:f67a6c6013ca | 355 | DYNAMIC_TYPE_CA = 1, |
wolfSSL | 13:f67a6c6013ca | 356 | DYNAMIC_TYPE_CERT = 2, |
wolfSSL | 13:f67a6c6013ca | 357 | DYNAMIC_TYPE_KEY = 3, |
wolfSSL | 13:f67a6c6013ca | 358 | DYNAMIC_TYPE_FILE = 4, |
wolfSSL | 13:f67a6c6013ca | 359 | DYNAMIC_TYPE_SUBJECT_CN = 5, |
wolfSSL | 13:f67a6c6013ca | 360 | DYNAMIC_TYPE_PUBLIC_KEY = 6, |
wolfSSL | 13:f67a6c6013ca | 361 | DYNAMIC_TYPE_SIGNER = 7, |
wolfSSL | 13:f67a6c6013ca | 362 | DYNAMIC_TYPE_NONE = 8, |
wolfSSL | 13:f67a6c6013ca | 363 | DYNAMIC_TYPE_BIGINT = 9, |
wolfSSL | 13:f67a6c6013ca | 364 | DYNAMIC_TYPE_RSA = 10, |
wolfSSL | 13:f67a6c6013ca | 365 | DYNAMIC_TYPE_METHOD = 11, |
wolfSSL | 13:f67a6c6013ca | 366 | DYNAMIC_TYPE_OUT_BUFFER = 12, |
wolfSSL | 13:f67a6c6013ca | 367 | DYNAMIC_TYPE_IN_BUFFER = 13, |
wolfSSL | 13:f67a6c6013ca | 368 | DYNAMIC_TYPE_INFO = 14, |
wolfSSL | 13:f67a6c6013ca | 369 | DYNAMIC_TYPE_DH = 15, |
wolfSSL | 13:f67a6c6013ca | 370 | DYNAMIC_TYPE_DOMAIN = 16, |
wolfSSL | 13:f67a6c6013ca | 371 | DYNAMIC_TYPE_SSL = 17, |
wolfSSL | 13:f67a6c6013ca | 372 | DYNAMIC_TYPE_CTX = 18, |
wolfSSL | 13:f67a6c6013ca | 373 | DYNAMIC_TYPE_WRITEV = 19, |
wolfSSL | 13:f67a6c6013ca | 374 | DYNAMIC_TYPE_OPENSSL = 20, |
wolfSSL | 13:f67a6c6013ca | 375 | DYNAMIC_TYPE_DSA = 21, |
wolfSSL | 13:f67a6c6013ca | 376 | DYNAMIC_TYPE_CRL = 22, |
wolfSSL | 13:f67a6c6013ca | 377 | DYNAMIC_TYPE_REVOKED = 23, |
wolfSSL | 13:f67a6c6013ca | 378 | DYNAMIC_TYPE_CRL_ENTRY = 24, |
wolfSSL | 13:f67a6c6013ca | 379 | DYNAMIC_TYPE_CERT_MANAGER = 25, |
wolfSSL | 13:f67a6c6013ca | 380 | DYNAMIC_TYPE_CRL_MONITOR = 26, |
wolfSSL | 13:f67a6c6013ca | 381 | DYNAMIC_TYPE_OCSP_STATUS = 27, |
wolfSSL | 13:f67a6c6013ca | 382 | DYNAMIC_TYPE_OCSP_ENTRY = 28, |
wolfSSL | 13:f67a6c6013ca | 383 | DYNAMIC_TYPE_ALTNAME = 29, |
wolfSSL | 13:f67a6c6013ca | 384 | DYNAMIC_TYPE_SUITES = 30, |
wolfSSL | 13:f67a6c6013ca | 385 | DYNAMIC_TYPE_CIPHER = 31, |
wolfSSL | 13:f67a6c6013ca | 386 | DYNAMIC_TYPE_RNG = 32, |
wolfSSL | 13:f67a6c6013ca | 387 | DYNAMIC_TYPE_ARRAYS = 33, |
wolfSSL | 13:f67a6c6013ca | 388 | DYNAMIC_TYPE_DTLS_POOL = 34, |
wolfSSL | 13:f67a6c6013ca | 389 | DYNAMIC_TYPE_SOCKADDR = 35, |
wolfSSL | 13:f67a6c6013ca | 390 | DYNAMIC_TYPE_LIBZ = 36, |
wolfSSL | 13:f67a6c6013ca | 391 | DYNAMIC_TYPE_ECC = 37, |
wolfSSL | 13:f67a6c6013ca | 392 | DYNAMIC_TYPE_TMP_BUFFER = 38, |
wolfSSL | 13:f67a6c6013ca | 393 | DYNAMIC_TYPE_DTLS_MSG = 39, |
wolfSSL | 13:f67a6c6013ca | 394 | DYNAMIC_TYPE_X509 = 40, |
wolfSSL | 13:f67a6c6013ca | 395 | DYNAMIC_TYPE_TLSX = 41, |
wolfSSL | 13:f67a6c6013ca | 396 | DYNAMIC_TYPE_OCSP = 42, |
wolfSSL | 13:f67a6c6013ca | 397 | DYNAMIC_TYPE_SIGNATURE = 43, |
wolfSSL | 13:f67a6c6013ca | 398 | DYNAMIC_TYPE_HASHES = 44, |
wolfSSL | 13:f67a6c6013ca | 399 | DYNAMIC_TYPE_SRP = 45, |
wolfSSL | 13:f67a6c6013ca | 400 | DYNAMIC_TYPE_COOKIE_PWD = 46, |
wolfSSL | 13:f67a6c6013ca | 401 | DYNAMIC_TYPE_USER_CRYPTO = 47, |
wolfSSL | 13:f67a6c6013ca | 402 | DYNAMIC_TYPE_OCSP_REQUEST = 48, |
wolfSSL | 13:f67a6c6013ca | 403 | DYNAMIC_TYPE_X509_EXT = 49, |
wolfSSL | 13:f67a6c6013ca | 404 | DYNAMIC_TYPE_X509_STORE = 50, |
wolfSSL | 13:f67a6c6013ca | 405 | DYNAMIC_TYPE_X509_CTX = 51, |
wolfSSL | 13:f67a6c6013ca | 406 | DYNAMIC_TYPE_URL = 52, |
wolfSSL | 13:f67a6c6013ca | 407 | DYNAMIC_TYPE_DTLS_FRAG = 53, |
wolfSSL | 13:f67a6c6013ca | 408 | DYNAMIC_TYPE_DTLS_BUFFER = 54, |
wolfSSL | 13:f67a6c6013ca | 409 | DYNAMIC_TYPE_SESSION_TICK = 55, |
wolfSSL | 13:f67a6c6013ca | 410 | DYNAMIC_TYPE_PKCS = 56, |
wolfSSL | 13:f67a6c6013ca | 411 | DYNAMIC_TYPE_MUTEX = 57, |
wolfSSL | 13:f67a6c6013ca | 412 | DYNAMIC_TYPE_PKCS7 = 58, |
wolfSSL | 13:f67a6c6013ca | 413 | DYNAMIC_TYPE_AES_BUFFER = 59, |
wolfSSL | 13:f67a6c6013ca | 414 | DYNAMIC_TYPE_WOLF_BIGINT = 60, |
wolfSSL | 13:f67a6c6013ca | 415 | DYNAMIC_TYPE_ASN1 = 61, |
wolfSSL | 13:f67a6c6013ca | 416 | DYNAMIC_TYPE_LOG = 62, |
wolfSSL | 13:f67a6c6013ca | 417 | DYNAMIC_TYPE_WRITEDUP = 63, |
wolfSSL | 13:f67a6c6013ca | 418 | DYNAMIC_TYPE_PRIVATE_KEY = 64, |
wolfSSL | 13:f67a6c6013ca | 419 | DYNAMIC_TYPE_HMAC = 65, |
wolfSSL | 13:f67a6c6013ca | 420 | DYNAMIC_TYPE_ASYNC = 66, |
wolfSSL | 13:f67a6c6013ca | 421 | DYNAMIC_TYPE_ASYNC_NUMA = 67, |
wolfSSL | 13:f67a6c6013ca | 422 | DYNAMIC_TYPE_ASYNC_NUMA64 = 68, |
wolfSSL | 13:f67a6c6013ca | 423 | DYNAMIC_TYPE_CURVE25519 = 69, |
wolfSSL | 13:f67a6c6013ca | 424 | DYNAMIC_TYPE_ED25519 = 70, |
wolfSSL | 13:f67a6c6013ca | 425 | DYNAMIC_TYPE_SECRET = 71, |
wolfSSL | 13:f67a6c6013ca | 426 | DYNAMIC_TYPE_DIGEST = 72, |
wolfSSL | 13:f67a6c6013ca | 427 | DYNAMIC_TYPE_RSA_BUFFER = 73, |
wolfSSL | 13:f67a6c6013ca | 428 | DYNAMIC_TYPE_DCERT = 74, |
wolfSSL | 13:f67a6c6013ca | 429 | DYNAMIC_TYPE_STRING = 75, |
wolfSSL | 13:f67a6c6013ca | 430 | DYNAMIC_TYPE_PEM = 76, |
wolfSSL | 13:f67a6c6013ca | 431 | DYNAMIC_TYPE_DER = 77, |
wolfSSL | 13:f67a6c6013ca | 432 | DYNAMIC_TYPE_CERT_EXT = 78, |
wolfSSL | 13:f67a6c6013ca | 433 | DYNAMIC_TYPE_ALPN = 79, |
wolfSSL | 13:f67a6c6013ca | 434 | DYNAMIC_TYPE_ENCRYPTEDINFO= 80, |
wolfSSL | 13:f67a6c6013ca | 435 | DYNAMIC_TYPE_DIRCTX = 81, |
wolfSSL | 13:f67a6c6013ca | 436 | DYNAMIC_TYPE_HASHCTX = 82, |
wolfSSL | 13:f67a6c6013ca | 437 | DYNAMIC_TYPE_SEED = 83, |
wolfSSL | 13:f67a6c6013ca | 438 | DYNAMIC_TYPE_SYMETRIC_KEY = 84, |
wolfSSL | 13:f67a6c6013ca | 439 | DYNAMIC_TYPE_ECC_BUFFER = 85, |
wolfSSL | 13:f67a6c6013ca | 440 | DYNAMIC_TYPE_QSH = 86, |
wolfSSL | 13:f67a6c6013ca | 441 | DYNAMIC_TYPE_SALT = 87, |
wolfSSL | 13:f67a6c6013ca | 442 | DYNAMIC_TYPE_HASH_TMP = 88, |
wolfSSL | 13:f67a6c6013ca | 443 | }; |
wolfSSL | 13:f67a6c6013ca | 444 | |
wolfSSL | 13:f67a6c6013ca | 445 | /* max error buffer string size */ |
wolfSSL | 13:f67a6c6013ca | 446 | enum { |
wolfSSL | 13:f67a6c6013ca | 447 | WOLFSSL_MAX_ERROR_SZ = 80 |
wolfSSL | 13:f67a6c6013ca | 448 | }; |
wolfSSL | 13:f67a6c6013ca | 449 | |
wolfSSL | 13:f67a6c6013ca | 450 | /* stack protection */ |
wolfSSL | 13:f67a6c6013ca | 451 | enum { |
wolfSSL | 13:f67a6c6013ca | 452 | MIN_STACK_BUFFER = 8 |
wolfSSL | 13:f67a6c6013ca | 453 | }; |
wolfSSL | 13:f67a6c6013ca | 454 | |
wolfSSL | 13:f67a6c6013ca | 455 | |
wolfSSL | 13:f67a6c6013ca | 456 | |
wolfSSL | 13:f67a6c6013ca | 457 | /* settings detection for compile vs runtime math incompatibilities */ |
wolfSSL | 13:f67a6c6013ca | 458 | enum { |
wolfSSL | 13:f67a6c6013ca | 459 | #if !defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG) |
wolfSSL | 13:f67a6c6013ca | 460 | CTC_SETTINGS = 0x0 |
wolfSSL | 13:f67a6c6013ca | 461 | #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) |
wolfSSL | 13:f67a6c6013ca | 462 | CTC_SETTINGS = 0x1 |
wolfSSL | 13:f67a6c6013ca | 463 | #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8) |
wolfSSL | 13:f67a6c6013ca | 464 | CTC_SETTINGS = 0x2 |
wolfSSL | 13:f67a6c6013ca | 465 | #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4) |
wolfSSL | 13:f67a6c6013ca | 466 | CTC_SETTINGS = 0x4 |
wolfSSL | 13:f67a6c6013ca | 467 | #elif defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG) |
wolfSSL | 13:f67a6c6013ca | 468 | CTC_SETTINGS = 0x8 |
wolfSSL | 13:f67a6c6013ca | 469 | #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) |
wolfSSL | 13:f67a6c6013ca | 470 | CTC_SETTINGS = 0x10 |
wolfSSL | 13:f67a6c6013ca | 471 | #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8) |
wolfSSL | 13:f67a6c6013ca | 472 | CTC_SETTINGS = 0x20 |
wolfSSL | 13:f67a6c6013ca | 473 | #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4) |
wolfSSL | 13:f67a6c6013ca | 474 | CTC_SETTINGS = 0x40 |
wolfSSL | 13:f67a6c6013ca | 475 | #else |
wolfSSL | 13:f67a6c6013ca | 476 | #error "bad math long / long long settings" |
wolfSSL | 13:f67a6c6013ca | 477 | #endif |
wolfSSL | 13:f67a6c6013ca | 478 | }; |
wolfSSL | 13:f67a6c6013ca | 479 | |
wolfSSL | 13:f67a6c6013ca | 480 | |
wolfSSL | 13:f67a6c6013ca | 481 | WOLFSSL_API word32 CheckRunTimeSettings(void); |
wolfSSL | 13:f67a6c6013ca | 482 | |
wolfSSL | 13:f67a6c6013ca | 483 | /* If user uses RSA, DH, DSA, or ECC math lib directly then fast math and long |
wolfSSL | 13:f67a6c6013ca | 484 | types need to match at compile time and run time, CheckCtcSettings will |
wolfSSL | 13:f67a6c6013ca | 485 | return 1 if a match otherwise 0 */ |
wolfSSL | 13:f67a6c6013ca | 486 | #define CheckCtcSettings() (CTC_SETTINGS == CheckRunTimeSettings()) |
wolfSSL | 13:f67a6c6013ca | 487 | |
wolfSSL | 13:f67a6c6013ca | 488 | /* invalid device id */ |
wolfSSL | 13:f67a6c6013ca | 489 | #define INVALID_DEVID -2 |
wolfSSL | 13:f67a6c6013ca | 490 | |
wolfSSL | 13:f67a6c6013ca | 491 | |
wolfSSL | 13:f67a6c6013ca | 492 | /* AESNI requires alignment and ARMASM gains some performance from it */ |
wolfSSL | 13:f67a6c6013ca | 493 | #if defined(WOLFSSL_AESNI) || defined(WOLFSSL_ARMASM) || defined(USE_INTEL_SPEEDUP) |
wolfSSL | 13:f67a6c6013ca | 494 | #if !defined(ALIGN16) |
wolfSSL | 13:f67a6c6013ca | 495 | #if defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 496 | #define ALIGN16 __attribute__ ( (aligned (16))) |
wolfSSL | 13:f67a6c6013ca | 497 | #elif defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 498 | /* disable align warning, we want alignment ! */ |
wolfSSL | 13:f67a6c6013ca | 499 | #pragma warning(disable: 4324) |
wolfSSL | 13:f67a6c6013ca | 500 | #define ALIGN16 __declspec (align (16)) |
wolfSSL | 13:f67a6c6013ca | 501 | #else |
wolfSSL | 13:f67a6c6013ca | 502 | #define ALIGN16 |
wolfSSL | 13:f67a6c6013ca | 503 | #endif |
wolfSSL | 13:f67a6c6013ca | 504 | #endif /* !ALIGN16 */ |
wolfSSL | 13:f67a6c6013ca | 505 | |
wolfSSL | 13:f67a6c6013ca | 506 | #if !defined (ALIGN32) |
wolfSSL | 13:f67a6c6013ca | 507 | #if defined (__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 508 | #define ALIGN32 __attribute__ ( (aligned (32))) |
wolfSSL | 13:f67a6c6013ca | 509 | #elif defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 510 | /* disable align warning, we want alignment ! */ |
wolfSSL | 13:f67a6c6013ca | 511 | #pragma warning(disable: 4324) |
wolfSSL | 13:f67a6c6013ca | 512 | #define ALIGN32 __declspec (align (32)) |
wolfSSL | 13:f67a6c6013ca | 513 | #else |
wolfSSL | 13:f67a6c6013ca | 514 | #define ALIGN32 |
wolfSSL | 13:f67a6c6013ca | 515 | #endif |
wolfSSL | 13:f67a6c6013ca | 516 | #endif |
wolfSSL | 13:f67a6c6013ca | 517 | |
wolfSSL | 13:f67a6c6013ca | 518 | #if !defined(ALIGN32) |
wolfSSL | 13:f67a6c6013ca | 519 | #if defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 520 | #define ALIGN32 __attribute__ ( (aligned (32))) |
wolfSSL | 13:f67a6c6013ca | 521 | #elif defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 522 | /* disable align warning, we want alignment ! */ |
wolfSSL | 13:f67a6c6013ca | 523 | #pragma warning(disable: 4324) |
wolfSSL | 13:f67a6c6013ca | 524 | #define ALIGN32 __declspec (align (32)) |
wolfSSL | 13:f67a6c6013ca | 525 | #else |
wolfSSL | 13:f67a6c6013ca | 526 | #define ALIGN32 |
wolfSSL | 13:f67a6c6013ca | 527 | #endif |
wolfSSL | 13:f67a6c6013ca | 528 | #endif /* !ALIGN32 */ |
wolfSSL | 13:f67a6c6013ca | 529 | |
wolfSSL | 13:f67a6c6013ca | 530 | #if defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 531 | #define ALIGN128 __attribute__ ( (aligned (128))) |
wolfSSL | 13:f67a6c6013ca | 532 | #elif defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 533 | /* disable align warning, we want alignment ! */ |
wolfSSL | 13:f67a6c6013ca | 534 | #pragma warning(disable: 4324) |
wolfSSL | 13:f67a6c6013ca | 535 | #define ALIGN128 __declspec (align (128)) |
wolfSSL | 13:f67a6c6013ca | 536 | #else |
wolfSSL | 13:f67a6c6013ca | 537 | #define ALIGN128 |
wolfSSL | 13:f67a6c6013ca | 538 | #endif |
wolfSSL | 13:f67a6c6013ca | 539 | |
wolfSSL | 13:f67a6c6013ca | 540 | #if defined(__GNUC__) |
wolfSSL | 13:f67a6c6013ca | 541 | #define ALIGN256 __attribute__ ( (aligned (256))) |
wolfSSL | 13:f67a6c6013ca | 542 | #elif defined(_MSC_VER) |
wolfSSL | 13:f67a6c6013ca | 543 | /* disable align warning, we want alignment ! */ |
wolfSSL | 13:f67a6c6013ca | 544 | #pragma warning(disable: 4324) |
wolfSSL | 13:f67a6c6013ca | 545 | #define ALIGN256 __declspec (align (256)) |
wolfSSL | 13:f67a6c6013ca | 546 | #else |
wolfSSL | 13:f67a6c6013ca | 547 | #define ALIGN256 |
wolfSSL | 13:f67a6c6013ca | 548 | #endif |
wolfSSL | 13:f67a6c6013ca | 549 | |
wolfSSL | 13:f67a6c6013ca | 550 | #else |
wolfSSL | 13:f67a6c6013ca | 551 | #ifndef ALIGN16 |
wolfSSL | 13:f67a6c6013ca | 552 | #define ALIGN16 |
wolfSSL | 13:f67a6c6013ca | 553 | #endif |
wolfSSL | 13:f67a6c6013ca | 554 | #ifndef ALIGN32 |
wolfSSL | 13:f67a6c6013ca | 555 | #define ALIGN32 |
wolfSSL | 13:f67a6c6013ca | 556 | #endif |
wolfSSL | 13:f67a6c6013ca | 557 | #ifndef ALIGN128 |
wolfSSL | 13:f67a6c6013ca | 558 | #define ALIGN128 |
wolfSSL | 13:f67a6c6013ca | 559 | #endif |
wolfSSL | 13:f67a6c6013ca | 560 | #ifndef ALIGN256 |
wolfSSL | 13:f67a6c6013ca | 561 | #define ALIGN256 |
wolfSSL | 13:f67a6c6013ca | 562 | #endif |
wolfSSL | 13:f67a6c6013ca | 563 | #endif /* WOLFSSL_AESNI || WOLFSSL_ARMASM */ |
wolfSSL | 13:f67a6c6013ca | 564 | |
wolfSSL | 13:f67a6c6013ca | 565 | |
wolfSSL | 13:f67a6c6013ca | 566 | #ifndef TRUE |
wolfSSL | 13:f67a6c6013ca | 567 | #define TRUE 1 |
wolfSSL | 13:f67a6c6013ca | 568 | #endif |
wolfSSL | 13:f67a6c6013ca | 569 | #ifndef FALSE |
wolfSSL | 13:f67a6c6013ca | 570 | #define FALSE 0 |
wolfSSL | 13:f67a6c6013ca | 571 | #endif |
wolfSSL | 13:f67a6c6013ca | 572 | |
wolfSSL | 13:f67a6c6013ca | 573 | |
wolfSSL | 13:f67a6c6013ca | 574 | #ifdef WOLFSSL_RIOT_OS |
wolfSSL | 13:f67a6c6013ca | 575 | #define EXIT_TEST(ret) exit(ret) |
wolfSSL | 13:f67a6c6013ca | 576 | #elif defined(HAVE_STACK_SIZE) |
wolfSSL | 13:f67a6c6013ca | 577 | #define EXIT_TEST(ret) return (void*)((size_t)(ret)) |
wolfSSL | 13:f67a6c6013ca | 578 | #else |
wolfSSL | 13:f67a6c6013ca | 579 | #define EXIT_TEST(ret) return ret |
wolfSSL | 13:f67a6c6013ca | 580 | #endif |
wolfSSL | 13:f67a6c6013ca | 581 | |
wolfSSL | 13:f67a6c6013ca | 582 | #ifdef __cplusplus |
wolfSSL | 13:f67a6c6013ca | 583 | } /* extern "C" */ |
wolfSSL | 13:f67a6c6013ca | 584 | #endif |
wolfSSL | 13:f67a6c6013ca | 585 | |
wolfSSL | 13:f67a6c6013ca | 586 | #endif /* WOLF_CRYPT_TYPES_H */ |
wolfSSL | 13:f67a6c6013ca | 587 |