Fix for algorithms other than hash-then-sign
@@ -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,7 +2655,6 @@ 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,
@@ -2662,6 +2662,12 @@ psa_status_t psa_sign_message_internal(
signature, signature_size, signature_length );
}
+ return psa_driver_wrapper_sign_hash(
+ attributes, key_buffer, key_buffer_size,
+ alg, input, input_length,
+ signature, signature_size, signature_length );
+}
+
psa_status_t psa_sign_message( mbedtls_svc_key_id_t key,
psa_algorithm_t alg,
const uint8_t * input,
@@ -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,7 +2705,6 @@ 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,
@@ -2706,6 +2712,12 @@ psa_status_t psa_verify_message_internal(
signature, signature_length );
}
+ return psa_driver_wrapper_verify_hash(
+ attributes, key_buffer, key_buffer_size,
+ alg, input, input_length,
+ signature, signature_length );
+}
+
psa_status_t psa_verify_message( mbedtls_svc_key_id_t key,
psa_algorithm_t alg,
const uint8_t * input,
