blob: b5f5796e4233de4a851b071d5afdfc8c08f598bd [file] [log] [blame]
Tom Rini0344c602024-10-08 13:56:50 -06001#line 2 "suites/helpers.function"
2/*----------------------------------------------------------------------------*/
3/* Headers */
4
5#include <test/arguments.h>
6#include <test/helpers.h>
7#include <test/macros.h>
8#include <test/random.h>
9#include <test/bignum_helpers.h>
10#include <test/psa_crypto_helpers.h>
11#include <test/threading_helpers.h>
12
13#include <errno.h>
14#include <limits.h>
15#include <stdint.h>
16#include <stdlib.h>
17#include <string.h>
18
19#if defined(MBEDTLS_ERROR_C)
20#include "mbedtls/error.h"
21#endif
22#include "mbedtls/platform.h"
23
24#if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C)
25#include "mbedtls/memory_buffer_alloc.h"
26#endif
27
28#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
29#include <unistd.h>
30#endif
31
32/*----------------------------------------------------------------------------*/
33/* Status and error constants */
34
35#define DEPENDENCY_SUPPORTED 0 /* Dependency supported by build */
36#define KEY_VALUE_MAPPING_FOUND 0 /* Integer expression found */
37#define DISPATCH_TEST_SUCCESS 0 /* Test dispatch successful */
38
39#define KEY_VALUE_MAPPING_NOT_FOUND -1 /* Integer expression not found */
40#define DEPENDENCY_NOT_SUPPORTED -2 /* Dependency not supported */
41#define DISPATCH_TEST_FN_NOT_FOUND -3 /* Test function not found */
42#define DISPATCH_INVALID_TEST_DATA -4 /* Invalid test parameter type.
43 Only int, string, binary data
44 and integer expressions are
45 allowed */
46#define DISPATCH_UNSUPPORTED_SUITE -5 /* Test suite not supported by the
47 build */
48
49/*----------------------------------------------------------------------------*/
50/* Global variables */
51
52/*----------------------------------------------------------------------------*/
53/* Helper flags for complex dependencies */
54
55/* Indicates whether we expect mbedtls_entropy_init
56 * to initialize some strong entropy source. */
57#if !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) && \
58 (!defined(MBEDTLS_NO_PLATFORM_ENTROPY) || \
59 defined(MBEDTLS_ENTROPY_HARDWARE_ALT) || \
60 defined(ENTROPY_NV_SEED))
61#define ENTROPY_HAVE_STRONG
62#endif
63
64
65/*----------------------------------------------------------------------------*/
66/* Helper Functions */
67
68#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
69static int redirect_output(FILE *out_stream, const char *path)
70{
71 int out_fd, dup_fd;
72 FILE *path_stream;
73
74 out_fd = fileno(out_stream);
75 dup_fd = dup(out_fd);
76
77 if (dup_fd == -1) {
78 return -1;
79 }
80
81 path_stream = fopen(path, "w");
82 if (path_stream == NULL) {
83 close(dup_fd);
84 return -1;
85 }
86
87 fflush(out_stream);
88 if (dup2(fileno(path_stream), out_fd) == -1) {
89 close(dup_fd);
90 fclose(path_stream);
91 return -1;
92 }
93
94 fclose(path_stream);
95 return dup_fd;
96}
97
98static int restore_output(FILE *out_stream, int dup_fd)
99{
100 int out_fd = fileno(out_stream);
101
102 fflush(out_stream);
103 if (dup2(dup_fd, out_fd) == -1) {
104 close(out_fd);
105 close(dup_fd);
106 return -1;
107 }
108
109 close(dup_fd);
110 return 0;
111}
112#endif /* __unix__ || __APPLE__ __MACH__ */