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 */