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