Add output round-trip testcase
Signed-off-by: David Horstmann <david.horstmann@arm.com>
diff --git a/tests/suites/test_suite_psa_crypto_memory.data b/tests/suites/test_suite_psa_crypto_memory.data
index 3d14ba3..357d342 100644
--- a/tests/suites/test_suite_psa_crypto_memory.data
+++ b/tests/suites/test_suite_psa_crypto_memory.data
@@ -57,3 +57,6 @@
PSA crypto output copy free, NULL original buffer
output_copy_free:200:1:PSA_ERROR_CORRUPTION_DETECTED
+
+PSA crypto output copy round-trip
+output_copy_round_trip
diff --git a/tests/suites/test_suite_psa_crypto_memory.function b/tests/suites/test_suite_psa_crypto_memory.function
index 3c7b842..df08bf4 100644
--- a/tests/suites/test_suite_psa_crypto_memory.function
+++ b/tests/suites/test_suite_psa_crypto_memory.function
@@ -229,3 +229,34 @@
output_copy.len = 0;
}
/* END_CASE */
+
+/* BEGIN_CASE */
+void output_copy_round_trip()
+{
+ psa_crypto_output_copy_t output_copy;
+ uint8_t output[200];
+ uint8_t *buffer_copy_for_comparison = NULL;
+ psa_status_t status;
+
+ status = psa_crypto_output_copy_alloc(output, sizeof(output), &output_copy);
+ TEST_EQUAL(status, PSA_SUCCESS);
+ TEST_ASSERT(output_copy.buffer != output);
+
+ /* Simulate the function generating output */
+ fill_buffer_pattern(output_copy.buffer, output_copy.len);
+
+ TEST_CALLOC(buffer_copy_for_comparison, output_copy.len);
+ memcpy(buffer_copy_for_comparison, output_copy.buffer, output_copy.len);
+
+ psa_crypto_output_copy_free(&output_copy);
+ TEST_ASSERT(output_copy.buffer == NULL);
+ TEST_EQUAL(output_copy.len, 0);
+
+ /* Check that the buffer was correctly copied back */
+ TEST_MEMORY_COMPARE(output, sizeof(output),
+ buffer_copy_for_comparison, sizeof(output));
+
+exit:
+ mbedtls_free(buffer_copy_for_comparison);
+}
+/* END_CASE */