1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
use blake2::digest::{self, VariableOutput}; #[derive(Debug, Clone)] pub struct Blake2b256(blake2::VarBlake2b); impl Default for Blake2b256 { fn default() -> Self { Blake2b256(blake2::VarBlake2b::new(32).unwrap()) } } impl digest::Update for Blake2b256 { fn update(&mut self, data: impl AsRef<[u8]>) { self.0.update(data) } } impl digest::FixedOutput for Blake2b256 { type OutputSize = digest::generic_array::typenum::U32; fn finalize_into(self, out: &mut digest::generic_array::GenericArray<u8, Self::OutputSize>) { self.0.finalize_variable(|slice| { assert_eq!(slice.len(), 32); out.copy_from_slice(slice) }); } fn finalize_into_reset(&mut self, out: &mut digest::generic_array::GenericArray<u8, Self::OutputSize>) { self.0.finalize_variable_reset(|slice| { assert_eq!(slice.len(), 32); out.copy_from_slice(slice) }); } } impl digest::Reset for Blake2b256 { fn reset(&mut self) { self.0.reset() } }