@@ -3204,10 +3204,14 @@ psa_status_t psa_asymmetric_sign( psa_key_handle_t handle,
3204
3204
{
3205
3205
psa_key_slot_t * slot ;
3206
3206
psa_status_t status ;
3207
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C )
3208
+ const psa_drv_se_t * drv ;
3209
+ psa_drv_se_context_t * drv_context ;
3210
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
3207
3211
3208
3212
* signature_length = signature_size ;
3209
3213
3210
- status = psa_get_transparent_key ( handle , & slot , PSA_KEY_USAGE_SIGN , alg );
3214
+ status = psa_get_key_from_slot ( handle , & slot , PSA_KEY_USAGE_SIGN , alg );
3211
3215
if ( status != PSA_SUCCESS )
3212
3216
goto exit ;
3213
3217
if ( ! PSA_KEY_TYPE_IS_KEY_PAIR ( slot -> attr .type ) )
@@ -3216,6 +3220,24 @@ psa_status_t psa_asymmetric_sign( psa_key_handle_t handle,
3216
3220
goto exit ;
3217
3221
}
3218
3222
3223
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C )
3224
+ if ( psa_get_se_driver ( slot -> attr .lifetime , & drv , & drv_context ) )
3225
+ {
3226
+ if ( drv -> asymmetric == NULL ||
3227
+ drv -> asymmetric -> p_sign == NULL )
3228
+ {
3229
+ status = PSA_ERROR_NOT_SUPPORTED ;
3230
+ goto exit ;
3231
+ }
3232
+ status = drv -> asymmetric -> p_sign ( drv_context ,
3233
+ slot -> data .se .slot_number ,
3234
+ alg ,
3235
+ hash , hash_length ,
3236
+ signature , signature_size ,
3237
+ signature_length );
3238
+ }
3239
+ else
3240
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
3219
3241
#if defined(MBEDTLS_RSA_C )
3220
3242
if ( slot -> attr .type == PSA_KEY_TYPE_RSA_KEY_PAIR )
3221
3243
{
@@ -3279,11 +3301,29 @@ psa_status_t psa_asymmetric_verify( psa_key_handle_t handle,
3279
3301
{
3280
3302
psa_key_slot_t * slot ;
3281
3303
psa_status_t status ;
3304
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C )
3305
+ const psa_drv_se_t * drv ;
3306
+ psa_drv_se_context_t * drv_context ;
3307
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
3282
3308
3283
- status = psa_get_transparent_key ( handle , & slot , PSA_KEY_USAGE_VERIFY , alg );
3309
+ status = psa_get_key_from_slot ( handle , & slot , PSA_KEY_USAGE_VERIFY , alg );
3284
3310
if ( status != PSA_SUCCESS )
3285
3311
return ( status );
3286
3312
3313
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C )
3314
+ if ( psa_get_se_driver ( slot -> attr .lifetime , & drv , & drv_context ) )
3315
+ {
3316
+ if ( drv -> asymmetric == NULL ||
3317
+ drv -> asymmetric -> p_verify == NULL )
3318
+ return ( PSA_ERROR_NOT_SUPPORTED );
3319
+ return ( drv -> asymmetric -> p_verify ( drv_context ,
3320
+ slot -> data .se .slot_number ,
3321
+ alg ,
3322
+ hash , hash_length ,
3323
+ signature , signature_length ) );
3324
+ }
3325
+ else
3326
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */
3287
3327
#if defined(MBEDTLS_RSA_C )
3288
3328
if ( PSA_KEY_TYPE_IS_RSA ( slot -> attr .type ) )
3289
3329
{
0 commit comments