xref: /aosp_15_r20/external/mbedtls/tests/suites/test_suite_alignment.function (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi/* BEGIN_HEADER */
2*62c56f98SSadaf Ebrahimi#include <alignment.h>
3*62c56f98SSadaf Ebrahimi
4*62c56f98SSadaf Ebrahimi#include <stdint.h>
5*62c56f98SSadaf Ebrahimi
6*62c56f98SSadaf Ebrahimi#if defined(__clang__)
7*62c56f98SSadaf Ebrahimi#pragma clang diagnostic ignored "-Wunreachable-code"
8*62c56f98SSadaf Ebrahimi#endif
9*62c56f98SSadaf Ebrahimi
10*62c56f98SSadaf Ebrahimi/*
11*62c56f98SSadaf Ebrahimi * Convert a string of the form "abcd" (case-insensitive) to a uint64_t.
12*62c56f98SSadaf Ebrahimi */
13*62c56f98SSadaf Ebrahimiint parse_hex_string(char *hex_string, uint64_t *result)
14*62c56f98SSadaf Ebrahimi{
15*62c56f98SSadaf Ebrahimi    uint8_t raw[8] = { 0 };
16*62c56f98SSadaf Ebrahimi    size_t olen;
17*62c56f98SSadaf Ebrahimi    if (mbedtls_test_unhexify(raw, sizeof(raw), hex_string, &olen) != 0) {
18*62c56f98SSadaf Ebrahimi        return 0;
19*62c56f98SSadaf Ebrahimi    }
20*62c56f98SSadaf Ebrahimi
21*62c56f98SSadaf Ebrahimi    *result = 0;
22*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < olen; i++) {
23*62c56f98SSadaf Ebrahimi        *result |= ((uint64_t) raw[i]) << ((olen - i - 1) * 8);
24*62c56f98SSadaf Ebrahimi    }
25*62c56f98SSadaf Ebrahimi    return 1;
26*62c56f98SSadaf Ebrahimi}
27*62c56f98SSadaf Ebrahimi
28*62c56f98SSadaf Ebrahimi/* END_HEADER */
29*62c56f98SSadaf Ebrahimi
30*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
31*62c56f98SSadaf Ebrahimivoid mbedtls_unaligned_access(int size, int offset)
32*62c56f98SSadaf Ebrahimi{
33*62c56f98SSadaf Ebrahimi    /* Define 64-bit aligned raw byte array */
34*62c56f98SSadaf Ebrahimi    uint64_t raw[2];
35*62c56f98SSadaf Ebrahimi
36*62c56f98SSadaf Ebrahimi    /* Populate with known data */
37*62c56f98SSadaf Ebrahimi    uint8_t *x = (uint8_t *) raw;
38*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < sizeof(raw); i++) {
39*62c56f98SSadaf Ebrahimi        x[i] = (uint8_t) i;
40*62c56f98SSadaf Ebrahimi    }
41*62c56f98SSadaf Ebrahimi
42*62c56f98SSadaf Ebrahimi    TEST_ASSERT(size == 16 || size == 32 || size == 64);
43*62c56f98SSadaf Ebrahimi
44*62c56f98SSadaf Ebrahimi    uint64_t r = 0;
45*62c56f98SSadaf Ebrahimi    switch (size) {
46*62c56f98SSadaf Ebrahimi        case 16:
47*62c56f98SSadaf Ebrahimi            r = mbedtls_get_unaligned_uint16(x + offset);
48*62c56f98SSadaf Ebrahimi            break;
49*62c56f98SSadaf Ebrahimi        case 32:
50*62c56f98SSadaf Ebrahimi            r = mbedtls_get_unaligned_uint32(x + offset);
51*62c56f98SSadaf Ebrahimi            break;
52*62c56f98SSadaf Ebrahimi        case 64:
53*62c56f98SSadaf Ebrahimi            r = mbedtls_get_unaligned_uint64(x + offset);
54*62c56f98SSadaf Ebrahimi            break;
55*62c56f98SSadaf Ebrahimi    }
56*62c56f98SSadaf Ebrahimi
57*62c56f98SSadaf Ebrahimi    /* Define expected result by manually aligning the raw bytes, and
58*62c56f98SSadaf Ebrahimi     * reading back with a normal pointer access. */
59*62c56f98SSadaf Ebrahimi    uint64_t raw_aligned_64;
60*62c56f98SSadaf Ebrahimi    uint16_t *raw_aligned_16 = (uint16_t *) &raw_aligned_64;
61*62c56f98SSadaf Ebrahimi    uint32_t *raw_aligned_32 = (uint32_t *) &raw_aligned_64;
62*62c56f98SSadaf Ebrahimi    memcpy(&raw_aligned_64, ((uint8_t *) &raw) + offset, size / 8);
63*62c56f98SSadaf Ebrahimi    /* Make a 16/32/64 byte read from the aligned location, and copy to expected */
64*62c56f98SSadaf Ebrahimi    uint64_t expected = 0;
65*62c56f98SSadaf Ebrahimi    switch (size) {
66*62c56f98SSadaf Ebrahimi        case 16:
67*62c56f98SSadaf Ebrahimi            expected = *raw_aligned_16;
68*62c56f98SSadaf Ebrahimi            break;
69*62c56f98SSadaf Ebrahimi        case 32:
70*62c56f98SSadaf Ebrahimi            expected = *raw_aligned_32;
71*62c56f98SSadaf Ebrahimi            break;
72*62c56f98SSadaf Ebrahimi        case 64:
73*62c56f98SSadaf Ebrahimi            expected = raw_aligned_64;
74*62c56f98SSadaf Ebrahimi            break;
75*62c56f98SSadaf Ebrahimi    }
76*62c56f98SSadaf Ebrahimi
77*62c56f98SSadaf Ebrahimi    TEST_EQUAL(r, expected);
78*62c56f98SSadaf Ebrahimi
79*62c56f98SSadaf Ebrahimi    /* Write sentinel to the part of the array we will test writing to */
80*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < (size_t) (size / 8); i++) {
81*62c56f98SSadaf Ebrahimi        x[i + offset] = 0xff;
82*62c56f98SSadaf Ebrahimi    }
83*62c56f98SSadaf Ebrahimi    /*
84*62c56f98SSadaf Ebrahimi     * Write back to the array with mbedtls_put_unaligned_uint16 and validate
85*62c56f98SSadaf Ebrahimi     * that the array is unchanged as a result.
86*62c56f98SSadaf Ebrahimi     */
87*62c56f98SSadaf Ebrahimi    switch (size) {
88*62c56f98SSadaf Ebrahimi        case 16:
89*62c56f98SSadaf Ebrahimi            mbedtls_put_unaligned_uint16(x + offset, r);
90*62c56f98SSadaf Ebrahimi            break;
91*62c56f98SSadaf Ebrahimi        case 32:
92*62c56f98SSadaf Ebrahimi            mbedtls_put_unaligned_uint32(x + offset, r);
93*62c56f98SSadaf Ebrahimi            break;
94*62c56f98SSadaf Ebrahimi        case 64:
95*62c56f98SSadaf Ebrahimi            mbedtls_put_unaligned_uint64(x + offset, r);
96*62c56f98SSadaf Ebrahimi            break;
97*62c56f98SSadaf Ebrahimi    }
98*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < sizeof(x); i++) {
99*62c56f98SSadaf Ebrahimi        TEST_EQUAL(x[i], (uint8_t) i);
100*62c56f98SSadaf Ebrahimi    }
101*62c56f98SSadaf Ebrahimi}
102*62c56f98SSadaf Ebrahimi/* END_CASE */
103*62c56f98SSadaf Ebrahimi
104*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
105*62c56f98SSadaf Ebrahimivoid mbedtls_byteswap(char *input_str, int size, char *expected_str)
106*62c56f98SSadaf Ebrahimi{
107*62c56f98SSadaf Ebrahimi    uint64_t input = 0, expected = 0;
108*62c56f98SSadaf Ebrahimi    TEST_ASSERT(parse_hex_string(input_str, &input));
109*62c56f98SSadaf Ebrahimi    TEST_ASSERT(parse_hex_string(expected_str, &expected));
110*62c56f98SSadaf Ebrahimi
111*62c56f98SSadaf Ebrahimi    /* Check against expected result */
112*62c56f98SSadaf Ebrahimi    uint64_t r = 0;
113*62c56f98SSadaf Ebrahimi    switch (size) {
114*62c56f98SSadaf Ebrahimi        case 16:
115*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP16(input);
116*62c56f98SSadaf Ebrahimi            break;
117*62c56f98SSadaf Ebrahimi        case 32:
118*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP32(input);
119*62c56f98SSadaf Ebrahimi            break;
120*62c56f98SSadaf Ebrahimi        case 64:
121*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP64(input);
122*62c56f98SSadaf Ebrahimi            break;
123*62c56f98SSadaf Ebrahimi        default:
124*62c56f98SSadaf Ebrahimi            TEST_FAIL("size must be 16, 32 or 64");
125*62c56f98SSadaf Ebrahimi    }
126*62c56f98SSadaf Ebrahimi    TEST_EQUAL(r, expected);
127*62c56f98SSadaf Ebrahimi
128*62c56f98SSadaf Ebrahimi    /*
129*62c56f98SSadaf Ebrahimi     * Check byte by byte by extracting bytes from opposite ends of
130*62c56f98SSadaf Ebrahimi     * input and r.
131*62c56f98SSadaf Ebrahimi     */
132*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < (size_t) (size / 8); i++) {
133*62c56f98SSadaf Ebrahimi        size_t s1 = i * 8;
134*62c56f98SSadaf Ebrahimi        size_t s2 = ((size / 8 - 1) - i) * 8;
135*62c56f98SSadaf Ebrahimi        uint64_t a = (input & ((uint64_t) 0xff << s1)) >> s1;
136*62c56f98SSadaf Ebrahimi        uint64_t b = (r & ((uint64_t) 0xff << s2)) >> s2;
137*62c56f98SSadaf Ebrahimi        TEST_EQUAL(a, b);
138*62c56f98SSadaf Ebrahimi    }
139*62c56f98SSadaf Ebrahimi
140*62c56f98SSadaf Ebrahimi    /* Check BSWAP(BSWAP(x)) == x */
141*62c56f98SSadaf Ebrahimi    switch (size) {
142*62c56f98SSadaf Ebrahimi        case 16:
143*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP16(r);
144*62c56f98SSadaf Ebrahimi            TEST_EQUAL(r, input & 0xffff);
145*62c56f98SSadaf Ebrahimi            break;
146*62c56f98SSadaf Ebrahimi        case 32:
147*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP32(r);
148*62c56f98SSadaf Ebrahimi            TEST_EQUAL(r, input & 0xffffffff);
149*62c56f98SSadaf Ebrahimi            break;
150*62c56f98SSadaf Ebrahimi        case 64:
151*62c56f98SSadaf Ebrahimi            r = MBEDTLS_BSWAP64(r);
152*62c56f98SSadaf Ebrahimi            TEST_EQUAL(r, input);
153*62c56f98SSadaf Ebrahimi            break;
154*62c56f98SSadaf Ebrahimi    }
155*62c56f98SSadaf Ebrahimi}
156*62c56f98SSadaf Ebrahimi/* END_CASE */
157*62c56f98SSadaf Ebrahimi
158*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
159*62c56f98SSadaf Ebrahimivoid get_byte()
160*62c56f98SSadaf Ebrahimi{
161*62c56f98SSadaf Ebrahimi    uint8_t data[16];
162*62c56f98SSadaf Ebrahimi
163*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < sizeof(data); i++) {
164*62c56f98SSadaf Ebrahimi        data[i] = (uint8_t) i;
165*62c56f98SSadaf Ebrahimi    }
166*62c56f98SSadaf Ebrahimi
167*62c56f98SSadaf Ebrahimi    uint64_t u64 = 0x0706050403020100;
168*62c56f98SSadaf Ebrahimi    for (size_t b = 0; b < 8; b++) {
169*62c56f98SSadaf Ebrahimi        uint8_t expected = b;
170*62c56f98SSadaf Ebrahimi        uint8_t actual = b + 1;
171*62c56f98SSadaf Ebrahimi        switch (b) {
172*62c56f98SSadaf Ebrahimi            case 0:
173*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_0(u64);
174*62c56f98SSadaf Ebrahimi                break;
175*62c56f98SSadaf Ebrahimi            case 1:
176*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_1(u64);
177*62c56f98SSadaf Ebrahimi                break;
178*62c56f98SSadaf Ebrahimi            case 2:
179*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_2(u64);
180*62c56f98SSadaf Ebrahimi                break;
181*62c56f98SSadaf Ebrahimi            case 3:
182*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_3(u64);
183*62c56f98SSadaf Ebrahimi                break;
184*62c56f98SSadaf Ebrahimi            case 4:
185*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_4(u64);
186*62c56f98SSadaf Ebrahimi                break;
187*62c56f98SSadaf Ebrahimi            case 5:
188*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_5(u64);
189*62c56f98SSadaf Ebrahimi                break;
190*62c56f98SSadaf Ebrahimi            case 6:
191*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_6(u64);
192*62c56f98SSadaf Ebrahimi                break;
193*62c56f98SSadaf Ebrahimi            case 7:
194*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_7(u64);
195*62c56f98SSadaf Ebrahimi                break;
196*62c56f98SSadaf Ebrahimi        }
197*62c56f98SSadaf Ebrahimi        TEST_EQUAL(actual, expected);
198*62c56f98SSadaf Ebrahimi    }
199*62c56f98SSadaf Ebrahimi
200*62c56f98SSadaf Ebrahimi    uint32_t u32 = 0x03020100;
201*62c56f98SSadaf Ebrahimi    for (size_t b = 0; b < 4; b++) {
202*62c56f98SSadaf Ebrahimi        uint8_t expected = b;
203*62c56f98SSadaf Ebrahimi        uint8_t actual = b + 1;
204*62c56f98SSadaf Ebrahimi        switch (b) {
205*62c56f98SSadaf Ebrahimi            case 0:
206*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_0(u32);
207*62c56f98SSadaf Ebrahimi                break;
208*62c56f98SSadaf Ebrahimi            case 1:
209*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_1(u32);
210*62c56f98SSadaf Ebrahimi                break;
211*62c56f98SSadaf Ebrahimi            case 2:
212*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_2(u32);
213*62c56f98SSadaf Ebrahimi                break;
214*62c56f98SSadaf Ebrahimi            case 3:
215*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_3(u32);
216*62c56f98SSadaf Ebrahimi                break;
217*62c56f98SSadaf Ebrahimi        }
218*62c56f98SSadaf Ebrahimi        TEST_EQUAL(actual, expected);
219*62c56f98SSadaf Ebrahimi    }
220*62c56f98SSadaf Ebrahimi
221*62c56f98SSadaf Ebrahimi    uint16_t u16 = 0x0100;
222*62c56f98SSadaf Ebrahimi    for (size_t b = 0; b < 2; b++) {
223*62c56f98SSadaf Ebrahimi        uint8_t expected = b;
224*62c56f98SSadaf Ebrahimi        uint8_t actual = b + 1;
225*62c56f98SSadaf Ebrahimi        switch (b) {
226*62c56f98SSadaf Ebrahimi            case 0:
227*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_0(u16);
228*62c56f98SSadaf Ebrahimi                break;
229*62c56f98SSadaf Ebrahimi            case 1:
230*62c56f98SSadaf Ebrahimi                actual = MBEDTLS_BYTE_1(u16);
231*62c56f98SSadaf Ebrahimi                break;
232*62c56f98SSadaf Ebrahimi        }
233*62c56f98SSadaf Ebrahimi        TEST_EQUAL(actual, expected);
234*62c56f98SSadaf Ebrahimi    }
235*62c56f98SSadaf Ebrahimi
236*62c56f98SSadaf Ebrahimi    uint8_t u8 = 0x01;
237*62c56f98SSadaf Ebrahimi    uint8_t actual = MBEDTLS_BYTE_0(u8);
238*62c56f98SSadaf Ebrahimi    TEST_EQUAL(actual, u8);
239*62c56f98SSadaf Ebrahimi}
240*62c56f98SSadaf Ebrahimi/* END_CASE */
241*62c56f98SSadaf Ebrahimi
242*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
243*62c56f98SSadaf Ebrahimivoid unaligned_access_endian_aware(int size, int offset, int big_endian)
244*62c56f98SSadaf Ebrahimi{
245*62c56f98SSadaf Ebrahimi    TEST_ASSERT(size == 16 || size == 24 || size == 32 || size == 64);
246*62c56f98SSadaf Ebrahimi    TEST_ASSERT(offset >= 0 && offset < 8);
247*62c56f98SSadaf Ebrahimi
248*62c56f98SSadaf Ebrahimi    /* Define 64-bit aligned raw byte array */
249*62c56f98SSadaf Ebrahimi    uint64_t raw[2];
250*62c56f98SSadaf Ebrahimi    /* Populate with known data: x == { 0, 1, 2, ... } */
251*62c56f98SSadaf Ebrahimi    uint8_t *x = (uint8_t *) raw;
252*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < sizeof(raw); i++) {
253*62c56f98SSadaf Ebrahimi        x[i] = (uint8_t) i;
254*62c56f98SSadaf Ebrahimi    }
255*62c56f98SSadaf Ebrahimi
256*62c56f98SSadaf Ebrahimi    uint64_t read = 0;
257*62c56f98SSadaf Ebrahimi    if (big_endian) {
258*62c56f98SSadaf Ebrahimi        switch (size) {
259*62c56f98SSadaf Ebrahimi            case 16:
260*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT16_BE(x, offset);
261*62c56f98SSadaf Ebrahimi                break;
262*62c56f98SSadaf Ebrahimi            case 24:
263*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT24_BE(x, offset);
264*62c56f98SSadaf Ebrahimi                break;
265*62c56f98SSadaf Ebrahimi            case 32:
266*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT32_BE(x, offset);
267*62c56f98SSadaf Ebrahimi                break;
268*62c56f98SSadaf Ebrahimi            case 64:
269*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT64_BE(x, offset);
270*62c56f98SSadaf Ebrahimi                break;
271*62c56f98SSadaf Ebrahimi        }
272*62c56f98SSadaf Ebrahimi    } else {
273*62c56f98SSadaf Ebrahimi        switch (size) {
274*62c56f98SSadaf Ebrahimi            case 16:
275*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT16_LE(x, offset);
276*62c56f98SSadaf Ebrahimi                break;
277*62c56f98SSadaf Ebrahimi            case 24:
278*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT24_LE(x, offset);
279*62c56f98SSadaf Ebrahimi                break;
280*62c56f98SSadaf Ebrahimi            case 32:
281*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT32_LE(x, offset);
282*62c56f98SSadaf Ebrahimi                break;
283*62c56f98SSadaf Ebrahimi            case 64:
284*62c56f98SSadaf Ebrahimi                read = MBEDTLS_GET_UINT64_LE(x, offset);
285*62c56f98SSadaf Ebrahimi                break;
286*62c56f98SSadaf Ebrahimi        }
287*62c56f98SSadaf Ebrahimi    }
288*62c56f98SSadaf Ebrahimi
289*62c56f98SSadaf Ebrahimi    /* Build up expected value byte by byte, in either big or little endian format */
290*62c56f98SSadaf Ebrahimi    uint64_t expected = 0;
291*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < (size_t) (size / 8); i++) {
292*62c56f98SSadaf Ebrahimi        uint64_t b = x[i + offset];
293*62c56f98SSadaf Ebrahimi        uint8_t shift = (big_endian) ? (8 * ((size / 8 - 1) - i)) : (8 * i);
294*62c56f98SSadaf Ebrahimi        expected |= b << shift;
295*62c56f98SSadaf Ebrahimi    }
296*62c56f98SSadaf Ebrahimi
297*62c56f98SSadaf Ebrahimi    /* Verify read */
298*62c56f98SSadaf Ebrahimi    TEST_EQUAL(read, expected);
299*62c56f98SSadaf Ebrahimi
300*62c56f98SSadaf Ebrahimi    /* Test writing back to memory. First write sentinel */
301*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < (size_t) (size / 8); i++) {
302*62c56f98SSadaf Ebrahimi        x[i + offset] = 0xff;
303*62c56f98SSadaf Ebrahimi    }
304*62c56f98SSadaf Ebrahimi    /* Overwrite sentinel with endian-aware write macro */
305*62c56f98SSadaf Ebrahimi    if (big_endian) {
306*62c56f98SSadaf Ebrahimi        switch (size) {
307*62c56f98SSadaf Ebrahimi            case 16:
308*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT16_BE(read, x, offset);
309*62c56f98SSadaf Ebrahimi                break;
310*62c56f98SSadaf Ebrahimi            case 24:
311*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT24_BE(read, x, offset);
312*62c56f98SSadaf Ebrahimi                break;
313*62c56f98SSadaf Ebrahimi            case 32:
314*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT32_BE(read, x, offset);
315*62c56f98SSadaf Ebrahimi                break;
316*62c56f98SSadaf Ebrahimi            case 64:
317*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT64_BE(read, x, offset);
318*62c56f98SSadaf Ebrahimi                break;
319*62c56f98SSadaf Ebrahimi        }
320*62c56f98SSadaf Ebrahimi    } else {
321*62c56f98SSadaf Ebrahimi        switch (size) {
322*62c56f98SSadaf Ebrahimi            case 16:
323*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT16_LE(read, x, offset);
324*62c56f98SSadaf Ebrahimi                break;
325*62c56f98SSadaf Ebrahimi            case 24:
326*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT24_LE(read, x, offset);
327*62c56f98SSadaf Ebrahimi                break;
328*62c56f98SSadaf Ebrahimi            case 32:
329*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT32_LE(read, x, offset);
330*62c56f98SSadaf Ebrahimi                break;
331*62c56f98SSadaf Ebrahimi            case 64:
332*62c56f98SSadaf Ebrahimi                MBEDTLS_PUT_UINT64_LE(read, x, offset);
333*62c56f98SSadaf Ebrahimi                break;
334*62c56f98SSadaf Ebrahimi        }
335*62c56f98SSadaf Ebrahimi    }
336*62c56f98SSadaf Ebrahimi
337*62c56f98SSadaf Ebrahimi    /* Verify write - check memory is correct */
338*62c56f98SSadaf Ebrahimi    for (size_t i = 0; i < sizeof(raw); i++) {
339*62c56f98SSadaf Ebrahimi        TEST_EQUAL(x[i], (uint8_t) i);
340*62c56f98SSadaf Ebrahimi    }
341*62c56f98SSadaf Ebrahimi}
342*62c56f98SSadaf Ebrahimi/* END_CASE */
343*62c56f98SSadaf Ebrahimi
344*62c56f98SSadaf Ebrahimi/* BEGIN_CASE */
345*62c56f98SSadaf Ebrahimivoid mbedtls_is_big_endian()
346*62c56f98SSadaf Ebrahimi{
347*62c56f98SSadaf Ebrahimi    uint16_t check = 0x1234;
348*62c56f98SSadaf Ebrahimi    uint8_t *p = (uint8_t *) &check;
349*62c56f98SSadaf Ebrahimi
350*62c56f98SSadaf Ebrahimi    if (MBEDTLS_IS_BIG_ENDIAN) {
351*62c56f98SSadaf Ebrahimi        /* Big-endian: data stored MSB first, i.e. p == { 0x12, 0x34 } */
352*62c56f98SSadaf Ebrahimi        TEST_EQUAL(p[0], 0x12);
353*62c56f98SSadaf Ebrahimi        TEST_EQUAL(p[1], 0x34);
354*62c56f98SSadaf Ebrahimi    } else {
355*62c56f98SSadaf Ebrahimi        /* Little-endian: data stored LSB first, i.e. p == { 0x34, 0x12 } */
356*62c56f98SSadaf Ebrahimi        TEST_EQUAL(p[0], 0x34);
357*62c56f98SSadaf Ebrahimi        TEST_EQUAL(p[1], 0x12);
358*62c56f98SSadaf Ebrahimi    }
359*62c56f98SSadaf Ebrahimi}
360*62c56f98SSadaf Ebrahimi/* END_CASE */
361