|  | #line 2 "suites/helpers.function" | 
|  | /*----------------------------------------------------------------------------*/ | 
|  | /* Headers */ | 
|  |  | 
|  | #include <test/macros.h> | 
|  | #include <test/helpers.h> | 
|  | #include <test/random.h> | 
|  | #include <test/psa_crypto_helpers.h> | 
|  |  | 
|  | #include <stdlib.h> | 
|  |  | 
|  | #if defined(MBEDTLS_PLATFORM_C) | 
|  | #include "mbedtls/platform.h" | 
|  | #else | 
|  | #include <stdio.h> | 
|  | #define mbedtls_fprintf    fprintf | 
|  | #define mbedtls_snprintf   snprintf | 
|  | #define mbedtls_calloc     calloc | 
|  | #define mbedtls_free       free | 
|  | #define mbedtls_exit       exit | 
|  | #define mbedtls_time       time | 
|  | #define mbedtls_time_t     time_t | 
|  | #define MBEDTLS_EXIT_SUCCESS EXIT_SUCCESS | 
|  | #define MBEDTLS_EXIT_FAILURE EXIT_FAILURE | 
|  | #endif | 
|  |  | 
|  | #if defined(MBEDTLS_MEMORY_BUFFER_ALLOC_C) | 
|  | #include "mbedtls/memory_buffer_alloc.h" | 
|  | #endif | 
|  |  | 
|  | #if defined(MBEDTLS_CHECK_PARAMS) | 
|  | #include "mbedtls/platform_util.h" | 
|  | #include <setjmp.h> | 
|  | #endif | 
|  |  | 
|  | #ifdef _MSC_VER | 
|  | #include <basetsd.h> | 
|  | typedef UINT8 uint8_t; | 
|  | typedef INT32 int32_t; | 
|  | typedef UINT32 uint32_t; | 
|  | #define strncasecmp _strnicmp | 
|  | #define strcasecmp _stricmp | 
|  | #else | 
|  | #include <stdint.h> | 
|  | #endif | 
|  |  | 
|  | #include <string.h> | 
|  |  | 
|  | #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) | 
|  | #include <unistd.h> | 
|  | #include <strings.h> | 
|  | #endif | 
|  |  | 
|  | /* Type for Hex parameters */ | 
|  | typedef struct data_tag | 
|  | { | 
|  | uint8_t *   x; | 
|  | uint32_t    len; | 
|  | } data_t; | 
|  |  | 
|  | /*----------------------------------------------------------------------------*/ | 
|  | /* Status and error constants */ | 
|  |  | 
|  | #define DEPENDENCY_SUPPORTED            0   /* Dependency supported by build */ | 
|  | #define KEY_VALUE_MAPPING_FOUND         0   /* Integer expression found */ | 
|  | #define DISPATCH_TEST_SUCCESS           0   /* Test dispatch successful */ | 
|  |  | 
|  | #define KEY_VALUE_MAPPING_NOT_FOUND     -1  /* Integer expression not found */ | 
|  | #define DEPENDENCY_NOT_SUPPORTED        -2  /* Dependency not supported */ | 
|  | #define DISPATCH_TEST_FN_NOT_FOUND      -3  /* Test function not found */ | 
|  | #define DISPATCH_INVALID_TEST_DATA      -4  /* Invalid test parameter type. | 
|  | Only int, string, binary data | 
|  | and integer expressions are | 
|  | allowed */ | 
|  | #define DISPATCH_UNSUPPORTED_SUITE      -5  /* Test suite not supported by the | 
|  | build */ | 
|  |  | 
|  | /*----------------------------------------------------------------------------*/ | 
|  | /* Global variables */ | 
|  |  | 
|  | #if defined(MBEDTLS_CHECK_PARAMS) | 
|  | jmp_buf jmp_tmp; | 
|  | #endif | 
|  |  | 
|  | /*----------------------------------------------------------------------------*/ | 
|  | /* Helper flags for complex dependencies */ | 
|  |  | 
|  | /* Indicates whether we expect mbedtls_entropy_init | 
|  | * to initialize some strong entropy source. */ | 
|  | #if defined(MBEDTLS_TEST_NULL_ENTROPY) ||             \ | 
|  | ( !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES) && \ | 
|  | ( !defined(MBEDTLS_NO_PLATFORM_ENTROPY)  ||     \ | 
|  | defined(MBEDTLS_HAVEGE_C)             ||     \ | 
|  | defined(MBEDTLS_ENTROPY_HARDWARE_ALT) ||     \ | 
|  | defined(ENTROPY_NV_SEED) ) ) | 
|  | #define ENTROPY_HAVE_STRONG | 
|  | #endif | 
|  |  | 
|  |  | 
|  | /*----------------------------------------------------------------------------*/ | 
|  | /* Helper Functions */ | 
|  |  | 
|  | #if defined(MBEDTLS_PSA_CRYPTO_C) | 
|  | /** Check that no PSA Crypto key slots are in use. | 
|  | * | 
|  | * If any slots are in use, mark the current test as failed. | 
|  | * | 
|  | * \return 0 if the key store is empty, 1 otherwise. | 
|  | */ | 
|  | int test_fail_if_psa_leaking( int line_no, const char *filename ) | 
|  | { | 
|  | const char *msg = mbedtls_test_helper_is_psa_leaking( ); | 
|  | if( msg == NULL ) | 
|  | return 0; | 
|  | else | 
|  | { | 
|  | mbedtls_test_fail( msg, line_no, filename ); | 
|  | return 1; | 
|  | } | 
|  | } | 
|  | #endif /* defined(MBEDTLS_PSA_CRYPTO_C) */ | 
|  |  | 
|  | #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) | 
|  | static int redirect_output( FILE* out_stream, const char* path ) | 
|  | { | 
|  | int out_fd, dup_fd; | 
|  | FILE* path_stream; | 
|  |  | 
|  | out_fd = fileno( out_stream ); | 
|  | dup_fd = dup( out_fd ); | 
|  |  | 
|  | if( dup_fd == -1 ) | 
|  | { | 
|  | return( -1 ); | 
|  | } | 
|  |  | 
|  | path_stream = fopen( path, "w" ); | 
|  | if( path_stream == NULL ) | 
|  | { | 
|  | close( dup_fd ); | 
|  | return( -1 ); | 
|  | } | 
|  |  | 
|  | fflush( out_stream ); | 
|  | if( dup2( fileno( path_stream ), out_fd ) == -1 ) | 
|  | { | 
|  | close( dup_fd ); | 
|  | fclose( path_stream ); | 
|  | return( -1 ); | 
|  | } | 
|  |  | 
|  | fclose( path_stream ); | 
|  | return( dup_fd ); | 
|  | } | 
|  |  | 
|  | static int restore_output( FILE* out_stream, int dup_fd ) | 
|  | { | 
|  | int out_fd = fileno( out_stream ); | 
|  |  | 
|  | fflush( out_stream ); | 
|  | if( dup2( dup_fd, out_fd ) == -1 ) | 
|  | { | 
|  | close( out_fd ); | 
|  | close( dup_fd ); | 
|  | return( -1 ); | 
|  | } | 
|  |  | 
|  | close( dup_fd ); | 
|  | return( 0 ); | 
|  | } | 
|  | #endif /* __unix__ || __APPLE__ __MACH__ */ |