• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use core::hash::Hasher;
2 
3 use digest_0_9::{
4     generic_array::{
5         typenum::consts::{U16, U4, U8},
6         GenericArray,
7     },
8     Digest,
9 };
10 
11 use crate::{xxh3, XxHash32, XxHash64};
12 
13 impl Digest for XxHash32 {
14     type OutputSize = U4;
15 
new() -> Self16     fn new() -> Self {
17         Self::default()
18     }
19 
update(&mut self, data: impl AsRef<[u8]>)20     fn update(&mut self, data: impl AsRef<[u8]>) {
21         self.write(data.as_ref());
22     }
23 
chain(mut self, data: impl AsRef<[u8]>) -> Self where Self: Sized,24     fn chain(mut self, data: impl AsRef<[u8]>) -> Self
25     where
26         Self: Sized,
27     {
28         self.update(data);
29         self
30     }
31 
finalize(self) -> GenericArray<u8, Self::OutputSize>32     fn finalize(self) -> GenericArray<u8, Self::OutputSize> {
33         self.finish().to_be_bytes().into()
34     }
35 
finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize>36     fn finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
37         let result = self.finalize();
38         self.reset();
39         result
40     }
41 
reset(&mut self)42     fn reset(&mut self) {
43         *self = Self::default();
44     }
45 
output_size() -> usize46     fn output_size() -> usize {
47         4
48     }
49 
digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize>50     fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
51         Self::new().chain(data).finalize()
52     }
53 }
54 
55 impl Digest for XxHash64 {
56     type OutputSize = U8;
57 
new() -> Self58     fn new() -> Self {
59         Self::default()
60     }
61 
update(&mut self, data: impl AsRef<[u8]>)62     fn update(&mut self, data: impl AsRef<[u8]>) {
63         self.write(data.as_ref());
64     }
65 
chain(mut self, data: impl AsRef<[u8]>) -> Self where Self: Sized,66     fn chain(mut self, data: impl AsRef<[u8]>) -> Self
67     where
68         Self: Sized,
69     {
70         self.update(data);
71         self
72     }
73 
finalize(self) -> GenericArray<u8, Self::OutputSize>74     fn finalize(self) -> GenericArray<u8, Self::OutputSize> {
75         self.finish().to_be_bytes().into()
76     }
77 
finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize>78     fn finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
79         let result = self.finalize();
80         self.reset();
81         result
82     }
83 
reset(&mut self)84     fn reset(&mut self) {
85         *self = Self::default();
86     }
87 
output_size() -> usize88     fn output_size() -> usize {
89         8
90     }
91 
digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize>92     fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
93         Self::new().chain(data).finalize()
94     }
95 }
96 
97 impl Digest for xxh3::Hash64 {
98     type OutputSize = U8;
99 
new() -> Self100     fn new() -> Self {
101         Self::default()
102     }
103 
update(&mut self, data: impl AsRef<[u8]>)104     fn update(&mut self, data: impl AsRef<[u8]>) {
105         self.write(data.as_ref());
106     }
107 
chain(mut self, data: impl AsRef<[u8]>) -> Self where Self: Sized,108     fn chain(mut self, data: impl AsRef<[u8]>) -> Self
109     where
110         Self: Sized,
111     {
112         self.update(data);
113         self
114     }
115 
finalize(self) -> GenericArray<u8, Self::OutputSize>116     fn finalize(self) -> GenericArray<u8, Self::OutputSize> {
117         self.finish().to_be_bytes().into()
118     }
119 
finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize>120     fn finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
121         let result = self.clone().finalize();
122         self.reset();
123         result
124     }
125 
reset(&mut self)126     fn reset(&mut self) {
127         *self = Self::default();
128     }
129 
output_size() -> usize130     fn output_size() -> usize {
131         8
132     }
133 
digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize>134     fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
135         Self::new().chain(data).finalize()
136     }
137 }
138 
139 impl Digest for xxh3::Hash128 {
140     type OutputSize = U16;
141 
new() -> Self142     fn new() -> Self {
143         Self::default()
144     }
145 
update(&mut self, data: impl AsRef<[u8]>)146     fn update(&mut self, data: impl AsRef<[u8]>) {
147         self.write(data.as_ref());
148     }
149 
chain(mut self, data: impl AsRef<[u8]>) -> Self where Self: Sized,150     fn chain(mut self, data: impl AsRef<[u8]>) -> Self
151     where
152         Self: Sized,
153     {
154         self.update(data);
155         self
156     }
157 
finalize(self) -> GenericArray<u8, Self::OutputSize>158     fn finalize(self) -> GenericArray<u8, Self::OutputSize> {
159         xxh3::HasherExt::finish_ext(&self).to_be_bytes().into()
160     }
161 
finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize>162     fn finalize_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
163         let result = self.clone().finalize();
164         self.reset();
165         result
166     }
167 
reset(&mut self)168     fn reset(&mut self) {
169         *self = Self::default();
170     }
171 
output_size() -> usize172     fn output_size() -> usize {
173         8
174     }
175 
digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize>176     fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
177         Self::new().chain(data).finalize()
178     }
179 }
180