This is a port of cyaSSL 2.7.0.

Dependents:   CyaSSL_DTLS_Cellular CyaSSL_DTLS_Ethernet

Committer:
ashleymills
Date:
Thu Sep 05 15:55:50 2013 +0000
Revision:
1:c0ce1562443a
Parent:
0:714293de3836
Nothing;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 0:714293de3836 1 /* types.h
ashleymills 0:714293de3836 2 *
ashleymills 0:714293de3836 3 * Copyright (C) 2006-2013 wolfSSL Inc.
ashleymills 0:714293de3836 4 *
ashleymills 0:714293de3836 5 * This file is part of CyaSSL.
ashleymills 0:714293de3836 6 *
ashleymills 0:714293de3836 7 * CyaSSL is free software; you can redistribute it and/or modify
ashleymills 0:714293de3836 8 * it under the terms of the GNU General Public License as published by
ashleymills 0:714293de3836 9 * the Free Software Foundation; either version 2 of the License, or
ashleymills 0:714293de3836 10 * (at your option) any later version.
ashleymills 0:714293de3836 11 *
ashleymills 0:714293de3836 12 * CyaSSL is distributed in the hope that it will be useful,
ashleymills 0:714293de3836 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ashleymills 0:714293de3836 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ashleymills 0:714293de3836 15 * GNU General Public License for more details.
ashleymills 0:714293de3836 16 *
ashleymills 0:714293de3836 17 * You should have received a copy of the GNU General Public License
ashleymills 0:714293de3836 18 * along with this program; if not, write to the Free Software
ashleymills 0:714293de3836 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
ashleymills 0:714293de3836 20 */
ashleymills 0:714293de3836 21
ashleymills 0:714293de3836 22
ashleymills 0:714293de3836 23 #ifndef CTAO_CRYPT_TYPES_H
ashleymills 0:714293de3836 24 #define CTAO_CRYPT_TYPES_H
ashleymills 0:714293de3836 25
ashleymills 0:714293de3836 26 #include <cyassl/ctaocrypt/settings.h>
ashleymills 0:714293de3836 27
ashleymills 0:714293de3836 28 #ifdef __cplusplus
ashleymills 0:714293de3836 29 extern "C" {
ashleymills 0:714293de3836 30 #endif
ashleymills 0:714293de3836 31
ashleymills 0:714293de3836 32
ashleymills 0:714293de3836 33 #if defined(WORDS_BIGENDIAN)
ashleymills 0:714293de3836 34 #define BIG_ENDIAN_ORDER
ashleymills 0:714293de3836 35 #endif
ashleymills 0:714293de3836 36
ashleymills 0:714293de3836 37 #ifndef BIG_ENDIAN_ORDER
ashleymills 0:714293de3836 38 #define LITTLE_ENDIAN_ORDER
ashleymills 0:714293de3836 39 #endif
ashleymills 0:714293de3836 40
ashleymills 0:714293de3836 41 #ifndef CYASSL_TYPES
ashleymills 0:714293de3836 42 #ifndef byte
ashleymills 0:714293de3836 43 typedef unsigned char byte;
ashleymills 0:714293de3836 44 #endif
ashleymills 0:714293de3836 45 typedef unsigned short word16;
ashleymills 0:714293de3836 46 typedef unsigned int word32;
ashleymills 0:714293de3836 47 #endif
ashleymills 0:714293de3836 48
ashleymills 0:714293de3836 49
ashleymills 0:714293de3836 50 /* try to set SIZEOF_LONG or LONG_LONG if user didn't */
ashleymills 0:714293de3836 51 #if !defined(_MSC_VER) && !defined(__BCPLUSPLUS__)
ashleymills 0:714293de3836 52 #if !defined(SIZEOF_LONG_LONG) && !defined(SIZEOF_LONG)
ashleymills 0:714293de3836 53 #if (defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) \
ashleymills 0:714293de3836 54 || defined(__mips64) || defined(__x86_64__))
ashleymills 0:714293de3836 55 /* long should be 64bit */
ashleymills 0:714293de3836 56 #define SIZEOF_LONG 8
ashleymills 0:714293de3836 57 #elif defined(__i386__) || defined(__CORTEX_M3__)
ashleymills 0:714293de3836 58 /* long long should be 64bit */
ashleymills 0:714293de3836 59 #define SIZEOF_LONG_LONG 8
ashleymills 0:714293de3836 60 #endif
ashleymills 0:714293de3836 61 #endif
ashleymills 0:714293de3836 62 #endif
ashleymills 0:714293de3836 63
ashleymills 0:714293de3836 64
ashleymills 0:714293de3836 65 #if defined(_MSC_VER) || defined(__BCPLUSPLUS__)
ashleymills 0:714293de3836 66 #define WORD64_AVAILABLE
ashleymills 0:714293de3836 67 #define W64LIT(x) x##ui64
ashleymills 0:714293de3836 68 typedef unsigned __int64 word64;
ashleymills 0:714293de3836 69 #elif defined(SIZEOF_LONG) && SIZEOF_LONG == 8
ashleymills 0:714293de3836 70 #define WORD64_AVAILABLE
ashleymills 0:714293de3836 71 #define W64LIT(x) x##LL
ashleymills 0:714293de3836 72 typedef unsigned long word64;
ashleymills 0:714293de3836 73 #elif defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG == 8
ashleymills 0:714293de3836 74 #define WORD64_AVAILABLE
ashleymills 0:714293de3836 75 #define W64LIT(x) x##LL
ashleymills 0:714293de3836 76 typedef unsigned long long word64;
ashleymills 0:714293de3836 77 #elif defined(__SIZEOF_LONG_LONG__) && __SIZEOF_LONG_LONG__ == 8
ashleymills 0:714293de3836 78 #define WORD64_AVAILABLE
ashleymills 0:714293de3836 79 #define W64LIT(x) x##LL
ashleymills 0:714293de3836 80 typedef unsigned long long word64;
ashleymills 0:714293de3836 81 #else
ashleymills 0:714293de3836 82 #define MP_16BIT /* for mp_int, mp_word needs to be twice as big as
ashleymills 0:714293de3836 83 mp_digit, no 64 bit type so make mp_digit 16 bit */
ashleymills 0:714293de3836 84 #endif
ashleymills 0:714293de3836 85
ashleymills 0:714293de3836 86
ashleymills 0:714293de3836 87 /* These platforms have 64-bit CPU registers. */
ashleymills 0:714293de3836 88 #if (defined(__alpha__) || defined(__ia64__) || defined(_ARCH_PPC64) || \
ashleymills 0:714293de3836 89 defined(__mips64) || defined(__x86_64__) || defined(_M_X64))
ashleymills 0:714293de3836 90 typedef word64 word;
ashleymills 0:714293de3836 91 #else
ashleymills 0:714293de3836 92 typedef word32 word;
ashleymills 0:714293de3836 93 #ifdef WORD64_AVAILABLE
ashleymills 0:714293de3836 94 #define CTAOCRYPT_SLOW_WORD64
ashleymills 0:714293de3836 95 #endif
ashleymills 0:714293de3836 96 #endif
ashleymills 0:714293de3836 97
ashleymills 0:714293de3836 98
ashleymills 0:714293de3836 99 enum {
ashleymills 0:714293de3836 100 CYASSL_WORD_SIZE = sizeof(word),
ashleymills 0:714293de3836 101 CYASSL_BIT_SIZE = 8,
ashleymills 0:714293de3836 102 CYASSL_WORD_BITS = CYASSL_WORD_SIZE * CYASSL_BIT_SIZE
ashleymills 0:714293de3836 103 };
ashleymills 0:714293de3836 104
ashleymills 0:714293de3836 105 #define CYASSL_MAX_16BIT 0xffffU
ashleymills 0:714293de3836 106
ashleymills 0:714293de3836 107 /* use inlining if compiler allows */
ashleymills 0:714293de3836 108 #ifndef INLINE
ashleymills 0:714293de3836 109 #ifndef NO_INLINE
ashleymills 0:714293de3836 110 #ifdef _MSC_VER
ashleymills 0:714293de3836 111 #define INLINE __inline
ashleymills 0:714293de3836 112 #elif defined(__GNUC__)
ashleymills 0:714293de3836 113 #define INLINE inline
ashleymills 0:714293de3836 114 #elif defined(__IAR_SYSTEMS_ICC__)
ashleymills 0:714293de3836 115 #define INLINE inline
ashleymills 0:714293de3836 116 #elif defined(THREADX)
ashleymills 0:714293de3836 117 #define INLINE _Inline
ashleymills 0:714293de3836 118 #else
ashleymills 0:714293de3836 119 #define INLINE
ashleymills 0:714293de3836 120 #endif
ashleymills 0:714293de3836 121 #else
ashleymills 0:714293de3836 122 #define INLINE
ashleymills 0:714293de3836 123 #endif
ashleymills 0:714293de3836 124 #endif
ashleymills 0:714293de3836 125
ashleymills 0:714293de3836 126
ashleymills 0:714293de3836 127 /* set up rotate style */
ashleymills 0:714293de3836 128 #if defined(_MSC_VER) || defined(__BCPLUSPLUS__)
ashleymills 0:714293de3836 129 #define INTEL_INTRINSICS
ashleymills 0:714293de3836 130 #define FAST_ROTATE
ashleymills 0:714293de3836 131 #elif defined(__MWERKS__) && TARGET_CPU_PPC
ashleymills 0:714293de3836 132 #define PPC_INTRINSICS
ashleymills 0:714293de3836 133 #define FAST_ROTATE
ashleymills 0:714293de3836 134 #elif defined(__GNUC__) && defined(__i386__)
ashleymills 0:714293de3836 135 /* GCC does peephole optimizations which should result in using rotate
ashleymills 0:714293de3836 136 instructions */
ashleymills 0:714293de3836 137 #define FAST_ROTATE
ashleymills 0:714293de3836 138 #endif
ashleymills 0:714293de3836 139
ashleymills 0:714293de3836 140
ashleymills 0:714293de3836 141 /* Micrium will use Visual Studio for compilation but not the Win32 API */
ashleymills 0:714293de3836 142 #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) \
ashleymills 0:714293de3836 143 && !defined(EBSNET)
ashleymills 0:714293de3836 144 #define USE_WINDOWS_API
ashleymills 0:714293de3836 145 #endif
ashleymills 0:714293de3836 146
ashleymills 0:714293de3836 147
ashleymills 0:714293de3836 148 /* idea to add global alloc override by Moisés Guimarães */
ashleymills 0:714293de3836 149 /* default to libc stuff */
ashleymills 0:714293de3836 150 /* XREALLOC is used once in normal math lib, not in fast math lib */
ashleymills 0:714293de3836 151 /* XFREE on some embeded systems doesn't like free(0) so test */
ashleymills 0:714293de3836 152 #if defined(XMALLOC_USER)
ashleymills 0:714293de3836 153 /* prototypes for user heap override functions */
ashleymills 0:714293de3836 154 #include <stddef.h> /* for size_t */
ashleymills 0:714293de3836 155 extern void *XMALLOC(size_t n, void* heap, int type);
ashleymills 0:714293de3836 156 extern void *XREALLOC(void *p, size_t n, void* heap, int type);
ashleymills 0:714293de3836 157 extern void XFREE(void *p, void* heap, int type);
ashleymills 0:714293de3836 158 #elif defined(NO_CYASSL_MEMORY)
ashleymills 0:714293de3836 159 /* just use plain C stdlib stuff if desired */
ashleymills 0:714293de3836 160 #include <stdlib.h>
ashleymills 0:714293de3836 161 #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s)))
ashleymills 0:714293de3836 162 #define XFREE(p, h, t) {void* xp = (p); if((xp)) free((xp));}
ashleymills 0:714293de3836 163 #define XREALLOC(p, n, h, t) realloc((p), (n))
ashleymills 0:714293de3836 164 #elif !defined(MICRIUM_MALLOC) && !defined(EBSNET) \
ashleymills 0:714293de3836 165 && !defined(CYASSL_SAFERTOS) && !defined(FREESCALE_MQX) \
ashleymills 0:714293de3836 166 && !defined(CYASSL_LEANPSK)
ashleymills 0:714293de3836 167 /* default C runtime, can install different routines at runtime via cbs */
ashleymills 0:714293de3836 168 #include <cyassl/ctaocrypt/memory.h>
ashleymills 0:714293de3836 169 #define XMALLOC(s, h, t) ((void)h, (void)t, CyaSSL_Malloc((s)))
ashleymills 0:714293de3836 170 #define XFREE(p, h, t) {void* xp = (p); if((xp)) CyaSSL_Free((xp));}
ashleymills 0:714293de3836 171 #define XREALLOC(p, n, h, t) CyaSSL_Realloc((p), (n))
ashleymills 0:714293de3836 172 #endif
ashleymills 0:714293de3836 173
ashleymills 0:714293de3836 174 #ifndef STRING_USER
ashleymills 0:714293de3836 175 #include <string.h>
ashleymills 0:714293de3836 176 char* mystrnstr(const char* s1, const char* s2, unsigned int n);
ashleymills 0:714293de3836 177
ashleymills 0:714293de3836 178 #define XMEMCPY(d,s,l) memcpy((d),(s),(l))
ashleymills 0:714293de3836 179 #define XMEMSET(b,c,l) memset((b),(c),(l))
ashleymills 0:714293de3836 180 #define XMEMCMP(s1,s2,n) memcmp((s1),(s2),(n))
ashleymills 0:714293de3836 181 #define XMEMMOVE(d,s,l) memmove((d),(s),(l))
ashleymills 0:714293de3836 182
ashleymills 0:714293de3836 183 #define XSTRLEN(s1) strlen((s1))
ashleymills 0:714293de3836 184 #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n))
ashleymills 0:714293de3836 185 /* strstr, strncmp, and strncat only used by CyaSSL proper, not required for
ashleymills 0:714293de3836 186 CTaoCrypt only */
ashleymills 0:714293de3836 187 #define XSTRSTR(s1,s2) strstr((s1),(s2))
ashleymills 0:714293de3836 188 #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n))
ashleymills 0:714293de3836 189 #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n))
ashleymills 0:714293de3836 190 #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n))
ashleymills 0:714293de3836 191 #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n))
ashleymills 0:714293de3836 192 #endif
ashleymills 0:714293de3836 193
ashleymills 0:714293de3836 194 #if defined(HAVE_ECC) || defined(HAVE_OCSP)
ashleymills 0:714293de3836 195 #ifndef CTYPE_USER
ashleymills 0:714293de3836 196 #include <ctype.h>
ashleymills 0:714293de3836 197 #define XTOUPPER(c) toupper((c))
ashleymills 0:714293de3836 198 #define XISALPHA(c) isalpha((c))
ashleymills 0:714293de3836 199 #endif
ashleymills 0:714293de3836 200 #endif
ashleymills 0:714293de3836 201
ashleymills 0:714293de3836 202
ashleymills 0:714293de3836 203 /* memory allocation types for user hints */
ashleymills 0:714293de3836 204 enum {
ashleymills 0:714293de3836 205 DYNAMIC_TYPE_CA = 1,
ashleymills 0:714293de3836 206 DYNAMIC_TYPE_CERT = 2,
ashleymills 0:714293de3836 207 DYNAMIC_TYPE_KEY = 3,
ashleymills 0:714293de3836 208 DYNAMIC_TYPE_FILE = 4,
ashleymills 0:714293de3836 209 DYNAMIC_TYPE_SUBJECT_CN = 5,
ashleymills 0:714293de3836 210 DYNAMIC_TYPE_PUBLIC_KEY = 6,
ashleymills 0:714293de3836 211 DYNAMIC_TYPE_SIGNER = 7,
ashleymills 0:714293de3836 212 DYNAMIC_TYPE_NONE = 8,
ashleymills 0:714293de3836 213 DYNAMIC_TYPE_BIGINT = 9,
ashleymills 0:714293de3836 214 DYNAMIC_TYPE_RSA = 10,
ashleymills 0:714293de3836 215 DYNAMIC_TYPE_METHOD = 11,
ashleymills 0:714293de3836 216 DYNAMIC_TYPE_OUT_BUFFER = 12,
ashleymills 0:714293de3836 217 DYNAMIC_TYPE_IN_BUFFER = 13,
ashleymills 0:714293de3836 218 DYNAMIC_TYPE_INFO = 14,
ashleymills 0:714293de3836 219 DYNAMIC_TYPE_DH = 15,
ashleymills 0:714293de3836 220 DYNAMIC_TYPE_DOMAIN = 16,
ashleymills 0:714293de3836 221 DYNAMIC_TYPE_SSL = 17,
ashleymills 0:714293de3836 222 DYNAMIC_TYPE_CTX = 18,
ashleymills 0:714293de3836 223 DYNAMIC_TYPE_WRITEV = 19,
ashleymills 0:714293de3836 224 DYNAMIC_TYPE_OPENSSL = 20,
ashleymills 0:714293de3836 225 DYNAMIC_TYPE_DSA = 21,
ashleymills 0:714293de3836 226 DYNAMIC_TYPE_CRL = 22,
ashleymills 0:714293de3836 227 DYNAMIC_TYPE_REVOKED = 23,
ashleymills 0:714293de3836 228 DYNAMIC_TYPE_CRL_ENTRY = 24,
ashleymills 0:714293de3836 229 DYNAMIC_TYPE_CERT_MANAGER = 25,
ashleymills 0:714293de3836 230 DYNAMIC_TYPE_CRL_MONITOR = 26,
ashleymills 0:714293de3836 231 DYNAMIC_TYPE_OCSP_STATUS = 27,
ashleymills 0:714293de3836 232 DYNAMIC_TYPE_OCSP_ENTRY = 28,
ashleymills 0:714293de3836 233 DYNAMIC_TYPE_ALTNAME = 29,
ashleymills 0:714293de3836 234 DYNAMIC_TYPE_SUITES = 30,
ashleymills 0:714293de3836 235 DYNAMIC_TYPE_CIPHER = 31,
ashleymills 0:714293de3836 236 DYNAMIC_TYPE_RNG = 32,
ashleymills 0:714293de3836 237 DYNAMIC_TYPE_ARRAYS = 33,
ashleymills 0:714293de3836 238 DYNAMIC_TYPE_DTLS_POOL = 34,
ashleymills 0:714293de3836 239 DYNAMIC_TYPE_SOCKADDR = 35,
ashleymills 0:714293de3836 240 DYNAMIC_TYPE_LIBZ = 36,
ashleymills 0:714293de3836 241 DYNAMIC_TYPE_ECC = 37,
ashleymills 0:714293de3836 242 DYNAMIC_TYPE_TMP_BUFFER = 38,
ashleymills 0:714293de3836 243 DYNAMIC_TYPE_DTLS_MSG = 39,
ashleymills 0:714293de3836 244 DYNAMIC_TYPE_CAVIUM_TMP = 40,
ashleymills 0:714293de3836 245 DYNAMIC_TYPE_CAVIUM_RSA = 41,
ashleymills 0:714293de3836 246 DYNAMIC_TYPE_X509 = 42,
ashleymills 0:714293de3836 247 DYNAMIC_TYPE_TLSX = 43
ashleymills 0:714293de3836 248 };
ashleymills 0:714293de3836 249
ashleymills 0:714293de3836 250 /* stack protection */
ashleymills 0:714293de3836 251 enum {
ashleymills 0:714293de3836 252 MIN_STACK_BUFFER = 8
ashleymills 0:714293de3836 253 };
ashleymills 0:714293de3836 254
ashleymills 0:714293de3836 255
ashleymills 0:714293de3836 256
ashleymills 0:714293de3836 257 /* settings detection for compile vs runtime math incombatibilities */
ashleymills 0:714293de3836 258 enum {
ashleymills 0:714293de3836 259 #if !defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG)
ashleymills 0:714293de3836 260 CTC_SETTINGS = 0x0
ashleymills 0:714293de3836 261 #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
ashleymills 0:714293de3836 262 CTC_SETTINGS = 0x1
ashleymills 0:714293de3836 263 #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
ashleymills 0:714293de3836 264 CTC_SETTINGS = 0x2
ashleymills 0:714293de3836 265 #elif !defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4)
ashleymills 0:714293de3836 266 CTC_SETTINGS = 0x4
ashleymills 0:714293de3836 267 #elif defined(USE_FAST_MATH) && !defined(SIZEOF_LONG) && !defined(SIZEOF_LONG_LONG)
ashleymills 0:714293de3836 268 CTC_SETTINGS = 0x8
ashleymills 0:714293de3836 269 #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
ashleymills 0:714293de3836 270 CTC_SETTINGS = 0x10
ashleymills 0:714293de3836 271 #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
ashleymills 0:714293de3836 272 CTC_SETTINGS = 0x20
ashleymills 0:714293de3836 273 #elif defined(USE_FAST_MATH) && defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 4)
ashleymills 0:714293de3836 274 CTC_SETTINGS = 0x40
ashleymills 0:714293de3836 275 #else
ashleymills 0:714293de3836 276 #error "bad math long / long long settings"
ashleymills 0:714293de3836 277 #endif
ashleymills 0:714293de3836 278 };
ashleymills 0:714293de3836 279
ashleymills 0:714293de3836 280
ashleymills 0:714293de3836 281 CYASSL_API word32 CheckRunTimeSettings(void);
ashleymills 0:714293de3836 282
ashleymills 0:714293de3836 283 /* If user uses RSA, DH, DSA, or ECC math lib directly then fast math and long
ashleymills 0:714293de3836 284 types need to match at compile time and run time, CheckCtcSettings will
ashleymills 0:714293de3836 285 return 1 if a match otherwise 0 */
ashleymills 0:714293de3836 286 #define CheckCtcSettings() (CTC_SETTINGS == CheckRunTimeSettings())
ashleymills 0:714293de3836 287
ashleymills 0:714293de3836 288
ashleymills 0:714293de3836 289 #ifdef __cplusplus
ashleymills 0:714293de3836 290 } /* extern "C" */
ashleymills 0:714293de3836 291 #endif
ashleymills 0:714293de3836 292
ashleymills 0:714293de3836 293
ashleymills 0:714293de3836 294 #endif /* CTAO_CRYPT_TYPES_H */
ashleymills 0:714293de3836 295