ssi_data_integrity_core/
hashing.rs1use 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}