PSA crypto: PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE macro
Test it for RSA.
diff --git a/tests/suites/test_suite_psa_crypto.function b/tests/suites/test_suite_psa_crypto.function
index 3551570..80a7788 100644
--- a/tests/suites/test_suite_psa_crypto.function
+++ b/tests/suites/test_suite_psa_crypto.function
@@ -134,6 +134,18 @@
/* END_CASE */
/* BEGIN_CASE */
+void signature_size( int type_arg, int bits, int alg_arg, int expected_size_arg )
+{
+ psa_key_type_t type = type_arg;
+ psa_algorithm_t alg = alg_arg;
+ size_t actual_size = PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE(type, bits, alg);
+ TEST_ASSERT( actual_size == (size_t) expected_size_arg );
+exit:
+ ;
+}
+/* END_CASE */
+
+/* BEGIN_CASE */
void sign_deterministic( int key_type_arg, char *key_hex,
int alg_arg, char *input_hex, char *output_hex )
{
@@ -142,12 +154,14 @@
psa_algorithm_t alg = alg_arg;
unsigned char *key_data = NULL;
size_t key_size;
+ size_t key_bits;
unsigned char *input_data = NULL;
size_t input_size;
unsigned char *output_data = NULL;
size_t output_size;
- unsigned char signature[512];
size_t signature_length;
+ unsigned char *signature = NULL;
+ size_t signature_size;
key_data = mbedtls_calloc( 1, strlen( key_hex ) / 2 );
TEST_ASSERT( key_data != NULL );
@@ -163,11 +177,19 @@
TEST_ASSERT( psa_import_key( slot, key_type,
key_data, key_size ) == PSA_SUCCESS );
+ TEST_ASSERT( psa_get_key_information( slot,
+ NULL,
+ &key_bits ) == PSA_SUCCESS );
+
+ signature_size = PSA_ASYMMETRIC_SIGN_OUTPUT_SIZE( key_type, alg, key_bits );
+ TEST_ASSERT( signature_size != 0 );
+ signature = mbedtls_calloc( 1, signature_size );
+ TEST_ASSERT( signature != NULL );
TEST_ASSERT( psa_asymmetric_sign( slot, alg,
input_data, input_size,
NULL, 0,
- signature, sizeof( signature ),
+ signature, signature_size,
&signature_length ) == PSA_SUCCESS );
TEST_ASSERT( signature_length == output_size );
TEST_ASSERT( memcmp( signature, output_data, output_size ) == 0 );
@@ -177,6 +199,7 @@
mbedtls_free( key_data );
mbedtls_free( input_data );
mbedtls_free( output_data );
+ mbedtls_free( signature );
mbedtls_psa_crypto_free( );
}
/* END_CASE */