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