/* BEGIN_HEADER */ #include #include "test/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_hash_abort( &operation ); 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_hash_abort( &operation ); 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_hash_abort( &operation ); psa_hash_abort( &operation2 ); PSA_DONE( ); } /* END_CASE */