diff --git a/include/mbedtls/error.h b/include/mbedtls/error.h index 9a8690dc1a..d2d31a82ab 100644 --- a/include/mbedtls/error.h +++ b/include/mbedtls/error.h @@ -129,6 +129,7 @@ extern "C" { * Only used when invasive testing is enabled via MBEDTLS_TEST_HOOKS. */ extern void (*mbedtls_test_hook_error_add)( int, int, const char *, int ); +extern void (*mbedtls_test_hook_value)( int test, const char * file, int line ); #endif /** diff --git a/include/mbedtls/mbedtls_config.h b/include/mbedtls/mbedtls_config.h index a60db7e930..1ab0aded19 100644 --- a/include/mbedtls/mbedtls_config.h +++ b/include/mbedtls/mbedtls_config.h @@ -1683,7 +1683,7 @@ * * Uncomment to enable invasive tests. */ -//#define MBEDTLS_TEST_HOOKS +#define MBEDTLS_TEST_HOOKS /** * \def MBEDTLS_THREADING_ALT diff --git a/library/psa_crypto.c b/library/psa_crypto.c index 6e73d12c68..c7186af970 100644 --- a/library/psa_crypto.c +++ b/library/psa_crypto.c @@ -1002,6 +1002,10 @@ psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot ) if( slot->lock_count != 1 ) { +#if defined(MBEDTLS_TEST_HOOKS) + if( *mbedtls_test_hook_value != NULL ) + ( *mbedtls_test_hook_value )( slot->lock_count == 1, __FILE__, __LINE__ ); +#endif status = PSA_ERROR_CORRUPTION_DETECTED; } diff --git a/library/psa_crypto_slot_management.c b/library/psa_crypto_slot_management.c index 4131e3cc47..256408dfde 100644 --- a/library/psa_crypto_slot_management.c +++ b/library/psa_crypto_slot_management.c @@ -34,6 +34,7 @@ #include #include +#include "mbedtls/error.h" #if defined(MBEDTLS_PLATFORM_C) #include "mbedtls/platform.h" #else @@ -412,6 +413,13 @@ psa_status_t psa_unlock_key_slot( psa_key_slot_t *slot ) return( PSA_SUCCESS ); } + slot->lock_count = 1; + +#if defined(MBEDTLS_TEST_HOOKS) + if( *mbedtls_test_hook_value != NULL ) + ( *mbedtls_test_hook_value )( slot->lock_count > 0, __FILE__, __LINE__ ); +#endif + return( PSA_ERROR_CORRUPTION_DETECTED ); } diff --git a/scripts/data_files/error.fmt b/scripts/data_files/error.fmt index 3be94bd2c4..c2b4b0877c 100644 --- a/scripts/data_files/error.fmt +++ b/scripts/data_files/error.fmt @@ -164,6 +164,7 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) #if defined(MBEDTLS_TEST_HOOKS) void (*mbedtls_test_hook_error_add)( int, int, const char *, int ); +void (*mbedtls_test_hook_value)( int, const char *, int ); #endif #endif /* MBEDTLS_ERROR_C || MBEDTLS_ERROR_STRERROR_DUMMY */ diff --git a/tests/include/test/helpers.h b/tests/include/test/helpers.h index 27e5599ed1..40fcb03dd9 100644 --- a/tests/include/test/helpers.h +++ b/tests/include/test/helpers.h @@ -231,4 +231,13 @@ void mbedtls_test_err_add_check( int high, int low, int mbedtls_test_read_mpi( mbedtls_mpi *X, int radix, const char *s ); #endif /* MBEDTLS_BIGNUM_C */ +/** + * \brief Check value in first parameter. + * + * \note If the check fails, fail the test currently being run. + */ +#if defined(MBEDTLS_TEST_HOOKS) +void mbedtls_test_hook_value_check( int test, const char * file, int line ); +#endif + #endif /* TEST_HELPERS_H */ diff --git a/tests/src/helpers.c b/tests/src/helpers.c index 4d3d53da50..bf25f21ad5 100644 --- a/tests/src/helpers.c +++ b/tests/src/helpers.c @@ -274,3 +274,13 @@ int mbedtls_test_read_mpi( mbedtls_mpi *X, int radix, const char *s ) return( mbedtls_mpi_read_string( X, radix, s ) ); } #endif + +#if defined(MBEDTLS_TEST_HOOKS) +void mbedtls_test_hook_value_check( int test, const char * file, int line ) +{ + if ( !test ) + { + mbedtls_test_fail( "Wrong value in test", line, file ); + } +} +#endif diff --git a/tests/suites/main_test.function b/tests/suites/main_test.function index 52b586eaad..9ac5a4a31f 100644 --- a/tests/suites/main_test.function +++ b/tests/suites/main_test.function @@ -239,6 +239,7 @@ int main( int argc, const char *argv[] ) { #if defined(MBEDTLS_TEST_HOOKS) && defined (MBEDTLS_ERROR_C) mbedtls_test_hook_error_add = &mbedtls_test_err_add_check; + mbedtls_test_hook_value = &mbedtls_test_hook_value_check; #endif int ret = mbedtls_test_platform_setup();