mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-30 07:14:18 +01:00
leverage psa_allocate_buffer_to_slot from slot management
It makes the implementation of psa_load_builtin_key_into_slot a lot cleaner. Signed-off-by: Steven Cooreman <steven.cooreman@silabs.com>
This commit is contained in:
parent
0bb653600f
commit
7609b1ff6c
@ -604,19 +604,7 @@ MBEDTLS_STATIC_TESTABLE psa_status_t psa_mac_key_can_do(
|
|||||||
return( PSA_ERROR_INVALID_ARGUMENT );
|
return( PSA_ERROR_INVALID_ARGUMENT );
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Try to allocate a buffer to an empty key slot.
|
psa_status_t psa_allocate_buffer_to_slot( psa_key_slot_t *slot,
|
||||||
*
|
|
||||||
* \param[in,out] slot Key slot to attach buffer to.
|
|
||||||
* \param[in] buffer_length Requested size of the buffer.
|
|
||||||
*
|
|
||||||
* \retval #PSA_SUCCESS
|
|
||||||
* The buffer has been successfully allocated.
|
|
||||||
* \retval #PSA_ERROR_INSUFFICIENT_MEMORY
|
|
||||||
* Not enough memory was available for allocation.
|
|
||||||
* \retval #PSA_ERROR_ALREADY_EXISTS
|
|
||||||
* Trying to allocate a buffer to a non-empty key slot.
|
|
||||||
*/
|
|
||||||
static psa_status_t psa_allocate_buffer_to_slot( psa_key_slot_t *slot,
|
|
||||||
size_t buffer_length )
|
size_t buffer_length )
|
||||||
{
|
{
|
||||||
if( slot->key.data != NULL )
|
if( slot->key.data != NULL )
|
||||||
|
@ -180,6 +180,21 @@ static inline psa_key_slot_number_t psa_key_slot_get_slot_number(
|
|||||||
*/
|
*/
|
||||||
psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot );
|
psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot );
|
||||||
|
|
||||||
|
/** Try to allocate a buffer to an empty key slot.
|
||||||
|
*
|
||||||
|
* \param[in,out] slot Key slot to attach buffer to.
|
||||||
|
* \param[in] buffer_length Requested size of the buffer.
|
||||||
|
*
|
||||||
|
* \retval #PSA_SUCCESS
|
||||||
|
* The buffer has been successfully allocated.
|
||||||
|
* \retval #PSA_ERROR_INSUFFICIENT_MEMORY
|
||||||
|
* Not enough memory was available for allocation.
|
||||||
|
* \retval #PSA_ERROR_ALREADY_EXISTS
|
||||||
|
* Trying to allocate a buffer to a non-empty key slot.
|
||||||
|
*/
|
||||||
|
psa_status_t psa_allocate_buffer_to_slot( psa_key_slot_t *slot,
|
||||||
|
size_t buffer_length );
|
||||||
|
|
||||||
/** Copy key data (in export format) into an empty key slot.
|
/** Copy key data (in export format) into an empty key slot.
|
||||||
*
|
*
|
||||||
* This function assumes that the slot does not contain
|
* This function assumes that the slot does not contain
|
||||||
|
@ -283,7 +283,6 @@ static psa_status_t psa_load_builtin_key_into_slot( psa_key_slot_t *slot )
|
|||||||
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
|
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
|
||||||
psa_key_lifetime_t lifetime = PSA_KEY_LIFETIME_VOLATILE;
|
psa_key_lifetime_t lifetime = PSA_KEY_LIFETIME_VOLATILE;
|
||||||
psa_drv_slot_number_t slot_number = 0;
|
psa_drv_slot_number_t slot_number = 0;
|
||||||
uint8_t *key_buffer = NULL;
|
|
||||||
size_t key_buffer_size = 0;
|
size_t key_buffer_size = 0;
|
||||||
size_t key_buffer_length = 0;
|
size_t key_buffer_length = 0;
|
||||||
|
|
||||||
@ -303,33 +302,32 @@ 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 );
|
||||||
|
|
||||||
/* If the key should exist according to the platform, load it through the
|
/* If the key should exist according to the platform, then ask the driver
|
||||||
* driver interface. */
|
* what its expected size is. */
|
||||||
status = psa_driver_wrapper_get_key_buffer_size( &attributes,
|
status = psa_driver_wrapper_get_key_buffer_size( &attributes,
|
||||||
&key_buffer_size );
|
&key_buffer_size );
|
||||||
if( status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS )
|
||||||
return( status );
|
return( status );
|
||||||
|
|
||||||
key_buffer = mbedtls_calloc( 1, key_buffer_size );
|
/* Allocate a buffer of the required size and load the builtin key directly
|
||||||
if( key_buffer == NULL )
|
* into the slot buffer. */
|
||||||
return( PSA_ERROR_INSUFFICIENT_MEMORY );
|
status = psa_allocate_buffer_to_slot( slot, key_buffer_size );
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
return( status );
|
||||||
|
|
||||||
status = psa_driver_wrapper_get_builtin_key(
|
status = psa_driver_wrapper_get_builtin_key(
|
||||||
slot_number, &attributes,
|
slot_number, &attributes,
|
||||||
key_buffer, key_buffer_size, &key_buffer_length );
|
slot->key.data, slot->key.bytes, &key_buffer_length );
|
||||||
if( status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS )
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
status = psa_copy_key_material_into_slot(
|
/* Copy actual key length and core attributes into the slot on success */
|
||||||
slot, key_buffer, key_buffer_length );
|
slot->key.bytes = key_buffer_length;
|
||||||
if( status != PSA_SUCCESS )
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
/* Copy core attributes into the slot on success */
|
|
||||||
slot->attr = attributes.core;
|
slot->attr = attributes.core;
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mbedtls_free( key_buffer );
|
if( status != PSA_SUCCESS )
|
||||||
|
psa_wipe_key_slot( slot );
|
||||||
return( status );
|
return( status );
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS */
|
#endif /* MBEDTLS_PSA_CRYPTO_BUILTIN_KEYS */
|
||||||
|
Loading…
Reference in New Issue
Block a user