From f9820f92cf6fe9090c8e70809cbc5fbe374069c0 Mon Sep 17 00:00:00 2001 From: gabor-mezei-arm Date: Mon, 3 May 2021 16:26:20 +0200 Subject: [PATCH] Fix for algorithms other than hash-then-sign Signed-off-by: gabor-mezei-arm --- library/psa_crypto.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/library/psa_crypto.c b/library/psa_crypto.c index b6353c4c01..778ef1bad4 100644 --- a/library/psa_crypto.c +++ b/library/psa_crypto.c @@ -2642,11 +2642,12 @@ psa_status_t psa_sign_message_internal( size_t *signature_length ) { psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - size_t hash_length; - uint8_t hash[PSA_HASH_MAX_SIZE]; if ( PSA_ALG_IS_HASH_AND_SIGN( alg ) ) { + size_t hash_length; + uint8_t hash[PSA_HASH_MAX_SIZE]; + status = psa_driver_wrapper_hash_compute( PSA_ALG_SIGN_GET_HASH( alg ), input, input_length, @@ -2654,11 +2655,16 @@ psa_status_t psa_sign_message_internal( if( status != PSA_SUCCESS ) return status; + + return psa_driver_wrapper_sign_hash( + attributes, key_buffer, key_buffer_size, + alg, hash, hash_length, + signature, signature_size, signature_length ); } return psa_driver_wrapper_sign_hash( attributes, key_buffer, key_buffer_size, - alg, hash, hash_length, + alg, input, input_length, signature, signature_size, signature_length ); } @@ -2686,11 +2692,12 @@ psa_status_t psa_verify_message_internal( size_t signature_length ) { psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED; - size_t hash_length; - uint8_t hash[PSA_HASH_MAX_SIZE]; if ( PSA_ALG_IS_HASH_AND_SIGN( alg ) ) { + size_t hash_length; + uint8_t hash[PSA_HASH_MAX_SIZE]; + status = psa_driver_wrapper_hash_compute( PSA_ALG_SIGN_GET_HASH( alg ), input, input_length, @@ -2698,11 +2705,16 @@ psa_status_t psa_verify_message_internal( if( status != PSA_SUCCESS ) return status; + + return psa_driver_wrapper_verify_hash( + attributes, key_buffer, key_buffer_size, + alg, hash, hash_length, + signature, signature_length ); } return psa_driver_wrapper_verify_hash( attributes, key_buffer, key_buffer_size, - alg, hash, hash_length, + alg, input, input_length, signature, signature_length ); }