1838e82190
This file isn't like the other .function files: it isn't concatenated by a separate preprocessing script, but included via C preprocessing. Rename this file to .h. This isn't a normal C header, because it defines auxiliary functions. But the functions aren't big and we only have one compilation unit per executable, so this is good enough for what we're doing.
100 lines
3.1 KiB
Text
100 lines
3.1 KiB
Text
/* 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 */
|