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