source: azure_iot_hub_f767zi/trunk/wolfssl-4.4.0/wolfssl/wolfcrypt/settings.h@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 62.5 KB
Line 
1/* settings.h
2 *
3 * Copyright (C) 2006-2020 wolfSSL Inc.
4 *
5 * This file is part of wolfSSL.
6 *
7 * wolfSSL is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * wolfSSL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
20 */
21
22
23/* Place OS specific preprocessor flags, defines, includes here, will be
24 included into every file because types.h includes it */
25
26
27#ifndef WOLF_CRYPT_SETTINGS_H
28#define WOLF_CRYPT_SETTINGS_H
29
30#ifdef __cplusplus
31 extern "C" {
32#endif
33
34/* This flag allows wolfSSL to include options.h instead of having client
35 * projects do it themselves. This should *NEVER* be defined when building
36 * wolfSSL as it can cause hard to debug problems. */
37#ifdef EXTERNAL_OPTS_OPENVPN
38#include <wolfssl/options.h>
39#endif
40
41/* Uncomment next line if using IPHONE */
42/* #define IPHONE */
43
44/* Uncomment next line if using ThreadX */
45/* #define THREADX */
46
47/* Uncomment next line if using Micrium uC/OS-III */
48/* #define MICRIUM */
49
50/* Uncomment next line if using Deos RTOS*/
51/* #define WOLFSSL_DEOS*/
52
53/* Uncomment next line if using Mbed */
54/* #define MBED */
55
56/* Uncomment next line if using Microchip PIC32 ethernet starter kit */
57/* #define MICROCHIP_PIC32 */
58
59/* Uncomment next line if using Microchip TCP/IP stack, version 5 */
60/* #define MICROCHIP_TCPIP_V5 */
61
62/* Uncomment next line if using Microchip TCP/IP stack, version 6 or later */
63/* #define MICROCHIP_TCPIP */
64
65/* Uncomment next line if using PIC32MZ Crypto Engine */
66/* #define WOLFSSL_MICROCHIP_PIC32MZ */
67
68/* Uncomment next line if using FreeRTOS */
69/* #define FREERTOS */
70
71/* Uncomment next line if using FreeRTOS+ TCP */
72/* #define FREERTOS_TCP */
73
74/* Uncomment next line if using FreeRTOS Windows Simulator */
75/* #define FREERTOS_WINSIM */
76
77/* Uncomment next line if using RTIP */
78/* #define EBSNET */
79
80/* Uncomment next line if using lwip */
81/* #define WOLFSSL_LWIP */
82
83/* Uncomment next line if building wolfSSL for a game console */
84/* #define WOLFSSL_GAME_BUILD */
85
86/* Uncomment next line if building wolfSSL for LSR */
87/* #define WOLFSSL_LSR */
88
89/* Uncomment next line if building for Freescale Classic MQX version 5.0 */
90/* #define FREESCALE_MQX_5_0 */
91
92/* Uncomment next line if building for Freescale Classic MQX version 4.0 */
93/* #define FREESCALE_MQX_4_0 */
94
95/* Uncomment next line if building for Freescale Classic MQX/RTCS/MFS */
96/* #define FREESCALE_MQX */
97
98/* Uncomment next line if building for Freescale KSDK MQX/RTCS/MFS */
99/* #define FREESCALE_KSDK_MQX */
100
101/* Uncomment next line if building for Freescale KSDK Bare Metal */
102/* #define FREESCALE_KSDK_BM */
103
104/* Uncomment next line if building for Freescale KSDK FreeRTOS, */
105/* (old name FREESCALE_FREE_RTOS) */
106/* #define FREESCALE_KSDK_FREERTOS */
107
108/* Uncomment next line if using STM32F2 */
109/* #define WOLFSSL_STM32F2 */
110
111/* Uncomment next line if using STM32F4 */
112/* #define WOLFSSL_STM32F4 */
113
114/* Uncomment next line if using STM32FL */
115/* #define WOLFSSL_STM32FL */
116
117/* Uncomment next line if using STM32F7 */
118/* #define WOLFSSL_STM32F7 */
119
120/* Uncomment next line if using QL SEP settings */
121/* #define WOLFSSL_QL */
122
123/* Uncomment next line if building for EROAD */
124/* #define WOLFSSL_EROAD */
125
126/* Uncomment next line if building for IAR EWARM */
127/* #define WOLFSSL_IAR_ARM */
128
129/* Uncomment next line if building for Rowley CrossWorks ARM */
130/* #define WOLFSSL_ROWLEY_ARM */
131
132/* Uncomment next line if using TI-RTOS settings */
133/* #define WOLFSSL_TIRTOS */
134
135/* Uncomment next line if building with PicoTCP */
136/* #define WOLFSSL_PICOTCP */
137
138/* Uncomment next line if building for PicoTCP demo bundle */
139/* #define WOLFSSL_PICOTCP_DEMO */
140
141/* Uncomment next line if building for uITRON4 */
142/* #define WOLFSSL_uITRON4 */
143
144/* Uncomment next line if building for uT-Kernel */
145/* #define WOLFSSL_uTKERNEL2 */
146
147/* Uncomment next line if using Max Strength build */
148/* #define WOLFSSL_MAX_STRENGTH */
149
150/* Uncomment next line if building for VxWorks */
151/* #define WOLFSSL_VXWORKS */
152
153/* Uncomment next line if building for Nordic nRF5x platform */
154/* #define WOLFSSL_NRF5x */
155
156/* Uncomment next line to enable deprecated less secure static DH suites */
157/* #define WOLFSSL_STATIC_DH */
158
159/* Uncomment next line to enable deprecated less secure static RSA suites */
160/* #define WOLFSSL_STATIC_RSA */
161
162/* Uncomment next line if building for ARDUINO */
163/* Uncomment both lines if building for ARDUINO on INTEL_GALILEO */
164/* #define WOLFSSL_ARDUINO */
165/* #define INTEL_GALILEO */
166
167/* Uncomment next line to enable asynchronous crypto WC_PENDING_E */
168/* #define WOLFSSL_ASYNC_CRYPT */
169
170/* Uncomment next line if building for uTasker */
171/* #define WOLFSSL_UTASKER */
172
173/* Uncomment next line if building for embOS */
174/* #define WOLFSSL_EMBOS */
175
176/* Uncomment next line if building for RIOT-OS */
177/* #define WOLFSSL_RIOT_OS */
178
179/* Uncomment next line if building for using XILINX hardened crypto */
180/* #define WOLFSSL_XILINX_CRYPT */
181
182/* Uncomment next line if building for using XILINX */
183/* #define WOLFSSL_XILINX */
184
185/* Uncomment next line if building for WICED Studio. */
186/* #define WOLFSSL_WICED */
187
188/* Uncomment next line if building for Nucleus 1.2 */
189/* #define WOLFSSL_NUCLEUS_1_2 */
190
191/* Uncomment next line if building for using Apache mynewt */
192/* #define WOLFSSL_APACHE_MYNEWT */
193
194/* Uncomment next line if building for using ESP-IDF */
195/* #define WOLFSSL_ESPIDF */
196
197/* Uncomment next line if using Espressif ESP32-WROOM-32 */
198/* #define WOLFSSL_ESPWROOM32 */
199
200/* Uncomment next line if using Espressif ESP32-WROOM-32SE */
201/* #define WOLFSSL_ESPWROOM32SE */
202
203/* Uncomment next line if using ARM CRYPTOCELL*/
204/* #define WOLFSSL_CRYPTOCELL */
205
206/* Uncomment next line if using RENESAS TSIP */
207/* #define WOLFSSL_RENESAS_TSIP */
208
209/* Uncomment next line if using RENESAS RX64N */
210/* #define WOLFSSL_RENESAS_RX65N */
211
212#include <wolfssl/wolfcrypt/visibility.h>
213
214#ifdef WOLFSSL_USER_SETTINGS
215 #include "user_settings.h"
216#endif
217
218
219/* make sure old RNG name is used with CTaoCrypt FIPS */
220#ifdef HAVE_FIPS
221 #if !defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION < 2)
222 #define WC_RNG RNG
223 #else
224 #ifndef WOLFSSL_STM32L4
225 #define RNG WC_RNG
226 #endif
227 #endif
228 /* blinding adds API not available yet in FIPS mode */
229 #undef WC_RSA_BLINDING
230#endif
231
232
233#if defined(_WIN32) && !defined(_M_X64) && \
234 defined(HAVE_AESGCM) && defined(WOLFSSL_AESNI)
235
236/* The _M_X64 macro is what's used in the headers for MSC to tell if it
237 * has the 64-bit versions of the 128-bit integers available. If one is
238 * building on 32-bit Windows with AES-NI, turn off the AES-GCMloop
239 * unrolling. */
240
241 #define AES_GCM_AESNI_NO_UNROLL
242#endif
243
244#ifdef IPHONE
245 #define SIZEOF_LONG_LONG 8
246#endif
247
248#ifdef THREADX
249 #define SIZEOF_LONG_LONG 8
250#endif
251
252#ifdef HAVE_NETX
253 #ifdef NEED_THREADX_TYPES
254 #include <types.h>
255 #endif
256 #include <nx_api.h>
257#endif
258
259#if defined(WOLFSSL_ESPIDF)
260 #define FREERTOS
261 #define WOLFSSL_LWIP
262 #define NO_WRITEV
263 #define SIZEOF_LONG_LONG 8
264 #define NO_WOLFSSL_DIR
265 #define WOLFSSL_NO_CURRDIR
266
267 #define TFM_TIMING_RESISTANT
268 #define ECC_TIMING_RESISTANT
269 #define WC_RSA_BLINDING
270
271#if defined(WOLFSSL_ESPWROOM32) || defined(WOLFSSL_ESPWROOM32SE)
272 #ifndef NO_ESP32WROOM32_CRYPT
273 #define WOLFSSL_ESP32WROOM32_CRYPT
274 #if defined(ESP32_USE_RSA_PRIMITIVE) && \
275 !defined(NO_WOLFSSL_ESP32WROOM32_CRYPT_RSA_PRI)
276 #define WOLFSSL_ESP32WROOM32_CRYPT_RSA_PRI
277 #define USE_FAST_MATH
278 #define WOLFSSL_SMALL_STACK
279 #endif
280 #endif
281#endif
282#endif /* WOLFSSL_ESPIDF */
283
284#if defined(WOLFSSL_RENESAS_TSIP)
285 #define TSIP_TLS_HMAC_KEY_INDEX_WORDSIZE 64
286 #define TSIP_TLS_MASTERSECRET_SIZE 80 /* 20 words */
287 #define TSIP_TLS_ENCPUBKEY_SZ_BY_CERTVRFY 560 /* in byte */
288 #if !defined(NO_RENESAS_TSIP_CRYPT) && defined(WOLFSSL_RENESAS_RX65N)
289 #define WOLFSSL_RENESAS_TSIP_CRYPT
290 #define WOLFSSL_RENESAS_TSIP_TLS
291 #define WOLFSSL_RENESAS_TSIP_TLS_AES_CRYPT
292 #endif
293#endif
294
295#if defined(WOLFSSL_RENESAS_RA6M3G)
296 /* settings in user_settings.h */
297#endif
298
299#if defined(HAVE_LWIP_NATIVE) /* using LwIP native TCP socket */
300 #define WOLFSSL_LWIP
301 #define NO_WRITEV
302 #define SINGLE_THREADED
303 #define WOLFSSL_USER_IO
304 #define NO_FILESYSTEM
305#endif
306
307#if defined(WOLFSSL_CONTIKI)
308 #include <contiki.h>
309 #define WOLFSSL_UIP
310 #define NO_WOLFSSL_MEMORY
311 #define NO_WRITEV
312 #define SINGLE_THREADED
313 #define WOLFSSL_USER_IO
314 #define NO_FILESYSTEM
315 #define CUSTOM_RAND_TYPE uint16_t
316 #define CUSTOM_RAND_GENERATE random_rand
317 static inline word32 LowResTimer(void)
318 {
319 return clock_seconds();
320 }
321#endif
322
323#if defined(WOLFSSL_IAR_ARM) || defined(WOLFSSL_ROWLEY_ARM)
324 #define NO_MAIN_DRIVER
325 #define SINGLE_THREADED
326 #if !defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_4096)
327 #define USE_CERT_BUFFERS_1024
328 #endif
329 #define BENCH_EMBEDDED
330 #define NO_FILESYSTEM
331 #define NO_WRITEV
332 #define WOLFSSL_USER_IO
333 #define BENCH_EMBEDDED
334#endif
335
336#ifdef MICROCHIP_PIC32
337 /* #define WOLFSSL_MICROCHIP_PIC32MZ */
338 #define SIZEOF_LONG_LONG 8
339 #define SINGLE_THREADED
340 #define WOLFSSL_USER_IO
341 #define NO_WRITEV
342 #define NO_DEV_RANDOM
343 #define NO_FILESYSTEM
344 #define USE_FAST_MATH
345 #define TFM_TIMING_RESISTANT
346 #define WOLFSSL_HAVE_MIN
347 #define WOLFSSL_HAVE_MAX
348 #define NO_BIG_INT
349#endif
350
351#ifdef WOLFSSL_MICROCHIP_PIC32MZ
352 #ifndef NO_PIC32MZ_CRYPT
353 #define WOLFSSL_PIC32MZ_CRYPT
354 #endif
355 #ifndef NO_PIC32MZ_RNG
356 #define WOLFSSL_PIC32MZ_RNG
357 #endif
358 #ifndef NO_PIC32MZ_HASH
359 #define WOLFSSL_PIC32MZ_HASH
360 #endif
361#endif
362
363#ifdef MICROCHIP_TCPIP_V5
364 /* include timer functions */
365 #include "TCPIP Stack/TCPIP.h"
366#endif
367
368#ifdef MICROCHIP_TCPIP
369 /* include timer, NTP functions */
370 #ifdef MICROCHIP_MPLAB_HARMONY
371 #include "tcpip/tcpip.h"
372 #else
373 #include "system/system_services.h"
374 #include "tcpip/sntp.h"
375 #endif
376#endif
377
378#ifdef MBED
379 #define WOLFSSL_USER_IO
380 #define NO_FILESYSTEM
381 #define NO_CERTS
382 #if !defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_4096)
383 #define USE_CERT_BUFFERS_1024
384 #endif
385 #define NO_WRITEV
386 #define NO_DEV_RANDOM
387 #define NO_SHA512
388 #define NO_DH
389 /* Allows use of DH with fixed points if uncommented and NO_DH is removed */
390 /* WOLFSSL_DH_CONST */
391 #define NO_DSA
392 #define NO_HC128
393 #define HAVE_ECC
394 #define NO_SESSION_CACHE
395 #define WOLFSSL_CMSIS_RTOS
396#endif
397
398
399#ifdef WOLFSSL_EROAD
400 #define FREESCALE_MQX
401 #define FREESCALE_MMCAU
402 #define SINGLE_THREADED
403 #define NO_STDIO_FILESYSTEM
404 #define WOLFSSL_LEANPSK
405 #define HAVE_NULL_CIPHER
406 #define NO_OLD_TLS
407 #define NO_ASN
408 #define NO_BIG_INT
409 #define NO_RSA
410 #define NO_DSA
411 #define NO_DH
412 /* Allows use of DH with fixed points if uncommented and NO_DH is removed */
413 /* WOLFSSL_DH_CONST */
414 #define NO_CERTS
415 #define NO_PWDBASED
416 #define NO_DES3
417 #define NO_MD4
418 #define NO_RC4
419 #define NO_MD5
420 #define NO_SESSION_CACHE
421 #define NO_MAIN_DRIVER
422#endif
423
424#ifdef WOLFSSL_PICOTCP
425 #ifndef errno
426 #define errno pico_err
427 #endif
428 #include "pico_defines.h"
429 #include "pico_stack.h"
430 #include "pico_constants.h"
431 #include "pico_protocol.h"
432 #define CUSTOM_RAND_GENERATE pico_rand
433#endif
434
435#ifdef WOLFSSL_PICOTCP_DEMO
436 #define WOLFSSL_STM32
437 #define USE_FAST_MATH
438 #define TFM_TIMING_RESISTANT
439 #define XMALLOC(s, h, type) PICO_ZALLOC((s))
440 #define XFREE(p, h, type) PICO_FREE((p))
441 #define SINGLE_THREADED
442 #define NO_WRITEV
443 #define WOLFSSL_USER_IO
444 #define NO_DEV_RANDOM
445 #define NO_FILESYSTEM
446#endif
447
448#ifdef FREERTOS_WINSIM
449 #define FREERTOS
450 #define USE_WINDOWS_API
451#endif
452
453
454#ifdef WOLFSSL_VXWORKS
455 /* VxWorks simulator incorrectly detects building for i386 */
456 #ifdef VXWORKS_SIM
457 #define TFM_NO_ASM
458 #endif
459 /* For VxWorks pthreads wrappers for mutexes uncomment the next line. */
460 /* #define WOLFSSL_PTHREADS */
461 #define WOLFSSL_HAVE_MIN
462 #define WOLFSSL_HAVE_MAX
463 #define USE_FAST_MATH
464 #define TFM_TIMING_RESISTANT
465 #define NO_MAIN_DRIVER
466 #define NO_DEV_RANDOM
467 #define NO_WRITEV
468 #define HAVE_STRINGS_H
469#endif
470
471
472#ifdef WOLFSSL_ARDUINO
473 #define NO_WRITEV
474 #define NO_WOLFSSL_DIR
475 #define SINGLE_THREADED
476 #define NO_DEV_RANDOM
477 #ifndef INTEL_GALILEO /* Galileo has time.h compatibility */
478 #define TIME_OVERRIDES
479 #ifndef XTIME
480 #error "Must define XTIME externally see porting guide"
481 #error "https://www.wolfssl.com/docs/porting-guide/"
482 #endif
483 #ifndef XGMTIME
484 #error "Must define XGMTIME externally see porting guide"
485 #error "https://www.wolfssl.com/docs/porting-guide/"
486 #endif
487 #endif
488 #define WOLFSSL_USER_IO
489 #define HAVE_ECC
490 #define NO_DH
491 #define NO_SESSION_CACHE
492#endif
493
494
495#ifdef WOLFSSL_UTASKER
496 /* uTasker configuration - used for fnRandom() */
497 #include "config.h"
498
499 #define SINGLE_THREADED
500 #define NO_WOLFSSL_DIR
501 #define WOLFSSL_HAVE_MIN
502 #define NO_WRITEV
503
504 #define HAVE_ECC
505 #define ALT_ECC_SIZE
506 #define USE_FAST_MATH
507 #define TFM_TIMING_RESISTANT
508 #define ECC_TIMING_RESISTANT
509
510 /* used in wolfCrypt test */
511 #define NO_MAIN_DRIVER
512 #define USE_CERT_BUFFERS_2048
513
514 /* uTasker port uses RAW sockets, use I/O callbacks
515 * See wolfSSL uTasker example for sample callbacks */
516 #define WOLFSSL_USER_IO
517
518 /* uTasker filesystem not ported */
519 #define NO_FILESYSTEM
520
521 /* uTasker RNG is abstracted, calls HW RNG when available */
522 #define CUSTOM_RAND_GENERATE fnRandom
523 #define CUSTOM_RAND_TYPE unsigned short
524
525 /* user needs to define XTIME to function that provides
526 * seconds since Unix epoch */
527 #ifndef XTIME
528 #error XTIME must be defined in wolfSSL settings.h
529 /* #define XTIME fnSecondsSinceEpoch */
530 #endif
531
532 /* use uTasker std library replacements where available */
533 #define STRING_USER
534 #define XMEMCPY(d,s,l) uMemcpy((d),(s),(l))
535 #define XMEMSET(b,c,l) uMemset((b),(c),(l))
536 #define XMEMCMP(s1,s2,n) uMemcmp((s1),(s2),(n))
537 #define XMEMMOVE(d,s,l) memmove((d),(s),(l))
538
539 #define XSTRLEN(s1) uStrlen((s1))
540 #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n))
541 #define XSTRSTR(s1,s2) strstr((s1),(s2))
542 #define XSTRNSTR(s1,s2,n) mystrnstr((s1),(s2),(n))
543 #define XSTRNCMP(s1,s2,n) strncmp((s1),(s2),(n))
544 #define XSTRNCAT(s1,s2,n) strncat((s1),(s2),(n))
545 #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n))
546 #if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) \
547 || defined(HAVE_ALPN)
548 #define XSTRTOK strtok_r
549 #endif
550#endif
551
552#ifdef WOLFSSL_EMBOS
553 #define NO_FILESYSTEM /* Not ported at this time */
554 #define USE_CERT_BUFFERS_2048 /* use when NO_FILESYSTEM */
555 #define NO_MAIN_DRIVER
556 #define NO_RC4
557 #define SINGLE_THREADED /* Not ported at this time */
558#endif
559
560#ifdef WOLFSSL_RIOT_OS
561 #define NO_WRITEV
562 #define TFM_NO_ASM
563 #define NO_FILESYSTEM
564 #define USE_CERT_BUFFERS_2048
565 #if defined(WOLFSSL_GNRC) && !defined(WOLFSSL_DTLS)
566 #define WOLFSSL_DTLS
567 #endif
568#endif
569
570#ifdef WOLFSSL_CHIBIOS
571 /* ChibiOS definitions. This file is distributed with chibiOS. */
572 #include "wolfssl_chibios.h"
573#endif
574
575#ifdef WOLFSSL_PB
576 /* PB is using older 1.2 version of Nucleus */
577 #undef WOLFSSL_NUCLEUS
578 #define WOLFSSL_NUCLEUS_1_2
579#endif
580
581#ifdef WOLFSSL_NUCLEUS_1_2
582 #define NO_WRITEV
583 #define NO_WOLFSSL_DIR
584
585 #if !defined(NO_ASN_TIME) && !defined(USER_TIME)
586 #error User must define XTIME, see manual
587 #endif
588
589 #if !defined(XMALLOC_OVERRIDE) && !defined(XMALLOC_USER)
590 extern void* nucleus_malloc(unsigned long size, void* heap, int type);
591 extern void* nucleus_realloc(void* ptr, unsigned long size, void* heap,
592 int type);
593 extern void nucleus_free(void* ptr, void* heap, int type);
594
595 #define XMALLOC(s, h, type) nucleus_malloc((s), (h), (type))
596 #define XREALLOC(p, n, h, t) nucleus_realloc((p), (n), (h), (t))
597 #define XFREE(p, h, type) nucleus_free((p), (h), (type))
598 #endif
599#endif
600
601#ifdef WOLFSSL_NRF5x
602 #define SIZEOF_LONG 4
603 #define SIZEOF_LONG_LONG 8
604 #define NO_ASN_TIME
605 #define NO_DEV_RANDOM
606 #define NO_FILESYSTEM
607 #define NO_MAIN_DRIVER
608 #define NO_WRITEV
609 #define SINGLE_THREADED
610 #define USE_FAST_MATH
611 #define TFM_TIMING_RESISTANT
612 #define USE_WOLFSSL_MEMORY
613 #define WOLFSSL_NRF51
614 #define WOLFSSL_USER_IO
615 #define NO_SESSION_CACHE
616#endif
617
618/* Micrium will use Visual Studio for compilation but not the Win32 API */
619#if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \
620 !defined(FREERTOS_TCP) && !defined(EBSNET) && !defined(WOLFSSL_EROAD) && \
621 !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS)
622 #define USE_WINDOWS_API
623#endif
624
625#if defined(WOLFSSL_uITRON4)
626
627#define XMALLOC_USER
628#include <stddef.h>
629#define ITRON_POOL_SIZE 1024*20
630extern int uITRON4_minit(size_t poolsz) ;
631extern void *uITRON4_malloc(size_t sz) ;
632extern void *uITRON4_realloc(void *p, size_t sz) ;
633extern void uITRON4_free(void *p) ;
634
635#define XMALLOC(sz, heap, type) uITRON4_malloc(sz)
636#define XREALLOC(p, sz, heap, type) uITRON4_realloc(p, sz)
637#define XFREE(p, heap, type) uITRON4_free(p)
638#endif
639
640#if defined(WOLFSSL_uTKERNEL2)
641 #ifndef NO_TKERNEL_MEM_POOL
642 #define XMALLOC_OVERRIDE
643 int uTKernel_init_mpool(unsigned int sz); /* initializing malloc pool */
644 void* uTKernel_malloc(unsigned int sz);
645 void* uTKernel_realloc(void *p, unsigned int sz);
646 void uTKernel_free(void *p);
647 #define XMALLOC(s, h, type) uTKernel_malloc((s))
648 #define XREALLOC(p, n, h, t) uTKernel_realloc((p), (n))
649 #define XFREE(p, h, type) uTKernel_free((p))
650 #endif
651
652 #ifndef NO_STDIO_FGETS_REMAP
653 #include <stdio.h>
654 #include "tm/tmonitor.h"
655
656 /* static char* gets(char *buff); */
657 static char* fgets(char *buff, int sz, XFILE fp) {
658 char * p = buff;
659 *p = '\0';
660 while (1) {
661 *p = tm_getchar(-1);
662 tm_putchar(*p);
663 if (*p == '\r') {
664 tm_putchar('\n');
665 *p = '\0';
666 break;
667 }
668 p++;
669 }
670 return buff;
671 }
672 #endif /* !NO_STDIO_FGETS_REMAP */
673#endif
674
675
676#if defined(WOLFSSL_LEANPSK) && !defined(XMALLOC_USER) && \
677 !defined(NO_WOLFSSL_MEMORY)
678 #include <stdlib.h>
679 #define XMALLOC(s, h, type) malloc((s))
680 #define XFREE(p, h, type) free((p))
681 #define XREALLOC(p, n, h, t) realloc((p), (n))
682#endif
683
684#if defined(XMALLOC_USER) && defined(SSN_BUILDING_LIBYASSL)
685 #undef XMALLOC
686 #define XMALLOC yaXMALLOC
687 #undef XFREE
688 #define XFREE yaXFREE
689 #undef XREALLOC
690 #define XREALLOC yaXREALLOC
691#endif
692
693
694#ifdef FREERTOS
695 #include "FreeRTOS.h"
696
697 #if !defined(XMALLOC_USER) && !defined(NO_WOLFSSL_MEMORY) && \
698 !defined(WOLFSSL_STATIC_MEMORY)
699 #define XMALLOC(s, h, type) pvPortMalloc((s))
700 #define XFREE(p, h, type) vPortFree((p))
701 #endif
702 /* FreeRTOS pvPortRealloc() implementation can be found here:
703 https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
704 #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
705 #if defined(WOLFSSL_ESPIDF)
706 /*In IDF, realloc(p, n) is equivalent to
707 heap_caps_realloc(p, s, MALLOC_CAP_8BIT) */
708 #define XREALLOC(p, n, h, t) realloc((p), (n))
709 #else
710 #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
711 #endif
712 #endif
713 #ifndef NO_WRITEV
714 #define NO_WRITEV
715 #endif
716 #ifndef HAVE_SHA512
717 #ifndef NO_SHA512
718 #define NO_SHA512
719 #endif
720 #endif
721 #ifndef HAVE_DH
722 #ifndef NO_DH
723 #define NO_DH
724 #endif
725 #endif
726 #ifndef NO_DSA
727 #define NO_DSA
728 #endif
729 #ifndef NO_HC128
730 #define NO_HC128
731 #endif
732
733 #ifndef SINGLE_THREADED
734 #include "semphr.h"
735 #endif
736#endif
737
738#ifdef FREERTOS_TCP
739 #if !defined(NO_WOLFSSL_MEMORY) && !defined(XMALLOC_USER) && \
740 !defined(WOLFSSL_STATIC_MEMORY)
741 #define XMALLOC(s, h, type) pvPortMalloc((s))
742 #define XFREE(p, h, type) vPortFree((p))
743 #endif
744
745 #define WOLFSSL_GENSEED_FORTEST
746
747 #define NO_WOLFSSL_DIR
748 #define NO_WRITEV
749 #define USE_FAST_MATH
750 #define TFM_TIMING_RESISTANT
751 #define NO_MAIN_DRIVER
752#endif
753
754#ifdef WOLFSSL_TIRTOS
755 #define SIZEOF_LONG_LONG 8
756 #define NO_WRITEV
757 #define NO_WOLFSSL_DIR
758 #define USE_FAST_MATH
759 #define TFM_TIMING_RESISTANT
760 #define ECC_TIMING_RESISTANT
761 #define WC_RSA_BLINDING
762 #define NO_DEV_RANDOM
763 #define NO_FILESYSTEM
764 #define USE_CERT_BUFFERS_2048
765 #define NO_ERROR_STRINGS
766 /* Uncomment this setting if your toolchain does not offer time.h header */
767 /* #define USER_TIME */
768 #define HAVE_ECC
769 #define HAVE_ALPN
770 #define USE_WOLF_STRTOK /* use with HAVE_ALPN */
771 #define HAVE_TLS_EXTENSIONS
772 #define HAVE_AESGCM
773 #ifdef WOLFSSL_TI_CRYPT
774 #define NO_GCM_ENCRYPT_EXTRA
775 #define NO_PUBLIC_GCM_SET_IV
776 #define NO_PUBLIC_CCM_SET_NONCE
777 #endif
778 #define HAVE_SUPPORTED_CURVES
779 #define ALT_ECC_SIZE
780
781 #ifdef __IAR_SYSTEMS_ICC__
782 #pragma diag_suppress=Pa089
783 #elif !defined(__GNUC__)
784 /* Suppress the sslpro warning */
785 #pragma diag_suppress=11
786 #endif
787
788 #include <ti/sysbios/hal/Seconds.h>
789#endif
790
791#ifdef EBSNET
792 #include "rtip.h"
793
794 /* #define DEBUG_WOLFSSL */
795 #define NO_WOLFSSL_DIR /* tbd */
796
797 #if (POLLOS)
798 #define SINGLE_THREADED
799 #endif
800
801 #if (RTPLATFORM)
802 #if (!RTP_LITTLE_ENDIAN)
803 #define BIG_ENDIAN_ORDER
804 #endif
805 #else
806 #if (!KS_LITTLE_ENDIAN)
807 #define BIG_ENDIAN_ORDER
808 #endif
809 #endif
810
811 #if (WINMSP3)
812 #undef SIZEOF_LONG
813 #define SIZEOF_LONG_LONG 8
814 #else
815 #error settings.h - please implement SIZEOF_LONG and SIZEOF_LONG_LONG
816 #endif
817
818 #define XMALLOC(s, h, type) ((void *)rtp_malloc((s), SSL_PRO_MALLOC))
819 #define XFREE(p, h, type) (rtp_free(p))
820 #define XREALLOC(p, n, h, t) (rtp_realloc((p), (n)))
821
822 #if (WINMSP3)
823 #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n))
824 #else
825 #sslpro: settings.h - please implement XSTRNCASECMP - needed for HAVE_ECC
826 #endif
827
828 #define WOLFSSL_HAVE_MAX
829 #define WOLFSSL_HAVE_MIN
830
831 #define USE_FAST_MATH
832 #define TFM_TIMING_RESISTANT
833 #define WC_RSA_BLINDING
834 #define ECC_TIMING_RESISTANT
835
836 #define HAVE_ECC
837
838#endif /* EBSNET */
839
840#ifdef WOLFSSL_GAME_BUILD
841 #define SIZEOF_LONG_LONG 8
842 #if defined(__PPU) || defined(__XENON)
843 #define BIG_ENDIAN_ORDER
844 #endif
845#endif
846
847#ifdef WOLFSSL_LSR
848 #define HAVE_WEBSERVER
849 #define SIZEOF_LONG_LONG 8
850 #define WOLFSSL_LOW_MEMORY
851 #define NO_WRITEV
852 #define NO_SHA512
853 #define NO_DH
854 /* Allows use of DH with fixed points if uncommented and NO_DH is removed */
855 /* WOLFSSL_DH_CONST */
856 #define NO_DSA
857 #define NO_HC128
858 #define NO_DEV_RANDOM
859 #define NO_WOLFSSL_DIR
860 #define NO_RABBIT
861 #ifndef NO_FILESYSTEM
862 #define LSR_FS
863 #include "inc/hw_types.h"
864 #include "fs.h"
865 #endif
866 #define WOLFSSL_LWIP
867 #include <errno.h> /* for tcp errno */
868 #define WOLFSSL_SAFERTOS
869 #if defined(__IAR_SYSTEMS_ICC__)
870 /* enum uses enum */
871 #pragma diag_suppress=Pa089
872 #endif
873#endif
874
875#ifdef WOLFSSL_SAFERTOS
876 #ifndef SINGLE_THREADED
877 #include "SafeRTOS/semphr.h"
878 #endif
879 #ifndef WOLFSSL_NO_MALLOC
880 #include "SafeRTOS/heap.h"
881 #endif
882 #if !defined(XMALLOC_USER) && !defined(NO_WOLFSSL_MEMORY) && \
883 !defined(WOLFSSL_STATIC_MEMORY)
884 #define XMALLOC(s, h, type) pvPortMalloc((s))
885 #define XFREE(p, h, type) vPortFree((p))
886 #endif
887 /* FreeRTOS pvPortRealloc() implementation can be found here:
888 https://github.com/wolfSSL/wolfssl-freertos/pull/3/files */
889 #if !defined(USE_FAST_MATH) || defined(HAVE_ED25519) || defined(HAVE_ED448)
890 #define XREALLOC(p, n, h, t) pvPortRealloc((p), (n))
891 #endif
892#endif
893
894#ifdef WOLFSSL_LOW_MEMORY
895 #undef RSA_LOW_MEM
896 #define RSA_LOW_MEM
897 #undef WOLFSSL_SMALL_STACK
898 #define WOLFSSL_SMALL_STACK
899 #undef TFM_TIMING_RESISTANT
900 #define TFM_TIMING_RESISTANT
901#endif
902
903#ifdef FREESCALE_MQX_5_0
904 /* use normal Freescale MQX port, but with minor changes for 5.0 */
905 #define FREESCALE_MQX
906#endif
907
908#ifdef FREESCALE_MQX_4_0
909 /* use normal Freescale MQX port, but with minor changes for 4.0 */
910 #define FREESCALE_MQX
911#endif
912
913#ifdef FREESCALE_MQX
914 #define FREESCALE_COMMON
915 #include "mqx.h"
916 #ifndef NO_FILESYSTEM
917 #include "mfs.h"
918 #if (defined(MQX_USE_IO_OLD) && MQX_USE_IO_OLD) || \
919 defined(FREESCALE_MQX_5_0)
920 #include "fio.h"
921 #define NO_STDIO_FILESYSTEM
922 #else
923 #include "nio.h"
924 #endif
925 #endif
926 #ifndef SINGLE_THREADED
927 #include "mutex.h"
928 #endif
929
930 #if !defined(XMALLOC_OVERRIDE) && !defined(XMALLOC_USER)
931 #define XMALLOC_OVERRIDE
932 #define XMALLOC(s, h, t) (void *)_mem_alloc_system((s))
933 #define XFREE(p, h, t) {void* xp = (p); if ((xp)) _mem_free((xp));}
934 /* Note: MQX has no realloc, using fastmath above */
935 #endif
936#endif
937
938#ifdef FREESCALE_KSDK_MQX
939 #define FREESCALE_COMMON
940 #include <mqx.h>
941 #ifndef NO_FILESYSTEM
942 #if (defined(MQX_USE_IO_OLD) && MQX_USE_IO_OLD) || \
943 defined(FREESCALE_MQX_5_0)
944 #include <fio.h>
945 #else
946 #include <stdio.h>
947 #include <nio.h>
948 #endif
949 #endif
950 #ifndef SINGLE_THREADED
951 #include <mutex.h>
952 #endif
953
954 #define XMALLOC(s, h, t) (void *)_mem_alloc_system((s))
955 #define XFREE(p, h, t) {void* xp = (p); if ((xp)) _mem_free((xp));}
956 #define XREALLOC(p, n, h, t) _mem_realloc((p), (n)) /* since MQX 4.1.2 */
957
958 #define MQX_FILE_PTR FILE *
959 #define IO_SEEK_SET SEEK_SET
960 #define IO_SEEK_END SEEK_END
961#endif /* FREESCALE_KSDK_MQX */
962
963#if defined(FREESCALE_FREE_RTOS) || defined(FREESCALE_KSDK_FREERTOS)
964 #define NO_FILESYSTEM
965 #define WOLFSSL_CRYPT_HW_MUTEX 1
966
967 #if !defined(XMALLOC_USER) && !defined(NO_WOLFSSL_MEMORY)
968 #define XMALLOC(s, h, type) pvPortMalloc((s))
969 #define XFREE(p, h, type) vPortFree((p))
970 #endif
971
972 //#define USER_TICKS
973 /* Allows use of DH with fixed points if uncommented and NO_DH is removed */
974 /* WOLFSSL_DH_CONST */
975 #define WOLFSSL_LWIP
976 #define FREERTOS_TCP
977
978 #define FREESCALE_FREE_RTOS
979 #define FREERTOS_SOCKET_ERROR ( -1 )
980 #define FREERTOS_EWOULDBLOCK ( -2 )
981 #define FREERTOS_EINVAL ( -4 )
982 #define FREERTOS_EADDRNOTAVAIL ( -5 )
983 #define FREERTOS_EADDRINUSE ( -6 )
984 #define FREERTOS_ENOBUFS ( -7 )
985 #define FREERTOS_ENOPROTOOPT ( -8 )
986#endif /* FREESCALE_FREE_RTOS || FREESCALE_KSDK_FREERTOS */
987
988#ifdef FREESCALE_KSDK_BM
989 #define FREESCALE_COMMON
990 #define WOLFSSL_USER_IO
991 #define SINGLE_THREADED
992 #define NO_FILESYSTEM
993 #ifndef TIME_OVERRIDES
994 #define USER_TICKS
995 #endif
996#endif /* FREESCALE_KSDK_BM */
997
998#ifdef FREESCALE_COMMON
999 #define SIZEOF_LONG_LONG 8
1000
1001 /* disable features */
1002 #undef NO_WRITEV
1003 #define NO_WRITEV
1004 #undef NO_DEV_RANDOM
1005 #define NO_DEV_RANDOM
1006 #undef NO_RABBIT
1007 #define NO_RABBIT
1008 #undef NO_WOLFSSL_DIR
1009 #define NO_WOLFSSL_DIR
1010 #undef NO_RC4
1011 #define NO_RC4
1012
1013 /* enable features */
1014 #undef USE_FAST_MATH
1015 #define USE_FAST_MATH
1016
1017 #define USE_CERT_BUFFERS_2048
1018 #define BENCH_EMBEDDED
1019
1020 #define TFM_TIMING_RESISTANT
1021 #define ECC_TIMING_RESISTANT
1022
1023 #undef HAVE_ECC
1024 #define HAVE_ECC
1025 #ifndef NO_AES
1026 #undef HAVE_AESCCM
1027 #define HAVE_AESCCM
1028 #undef HAVE_AESGCM
1029 #define HAVE_AESGCM
1030 #undef WOLFSSL_AES_COUNTER
1031 #define WOLFSSL_AES_COUNTER
1032 #undef WOLFSSL_AES_DIRECT
1033 #define WOLFSSL_AES_DIRECT
1034 #endif
1035
1036 #ifdef FREESCALE_KSDK_1_3
1037 #include "fsl_device_registers.h"
1038 #elif !defined(FREESCALE_MQX)
1039 /* Classic MQX does not have fsl_common.h */
1040 #include "fsl_common.h"
1041 #endif
1042
1043 /* random seed */
1044 #define NO_OLD_RNGNAME
1045 #if defined(FSL_FEATURE_SOC_TRNG_COUNT) && (FSL_FEATURE_SOC_TRNG_COUNT > 0)
1046 #define FREESCALE_KSDK_2_0_TRNG
1047 #elif defined(FSL_FEATURE_SOC_RNG_COUNT) && (FSL_FEATURE_SOC_RNG_COUNT > 0)
1048 #ifdef FREESCALE_KSDK_1_3
1049 #include "fsl_rnga_driver.h"
1050 #define FREESCALE_RNGA
1051 #define RNGA_INSTANCE (0)
1052 #else
1053 #define FREESCALE_KSDK_2_0_RNGA
1054 #endif
1055 #elif !defined(FREESCALE_KSDK_BM) && !defined(FREESCALE_FREE_RTOS) && !defined(FREESCALE_KSDK_FREERTOS)
1056 #define FREESCALE_RNGA
1057 #define RNGA_INSTANCE (0)
1058 /* defaulting to K70 RNGA, user should change if different */
1059 /* #define FREESCALE_K53_RNGB */
1060 #define FREESCALE_K70_RNGA
1061 #endif
1062
1063 /* HW crypto */
1064 /* automatic enable based on Kinetis feature */
1065 /* if case manual selection is required, for example for benchmarking purposes,
1066 * just define FREESCALE_USE_MMCAU or FREESCALE_USE_LTC or none of these two macros (for software only)
1067 * both can be enabled simultaneously as LTC has priority over MMCAU in source code.
1068 */
1069 /* #define FSL_HW_CRYPTO_MANUAL_SELECTION */
1070 #ifndef FSL_HW_CRYPTO_MANUAL_SELECTION
1071 #if defined(FSL_FEATURE_SOC_MMCAU_COUNT) && FSL_FEATURE_SOC_MMCAU_COUNT
1072 #define FREESCALE_USE_MMCAU
1073 #endif
1074
1075 #if defined(FSL_FEATURE_SOC_LTC_COUNT) && FSL_FEATURE_SOC_LTC_COUNT
1076 #define FREESCALE_USE_LTC
1077 #endif
1078 #else
1079 /* #define FREESCALE_USE_MMCAU */
1080 /* #define FREESCALE_USE_LTC */
1081 #endif
1082#endif /* FREESCALE_COMMON */
1083
1084/* Classic pre-KSDK mmCAU library */
1085#ifdef FREESCALE_USE_MMCAU_CLASSIC
1086 #define FREESCALE_USE_MMCAU
1087 #define FREESCALE_MMCAU_CLASSIC
1088 #define FREESCALE_MMCAU_CLASSIC_SHA
1089#endif
1090
1091/* KSDK mmCAU library */
1092#ifdef FREESCALE_USE_MMCAU
1093 /* AES and DES */
1094 #define FREESCALE_MMCAU
1095 /* MD5, SHA-1 and SHA-256 */
1096 #define FREESCALE_MMCAU_SHA
1097#endif /* FREESCALE_USE_MMCAU */
1098
1099#ifdef FREESCALE_USE_LTC
1100 #if defined(FSL_FEATURE_SOC_LTC_COUNT) && FSL_FEATURE_SOC_LTC_COUNT
1101 #define FREESCALE_LTC
1102 #define LTC_BASE LTC0
1103
1104 #if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES
1105 #define FREESCALE_LTC_DES
1106 #endif
1107
1108 #if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM
1109 #define FREESCALE_LTC_AES_GCM
1110 #endif
1111
1112 #if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA
1113 #define FREESCALE_LTC_SHA
1114 #endif
1115
1116 #if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA
1117 #define FREESCALE_LTC_ECC
1118 #define FREESCALE_LTC_TFM
1119
1120 /* the LTC PKHA hardware limit is 2048 bits (256 bytes) for integer arithmetic.
1121 the LTC_MAX_INT_BYTES defines the size of local variables that hold big integers. */
1122 #ifndef LTC_MAX_INT_BYTES
1123 #define LTC_MAX_INT_BYTES (256)
1124 #endif
1125
1126 /* This FREESCALE_LTC_TFM_RSA_4096_ENABLE macro can be defined.
1127 * In such a case both software and hardware algorithm
1128 * for TFM is linked in. The decision for which algorithm is used is determined at runtime
1129 * from size of inputs. If inputs and result can fit into LTC (see LTC_MAX_INT_BYTES)
1130 * then we call hardware algorithm, otherwise we call software algorithm.
1131 *
1132 * Chinese reminder theorem is used to break RSA 4096 exponentiations (both public and private key)
1133 * into several computations with 2048-bit modulus and exponents.
1134 */
1135 /* #define FREESCALE_LTC_TFM_RSA_4096_ENABLE */
1136
1137 /* ECC-384, ECC-256, ECC-224 and ECC-192 have been enabled with LTC PKHA acceleration */
1138 #ifdef HAVE_ECC
1139 #undef ECC_TIMING_RESISTANT
1140 #define ECC_TIMING_RESISTANT
1141
1142 /* the LTC PKHA hardware limit is 512 bits (64 bytes) for ECC.
1143 the LTC_MAX_ECC_BITS defines the size of local variables that hold ECC parameters
1144 and point coordinates */
1145 #ifndef LTC_MAX_ECC_BITS
1146 #define LTC_MAX_ECC_BITS (384)
1147 #endif
1148
1149 /* Enable curves up to 384 bits */
1150 #if !defined(ECC_USER_CURVES) && !defined(HAVE_ALL_CURVES)
1151 #define ECC_USER_CURVES
1152 #define HAVE_ECC192
1153 #define HAVE_ECC224
1154 #undef NO_ECC256
1155 #define HAVE_ECC384
1156 #endif
1157 #endif
1158 #endif
1159 #endif
1160#endif /* FREESCALE_USE_LTC */
1161
1162#ifdef FREESCALE_LTC_TFM_RSA_4096_ENABLE
1163 #undef USE_CERT_BUFFERS_4096
1164 #define USE_CERT_BUFFERS_4096
1165 #undef FP_MAX_BITS
1166 #define FP_MAX_BITS (8192)
1167
1168 #undef NO_DH
1169 #define NO_DH
1170 #undef NO_DSA
1171 #define NO_DSA
1172#endif /* FREESCALE_LTC_TFM_RSA_4096_ENABLE */
1173
1174/* if LTC has AES engine but doesn't have GCM, use software with LTC AES ECB mode */
1175#if defined(FREESCALE_USE_LTC) && !defined(FREESCALE_LTC_AES_GCM)
1176 #define GCM_TABLE
1177#endif
1178
1179#if defined(WOLFSSL_STM32F2) || defined(WOLFSSL_STM32F4) || \
1180 defined(WOLFSSL_STM32F7) || defined(WOLFSSL_STM32F1) || \
1181 defined(WOLFSSL_STM32L4)
1182
1183 #define SIZEOF_LONG_LONG 8
1184 #ifndef CHAR_BIT
1185 #define CHAR_BIT 8
1186 #endif
1187 #define NO_DEV_RANDOM
1188 #define NO_WOLFSSL_DIR
1189 #undef NO_RABBIT
1190 #define NO_RABBIT
1191 #ifndef NO_STM32_RNG
1192 #undef STM32_RNG
1193 #define STM32_RNG
1194 #ifdef WOLFSSL_STM32F427_RNG
1195 #include "stm32f427xx.h"
1196 #endif
1197 #endif
1198 #ifndef NO_STM32_CRYPTO
1199 #undef STM32_CRYPTO
1200 #define STM32_CRYPTO
1201
1202 #ifdef WOLFSSL_STM32L4
1203 #define NO_AES_192 /* hardware does not support 192-bit */
1204 #endif
1205 #endif
1206 #ifndef NO_STM32_HASH
1207 #undef STM32_HASH
1208 #define STM32_HASH
1209 #endif
1210 #if !defined(__GNUC__) && !defined(__ICCARM__)
1211 #define KEIL_INTRINSICS
1212 #endif
1213 #define NO_OLD_RNGNAME
1214 #ifdef WOLFSSL_STM32_CUBEMX
1215 #if defined(WOLFSSL_STM32F2)
1216 #include "stm32f2xx_hal.h"
1217 #elif defined(WOLFSSL_STM32L4)
1218 #include "stm32l4xx_hal.h"
1219 #elif defined(WOLFSSL_STM32F4)
1220 #include "stm32f4xx_hal.h"
1221 #elif defined(WOLFSSL_STM32F7)
1222 #include "stm32f7xx_hal.h"
1223 #elif defined(WOLFSSL_STM32F1)
1224 #include "stm32f1xx_hal.h"
1225 #endif
1226 #if defined(WOLFSSL_CUBEMX_USE_LL) && defined(WOLFSSL_STM32L4)
1227 #include "stm32l4xx_ll_rng.h"
1228 #endif
1229
1230 #ifndef STM32_HAL_TIMEOUT
1231 #define STM32_HAL_TIMEOUT 0xFF
1232 #endif
1233 #else
1234 #if defined(WOLFSSL_STM32F2)
1235 #include "stm32f2xx.h"
1236 #ifdef STM32_CRYPTO
1237 #include "stm32f2xx_cryp.h"
1238 #endif
1239 #ifdef STM32_HASH
1240 #include "stm32f2xx_hash.h"
1241 #endif
1242 #elif defined(WOLFSSL_STM32F4)
1243 #include "stm32f4xx.h"
1244 #ifdef STM32_CRYPTO
1245 #include "stm32f4xx_cryp.h"
1246 #endif
1247 #ifdef STM32_HASH
1248 #include "stm32f4xx_hash.h"
1249 #endif
1250 #elif defined(WOLFSSL_STM32L4)
1251 #include "stm32l4xx.h"
1252 #ifdef STM32_CRYPTO
1253 #include "stm32l4xx_cryp.h"
1254 #endif
1255 #ifdef STM32_HASH
1256 #include "stm32l4xx_hash.h"
1257 #endif
1258 #elif defined(WOLFSSL_STM32F7)
1259 #include "stm32f7xx.h"
1260 #elif defined(WOLFSSL_STM32F1)
1261 #include "stm32f1xx.h"
1262 #endif
1263 #endif /* WOLFSSL_STM32_CUBEMX */
1264#endif /* WOLFSSL_STM32F2 || WOLFSSL_STM32F4 || WOLFSSL_STM32L4 || WOLFSSL_STM32F7 */
1265#ifdef WOLFSSL_DEOS
1266 #include <deos.h>
1267 #include <timeout.h>
1268 #include <socketapi.h>
1269 #include <lwip-socket.h>
1270 #include <mem.h>
1271 #include <string.h>
1272 #include <stdlib.h> /* for rand_r: pseudo-random number generator */
1273 #include <stdio.h> /* for snprintf */
1274
1275 /* use external memory XMALLOC, XFREE and XREALLOC functions */
1276 #define XMALLOC_USER
1277
1278 /* disable fall-back case, malloc, realloc and free are unavailable */
1279 #define WOLFSSL_NO_MALLOC
1280
1281 /* file system has not been ported since it is a separate product. */
1282
1283 #define NO_FILESYSTEM
1284
1285 #ifdef NO_FILESYSTEM
1286 #define NO_WOLFSSL_DIR
1287 #define NO_WRITEV
1288 #endif
1289
1290 #define USE_FAST_MATH
1291 #define TFM_TIMING_RESISTANT
1292 #define ECC_TIMING_RESISTANT
1293 #define WC_RSA_BLINDING
1294
1295 #define HAVE_ECC
1296 #define ALT_ECC_SIZE
1297 #define TFM_ECC192
1298 #define TFM_ECC224
1299 #define TFM_ECC256
1300 #define TFM_ECC384
1301 #define TFM_ECC521
1302
1303 #define HAVE_TLS_EXTENSIONS
1304 #define HAVE_SUPPORTED_CURVES
1305 #define HAVE_EXTENDED_MASTER
1306
1307 #if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
1308 #define BIG_ENDIAN_ORDER
1309 #else
1310 #undef BIG_ENDIAN_ORDER
1311 #define LITTLE_ENDIAN_ORDER
1312 #endif
1313#endif /* WOLFSSL_DEOS*/
1314
1315#ifdef MICRIUM
1316 #include <stdlib.h>
1317 #include <os.h>
1318 #include <net_cfg.h>
1319 #include <net_sock.h>
1320 #include <net_err.h>
1321 #include <lib_mem.h>
1322 #include <lib_math.h>
1323
1324 #define USE_FAST_MATH
1325 #define TFM_TIMING_RESISTANT
1326 #define ECC_TIMING_RESISTANT
1327 #define WC_RSA_BLINDING
1328 #define HAVE_HASHDRBG
1329
1330 #define HAVE_ECC
1331 #define ALT_ECC_SIZE
1332 #define TFM_ECC192
1333 #define TFM_ECC224
1334 #define TFM_ECC256
1335 #define TFM_ECC384
1336 #define TFM_ECC521
1337
1338 #define NO_RC4
1339 #define HAVE_TLS_EXTENSIONS
1340 #define HAVE_SUPPORTED_CURVES
1341 #define HAVE_EXTENDED_MASTER
1342
1343 #define NO_WOLFSSL_DIR
1344 #define NO_WRITEV
1345
1346 #ifndef CUSTOM_RAND_GENERATE
1347 #define CUSTOM_RAND_TYPE RAND_NBR
1348 #define CUSTOM_RAND_GENERATE Math_Rand
1349 #endif
1350 #define STRING_USER
1351 #define XSTRLEN(pstr) ((CPU_SIZE_T)Str_Len((CPU_CHAR *)(pstr)))
1352 #define XSTRNCPY(pstr_dest, pstr_src, len_max) \
1353 ((CPU_CHAR *)Str_Copy_N((CPU_CHAR *)(pstr_dest), \
1354 (CPU_CHAR *)(pstr_src), (CPU_SIZE_T)(len_max)))
1355 #define XSTRNCMP(pstr_1, pstr_2, len_max) \
1356 ((CPU_INT16S)Str_Cmp_N((CPU_CHAR *)(pstr_1), \
1357 (CPU_CHAR *)(pstr_2), (CPU_SIZE_T)(len_max)))
1358 #define XSTRNCASECMP(pstr_1, pstr_2, len_max) \
1359 ((CPU_INT16S)Str_CmpIgnoreCase_N((CPU_CHAR *)(pstr_1), \
1360 (CPU_CHAR *)(pstr_2), (CPU_SIZE_T)(len_max)))
1361 #define XSTRSTR(pstr, pstr_srch) \
1362 ((CPU_CHAR *)Str_Str((CPU_CHAR *)(pstr), \
1363 (CPU_CHAR *)(pstr_srch)))
1364 #define XSTRNSTR(pstr, pstr_srch, len_max) \
1365 ((CPU_CHAR *)Str_Str_N((CPU_CHAR *)(pstr), \
1366 (CPU_CHAR *)(pstr_srch),(CPU_SIZE_T)(len_max)))
1367 #define XSTRNCAT(pstr_dest, pstr_cat, len_max) \
1368 ((CPU_CHAR *)Str_Cat_N((CPU_CHAR *)(pstr_dest), \
1369 (const CPU_CHAR *)(pstr_cat),(CPU_SIZE_T)(len_max)))
1370 #define XMEMSET(pmem, data_val, size) \
1371 ((void)Mem_Set((void *)(pmem), \
1372 (CPU_INT08U) (data_val), \
1373 (CPU_SIZE_T)(size)))
1374 #define XMEMCPY(pdest, psrc, size) ((void)Mem_Copy((void *)(pdest), \
1375 (void *)(psrc), (CPU_SIZE_T)(size)))
1376 #define XMEMCMP(pmem_1, pmem_2, size) \
1377 (((CPU_BOOLEAN)Mem_Cmp((void *)(pmem_1), \
1378 (void *)(pmem_2), \
1379 (CPU_SIZE_T)(size))) ? DEF_NO : DEF_YES)
1380 #define XMEMMOVE XMEMCPY
1381
1382 #if (OS_CFG_MUTEX_EN == DEF_DISABLED)
1383 #define SINGLE_THREADED
1384 #endif
1385
1386 #if (CPU_CFG_ENDIAN_TYPE == CPU_ENDIAN_TYPE_BIG)
1387 #define BIG_ENDIAN_ORDER
1388 #else
1389 #undef BIG_ENDIAN_ORDER
1390 #define LITTLE_ENDIAN_ORDER
1391 #endif
1392#endif /* MICRIUM */
1393
1394#ifdef WOLFSSL_MCF5441X
1395 #define BIG_ENDIAN_ORDER
1396 #ifndef SIZEOF_LONG
1397 #define SIZEOF_LONG 4
1398 #endif
1399 #ifndef SIZEOF_LONG_LONG
1400 #define SIZEOF_LONG_LONG 8
1401 #endif
1402#endif
1403
1404#ifdef WOLFSSL_QL
1405 #ifndef WOLFSSL_SEP
1406 #define WOLFSSL_SEP
1407 #endif
1408 #ifndef OPENSSL_EXTRA
1409 #define OPENSSL_EXTRA
1410 #endif
1411 #ifndef SESSION_CERTS
1412 #define SESSION_CERTS
1413 #endif
1414 #ifndef HAVE_AESCCM
1415 #define HAVE_AESCCM
1416 #endif
1417 #ifndef ATOMIC_USER
1418 #define ATOMIC_USER
1419 #endif
1420 #ifndef WOLFSSL_DER_LOAD
1421 #define WOLFSSL_DER_LOAD
1422 #endif
1423 #ifndef KEEP_PEER_CERT
1424 #define KEEP_PEER_CERT
1425 #endif
1426 #ifndef HAVE_ECC
1427 #define HAVE_ECC
1428 #endif
1429 #ifndef SESSION_INDEX
1430 #define SESSION_INDEX
1431 #endif
1432#endif /* WOLFSSL_QL */
1433
1434
1435#if defined(WOLFSSL_XILINX)
1436 #define NO_WOLFSSL_DIR
1437 #define NO_DEV_RANDOM
1438 #define HAVE_AESGCM
1439#endif
1440
1441#if defined(WOLFSSL_XILINX_CRYPT) || defined(WOLFSSL_AFALG_XILINX)
1442 #if defined(WOLFSSL_ARMASM)
1443 #error can not use both ARMv8 instructions and XILINX hardened crypto
1444 #endif
1445 #if defined(WOLFSSL_SHA3)
1446 /* only SHA3-384 is supported */
1447 #undef WOLFSSL_NOSHA3_224
1448 #undef WOLFSSL_NOSHA3_256
1449 #undef WOLFSSL_NOSHA3_512
1450 #define WOLFSSL_NOSHA3_224
1451 #define WOLFSSL_NOSHA3_256
1452 #define WOLFSSL_NOSHA3_512
1453 #endif
1454 #ifdef WOLFSSL_AFALG_XILINX_AES
1455 #undef WOLFSSL_AES_DIRECT
1456 #define WOLFSSL_AES_DIRECT
1457 #endif
1458#endif /*(WOLFSSL_XILINX_CRYPT)*/
1459
1460#if defined(WOLFSSL_APACHE_MYNEWT)
1461 #include "os/os_malloc.h"
1462 #if !defined(WOLFSSL_LWIP)
1463 #include <mn_socket/mn_socket.h>
1464 #endif
1465
1466 #if !defined(SIZEOF_LONG)
1467 #define SIZEOF_LONG 4
1468 #endif
1469 #if !defined(SIZEOF_LONG_LONG)
1470 #define SIZEOF_LONG_LONG 8
1471 #endif
1472 #if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
1473 #define BIG_ENDIAN_ORDER
1474 #else
1475 #undef BIG_ENDIAN_ORDER
1476 #define LITTLE_ENDIAN_ORDER
1477 #endif
1478 #define NO_WRITEV
1479 #define WOLFSSL_USER_IO
1480 #define SINGLE_THREADED
1481 #define NO_DEV_RANDOM
1482 #define NO_DH
1483 #define NO_WOLFSSL_DIR
1484 #define NO_ERROR_STRINGS
1485 #define HAVE_ECC
1486 #define NO_SESSION_CACHE
1487 #define NO_ERROR_STRINGS
1488 #define XMALLOC_USER
1489 #define XMALLOC(sz, heap, type) os_malloc(sz)
1490 #define XREALLOC(p, sz, heap, type) os_realloc(p, sz)
1491 #define XFREE(p, heap, type) os_free(p)
1492
1493#endif /*(WOLFSSL_APACHE_MYNEWT)*/
1494
1495#ifdef WOLFSSL_ZEPHYR
1496 #include <zephyr.h>
1497 #include <misc/printk.h>
1498 #include <misc/util.h>
1499 #include <stdlib.h>
1500
1501 #define WOLFSSL_DH_CONST
1502 #define WOLFSSL_HAVE_MIN
1503 #define WOLFSSL_HAVE_MAX
1504 #define NO_WRITEV
1505
1506 #define USE_FLAT_BENCHMARK_H
1507 #define USE_FLAT_TEST_H
1508 #define EXIT_FAILURE 1
1509 #define MAIN_NO_ARGS
1510
1511 void *z_realloc(void *ptr, size_t size);
1512 #define realloc z_realloc
1513
1514 #define CONFIG_NET_SOCKETS_POSIX_NAMES
1515#endif
1516
1517#ifdef WOLFSSL_IMX6
1518 #ifndef SIZEOF_LONG_LONG
1519 #define SIZEOF_LONG_LONG 8
1520 #endif
1521#endif
1522
1523/* if defined turn on all CAAM support */
1524#ifdef WOLFSSL_IMX6_CAAM
1525 #undef WOLFSSL_IMX6_CAAM_RNG
1526 #define WOLFSSL_IMX6_CAAM_RNG
1527
1528 #undef WOLFSSL_IMX6_CAAM_BLOB
1529 #define WOLFSSL_IMX6_CAAM_BLOB
1530
1531#if defined(HAVE_AESGCM) || defined(WOLFSSL_AES_XTS)
1532 /* large performance gain with HAVE_AES_ECB defined */
1533 #undef HAVE_AES_ECB
1534 #define HAVE_AES_ECB
1535#endif
1536#endif
1537
1538#if !defined(XMALLOC_USER) && !defined(MICRIUM_MALLOC) && \
1539 !defined(WOLFSSL_LEANPSK) && !defined(NO_WOLFSSL_MEMORY) && \
1540 !defined(XMALLOC_OVERRIDE)
1541 #define USE_WOLFSSL_MEMORY
1542#endif
1543
1544
1545#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS)
1546 #undef KEEP_PEER_CERT
1547 #define KEEP_PEER_CERT
1548#endif
1549
1550
1551/* stream ciphers except arc4 need 32bit alignment, intel ok without */
1552#ifndef XSTREAM_ALIGN
1553 #if defined(__x86_64__) || defined(__ia64__) || defined(__i386__)
1554 #define NO_XSTREAM_ALIGN
1555 #else
1556 #define XSTREAM_ALIGN
1557 #endif
1558#endif
1559
1560/* write dup cannot be used with secure renegotiation because write dup
1561 * make write side write only and read side read only */
1562#if defined(HAVE_WRITE_DUP) && defined(HAVE_SECURE_RENEGOTIATION)
1563 #error "WRITE DUP and SECURE RENEGOTIATION cannot both be on"
1564#endif
1565
1566#ifdef WOLFSSL_SGX
1567 #ifdef _MSC_VER
1568 #define NO_RC4
1569 #ifndef HAVE_FIPS
1570 #define WOLFCRYPT_ONLY
1571 #define NO_DES3
1572 #define NO_SHA
1573 #define NO_MD5
1574 #else
1575 #define TFM_TIMING_RESISTANT
1576 #define NO_WOLFSSL_DIR
1577 #define NO_WRITEV
1578 #define NO_MAIN_DRIVER
1579 #define WOLFSSL_LOG_PRINTF
1580 #define WOLFSSL_DH_CONST
1581 #endif
1582 #else
1583 #define HAVE_ECC
1584 #define NO_WRITEV
1585 #define NO_MAIN_DRIVER
1586 #define USER_TICKS
1587 #define WOLFSSL_LOG_PRINTF
1588 #define WOLFSSL_DH_CONST
1589 #endif /* _MSC_VER */
1590 #if !defined(HAVE_FIPS) && !defined(NO_RSA)
1591 #define WC_RSA_BLINDING
1592 #endif
1593
1594 #define NO_FILESYSTEM
1595 #define ECC_TIMING_RESISTANT
1596 #define TFM_TIMING_RESISTANT
1597 #define SINGLE_THREADED
1598 #define NO_ASN_TIME /* can not use headers such as windows.h */
1599 #define HAVE_AESGCM
1600 #define USE_CERT_BUFFERS_2048
1601 #define USE_FAST_MATH
1602#endif /* WOLFSSL_SGX */
1603
1604/* FreeScale MMCAU hardware crypto has 4 byte alignment.
1605 However, KSDK fsl_mmcau.h gives API with no alignment
1606 requirements (4 byte alignment is managed internally by fsl_mmcau.c) */
1607#ifdef FREESCALE_MMCAU
1608 #ifdef FREESCALE_MMCAU_CLASSIC
1609 #define WOLFSSL_MMCAU_ALIGNMENT 4
1610 #else
1611 #define WOLFSSL_MMCAU_ALIGNMENT 0
1612 #endif
1613#endif
1614
1615/* if using hardware crypto and have alignment requirements, specify the
1616 requirement here. The record header of SSL/TLS will prevent easy alignment.
1617 This hint tries to help as much as possible. */
1618#ifndef WOLFSSL_GENERAL_ALIGNMENT
1619 #ifdef WOLFSSL_AESNI
1620 #define WOLFSSL_GENERAL_ALIGNMENT 16
1621 #elif defined(XSTREAM_ALIGN)
1622 #define WOLFSSL_GENERAL_ALIGNMENT 4
1623 #elif defined(FREESCALE_MMCAU) || defined(FREESCALE_MMCAU_CLASSIC)
1624 #define WOLFSSL_GENERAL_ALIGNMENT WOLFSSL_MMCAU_ALIGNMENT
1625 #else
1626 #define WOLFSSL_GENERAL_ALIGNMENT 0
1627 #endif
1628#endif
1629
1630#if defined(WOLFSSL_GENERAL_ALIGNMENT) && (WOLFSSL_GENERAL_ALIGNMENT > 0)
1631 #if defined(_MSC_VER)
1632 #define XGEN_ALIGN __declspec(align(WOLFSSL_GENERAL_ALIGNMENT))
1633 #elif defined(__GNUC__)
1634 #define XGEN_ALIGN __attribute__((aligned(WOLFSSL_GENERAL_ALIGNMENT)))
1635 #else
1636 #define XGEN_ALIGN
1637 #endif
1638#else
1639 #define XGEN_ALIGN
1640#endif
1641
1642
1643#ifdef __INTEL_COMPILER
1644 #pragma warning(disable:2259) /* explicit casts to smaller sizes, disable */
1645#endif
1646
1647/* user can specify what curves they want with ECC_USER_CURVES otherwise
1648 * all curves are on by default for now */
1649#ifndef ECC_USER_CURVES
1650 #if !defined(WOLFSSL_SP_MATH) && !defined(HAVE_ALL_CURVES)
1651 #define HAVE_ALL_CURVES
1652 #endif
1653#endif
1654
1655/* ECC Configs */
1656#ifdef HAVE_ECC
1657 /* By default enable Sign, Verify, DHE, Key Import and Key Export unless explicitly disabled */
1658 #ifndef NO_ECC_SIGN
1659 #undef HAVE_ECC_SIGN
1660 #define HAVE_ECC_SIGN
1661 #endif
1662 #ifndef NO_ECC_VERIFY
1663 #undef HAVE_ECC_VERIFY
1664 #define HAVE_ECC_VERIFY
1665 #endif
1666 #ifndef NO_ECC_CHECK_KEY
1667 #undef HAVE_ECC_CHECK_KEY
1668 #define HAVE_ECC_CHECK_KEY
1669 #endif
1670 #ifndef NO_ECC_DHE
1671 #undef HAVE_ECC_DHE
1672 #define HAVE_ECC_DHE
1673 #endif
1674 #ifndef NO_ECC_KEY_IMPORT
1675 #undef HAVE_ECC_KEY_IMPORT
1676 #define HAVE_ECC_KEY_IMPORT
1677 #endif
1678 #ifndef NO_ECC_KEY_EXPORT
1679 #undef HAVE_ECC_KEY_EXPORT
1680 #define HAVE_ECC_KEY_EXPORT
1681 #endif
1682#endif /* HAVE_ECC */
1683
1684/* Curve25519 Configs */
1685#ifdef HAVE_CURVE25519
1686 /* By default enable shared secret, key export and import */
1687 #ifndef NO_CURVE25519_SHARED_SECRET
1688 #undef HAVE_CURVE25519_SHARED_SECRET
1689 #define HAVE_CURVE25519_SHARED_SECRET
1690 #endif
1691 #ifndef NO_CURVE25519_KEY_EXPORT
1692 #undef HAVE_CURVE25519_KEY_EXPORT
1693 #define HAVE_CURVE25519_KEY_EXPORT
1694 #endif
1695 #ifndef NO_CURVE25519_KEY_IMPORT
1696 #undef HAVE_CURVE25519_KEY_IMPORT
1697 #define HAVE_CURVE25519_KEY_IMPORT
1698 #endif
1699#endif /* HAVE_CURVE25519 */
1700
1701/* Ed25519 Configs */
1702#ifdef HAVE_ED25519
1703 /* By default enable sign, verify, key export and import */
1704 #ifndef NO_ED25519_SIGN
1705 #undef HAVE_ED25519_SIGN
1706 #define HAVE_ED25519_SIGN
1707 #endif
1708 #ifndef NO_ED25519_VERIFY
1709 #undef HAVE_ED25519_VERIFY
1710 #define HAVE_ED25519_VERIFY
1711 #endif
1712 #ifndef NO_ED25519_KEY_EXPORT
1713 #undef HAVE_ED25519_KEY_EXPORT
1714 #define HAVE_ED25519_KEY_EXPORT
1715 #endif
1716 #ifndef NO_ED25519_KEY_IMPORT
1717 #undef HAVE_ED25519_KEY_IMPORT
1718 #define HAVE_ED25519_KEY_IMPORT
1719 #endif
1720#endif /* HAVE_ED25519 */
1721
1722/* Curve448 Configs */
1723#ifdef HAVE_CURVE448
1724 /* By default enable shared secret, key export and import */
1725 #ifndef NO_CURVE448_SHARED_SECRET
1726 #undef HAVE_CURVE448_SHARED_SECRET
1727 #define HAVE_CURVE448_SHARED_SECRET
1728 #endif
1729 #ifndef NO_CURVE448_KEY_EXPORT
1730 #undef HAVE_CURVE448_KEY_EXPORT
1731 #define HAVE_CURVE448_KEY_EXPORT
1732 #endif
1733 #ifndef NO_CURVE448_KEY_IMPORT
1734 #undef HAVE_CURVE448_KEY_IMPORT
1735 #define HAVE_CURVE448_KEY_IMPORT
1736 #endif
1737#endif /* HAVE_CURVE448 */
1738
1739/* Ed448 Configs */
1740#ifdef HAVE_ED448
1741 /* By default enable sign, verify, key export and import */
1742 #ifndef NO_ED448_SIGN
1743 #undef HAVE_ED448_SIGN
1744 #define HAVE_ED448_SIGN
1745 #endif
1746 #ifndef NO_ED448_VERIFY
1747 #undef HAVE_ED448_VERIFY
1748 #define HAVE_ED448_VERIFY
1749 #endif
1750 #ifndef NO_ED448_KEY_EXPORT
1751 #undef HAVE_ED448_KEY_EXPORT
1752 #define HAVE_ED448_KEY_EXPORT
1753 #endif
1754 #ifndef NO_ED448_KEY_IMPORT
1755 #undef HAVE_ED448_KEY_IMPORT
1756 #define HAVE_ED448_KEY_IMPORT
1757 #endif
1758#endif /* HAVE_ED448 */
1759
1760/* AES Config */
1761#ifndef NO_AES
1762 /* By default enable all AES key sizes, decryption and CBC */
1763 #ifndef AES_MAX_KEY_SIZE
1764 #undef AES_MAX_KEY_SIZE
1765 #define AES_MAX_KEY_SIZE 256
1766 #endif
1767
1768 #ifndef NO_AES_128
1769 #undef WOLFSSL_AES_128
1770 #define WOLFSSL_AES_128
1771 #endif
1772 #if !defined(NO_AES_192) && AES_MAX_KEY_SIZE >= 192
1773 #undef WOLFSSL_AES_192
1774 #define WOLFSSL_AES_192
1775 #endif
1776 #if !defined(NO_AES_256) && AES_MAX_KEY_SIZE >= 256
1777 #undef WOLFSSL_AES_256
1778 #define WOLFSSL_AES_256
1779 #endif
1780 #if !defined(WOLFSSL_AES_128) && defined(HAVE_ECC_ENCRYPT)
1781 #warning HAVE_ECC_ENCRYPT uses AES 128 bit keys
1782 #endif
1783
1784 #ifndef NO_AES_DECRYPT
1785 #undef HAVE_AES_DECRYPT
1786 #define HAVE_AES_DECRYPT
1787 #endif
1788 #ifndef NO_AES_CBC
1789 #undef HAVE_AES_CBC
1790 #define HAVE_AES_CBC
1791 #endif
1792 #ifdef WOLFSSL_AES_XTS
1793 /* AES-XTS makes calls to AES direct functions */
1794 #ifndef WOLFSSL_AES_DIRECT
1795 #define WOLFSSL_AES_DIRECT
1796 #endif
1797 #endif
1798 #ifdef WOLFSSL_AES_CFB
1799 /* AES-CFB makes calls to AES direct functions */
1800 #ifndef WOLFSSL_AES_DIRECT
1801 #define WOLFSSL_AES_DIRECT
1802 #endif
1803 #endif
1804#endif
1805
1806#if (defined(WOLFSSL_TLS13) && defined(WOLFSSL_NO_TLS12)) || \
1807 (!defined(HAVE_AES_CBC) && defined(NO_DES3) && defined(NO_RC4) && \
1808 !defined(HAVE_CAMELLIA) && !defined(HAVE_IDEA) && \
1809 !defined(HAVE_NULL_CIPHER) && !defined(HAVE_HC128))
1810 #define WOLFSSL_AEAD_ONLY
1811#endif
1812
1813#if !defined(NO_DH) && !defined(HAVE_FFDHE)
1814 #if defined(HAVE_FFDHE_2048) || defined(HAVE_FFDHE_3072) || \
1815 defined(HAVE_FFDHE_4096) || defined(HAVE_FFDHE_6144) || \
1816 defined(HAVE_FFDHE_8192)
1817 #define HAVE_FFDHE
1818 #endif
1819#endif
1820#if defined(HAVE_FFDHE_8192)
1821 #define MIN_FFDHE_FP_MAX_BITS 16384
1822#elif defined(HAVE_FFDHE_6144)
1823 #define MIN_FFDHE_FP_MAX_BITS 12288
1824#elif defined(HAVE_FFDHE_4096)
1825 #define MIN_FFDHE_FP_MAX_BITS 8192
1826#elif defined(HAVE_FFDHE_3072)
1827 #define MIN_FFDHE_FP_MAX_BITS 6144
1828#elif defined(HAVE_FFDHE_2048)
1829 #define MIN_FFDHE_FP_MAX_BITS 4096
1830#else
1831 #define MIN_FFDHE_FP_MAX_BITS 0
1832#endif
1833#if defined(HAVE_FFDHE) && defined(FP_MAX_BITS)
1834 #if MIN_FFDHE_FP_MAX_BITS > FP_MAX_BITS
1835 #error "FFDHE parameters are too large for FP_MAX_BIT as set"
1836 #endif
1837#endif
1838
1839/* if desktop type system and fastmath increase default max bits */
1840#ifdef WOLFSSL_X86_64_BUILD
1841 #if defined(USE_FAST_MATH) && !defined(FP_MAX_BITS)
1842 #if MIN_FFDHE_FP_MAX_BITS <= 8192
1843 #define FP_MAX_BITS 8192
1844 #else
1845 #define FP_MAX_BITS MIN_FFDHE_FP_MAX_BITS
1846 #endif
1847 #endif
1848#endif
1849
1850/* If using the max strength build, ensure OLD TLS is disabled. */
1851#ifdef WOLFSSL_MAX_STRENGTH
1852 #undef NO_OLD_TLS
1853 #define NO_OLD_TLS
1854#endif
1855
1856
1857/* Default AES minimum auth tag sz, allow user to override */
1858#ifndef WOLFSSL_MIN_AUTH_TAG_SZ
1859 #define WOLFSSL_MIN_AUTH_TAG_SZ 12
1860#endif
1861
1862
1863/* sniffer requires:
1864 * static RSA cipher suites
1865 * session stats and peak stats
1866 */
1867#ifdef WOLFSSL_SNIFFER
1868 #ifndef WOLFSSL_STATIC_RSA
1869 #define WOLFSSL_STATIC_RSA
1870 #endif
1871 #ifndef WOLFSSL_STATIC_DH
1872 #define WOLFSSL_STATIC_DH
1873 #endif
1874 /* Allow option to be disabled. */
1875 #ifndef WOLFSSL_NO_SESSION_STATS
1876 #ifndef WOLFSSL_SESSION_STATS
1877 #define WOLFSSL_SESSION_STATS
1878 #endif
1879 #ifndef WOLFSSL_PEAK_SESSIONS
1880 #define WOLFSSL_PEAK_SESSIONS
1881 #endif
1882 #endif
1883#endif
1884
1885/* Decode Public Key extras on by default, user can turn off with
1886 * WOLFSSL_NO_DECODE_EXTRA */
1887#ifndef WOLFSSL_NO_DECODE_EXTRA
1888 #ifndef RSA_DECODE_EXTRA
1889 #define RSA_DECODE_EXTRA
1890 #endif
1891 #ifndef ECC_DECODE_EXTRA
1892 #define ECC_DECODE_EXTRA
1893 #endif
1894#endif
1895
1896/* C Sharp wrapper defines */
1897#ifdef HAVE_CSHARP
1898 #ifndef WOLFSSL_DTLS
1899 #define WOLFSSL_DTLS
1900 #endif
1901 #undef NO_PSK
1902 #undef NO_SHA256
1903 #undef NO_DH
1904#endif
1905
1906/* Asynchronous Crypto */
1907#ifdef WOLFSSL_ASYNC_CRYPT
1908 /* Make sure wolf events are enabled */
1909 #undef HAVE_WOLF_EVENT
1910 #define HAVE_WOLF_EVENT
1911
1912 #ifdef WOLFSSL_ASYNC_CRYPT_TEST
1913 #define WC_ASYNC_DEV_SIZE 168
1914 #else
1915 #define WC_ASYNC_DEV_SIZE 336
1916 #endif
1917
1918 #if !defined(HAVE_CAVIUM) && !defined(HAVE_INTEL_QA) && \
1919 !defined(WOLFSSL_ASYNC_CRYPT_TEST)
1920 #error No async hardware defined with WOLFSSL_ASYNC_CRYPT!
1921 #endif
1922
1923 /* Enable ECC_CACHE_CURVE for ASYNC */
1924 #if !defined(ECC_CACHE_CURVE)
1925 #define ECC_CACHE_CURVE
1926 #endif
1927#endif /* WOLFSSL_ASYNC_CRYPT */
1928#ifndef WC_ASYNC_DEV_SIZE
1929 #define WC_ASYNC_DEV_SIZE 0
1930#endif
1931
1932/* leantls checks */
1933#ifdef WOLFSSL_LEANTLS
1934 #ifndef HAVE_ECC
1935 #error leantls build needs ECC
1936 #endif
1937#endif /* WOLFSSL_LEANTLS*/
1938
1939/* restriction with static memory */
1940#ifdef WOLFSSL_STATIC_MEMORY
1941 #if defined(HAVE_IO_POOL) || defined(XMALLOC_USER) || defined(NO_WOLFSSL_MEMORY)
1942 #error static memory cannot be used with HAVE_IO_POOL, XMALLOC_USER or NO_WOLFSSL_MEMORY
1943 #endif
1944 #if !defined(USE_FAST_MATH) && !defined(NO_BIG_INT)
1945 #error static memory requires fast math please define USE_FAST_MATH
1946 #endif
1947 #ifdef WOLFSSL_SMALL_STACK
1948 #error static memory does not support small stack please undefine
1949 #endif
1950#endif /* WOLFSSL_STATIC_MEMORY */
1951
1952#ifdef HAVE_AES_KEYWRAP
1953 #ifndef WOLFSSL_AES_DIRECT
1954 #error AES key wrap requires AES direct please define WOLFSSL_AES_DIRECT
1955 #endif
1956#endif
1957
1958#ifdef HAVE_PKCS7
1959 #if defined(NO_AES) && defined(NO_DES3)
1960 #error PKCS7 needs either AES or 3DES enabled, please enable one
1961 #endif
1962 #ifndef HAVE_AES_KEYWRAP
1963 #error PKCS7 requires AES key wrap please define HAVE_AES_KEYWRAP
1964 #endif
1965 #if defined(HAVE_ECC) && !defined(HAVE_X963_KDF)
1966 #error PKCS7 requires X963 KDF please define HAVE_X963_KDF
1967 #endif
1968#endif
1969
1970#ifndef NO_PKCS12
1971 #undef HAVE_PKCS12
1972 #define HAVE_PKCS12
1973#endif
1974
1975#ifndef NO_PKCS8
1976 #undef HAVE_PKCS8
1977 #define HAVE_PKCS8
1978#endif
1979
1980#if !defined(NO_PBKDF1) || defined(WOLFSSL_ENCRYPTED_KEYS) || defined(HAVE_PKCS8) || defined(HAVE_PKCS12)
1981 #undef HAVE_PBKDF1
1982 #define HAVE_PBKDF1
1983#endif
1984
1985#if !defined(NO_PBKDF2) || defined(HAVE_PKCS7) || defined(HAVE_SCRYPT)
1986 #undef HAVE_PBKDF2
1987 #define HAVE_PBKDF2
1988#endif
1989
1990
1991#if !defined(WOLFCRYPT_ONLY) && !defined(NO_OLD_TLS) && \
1992 (defined(NO_SHA) || defined(NO_MD5))
1993 #error old TLS requires MD5 and SHA
1994#endif
1995
1996/* for backwards compatibility */
1997#if defined(TEST_IPV6) && !defined(WOLFSSL_IPV6)
1998 #define WOLFSSL_IPV6
1999#endif
2000
2001
2002/* Place any other flags or defines here */
2003
2004#if defined(WOLFSSL_MYSQL_COMPATIBLE) && defined(_WIN32) \
2005 && defined(HAVE_GMTIME_R)
2006 #undef HAVE_GMTIME_R /* don't trust macro with windows */
2007#endif /* WOLFSSL_MYSQL_COMPATIBLE */
2008
2009#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
2010 #define SSL_OP_NO_COMPRESSION SSL_OP_NO_COMPRESSION
2011 #define OPENSSL_NO_ENGINE
2012 #define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
2013 #ifndef OPENSSL_EXTRA
2014 #define OPENSSL_EXTRA
2015 #endif
2016 #ifndef HAVE_SESSION_TICKET
2017 #define HAVE_SESSION_TICKET
2018 #endif
2019 #ifndef HAVE_OCSP
2020 #define HAVE_OCSP
2021 #endif
2022 #ifndef KEEP_OUR_CERT
2023 #define KEEP_OUR_CERT
2024 #endif
2025 #ifndef HAVE_SNI
2026 #define HAVE_SNI
2027 #endif
2028#endif
2029
2030#if defined(WOLFSSL_NGINX) || defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
2031 #define SSL_CTRL_SET_TLSEXT_HOSTNAME 55
2032#endif
2033
2034
2035/* both CURVE and ED small math should be enabled */
2036#ifdef CURVED25519_SMALL
2037 #define CURVE25519_SMALL
2038 #define ED25519_SMALL
2039#endif
2040
2041/* both CURVE and ED small math should be enabled */
2042#ifdef CURVED448_SMALL
2043 #define CURVE448_SMALL
2044 #define ED448_SMALL
2045#endif
2046
2047
2048#ifndef WOLFSSL_ALERT_COUNT_MAX
2049 #define WOLFSSL_ALERT_COUNT_MAX 5
2050#endif
2051
2052/* warning for not using harden build options (default with ./configure) */
2053#ifndef WC_NO_HARDEN
2054 #if (defined(USE_FAST_MATH) && !defined(TFM_TIMING_RESISTANT)) || \
2055 (defined(HAVE_ECC) && !defined(ECC_TIMING_RESISTANT)) || \
2056 (!defined(NO_RSA) && !defined(WC_RSA_BLINDING) && !defined(HAVE_FIPS) && \
2057 !defined(WC_NO_RNG))
2058
2059 #ifndef _MSC_VER
2060 #warning "For timing resistance / side-channel attack prevention consider using harden options"
2061 #else
2062 #pragma message("Warning: For timing resistance / side-channel attack prevention consider using harden options")
2063 #endif
2064 #endif
2065#endif
2066
2067#if defined(NO_OLD_WC_NAMES) || defined(OPENSSL_EXTRA)
2068 /* added to have compatibility with SHA256() */
2069 #if !defined(NO_OLD_SHA_NAMES) && !defined(HAVE_FIPS)
2070 #define NO_OLD_SHA_NAMES
2071 #endif
2072#endif
2073
2074/* switch for compatibility layer functionality. Has subparts i.e. BIO/X509
2075 * When opensslextra is enabled all subparts should be turned on. */
2076#ifdef OPENSSL_EXTRA
2077 #undef OPENSSL_EXTRA_X509_SMALL
2078 #define OPENSSL_EXTRA_X509_SMALL
2079#endif /* OPENSSL_EXTRA */
2080
2081/* support for converting DER to PEM */
2082#if (defined(WOLFSSL_KEY_GEN) && !defined(WOLFSSL_NO_DER_TO_PEM)) || \
2083 defined(WOLFSSL_CERT_GEN) || defined(OPENSSL_EXTRA)
2084 #undef WOLFSSL_DER_TO_PEM
2085 #define WOLFSSL_DER_TO_PEM
2086#endif
2087
2088/* keep backwards compatibility enabling encrypted private key */
2089#ifndef WOLFSSL_ENCRYPTED_KEYS
2090 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \
2091 defined(HAVE_WEBSERVER)
2092 #define WOLFSSL_ENCRYPTED_KEYS
2093 #endif
2094#endif
2095
2096/* support for disabling PEM to DER */
2097#if !defined(WOLFSSL_NO_PEM)
2098 #undef WOLFSSL_PEM_TO_DER
2099 #define WOLFSSL_PEM_TO_DER
2100#endif
2101
2102/* Parts of the openssl compatibility layer require peer certs */
2103#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY)
2104 #undef KEEP_PEER_CERT
2105 #define KEEP_PEER_CERT
2106#endif
2107
2108/* RAW hash function APIs are not implemented with ARMv8 hardware acceleration*/
2109#ifdef WOLFSSL_ARMASM
2110 #undef WOLFSSL_NO_HASH_RAW
2111 #define WOLFSSL_NO_HASH_RAW
2112#endif
2113
2114#if !defined(WOLFSSL_SHA384) && !defined(WOLFSSL_SHA512) && defined(NO_AES) && \
2115 !defined(WOLFSSL_SHA3)
2116 #undef WOLFSSL_NO_WORD64_OPS
2117 #define WOLFSSL_NO_WORD64_OPS
2118#endif
2119
2120#if !defined(WOLFCRYPT_ONLY) && !defined(WOLFSSL_NO_TLS12)
2121 #undef WOLFSSL_HAVE_PRF
2122 #define WOLFSSL_HAVE_PRF
2123#endif
2124
2125#if defined(NO_AES) && defined(NO_DES3) && !defined(HAVE_CAMELLIA) && \
2126 !defined(WOLFSSL_HAVE_PRF) && defined(NO_PWDBASED) && !defined(HAVE_IDEA)
2127 #undef WOLFSSL_NO_XOR_OPS
2128 #define WOLFSSL_NO_XOR_OPS
2129#endif
2130
2131#if defined(NO_ASN) && defined(WOLFCRYPT_ONLY)
2132 #undef WOLFSSL_NO_INT_ENCODE
2133 #define WOLFSSL_NO_INT_ENCODE
2134 #undef WOLFSSL_NO_INT_DECODE
2135 #define WOLFSSL_NO_INT_DECODE
2136#endif
2137
2138#if defined(WOLFCRYPT_ONLY) && defined(WOLFSSL_RSA_VERIFY_ONLY) && \
2139 defined(WC_NO_RSA_OAEP)
2140 #undef WOLFSSL_NO_CT_OPS
2141 #define WOLFSSL_NO_CT_OPS
2142#endif
2143
2144#if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(HAVE_CURVE25519) && \
2145 !defined(HAVE_CURVE448) && defined(WC_NO_RNG) && defined(WC_NO_RSA_OAEP)
2146 #undef WOLFSSL_NO_CONST_CMP
2147 #define WOLFSSL_NO_CONST_CMP
2148#endif
2149
2150#if defined(WOLFCRYPT_ONLY) && defined(NO_AES) && !defined(WOLFSSL_SHA384) && \
2151 !defined(WOLFSSL_SHA512) && defined(WC_NO_RNG) && \
2152 defined(WOLFSSL_SP_MATH) && defined(WOLFSSL_RSA_PUBLIC_ONLY)
2153 #undef WOLFSSL_NO_FORCE_ZERO
2154 #define WOLFSSL_NO_FORCE_ZERO
2155#endif
2156
2157/* Detect old cryptodev name */
2158#if defined(WOLF_CRYPTO_DEV) && !defined(WOLF_CRYPTO_CB)
2159 #define WOLF_CRYPTO_CB
2160#endif
2161
2162#if defined(WOLFSSL_TLS13) && defined(WOLFSSL_NO_SIGALG)
2163 #error TLS 1.3 requires the Signature Algorithms extension to be enabled
2164#endif
2165
2166#ifndef NO_WOLFSSL_BASE64_DECODE
2167 #define WOLFSSL_BASE64_DECODE
2168#endif
2169
2170#if defined(HAVE_EX_DATA) || defined(FORTRESS)
2171 #define MAX_EX_DATA 5 /* allow for five items of ex_data */
2172#endif
2173
2174#ifdef NO_WOLFSSL_SMALL_STACK
2175 #undef WOLFSSL_SMALL_STACK
2176#endif
2177
2178/* The client session cache requires time for timeout */
2179#if defined(NO_ASN_TIME) && !defined(NO_SESSION_CACHE)
2180 #define NO_SESSION_CACHE
2181#endif
2182
2183/* Use static ECC structs for Position Independant Code (PIC) */
2184#if defined(__IAR_SYSTEMS_ICC__) && defined(__ROPI__)
2185 #define WOLFSSL_ECC_CURVE_STATIC
2186 #define WOLFSSL_NAMES_STATIC
2187 #define WOLFSSL_NO_CONSTCHARCONST
2188#endif
2189
2190
2191#ifdef __cplusplus
2192 } /* extern "C" */
2193#endif
2194
2195#endif
Note: See TracBrowser for help on using the repository browser.