Skip to content

Commit d1cd0b2

Browse files
SE driver support: Implement sign and verify hooks
1 parent 117a99e commit d1cd0b2

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
@@ -3205,10 +3205,14 @@ psa_status_t psa_asymmetric_sign( psa_key_handle_t handle,
32053205
{
32063206
psa_key_slot_t *slot;
32073207
psa_status_t status;
3208+
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
3209+
const psa_drv_se_t *drv;
3210+
psa_drv_se_context_t *drv_context;
3211+
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
32083212

32093213
*signature_length = signature_size;
32103214

3211-
status = psa_get_transparent_key( handle, &slot, PSA_KEY_USAGE_SIGN, alg );
3215+
status = psa_get_key_from_slot( handle, &slot, PSA_KEY_USAGE_SIGN, alg );
32123216
if( status != PSA_SUCCESS )
32133217
goto exit;
32143218
if( ! PSA_KEY_TYPE_IS_KEY_PAIR( slot->attr.type ) )
@@ -3217,6 +3221,24 @@ psa_status_t psa_asymmetric_sign( psa_key_handle_t handle,
32173221
goto exit;
32183222
}
32193223

3224+
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
3225+
if( psa_get_se_driver( slot->attr.lifetime, &drv, &drv_context ) )
3226+
{
3227+
if( drv->asymmetric == NULL ||
3228+
drv->asymmetric->p_sign == NULL )
3229+
{
3230+
status = PSA_ERROR_NOT_SUPPORTED;
3231+
goto exit;
3232+
}
3233+
status = drv->asymmetric->p_sign( drv_context,
3234+
slot->data.se.slot_number,
3235+
alg,
3236+
hash, hash_length,
3237+
signature, signature_size,
3238+
signature_length );
3239+
}
3240+
else
3241+
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
32203242
#if defined(MBEDTLS_RSA_C)
32213243
if( slot->attr.type == PSA_KEY_TYPE_RSA_KEY_PAIR )
32223244
{
@@ -3280,11 +3302,29 @@ psa_status_t psa_asymmetric_verify( psa_key_handle_t handle,
32803302
{
32813303
psa_key_slot_t *slot;
32823304
psa_status_t status;
3305+
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
3306+
const psa_drv_se_t *drv;
3307+
psa_drv_se_context_t *drv_context;
3308+
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
32833309

3284-
status = psa_get_transparent_key( handle, &slot, PSA_KEY_USAGE_VERIFY, alg );
3310+
status = psa_get_key_from_slot( handle, &slot, PSA_KEY_USAGE_VERIFY, alg );
32853311
if( status != PSA_SUCCESS )
32863312
return( status );
32873313

3314+
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
3315+
if( psa_get_se_driver( slot->attr.lifetime, &drv, &drv_context ) )
3316+
{
3317+
if( drv->asymmetric == NULL ||
3318+
drv->asymmetric->p_verify == NULL )
3319+
return( PSA_ERROR_NOT_SUPPORTED );
3320+
return( drv->asymmetric->p_verify( drv_context,
3321+
slot->data.se.slot_number,
3322+
alg,
3323+
hash, hash_length,
3324+
signature, signature_length ) );
3325+
}
3326+
else
3327+
#endif /* MBEDTLS_PSA_CRYPTO_SE_C */
32883328
#if defined(MBEDTLS_RSA_C)
32893329
if( PSA_KEY_TYPE_IS_RSA( slot->attr.type ) )
32903330
{

0 commit comments

Comments
 (0)