Skip to content

Commit a28202f

Browse files
SE driver support: Implement sign and verify hooks
1 parent 98da0f7 commit a28202f

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

library/psa_crypto.c

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3204,10 +3204,14 @@ psa_status_t psa_asymmetric_sign( psa_key_handle_t handle,
32043204
{
32053205
psa_key_slot_t *slot;
32063206
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 */
32073211

32083212
*signature_length = signature_size;
32093213

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 );
32113215
if( status != PSA_SUCCESS )
32123216
goto exit;
32133217
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,
32163220
goto exit;
32173221
}
32183222

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 */
32193241
#if defined(MBEDTLS_RSA_C)
32203242
if( slot->attr.type == PSA_KEY_TYPE_RSA_KEY_PAIR )
32213243
{
@@ -3279,11 +3301,29 @@ psa_status_t psa_asymmetric_verify( psa_key_handle_t handle,
32793301
{
32803302
psa_key_slot_t *slot;
32813303
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 */
32823308

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 );
32843310
if( status != PSA_SUCCESS )
32853311
return( status );
32863312

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 */
32873327
#if defined(MBEDTLS_RSA_C)
32883328
if( PSA_KEY_TYPE_IS_RSA( slot->attr.type ) )
32893329
{

0 commit comments

Comments
 (0)