xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_common.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */
2*62c56f98SSadaf Ebrahimi#include "common.h"
3*62c56f98SSadaf Ebrahimi
4*62c56f98SSadaf Ebrahimivoid fill_arrays(unsigned char *a, unsigned char *b, unsigned char *r1, unsigned char *r2, size_t n)
5*62c56f98SSadaf Ebrahimi{
6*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
7*62c56f98SSadaf Ebrahimi        a[i]  = (unsigned char) i * 3;
8*62c56f98SSadaf Ebrahimi        b[i]  = (unsigned char) i * 3 + 1;
9*62c56f98SSadaf Ebrahimi        r1[i] = (unsigned char) i * 3 + 2;
10*62c56f98SSadaf Ebrahimi        r2[i] = r1[i];
11*62c56f98SSadaf Ebrahimi    }
12*62c56f98SSadaf Ebrahimi}
13*62c56f98SSadaf Ebrahimi/* END_HEADER */
14*62c56f98SSadaf Ebrahimi
15*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
16*62c56f98SSadaf Ebrahimivoid mbedtls_xor(int len)
17*62c56f98SSadaf Ebrahimi{
18*62c56f98SSadaf Ebrahimi    size_t n = (size_t) len;
19*62c56f98SSadaf Ebrahimi    unsigned char *a = NULL, *b = NULL, *r1 = NULL, *r2 = NULL;
20*62c56f98SSadaf Ebrahimi    TEST_CALLOC(a, n + 1);
21*62c56f98SSadaf Ebrahimi    TEST_CALLOC(b, n + 1);
22*62c56f98SSadaf Ebrahimi    TEST_CALLOC(r1, n + 1);
23*62c56f98SSadaf Ebrahimi    TEST_CALLOC(r2, n + 1);
24*62c56f98SSadaf Ebrahimi
25*62c56f98SSadaf Ebrahimi    /* Test non-overlapping */
26*62c56f98SSadaf Ebrahimi    fill_arrays(a, b, r1, r2, n);
27*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
28*62c56f98SSadaf Ebrahimi        r1[i] = a[i] ^ b[i];
29*62c56f98SSadaf Ebrahimi    }
30*62c56f98SSadaf Ebrahimi    mbedtls_xor(r2, a, b, n);
31*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(r1, n, r2, n);
32*62c56f98SSadaf Ebrahimi
33*62c56f98SSadaf Ebrahimi    /* Test r == a */
34*62c56f98SSadaf Ebrahimi    fill_arrays(a, b, r1, r2, n);
35*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
36*62c56f98SSadaf Ebrahimi        r1[i] = r1[i] ^ b[i];
37*62c56f98SSadaf Ebrahimi    }
38*62c56f98SSadaf Ebrahimi    mbedtls_xor(r2, r2, b, n);
39*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(r1, n, r2, n);
40*62c56f98SSadaf Ebrahimi
41*62c56f98SSadaf Ebrahimi    /* Test r == b */
42*62c56f98SSadaf Ebrahimi    fill_arrays(a, b, r1, r2, n);
43*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
44*62c56f98SSadaf Ebrahimi        r1[i] = a[i] ^ r1[i];
45*62c56f98SSadaf Ebrahimi    }
46*62c56f98SSadaf Ebrahimi    mbedtls_xor(r2, a, r2, n);
47*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(r1, n, r2, n);
48*62c56f98SSadaf Ebrahimi
49*62c56f98SSadaf Ebrahimi    /* Test a == b */
50*62c56f98SSadaf Ebrahimi    fill_arrays(a, b, r1, r2, n);
51*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
52*62c56f98SSadaf Ebrahimi        r1[i] = a[i] ^ a[i];
53*62c56f98SSadaf Ebrahimi    }
54*62c56f98SSadaf Ebrahimi    mbedtls_xor(r2, a, a, n);
55*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(r1, n, r2, n);
56*62c56f98SSadaf Ebrahimi
57*62c56f98SSadaf Ebrahimi    /* Test a == b == r */
58*62c56f98SSadaf Ebrahimi    fill_arrays(a, b, r1, r2, n);
59*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < n; i++) {
60*62c56f98SSadaf Ebrahimi        r1[i] = r1[i] ^ r1[i];
61*62c56f98SSadaf Ebrahimi    }
62*62c56f98SSadaf Ebrahimi    mbedtls_xor(r2, r2, r2, n);
63*62c56f98SSadaf Ebrahimi    TEST_MEMORY_COMPARE(r1, n, r2, n);
64*62c56f98SSadaf Ebrahimi
65*62c56f98SSadaf Ebrahimi    /* Test non-word-aligned buffers, for all combinations of alignedness */
66*62c56f98SSadaf Ebrahimi    for (int i = 0; i < 7; i++) {
67*62c56f98SSadaf Ebrahimi        int r_off = i & 1, a_off = (i & 2) >> 1, b_off = (i & 4) >> 2;
68*62c56f98SSadaf Ebrahimi        fill_arrays(a, b, r1, r2, n + 1);
69*62c56f98SSadaf Ebrahimi
70*62c56f98SSadaf Ebrahimi        for (size_t j = 0; j < n; j++) {
71*62c56f98SSadaf Ebrahimi            r1[j + r_off] = a[j + a_off] ^ b[j + b_off];
72*62c56f98SSadaf Ebrahimi        }
73*62c56f98SSadaf Ebrahimi        mbedtls_xor(r2 + r_off, a + a_off, b + b_off, n);
74*62c56f98SSadaf Ebrahimi        TEST_MEMORY_COMPARE(r1 + r_off, n, r2 + r_off, n);
75*62c56f98SSadaf Ebrahimi    }
76*62c56f98SSadaf Ebrahimiexit:
77*62c56f98SSadaf Ebrahimi    mbedtls_free(a);
78*62c56f98SSadaf Ebrahimi    mbedtls_free(b);
79*62c56f98SSadaf Ebrahimi    mbedtls_free(r1);
80*62c56f98SSadaf Ebrahimi    mbedtls_free(r2);
81*62c56f98SSadaf Ebrahimi}
82*62c56f98SSadaf Ebrahimi/* END_CASE */
83