21#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
71 for (;
m <
end;
m += 8) {
106 for (
int i = 0;
i < 4; ++
i) sipround(&
v0, &
v1, &
v2, &
v3);
111static const uint8_t CHOE_ORTHO_PRIMARY[4][4] = {
112 {0, 1, 2, 3}, {1, 0, 3, 2}, {2, 3, 0, 1}, {3, 2, 1, 0}};
114static const uint8_t CHOE_ORTHO_SECONDARY[4][4] = {
115 {0, 1, 2, 3}, {2, 3, 0, 1}, {3, 2, 1, 0}, {1, 0, 3, 2}};
125 return (
v << r) | (
v >> ((64U - r) & 63U));
138static void cwist_entropy_fill(
uint8_t *buf,
size_t len) {
139#ifdef CWIST_BAREMETAL
157#if defined(CWIST_PLATFORM_NO_PROC)
198 uint64_t hi = 0x9e3779b185ebca87ULL;
199 uint64_t lo = 0xc2b2ae3d27d4eb4fULL;
209 hi ^= rotl64(
delta ^ hi, (
unsigned int)((
row * 13 +
col * 7) & 63));
210 lo += rotl64(
delta + lo, (
unsigned int)((
row * 11 +
col * 5) & 63));
213 hi ^= rotl64(lo, 17);
214 lo ^= rotl64(hi, 41);
225 cwist_entropy_fill(raw,
sizeof(raw));
226 gusuryak_mix(raw, key);
227 if (key[0] == 0 && key[8] == 0) {
230 for (
size_t i = 0;
i < 16; ++
i) {
Hooks a bare-metal firmware supplies to CWIST (issue #447).
int cwist_port_entropy(void *buf, size_t len)
Fill a buffer with cryptographically secure random bytes.
uint64_t siphash24(const void *src, size_t len, const uint8_t key[16])
Compute SipHash-2-4 over a byte range using a 16-byte secret key.
void cwist_generate_hash_seed(uint8_t key[16])
Generate a non-trivial 16-byte key suitable for SipHash table seeding.