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