Test other output sizes for psa_mac_sign_finish
Test psa_mac_sign_finish with a smaller or larger buffer.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/tests/suites/test_suite_psa_crypto.function b/tests/suites/test_suite_psa_crypto.function
index 5b0054d..4b70115 100644
--- a/tests/suites/test_suite_psa_crypto.function
+++ b/tests/suites/test_suite_psa_crypto.function
@@ -3032,6 +3032,13 @@
size_t mac_buffer_size =
PSA_MAC_FINAL_SIZE( key_type, PSA_BYTES_TO_BITS( key->len ), alg );
size_t mac_length = 0;
+ const size_t output_sizes_to_test[] = {
+ 0,
+ 1,
+ expected_mac->len - 1,
+ expected_mac->len,
+ expected_mac->len + 1,
+ };
TEST_ASSERT( mac_buffer_size <= PSA_MAC_MAX_SIZE );
/* We expect PSA_MAC_FINAL_SIZE to be exact. */
@@ -3045,20 +3052,35 @@
PSA_ASSERT( psa_import_key( &attributes, key->x, key->len, &handle ) );
- ASSERT_ALLOC( actual_mac, mac_buffer_size );
+ for( size_t i = 0; i < ARRAY_LENGTH( output_sizes_to_test ); i++ )
+ {
+ const size_t output_size = output_sizes_to_test[i];
+ psa_status_t expected_status =
+ ( output_size >= expected_mac->len ? PSA_SUCCESS :
+ PSA_ERROR_BUFFER_TOO_SMALL );
- /* Calculate the MAC. */
- PSA_ASSERT( psa_mac_sign_setup( &operation,
- handle, alg ) );
- PSA_ASSERT( psa_mac_update( &operation,
- input->x, input->len ) );
- PSA_ASSERT( psa_mac_sign_finish( &operation,
- actual_mac, mac_buffer_size,
- &mac_length ) );
+ test_set_step( output_size );
+ ASSERT_ALLOC( actual_mac, output_size );
- /* Compare with the expected value. */
- ASSERT_COMPARE( expected_mac->x, expected_mac->len,
- actual_mac, mac_length );
+ /* Calculate the MAC. */
+ PSA_ASSERT( psa_mac_sign_setup( &operation,
+ handle, alg ) );
+ PSA_ASSERT( psa_mac_update( &operation,
+ input->x, input->len ) );
+ TEST_EQUAL( psa_mac_sign_finish( &operation,
+ actual_mac, output_size,
+ &mac_length ),
+ expected_status );
+ PSA_ASSERT( psa_mac_abort( &operation ) );
+
+ if( expected_status == PSA_SUCCESS )
+ {
+ ASSERT_COMPARE( expected_mac->x, expected_mac->len,
+ actual_mac, mac_length );
+ }
+ mbedtls_free( actual_mac );
+ actual_mac = NULL;
+ }
exit:
psa_destroy_key( handle );