File: test_suite_common.function

package info (click to toggle)
mbedtls 3.6.5-0.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,488 kB
  • sloc: ansic: 164,842; sh: 25,443; python: 15,512; makefile: 3,131; perl: 1,043; tcl: 4
file content (86 lines) | stat: -rw-r--r-- 2,283 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* BEGIN_HEADER */
#include "common.h"

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