These are needed in ML-KEM and ML-DSA, and are likely generally useful, so public. Reviewed-by: Tim Hudson <tjh@openssl.org> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/26385)
89 lines
2.7 KiB
C
89 lines
2.7 KiB
C
#include <string.h>
|
|
#include <openssl/e_os2.h>
|
|
#include <openssl/byteorder.h>
|
|
#include "testutil.h"
|
|
#include "testutil/output.h"
|
|
|
|
static int test_byteorder(void)
|
|
{
|
|
const unsigned char in[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
|
|
unsigned char out[8];
|
|
const unsigned char *restin;
|
|
unsigned char *restout;
|
|
uint16_t u16;
|
|
uint32_t u32;
|
|
uint64_t u64;
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u16_le(&u16, in);
|
|
restout = OPENSSL_store_u16_le(out, u16);
|
|
if (!TEST_true(u16 == 0x0100U
|
|
&& memcmp(in, out, (size_t) 2) == 0
|
|
&& restin == in + 2
|
|
&& restout == out + 2)) {
|
|
TEST_info("Failed byteorder.h u16 LE load/store");
|
|
return 0;
|
|
}
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u16_be(&u16, in);
|
|
restout = OPENSSL_store_u16_be(out, u16);
|
|
if (!TEST_true(u16 == 0x0001U
|
|
&& memcmp(in, out, (size_t) 2) == 0
|
|
&& restin == in + 2
|
|
&& restout == out + 2)) {
|
|
TEST_info("Failed byteorder.h u16 BE load/store");
|
|
return 0;
|
|
}
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u32_le(&u32, in);
|
|
restout = OPENSSL_store_u32_le(out, u32);
|
|
if (!TEST_true(u32 == 0x03020100UL
|
|
&& memcmp(in, out, (size_t) 4) == 0
|
|
&& restin == in + 4
|
|
&& restout == out + 4)) {
|
|
TEST_info("Failed byteorder.h u32 LE load/store");
|
|
return 0;
|
|
}
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u32_be(&u32, in);
|
|
restout = OPENSSL_store_u32_be(out, u32);
|
|
if (!TEST_true(u32 == 0x00010203UL
|
|
&& memcmp(in, out, (size_t) 4) == 0
|
|
&& restin == in + 4
|
|
&& restout == out + 4)) {
|
|
TEST_info("Failed byteorder.h u32 BE load/store");
|
|
return 0;
|
|
}
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u64_le(&u64, in);
|
|
restout = OPENSSL_store_u64_le(out, u64);
|
|
if (!TEST_true(u64 == 0x0706050403020100ULL
|
|
&& memcmp(in, out, (size_t) 8) == 0
|
|
&& restin == in + 8
|
|
&& restout == out + 8)) {
|
|
TEST_info("Failed byteorder.h u64 LE load/store");
|
|
return 0;
|
|
}
|
|
|
|
memset(out, 0xff, sizeof(out));
|
|
restin = OPENSSL_load_u64_be(&u64, in);
|
|
restout = OPENSSL_store_u64_be(out, u64);
|
|
if (!TEST_true(u64 == 0x0001020304050607ULL
|
|
&& memcmp(in, out, (size_t) 8) == 0
|
|
&& restin == in + 8
|
|
&& restout == out + 8)) {
|
|
TEST_info("Failed byteorder.h u64 BE load/store");
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int setup_tests(void)
|
|
{
|
|
ADD_TEST(test_byteorder);
|
|
return 1;
|
|
}
|