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