diff --git a/tests/suites/test_suite_psa_crypto.data b/tests/suites/test_suite_psa_crypto.data index ced02afe8a..ca13b51e84 100644 --- a/tests/suites/test_suite_psa_crypto.data +++ b/tests/suites/test_suite_psa_crypto.data @@ -7424,3 +7424,15 @@ psa_crypto_copy_output:10:20:PSA_SUCCESS PSA output buffer copy: output buffer too small psa_crypto_copy_output:20:10:PSA_ERROR_BUFFER_TOO_SMALL + +PSA buffers alloc and copy +psa_crypto_alloc_and_copy:0:20:0:20:PSA_SUCCESS + +PSA buffers alloc and copy: null input +psa_crypto_alloc_and_copy:1:0:0:20:PSA_SUCCESS + +PSA buffers alloc and copy: null output +psa_crypto_alloc_and_copy:0:20:1:0:PSA_SUCCESS + +PSA buffers alloc and copy: null input and output +psa_crypto_alloc_and_copy:1:0:1:0:PSA_SUCCESS diff --git a/tests/suites/test_suite_psa_crypto.function b/tests/suites/test_suite_psa_crypto.function index c8bbcdbfe4..cd46fef13b 100644 --- a/tests/suites/test_suite_psa_crypto.function +++ b/tests/suites/test_suite_psa_crypto.function @@ -10363,3 +10363,44 @@ exit: mbedtls_free(dst_buffer); } /* END_CASE */ + +/* BEGIN_CASE */ +void psa_crypto_alloc_and_copy(int input_null, int input_len, + int output_null, int output_len, + int exp_ret) +{ + uint8_t data[] = {0x12, 0x34, 0x56, 0x78}; + uint8_t *input_buffer = NULL; + uint8_t *output_buffer = NULL; + psa_crypto_buffer_copy_t buffer_copies = { 0 }; + psa_status_t ret; + + if (!input_null) { + TEST_CALLOC(input_buffer, input_len); + for (int i = 0; i < input_len; i++) { + input_buffer[i] = data[i % sizeof(data)]; + } + } + if (!output_null) { + TEST_CALLOC(output_buffer, output_len); + for (int i = 0; i < output_len; i++) { + output_buffer[i] = data[i % sizeof(data)]; + } + } + ret = psa_crypto_alloc_and_copy(input_buffer, input_len, + output_buffer, output_len, + &buffer_copies); + TEST_EQUAL(exp_ret, (int) ret); + + if (exp_ret == PSA_SUCCESS) { + TEST_MEMORY_COMPARE(input_buffer, input_len, buffer_copies.input, buffer_copies.input_len); + TEST_EQUAL(output_len, buffer_copies.output_len); + } + +exit: + mbedtls_free(input_buffer); + mbedtls_free(output_buffer); + mbedtls_free(buffer_copies.input); + mbedtls_free(buffer_copies.output); +} +/* END_CASE */