1 use core::hash::Hasher; 2 3 use digest_0_10::{ 4 generic_array::typenum::consts::{U16, U4, U8}, 5 FixedOutput, HashMarker, Output, OutputSizeUser, Update, 6 }; 7 8 use crate::{xxh3, XxHash32, XxHash64}; 9 10 // ---------- 11 12 impl Update for XxHash32 { update(&mut self, data: &[u8])13 fn update(&mut self, data: &[u8]) { 14 self.write(data); 15 } 16 } 17 18 impl OutputSizeUser for XxHash32 { 19 type OutputSize = U4; 20 } 21 22 impl FixedOutput for XxHash32 { finalize_into(self, out: &mut Output<Self>)23 fn finalize_into(self, out: &mut Output<Self>) { 24 let tmp: &mut [u8; 4] = out.as_mut(); 25 *tmp = self.finish().to_be_bytes(); 26 } 27 } 28 29 impl HashMarker for XxHash32 {} 30 31 // ---------- 32 33 impl Update for XxHash64 { update(&mut self, data: &[u8])34 fn update(&mut self, data: &[u8]) { 35 self.write(data); 36 } 37 } 38 39 impl OutputSizeUser for XxHash64 { 40 type OutputSize = U8; 41 } 42 43 impl FixedOutput for XxHash64 { finalize_into(self, out: &mut Output<Self>)44 fn finalize_into(self, out: &mut Output<Self>) { 45 let tmp: &mut [u8; 8] = out.as_mut(); 46 *tmp = self.finish().to_be_bytes(); 47 } 48 } 49 50 impl HashMarker for XxHash64 {} 51 52 // ---------- 53 54 impl Update for xxh3::Hash64 { update(&mut self, data: &[u8])55 fn update(&mut self, data: &[u8]) { 56 self.write(data); 57 } 58 } 59 60 impl OutputSizeUser for xxh3::Hash64 { 61 type OutputSize = U8; 62 } 63 64 impl FixedOutput for xxh3::Hash64 { finalize_into(self, out: &mut Output<Self>)65 fn finalize_into(self, out: &mut Output<Self>) { 66 let tmp: &mut [u8; 8] = out.as_mut(); 67 *tmp = self.finish().to_be_bytes(); 68 } 69 } 70 71 impl HashMarker for xxh3::Hash64 {} 72 73 // ---------- 74 75 impl Update for xxh3::Hash128 { update(&mut self, data: &[u8])76 fn update(&mut self, data: &[u8]) { 77 self.write(data); 78 } 79 } 80 81 impl OutputSizeUser for xxh3::Hash128 { 82 type OutputSize = U16; 83 } 84 85 impl FixedOutput for xxh3::Hash128 { finalize_into(self, out: &mut Output<Self>)86 fn finalize_into(self, out: &mut Output<Self>) { 87 let tmp: &mut [u8; 16] = out.as_mut(); 88 *tmp = xxh3::HasherExt::finish_ext(&self).to_be_bytes(); 89 } 90 } 91 92 impl HashMarker for xxh3::Hash128 {} 93