mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-01-24 13:21:07 +00:00
Get a builtin key's attributes in order to correctly get its size
Leverage the fact that the get_builtin_key entrypoint returns a key's attributes, such that a proper size for the builtin key's buffer can be calculated through the driver's get_key_buffer_size hook. Signed-off-by: Steven Cooreman <steven.cooreman@silabs.com>
This commit is contained in:
parent
7ddee7f7c5
commit
ce48702448
|
@ -302,6 +302,19 @@ static psa_status_t psa_load_builtin_key_into_slot( psa_key_slot_t *slot )
|
||||||
/* Set mapped lifetime on the attributes */
|
/* Set mapped lifetime on the attributes */
|
||||||
psa_set_key_lifetime( &attributes, lifetime );
|
psa_set_key_lifetime( &attributes, lifetime );
|
||||||
|
|
||||||
|
/* Get the full key attributes from the driver in order to be able to
|
||||||
|
* calculate the required buffer size. */
|
||||||
|
status = psa_driver_wrapper_get_builtin_key(
|
||||||
|
slot_number, &attributes,
|
||||||
|
NULL, 0, NULL );
|
||||||
|
if( status != PSA_ERROR_BUFFER_TOO_SMALL )
|
||||||
|
{
|
||||||
|
/* Builtin keys cannot be defined by the attributes alone */
|
||||||
|
if( status == PSA_SUCCESS )
|
||||||
|
status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
/* If the key should exist according to the platform, then ask the driver
|
/* If the key should exist according to the platform, then ask the driver
|
||||||
* what its expected size is. */
|
* what its expected size is. */
|
||||||
status = psa_driver_wrapper_get_key_buffer_size( &attributes,
|
status = psa_driver_wrapper_get_key_buffer_size( &attributes,
|
||||||
|
@ -310,7 +323,7 @@ static psa_status_t psa_load_builtin_key_into_slot( psa_key_slot_t *slot )
|
||||||
return( status );
|
return( status );
|
||||||
|
|
||||||
/* Allocate a buffer of the required size and load the builtin key directly
|
/* Allocate a buffer of the required size and load the builtin key directly
|
||||||
* into the slot buffer. */
|
* into the (now properly sized) slot buffer. */
|
||||||
status = psa_allocate_buffer_to_slot( slot, key_buffer_size );
|
status = psa_allocate_buffer_to_slot( slot, key_buffer_size );
|
||||||
if( status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS )
|
||||||
return( status );
|
return( status );
|
||||||
|
|
|
@ -343,9 +343,6 @@ psa_status_t test_opaque_get_builtin_key(
|
||||||
psa_key_attributes_t *attributes,
|
psa_key_attributes_t *attributes,
|
||||||
uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length )
|
uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length )
|
||||||
{
|
{
|
||||||
if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
|
|
||||||
return( PSA_ERROR_BUFFER_TOO_SMALL );
|
|
||||||
|
|
||||||
switch( slot_number )
|
switch( slot_number )
|
||||||
{
|
{
|
||||||
case PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT:
|
case PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT:
|
||||||
|
@ -358,6 +355,9 @@ psa_status_t test_opaque_get_builtin_key(
|
||||||
PSA_KEY_USAGE_EXPORT );
|
PSA_KEY_USAGE_EXPORT );
|
||||||
psa_set_key_algorithm( attributes, PSA_ALG_CTR );
|
psa_set_key_algorithm( attributes, PSA_ALG_CTR );
|
||||||
|
|
||||||
|
if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
|
||||||
|
return( PSA_ERROR_BUFFER_TOO_SMALL );
|
||||||
|
|
||||||
*( (psa_drv_slot_number_t*) key_buffer ) =
|
*( (psa_drv_slot_number_t*) key_buffer ) =
|
||||||
PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT;
|
PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT;
|
||||||
*key_buffer_length = sizeof( psa_drv_slot_number_t );
|
*key_buffer_length = sizeof( psa_drv_slot_number_t );
|
||||||
|
@ -375,6 +375,9 @@ psa_status_t test_opaque_get_builtin_key(
|
||||||
psa_set_key_algorithm(
|
psa_set_key_algorithm(
|
||||||
attributes, PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) );
|
attributes, PSA_ALG_ECDSA( PSA_ALG_ANY_HASH ) );
|
||||||
|
|
||||||
|
if( key_buffer_size < sizeof( psa_drv_slot_number_t ) )
|
||||||
|
return( PSA_ERROR_BUFFER_TOO_SMALL );
|
||||||
|
|
||||||
*( (psa_drv_slot_number_t*) key_buffer ) =
|
*( (psa_drv_slot_number_t*) key_buffer ) =
|
||||||
PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT;
|
PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT;
|
||||||
*key_buffer_length = sizeof( psa_drv_slot_number_t );
|
*key_buffer_length = sizeof( psa_drv_slot_number_t );
|
||||||
|
|
Loading…
Reference in a new issue