pub trait Digest {
// Required methods
fn new() -> Self
where Self: Sized;
fn hash_update(&mut self, input: &[u8]);
fn hash_finalize(&mut self, out: &mut [u8]);
fn reset(&mut self);
fn output_bits(&self) -> usize;
// Provided methods
fn output_bytes(&self) -> usize { ... }
fn result_str(&mut self) -> String { ... }
}