| /* BEGIN_HEADER */ |
| |
| #include <stdint.h> |
| |
| #include "psa_crypto_helpers.h" |
| |
| /* END_HEADER */ |
| |
| /* BEGIN_DEPENDENCIES |
| * depends_on:MBEDTLS_PSA_CRYPTO_C |
| * END_DEPENDENCIES |
| */ |
| |
| /* BEGIN_CASE */ |
| void hash_finish( int alg_arg, data_t *input, data_t *expected_hash ) |
| { |
| psa_algorithm_t alg = alg_arg; |
| unsigned char actual_hash[PSA_HASH_MAX_SIZE]; |
| size_t actual_hash_length; |
| psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; |
| |
| PSA_ASSERT( psa_crypto_init( ) ); |
| |
| PSA_ASSERT( psa_hash_setup( &operation, alg ) ); |
| PSA_ASSERT( psa_hash_update( &operation, |
| input->x, input->len ) ); |
| PSA_ASSERT( psa_hash_finish( &operation, |
| actual_hash, sizeof( actual_hash ), |
| &actual_hash_length ) ); |
| ASSERT_COMPARE( expected_hash->x, expected_hash->len, |
| actual_hash, actual_hash_length ); |
| |
| exit: |
| PSA_DONE( ); |
| } |
| /* END_CASE */ |
| |
| /* BEGIN_CASE */ |
| void hash_verify( int alg_arg, data_t *input, data_t *expected_hash ) |
| { |
| psa_algorithm_t alg = alg_arg; |
| psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; |
| |
| PSA_ASSERT( psa_crypto_init( ) ); |
| |
| PSA_ASSERT( psa_hash_setup( &operation, alg ) ); |
| PSA_ASSERT( psa_hash_update( &operation, |
| input->x, |
| input->len ) ); |
| PSA_ASSERT( psa_hash_verify( &operation, |
| expected_hash->x, |
| expected_hash->len ) ); |
| |
| exit: |
| PSA_DONE( ); |
| } |
| /* END_CASE */ |
| |
| /* BEGIN_CASE */ |
| void hash_multi_part( int alg_arg, data_t *input, data_t *expected_hash ) |
| { |
| psa_algorithm_t alg = alg_arg; |
| unsigned char actual_hash[PSA_HASH_MAX_SIZE]; |
| size_t actual_hash_length; |
| psa_hash_operation_t operation = PSA_HASH_OPERATION_INIT; |
| psa_hash_operation_t operation2 = PSA_HASH_OPERATION_INIT; |
| uint32_t len = 0; |
| |
| PSA_ASSERT( psa_crypto_init( ) ); |
| |
| do |
| { |
| memset( actual_hash, 0, sizeof( actual_hash ) ); |
| PSA_ASSERT( psa_hash_setup( &operation, alg ) ); |
| |
| PSA_ASSERT( psa_hash_update( &operation, |
| input->x, len ) ); |
| PSA_ASSERT( psa_hash_clone( &operation, &operation2 ) ); |
| PSA_ASSERT( psa_hash_update( &operation, |
| input->x + len, input->len - len ) ); |
| PSA_ASSERT( psa_hash_update( &operation2, |
| input->x + len, input->len - len ) ); |
| |
| PSA_ASSERT( psa_hash_finish( &operation, |
| actual_hash, sizeof( actual_hash ), |
| &actual_hash_length ) ); |
| ASSERT_COMPARE( expected_hash->x, expected_hash->len, |
| actual_hash, actual_hash_length ); |
| |
| PSA_ASSERT( psa_hash_finish( &operation2, |
| actual_hash, sizeof( actual_hash ), |
| &actual_hash_length ) ); |
| ASSERT_COMPARE( expected_hash->x, expected_hash->len, |
| actual_hash, actual_hash_length ); |
| } while( len++ != input->len ); |
| |
| exit: |
| PSA_DONE( ); |
| } |
| /* END_CASE */ |