diff options
| author | Tom Rini <[email protected]> | 2024-10-08 13:56:50 -0600 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2024-10-08 13:56:50 -0600 |
| commit | 0344c602eadc0802776b65ff90f0a02c856cf53c (patch) | |
| tree | 236a705740939b84ff37d68ae650061dd14c3449 /tests/suites/test_suite_common.function | |
Squashed 'lib/mbedtls/external/mbedtls/' content from commit 2ca6c285a0dd
git-subtree-dir: lib/mbedtls/external/mbedtls
git-subtree-split: 2ca6c285a0dd3f33982dd57299012dacab1ff206
Diffstat (limited to 'tests/suites/test_suite_common.function')
| -rw-r--r-- | tests/suites/test_suite_common.function | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/suites/test_suite_common.function b/tests/suites/test_suite_common.function new file mode 100644 index 00000000000..5c5700c25b2 --- /dev/null +++ b/tests/suites/test_suite_common.function @@ -0,0 +1,82 @@ +/* BEGIN_HEADER */ +#include "common.h" + +void fill_arrays(unsigned char *a, unsigned char *b, unsigned char *r1, unsigned char *r2, size_t n) +{ + for (size_t i = 0; i < n; i++) { + a[i] = (unsigned char) i * 3; + b[i] = (unsigned char) i * 3 + 1; + r1[i] = (unsigned char) i * 3 + 2; + r2[i] = r1[i]; + } +} +/* END_HEADER */ + +/* BEGIN_CASE */ +void mbedtls_xor(int len) +{ + size_t n = (size_t) len; + unsigned char *a = NULL, *b = NULL, *r1 = NULL, *r2 = NULL; + TEST_CALLOC(a, n + 1); + TEST_CALLOC(b, n + 1); + TEST_CALLOC(r1, n + 1); + TEST_CALLOC(r2, n + 1); + + /* Test non-overlapping */ + fill_arrays(a, b, r1, r2, n); + for (size_t i = 0; i < n; i++) { + r1[i] = a[i] ^ b[i]; + } + mbedtls_xor(r2, a, b, n); + TEST_MEMORY_COMPARE(r1, n, r2, n); + + /* Test r == a */ + fill_arrays(a, b, r1, r2, n); + for (size_t i = 0; i < n; i++) { + r1[i] = r1[i] ^ b[i]; + } + mbedtls_xor(r2, r2, b, n); + TEST_MEMORY_COMPARE(r1, n, r2, n); + + /* Test r == b */ + fill_arrays(a, b, r1, r2, n); + for (size_t i = 0; i < n; i++) { + r1[i] = a[i] ^ r1[i]; + } + mbedtls_xor(r2, a, r2, n); + TEST_MEMORY_COMPARE(r1, n, r2, n); + + /* Test a == b */ + fill_arrays(a, b, r1, r2, n); + for (size_t i = 0; i < n; i++) { + r1[i] = a[i] ^ a[i]; + } + mbedtls_xor(r2, a, a, n); + TEST_MEMORY_COMPARE(r1, n, r2, n); + + /* Test a == b == r */ + fill_arrays(a, b, r1, r2, n); + for (size_t i = 0; i < n; i++) { + r1[i] = r1[i] ^ r1[i]; + } + mbedtls_xor(r2, r2, r2, n); + TEST_MEMORY_COMPARE(r1, n, r2, n); + + /* Test non-word-aligned buffers, for all combinations of alignedness */ + for (int i = 0; i < 7; i++) { + int r_off = i & 1, a_off = (i & 2) >> 1, b_off = (i & 4) >> 2; + fill_arrays(a, b, r1, r2, n + 1); + + for (size_t j = 0; j < n; j++) { + r1[j + r_off] = a[j + a_off] ^ b[j + b_off]; + } + mbedtls_xor(r2 + r_off, a + a_off, b + b_off, n); + TEST_MEMORY_COMPARE(r1 + r_off, n, r2 + r_off, n); + } +exit: + mbedtls_free(a); + mbedtls_free(b); + mbedtls_free(r1); + mbedtls_free(r2); +} +/* END_CASE */ |
