libcrux_traits/digest/
owned.rs1use super::arrayref;
6
7pub use arrayref::HashError;
8
9pub trait Hash<const OUTPUT_LEN: usize> {
11 fn hash(payload: &[u8]) -> Result<[u8; OUTPUT_LEN], HashError>;
13}
14
15pub trait DigestIncremental<const OUTPUT_LEN: usize>: super::DigestIncrementalBase {
17 fn finish(state: &mut Self::IncrementalState) -> [u8; OUTPUT_LEN];
21}
22
23impl<const OUTPUT_LEN: usize, D: arrayref::Hash<OUTPUT_LEN>> Hash<OUTPUT_LEN> for D {
24 fn hash(payload: &[u8]) -> Result<[u8; OUTPUT_LEN], HashError> {
25 let mut digest = [0; OUTPUT_LEN];
26 Self::hash(&mut digest, payload).map(|_| digest)
27 }
28}
29impl<const OUTPUT_LEN: usize, D: arrayref::DigestIncremental<OUTPUT_LEN>>
30 DigestIncremental<OUTPUT_LEN> for D
31{
32 fn finish(state: &mut Self::IncrementalState) -> [u8; OUTPUT_LEN] {
33 let mut digest = [0; OUTPUT_LEN];
34 Self::finish(state, &mut digest);
35 digest
36 }
37}