1
Fork 0

Do not hash zero bytes of i64 and u32 in Sip128 hasher

This commit is contained in:
Jakub Beránek 2021-12-18 20:41:58 +01:00
parent b5da80871d
commit 65a3279f4a
No known key found for this signature in database
GPG key ID: DBC553E540C2F619
2 changed files with 18 additions and 4 deletions

View file

@ -409,6 +409,20 @@ impl SipHasher128 {
}
}
macro_rules! dispatch_value {
($target: expr, $value:expr) => {
let value = $value;
#[allow(unreachable_patterns)]
#[allow(overflowing_literals)]
match value {
0..=0xFF => $target.short_write(value as u8),
0x100..=0xFFFF => $target.short_write(value as u16),
0x10000..=0xFFFFFFFF => $target.short_write(value as u32),
_ => $target.short_write(value as u64),
}
};
}
impl Hasher for SipHasher128 {
#[inline]
fn write_u8(&mut self, i: u8) {
@ -422,7 +436,7 @@ impl Hasher for SipHasher128 {
#[inline]
fn write_u32(&mut self, i: u32) {
self.short_write(i);
dispatch_value!(self, i);
}
#[inline]
@ -452,7 +466,7 @@ impl Hasher for SipHasher128 {
#[inline]
fn write_i64(&mut self, i: i64) {
self.short_write(i as u64);
dispatch_value!(self, i as u64);
}
#[inline]