diff --git a/tests/suites/test_suite_psa_crypto_memory.data b/tests/suites/test_suite_psa_crypto_memory.data index 6591ba755c..fcd60fb803 100644 --- a/tests/suites/test_suite_psa_crypto_memory.data +++ b/tests/suites/test_suite_psa_crypto_memory.data @@ -39,3 +39,9 @@ input_copy_free:200 PSA crypto input copy free, NULL buffer input_copy_free:0 + +PSA crypto output copy alloc +output_copy_alloc:200:PSA_SUCCESS + +PSA crypto output copy alloc, NULL buffer +output_copy_alloc:0:PSA_SUCCESS diff --git a/tests/suites/test_suite_psa_crypto_memory.function b/tests/suites/test_suite_psa_crypto_memory.function index c40ba67f5c..6fd58cd0af 100644 --- a/tests/suites/test_suite_psa_crypto_memory.function +++ b/tests/suites/test_suite_psa_crypto_memory.function @@ -130,3 +130,36 @@ exit: input_copy.len = 0; } /* END_CASE */ + +/* BEGIN_CASE */ +void output_copy_alloc(int output_len, psa_status_t exp_status) +{ + uint8_t *output = NULL; + psa_crypto_output_copy_t output_copy; + psa_status_t status; + + output_copy.buffer = NULL; + + TEST_CALLOC(output, output_len); + + status = psa_crypto_output_copy_alloc(output, output_len, &output_copy); + TEST_EQUAL(status, exp_status); + + if (exp_status == PSA_SUCCESS) { + TEST_ASSERT(output_copy.original == output); + if (output == NULL) { + TEST_ASSERT(output_copy.buffer == NULL); + } else { + TEST_EQUAL(output_copy.len, output_len); + } + } + +exit: + mbedtls_free(output_copy.buffer); + output_copy.original = NULL; + output_copy.buffer = NULL; + output_copy.len = 0; + mbedtls_free(output); + output = NULL; +} +/* END_CASE */