@@ -5330,15 +5330,34 @@ psa_status_t psa_generate_key( const psa_key_attributes_t *attributes,
5330
5330
psa_status_t status ;
5331
5331
psa_key_slot_t * slot = NULL ;
5332
5332
const psa_se_drv_table_entry_t * driver = NULL ;
5333
+
5333
5334
status = psa_start_key_creation ( attributes , handle , & slot , & driver );
5334
- if ( status == PSA_SUCCESS )
5335
+ if ( status != PSA_SUCCESS )
5336
+ goto exit ;
5337
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C )
5338
+ if ( driver != NULL )
5339
+ {
5340
+ const psa_drv_se_t * drv = psa_get_se_driver_methods ( driver );
5341
+ if ( drv -> key_management == NULL ||
5342
+ drv -> key_management -> p_generate == NULL )
5343
+ {
5344
+ status = PSA_ERROR_NOT_SUPPORTED ;
5345
+ goto exit ;
5346
+ }
5347
+ status = drv -> key_management -> p_generate (
5348
+ slot -> data .se .slot_number , slot -> type , slot -> policy .usage ,
5349
+ attributes -> bits , NULL , 0 , NULL );
5350
+ }
5351
+ else
5352
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
5335
5353
{
5336
5354
status = psa_generate_key_internal (
5337
5355
slot , attributes -> bits ,
5338
5356
attributes -> domain_parameters , attributes -> domain_parameters_size );
5339
5357
}
5340
5358
if ( status == PSA_SUCCESS )
5341
5359
status = psa_finish_key_creation ( slot , driver );
5360
+ exit :
5342
5361
if ( status != PSA_SUCCESS )
5343
5362
{
5344
5363
psa_fail_key_creation ( slot , driver );
0 commit comments