1*e7be843bSPierre Pronchery #include <string.h>
2*e7be843bSPierre Pronchery #include <openssl/e_os2.h>
3*e7be843bSPierre Pronchery #include <openssl/byteorder.h>
4*e7be843bSPierre Pronchery #include "testutil.h"
5*e7be843bSPierre Pronchery #include "testutil/output.h"
6*e7be843bSPierre Pronchery
test_byteorder(void)7*e7be843bSPierre Pronchery static int test_byteorder(void)
8*e7be843bSPierre Pronchery {
9*e7be843bSPierre Pronchery const unsigned char in[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
10*e7be843bSPierre Pronchery unsigned char out[8];
11*e7be843bSPierre Pronchery const unsigned char *restin;
12*e7be843bSPierre Pronchery unsigned char *restout;
13*e7be843bSPierre Pronchery uint16_t u16;
14*e7be843bSPierre Pronchery uint32_t u32;
15*e7be843bSPierre Pronchery uint64_t u64;
16*e7be843bSPierre Pronchery
17*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
18*e7be843bSPierre Pronchery restin = OPENSSL_load_u16_le(&u16, in);
19*e7be843bSPierre Pronchery restout = OPENSSL_store_u16_le(out, u16);
20*e7be843bSPierre Pronchery if (!TEST_true(u16 == 0x0100U
21*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 2) == 0
22*e7be843bSPierre Pronchery && restin == in + 2
23*e7be843bSPierre Pronchery && restout == out + 2)) {
24*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u16 LE load/store");
25*e7be843bSPierre Pronchery return 0;
26*e7be843bSPierre Pronchery }
27*e7be843bSPierre Pronchery
28*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
29*e7be843bSPierre Pronchery restin = OPENSSL_load_u16_be(&u16, in);
30*e7be843bSPierre Pronchery restout = OPENSSL_store_u16_be(out, u16);
31*e7be843bSPierre Pronchery if (!TEST_true(u16 == 0x0001U
32*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 2) == 0
33*e7be843bSPierre Pronchery && restin == in + 2
34*e7be843bSPierre Pronchery && restout == out + 2)) {
35*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u16 BE load/store");
36*e7be843bSPierre Pronchery return 0;
37*e7be843bSPierre Pronchery }
38*e7be843bSPierre Pronchery
39*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
40*e7be843bSPierre Pronchery restin = OPENSSL_load_u32_le(&u32, in);
41*e7be843bSPierre Pronchery restout = OPENSSL_store_u32_le(out, u32);
42*e7be843bSPierre Pronchery if (!TEST_true(u32 == 0x03020100UL
43*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 4) == 0
44*e7be843bSPierre Pronchery && restin == in + 4
45*e7be843bSPierre Pronchery && restout == out + 4)) {
46*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u32 LE load/store");
47*e7be843bSPierre Pronchery return 0;
48*e7be843bSPierre Pronchery }
49*e7be843bSPierre Pronchery
50*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
51*e7be843bSPierre Pronchery restin = OPENSSL_load_u32_be(&u32, in);
52*e7be843bSPierre Pronchery restout = OPENSSL_store_u32_be(out, u32);
53*e7be843bSPierre Pronchery if (!TEST_true(u32 == 0x00010203UL
54*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 4) == 0
55*e7be843bSPierre Pronchery && restin == in + 4
56*e7be843bSPierre Pronchery && restout == out + 4)) {
57*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u32 BE load/store");
58*e7be843bSPierre Pronchery return 0;
59*e7be843bSPierre Pronchery }
60*e7be843bSPierre Pronchery
61*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
62*e7be843bSPierre Pronchery restin = OPENSSL_load_u64_le(&u64, in);
63*e7be843bSPierre Pronchery restout = OPENSSL_store_u64_le(out, u64);
64*e7be843bSPierre Pronchery if (!TEST_true(u64 == 0x0706050403020100ULL
65*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 8) == 0
66*e7be843bSPierre Pronchery && restin == in + 8
67*e7be843bSPierre Pronchery && restout == out + 8)) {
68*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u64 LE load/store");
69*e7be843bSPierre Pronchery return 0;
70*e7be843bSPierre Pronchery }
71*e7be843bSPierre Pronchery
72*e7be843bSPierre Pronchery memset(out, 0xff, sizeof(out));
73*e7be843bSPierre Pronchery restin = OPENSSL_load_u64_be(&u64, in);
74*e7be843bSPierre Pronchery restout = OPENSSL_store_u64_be(out, u64);
75*e7be843bSPierre Pronchery if (!TEST_true(u64 == 0x0001020304050607ULL
76*e7be843bSPierre Pronchery && memcmp(in, out, (size_t) 8) == 0
77*e7be843bSPierre Pronchery && restin == in + 8
78*e7be843bSPierre Pronchery && restout == out + 8)) {
79*e7be843bSPierre Pronchery TEST_info("Failed byteorder.h u64 BE load/store");
80*e7be843bSPierre Pronchery return 0;
81*e7be843bSPierre Pronchery }
82*e7be843bSPierre Pronchery return 1;
83*e7be843bSPierre Pronchery }
84*e7be843bSPierre Pronchery
setup_tests(void)85*e7be843bSPierre Pronchery int setup_tests(void)
86*e7be843bSPierre Pronchery {
87*e7be843bSPierre Pronchery ADD_TEST(test_byteorder);
88*e7be843bSPierre Pronchery return 1;
89*e7be843bSPierre Pronchery }
90