psa: Add driver initialization and termination

Signed-off-by: Ronald Cron <ronald.cron@arm.com>
This commit is contained in:
Ronald Cron 2021-04-10 16:57:30 +02:00
parent 485559eeb5
commit 088d5d0c1b
5 changed files with 74 additions and 8 deletions

View File

@ -5320,11 +5320,9 @@ void mbedtls_psa_crypto_free( void )
* In particular, this sets all state indicator to the value * In particular, this sets all state indicator to the value
* indicating "uninitialized". */ * indicating "uninitialized". */
mbedtls_platform_zeroize( &global_data, sizeof( global_data ) ); mbedtls_platform_zeroize( &global_data, sizeof( global_data ) );
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
/* Unregister all secure element drivers, so that we restart from /* Terminate drivers */
* a pristine state. */ psa_driver_wrapper_free( );
psa_unregister_all_se_drivers( );
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
} }
#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) #if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS)
@ -5373,11 +5371,10 @@ psa_status_t psa_crypto_init( void )
if( status != PSA_SUCCESS ) if( status != PSA_SUCCESS )
goto exit; goto exit;
#if defined(MBEDTLS_PSA_CRYPTO_SE_C) /* Init drivers */
status = psa_init_all_se_drivers( ); status = psa_driver_wrapper_init( );
if( status != PSA_SUCCESS ) if( status != PSA_SUCCESS )
goto exit; goto exit;
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
#if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS) #if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS)
status = psa_crypto_load_transaction( ); status = psa_crypto_load_transaction( );

View File

@ -66,6 +66,44 @@
#include "psa_crypto_se.h" #include "psa_crypto_se.h"
#endif #endif
psa_status_t psa_driver_wrapper_init( void )
{
psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
status = psa_init_all_se_drivers( );
if( status != PSA_SUCCESS )
return( status );
#endif
#if defined(PSA_CRYPTO_DRIVER_TEST)
status = mbedtls_test_transparent_init( );
if( status != PSA_SUCCESS )
return( status );
status = mbedtls_test_opaque_init( );
if( status != PSA_SUCCESS )
return( status );
#endif
(void) status;
return( PSA_SUCCESS );
}
void psa_driver_wrapper_free( void )
{
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
/* Unregister all secure element drivers, so that we restart from
* a pristine state. */
psa_unregister_all_se_drivers( );
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
#if defined(PSA_CRYPTO_DRIVER_TEST)
mbedtls_test_transparent_free( );
mbedtls_test_opaque_free( );
#endif
}
/* Start delegation functions */ /* Start delegation functions */
psa_status_t psa_driver_wrapper_sign_message( psa_status_t psa_driver_wrapper_sign_message(
const psa_key_attributes_t *attributes, const psa_key_attributes_t *attributes,

View File

@ -25,6 +25,12 @@
#include "psa/crypto.h" #include "psa/crypto.h"
#include "psa/crypto_driver_common.h" #include "psa/crypto_driver_common.h"
/*
* Initialization and termination functions
*/
psa_status_t psa_driver_wrapper_init( void );
void psa_driver_wrapper_free( void );
/* /*
* Signature functions * Signature functions
*/ */

View File

@ -56,6 +56,11 @@ static inline mbedtls_test_driver_key_management_hooks_t
extern mbedtls_test_driver_key_management_hooks_t extern mbedtls_test_driver_key_management_hooks_t
mbedtls_test_driver_key_management_hooks; mbedtls_test_driver_key_management_hooks;
psa_status_t mbedtls_test_transparent_init( void );
void mbedtls_test_transparent_free( void );
psa_status_t mbedtls_test_opaque_init( void );
void mbedtls_test_opaque_free( void );
psa_status_t mbedtls_test_transparent_generate_key( psa_status_t mbedtls_test_transparent_generate_key(
const psa_key_attributes_t *attributes, const psa_key_attributes_t *attributes,
uint8_t *key, size_t key_size, size_t *key_length ); uint8_t *key, size_t key_size, size_t *key_length );

View File

@ -60,6 +60,26 @@ const uint8_t mbedtls_test_driver_ecdsa_pubkey[65] =
0xbc, 0x25, 0x16, 0xc3, 0xd2, 0x70, 0x2d, 0x79, 0xbc, 0x25, 0x16, 0xc3, 0xd2, 0x70, 0x2d, 0x79,
0x2f, 0x13, 0x1a, 0x92, 0x20, 0x95, 0xfd, 0x6c }; 0x2f, 0x13, 0x1a, 0x92, 0x20, 0x95, 0xfd, 0x6c };
psa_status_t mbedtls_test_transparent_init( void )
{
return( PSA_SUCCESS );
}
void mbedtls_test_transparent_free( void )
{
return;
}
psa_status_t mbedtls_test_opaque_init( void )
{
return( PSA_SUCCESS );
}
void mbedtls_test_opaque_free( void )
{
return;
}
psa_status_t mbedtls_test_transparent_generate_key( psa_status_t mbedtls_test_transparent_generate_key(
const psa_key_attributes_t *attributes, const psa_key_attributes_t *attributes,
uint8_t *key, size_t key_size, size_t *key_length ) uint8_t *key, size_t key_size, size_t *key_length )