ssi_data_integrity_core/
hashing.rs

1use digest::{
2    consts::{U32, U48},
3    generic_array::{ArrayLength, GenericArray},
4};
5
6pub trait ConcatOutputSize: ArrayLength<u8> {
7    type ConcatOutput;
8
9    fn concat(a: GenericArray<u8, Self>, b: GenericArray<u8, Self>) -> Self::ConcatOutput;
10}
11
12impl ConcatOutputSize for U32 {
13    type ConcatOutput = [u8; 64];
14
15    fn concat(a: GenericArray<u8, U32>, b: GenericArray<u8, U32>) -> [u8; 64] {
16        let mut result = [0u8; 64];
17        result[..32].copy_from_slice(&a);
18        result[32..].copy_from_slice(&b);
19        result
20    }
21}
22
23impl ConcatOutputSize for U48 {
24    type ConcatOutput = [u8; 96];
25
26    fn concat(a: GenericArray<u8, U48>, b: GenericArray<u8, U48>) -> [u8; 96] {
27        let mut result = [0u8; 96];
28        result[..48].copy_from_slice(&a);
29        result[48..].copy_from_slice(&b);
30        result
31    }
32}