mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-05-18 11:23:42 +02:00
76 lines
2 KiB
Rust
76 lines
2 KiB
Rust
pub mod hex;
|
|
pub mod pool;
|
|
|
|
pub(crate) const ZEROES: [u8; 64] = [0_u8; 64];
|
|
|
|
#[inline(always)]
|
|
pub(crate) unsafe fn equal_bytes(a: *const u8, b: *const u8, l: usize) -> bool {
|
|
for i in 0..l {
|
|
if *a.offset(i as isize) != *b.offset(i as isize) {
|
|
return false;
|
|
}
|
|
}
|
|
true
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_store_be_u16(i: u16, d: &mut [u8]) {
|
|
d[0] = (i >> 8) as u8;
|
|
d[1] = i as u8;
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_store_be_u32(i: u32, d: &mut [u8]) {
|
|
d[0] = (i >> 24) as u8;
|
|
d[1] = (i >> 16) as u8;
|
|
d[2] = (i >> 8) as u8;
|
|
d[3] = i as u8;
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_store_be_u64(i: u64, d: &mut [u8]) {
|
|
d[0] = (i >> 56) as u8;
|
|
d[1] = (i >> 48) as u8;
|
|
d[2] = (i >> 40) as u8;
|
|
d[3] = (i >> 32) as u8;
|
|
d[4] = (i >> 24) as u8;
|
|
d[5] = (i >> 16) as u8;
|
|
d[6] = (i >> 8) as u8;
|
|
d[7] = i as u8;
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_load_be_u16(d: &[u8]) -> u16 {
|
|
(d[0] as u16) << 8 | (d[1] as u16)
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_load_be_u32(d: &[u8]) -> u32 {
|
|
(d[0] as u32) << 24 | (d[1] as u32) << 16 | (d[2] as u32) << 8 | (d[3] as u32)
|
|
}
|
|
|
|
#[inline(always)]
|
|
pub(crate) fn integer_load_be_u64(d: &[u8]) -> u64 {
|
|
(d[0] as u64) << 56 | (d[1] as u64) << 48 | (d[2] as u64) << 40 | (d[3] as u64) << 32 | (d[4] as u64) << 24 | (d[5] as u64) << 16 | (d[6] as u64) << 8 | (d[7] as u64)
|
|
}
|
|
|
|
/// Mix bits in a 64-bit integer.
|
|
/// https://nullprogram.com/blog/2018/07/31/
|
|
pub(crate) fn hash64(mut x: u64) -> u64 {
|
|
x ^= x.wrapping_shr(30);
|
|
x = x.wrapping_mul(0xbf58476d1ce4e5b9);
|
|
x ^= x.wrapping_shr(27);
|
|
x = x.wrapping_mul(0x94d049bb133111eb);
|
|
x ^ x.wrapping_shr(31)
|
|
}
|
|
|
|
/// Mix bits in 32-bit integer.
|
|
/// https://nullprogram.com/blog/2018/07/31/
|
|
#[inline(always)]
|
|
pub(crate) fn hash32(mut x: u32) -> u32 {
|
|
x ^= x.wrapping_shr(16);
|
|
x = x.wrapping_mul(0x7feb352d);
|
|
x ^= x.wrapping_shr(15);
|
|
x = x.wrapping_mul(0x846ca68b);
|
|
x ^ x.wrapping_shr(16)
|
|
}
|