blob: 7b00b9d80c60842a38bd884c09a70f05088b7339 [file] [log] [blame]
use core::hash::Hasher;
use digest::{
generic_array::{
typenum::consts::{U16, U4, U8},
GenericArray,
},
Digest,
};
use crate::{xxh3, XxHash32, XxHash64};
impl Digest for XxHash32 {
type OutputSize = U4;
fn new() -> Self {
Self::default()
}
fn input<B: AsRef<[u8]>>(&mut self, data: B) {
self.write(data.as_ref());
}
fn chain<B: AsRef<[u8]>>(mut self, data: B) -> Self
where
Self: Sized,
{
self.input(data);
self
}
fn result(self) -> GenericArray<u8, Self::OutputSize> {
self.finish().to_be_bytes().into()
}
fn result_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
let result = self.result();
self.reset();
result
}
fn reset(&mut self) {
*self = Self::default();
}
fn output_size() -> usize {
4
}
fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
Self::new().chain(data).result()
}
}
impl Digest for XxHash64 {
type OutputSize = U8;
fn new() -> Self {
Self::default()
}
fn input<B: AsRef<[u8]>>(&mut self, data: B) {
self.write(data.as_ref());
}
fn chain<B: AsRef<[u8]>>(mut self, data: B) -> Self
where
Self: Sized,
{
self.input(data);
self
}
fn result(self) -> GenericArray<u8, Self::OutputSize> {
self.finish().to_be_bytes().into()
}
fn result_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
let result = self.result();
self.reset();
result
}
fn reset(&mut self) {
*self = Self::default();
}
fn output_size() -> usize {
8
}
fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
Self::new().chain(data).result()
}
}
impl Digest for xxh3::Hash64 {
type OutputSize = U8;
fn new() -> Self {
Self::default()
}
fn input<B: AsRef<[u8]>>(&mut self, data: B) {
self.write(data.as_ref());
}
fn chain<B: AsRef<[u8]>>(mut self, data: B) -> Self
where
Self: Sized,
{
self.input(data);
self
}
fn result(self) -> GenericArray<u8, Self::OutputSize> {
self.finish().to_be_bytes().into()
}
fn result_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
let result = self.clone().result();
self.reset();
result
}
fn reset(&mut self) {
*self = Self::default();
}
fn output_size() -> usize {
8
}
fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
Self::new().chain(data).result()
}
}
impl Digest for xxh3::Hash128 {
type OutputSize = U16;
fn new() -> Self {
Self::default()
}
fn input<B: AsRef<[u8]>>(&mut self, data: B) {
self.write(data.as_ref());
}
fn chain<B: AsRef<[u8]>>(mut self, data: B) -> Self
where
Self: Sized,
{
self.input(data);
self
}
fn result(self) -> GenericArray<u8, Self::OutputSize> {
xxh3::HasherExt::finish_ext(&self).to_be_bytes().into()
}
fn result_reset(&mut self) -> GenericArray<u8, Self::OutputSize> {
let result = self.clone().result();
self.reset();
result
}
fn reset(&mut self) {
*self = Self::default();
}
fn output_size() -> usize {
8
}
fn digest(data: &[u8]) -> GenericArray<u8, Self::OutputSize> {
Self::new().chain(data).result()
}
}