From 313ffb8f90a2f484e1e789eef7975a79846237e9 Mon Sep 17 00:00:00 2001 From: Gilles Peskine Date: Sun, 14 Feb 2021 12:51:14 +0100 Subject: [PATCH] Move PSA storage cleanup out of the slot_management test suite Merge the two identical definitions of TEST_USES_KEY_ID and mbedtls_test_psa_purge_key_storage from test_suite_psa_crypto_slot_management.function and test_suite_psa_crypto_se_driver_hal.function into a single copy in common test code so that it can be used in all test suites. No semantic change. Signed-off-by: Gilles Peskine --- tests/include/test/psa_crypto_helpers.h | 13 ++++++ tests/src/psa_crypto_helpers.c | 39 ++++++++++++++++ ...st_suite_psa_crypto_se_driver_hal.function | 36 --------------- ..._suite_psa_crypto_slot_management.function | 45 ------------------- 4 files changed, 52 insertions(+), 81 deletions(-) diff --git a/tests/include/test/psa_crypto_helpers.h b/tests/include/test/psa_crypto_helpers.h index 30bb20f07..571055c2d 100644 --- a/tests/include/test/psa_crypto_helpers.h +++ b/tests/include/test/psa_crypto_helpers.h @@ -34,6 +34,19 @@ #include "mbedtls/psa_util.h" #endif +#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) +/* All test functions that create persistent keys must call + * `TEST_USES_KEY_ID( key_id )` before creating a persistent key with this + * identifier, and must call psa_purge_key_storage() in their cleanup + * code. */ +int mbedtls_test_uses_key_id( mbedtls_svc_key_id_t key_id ); +void mbedtls_test_psa_purge_key_storage( void ); +#define TEST_USES_KEY_ID( key_id ) \ + TEST_ASSERT( mbedtls_test_uses_key_id( key_id ) ) +#else /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ +#define TEST_USES_KEY_ID( key_id ) ( (void) ( key_id ) ) +#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ + #define PSA_INIT( ) PSA_ASSERT( psa_crypto_init( ) ) /** Check for things that have not been cleaned up properly in the diff --git a/tests/src/psa_crypto_helpers.c b/tests/src/psa_crypto_helpers.c index cb79a225c..69bb8a1d8 100644 --- a/tests/src/psa_crypto_helpers.c +++ b/tests/src/psa_crypto_helpers.c @@ -28,6 +28,45 @@ #include +#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) + +#include + +static mbedtls_svc_key_id_t key_ids_used_in_test[9]; +static size_t num_key_ids_used; + +/* Record a key id as potentially used in a test case. */ +int mbedtls_test_uses_key_id( mbedtls_svc_key_id_t key_id ) +{ + size_t i; + if( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key_id ) > + PSA_MAX_PERSISTENT_KEY_IDENTIFIER ) + { + /* Don't touch key id values that designate non-key files. */ + return( 1 ); + } + for( i = 0; i < num_key_ids_used ; i++ ) + { + if( mbedtls_svc_key_id_equal( key_id, key_ids_used_in_test[i] ) ) + return( 1 ); + } + if( num_key_ids_used == ARRAY_LENGTH( key_ids_used_in_test ) ) + return( 0 ); + key_ids_used_in_test[num_key_ids_used] = key_id; + ++num_key_ids_used; + return( 1 ); +} + +/* Destroy all key ids that may have been created by the current test case. */ +void mbedtls_test_psa_purge_key_storage( void ) +{ + size_t i; + for( i = 0; i < num_key_ids_used; i++ ) + psa_destroy_persistent_key( key_ids_used_in_test[i] ); + num_key_ids_used = 0; +} +#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ + const char *mbedtls_test_helper_is_psa_leaking( void ) { mbedtls_psa_stats_t stats; diff --git a/tests/suites/test_suite_psa_crypto_se_driver_hal.function b/tests/suites/test_suite_psa_crypto_se_driver_hal.function index 929ca96bd..be7c246e4 100644 --- a/tests/suites/test_suite_psa_crypto_se_driver_hal.function +++ b/tests/suites/test_suite_psa_crypto_se_driver_hal.function @@ -767,42 +767,6 @@ exit: return( ok ); } -static mbedtls_svc_key_id_t key_ids_used_in_test[9]; -static size_t num_key_ids_used; - -/* Record a key id as potentially used in a test case. */ -int mbedtls_test_uses_key_id( mbedtls_svc_key_id_t key_id ) -{ - size_t i; - if( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key_id ) > - PSA_MAX_PERSISTENT_KEY_IDENTIFIER ) - { - /* Don't touch key id values that designate non-key files. */ - return( 1 ); - } - for( i = 0; i < num_key_ids_used ; i++ ) - { - if( mbedtls_svc_key_id_equal( key_id, key_ids_used_in_test[i] ) ) - return( 1 ); - } - if( num_key_ids_used == ARRAY_LENGTH( key_ids_used_in_test ) ) - return( 0 ); - key_ids_used_in_test[num_key_ids_used] = key_id; - ++num_key_ids_used; - return( 1 ); -} -#define TEST_USES_KEY_ID( key_id ) \ - TEST_ASSERT( mbedtls_test_uses_key_id( key_id ) ) - -/* Destroy all key ids that may have been created by the current test case. */ -void mbedtls_test_psa_purge_key_storage( void ) -{ - size_t i; - for( i = 0; i < num_key_ids_used; i++ ) - psa_destroy_persistent_key( key_ids_used_in_test[i] ); - num_key_ids_used = 0; -} - static void psa_purge_storage( void ) { psa_key_location_t location; diff --git a/tests/suites/test_suite_psa_crypto_slot_management.function b/tests/suites/test_suite_psa_crypto_slot_management.function index 5a5f93387..2be1a73e8 100644 --- a/tests/suites/test_suite_psa_crypto_slot_management.function +++ b/tests/suites/test_suite_psa_crypto_slot_management.function @@ -43,51 +43,6 @@ typedef enum INVALID_HANDLE_HUGE, } invalid_handle_construction_t; -/* All test functions that create persistent keys must call - * `TEST_USES_KEY_ID( key_id )` before creating a persistent key with this - * identifier, and must call psa_purge_key_storage() in their cleanup - * code. */ - -#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) -static mbedtls_svc_key_id_t key_ids_used_in_test[9]; -static size_t num_key_ids_used; - -/* Record a key id as potentially used in a test case. */ -int mbedtls_test_uses_key_id( mbedtls_svc_key_id_t key_id ) -{ - size_t i; - if( MBEDTLS_SVC_KEY_ID_GET_KEY_ID( key_id ) > - PSA_MAX_PERSISTENT_KEY_IDENTIFIER ) - { - /* Don't touch key id values that designate non-key files. */ - return( 1 ); - } - for( i = 0; i < num_key_ids_used ; i++ ) - { - if( mbedtls_svc_key_id_equal( key_id, key_ids_used_in_test[i] ) ) - return( 1 ); - } - if( num_key_ids_used == ARRAY_LENGTH( key_ids_used_in_test ) ) - return( 0 ); - key_ids_used_in_test[num_key_ids_used] = key_id; - ++num_key_ids_used; - return( 1 ); -} -#define TEST_USES_KEY_ID( key_id ) \ - TEST_ASSERT( mbedtls_test_uses_key_id( key_id ) ) - -/* Destroy all key ids that may have been created by the current test case. */ -void mbedtls_test_psa_purge_key_storage( void ) -{ - size_t i; - for( i = 0; i < num_key_ids_used; i++ ) - psa_destroy_persistent_key( key_ids_used_in_test[i] ); - num_key_ids_used = 0; -} -#else -#define TEST_USES_KEY_ID( key_id ) ( (void) ( key_id ) ) -#endif /* MBEDTLS_PSA_CRYPTO_STORAGE_C */ - /** Apply \p invalidate_method to invalidate the specified key: * close it, destroy it, or do nothing; */