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