1pub use crate::encodings::WriteBytes;
6
7pub fn pre_auth_encode<const N: usize>(pieces: [&[&[u8]]; N], mut out: impl WriteBytes) {
9 let len = N as u64;
10 out.write(&len.to_le_bytes());
11 for piece in pieces {
12 let len: u64 = piece.iter().map(|x| x.len() as u64).sum();
13 out.write(&len.to_le_bytes());
14 for x in piece {
15 out.write(x);
16 }
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use std::vec::Vec;
23
24 fn pae_vec<const N: usize>(pieces: [&[&[u8]]; N]) -> Vec<u8> {
25 let mut vec = Vec::new();
26 super::pre_auth_encode(pieces, &mut vec);
27 vec
28 }
29
30 #[test]
31 fn test() {
32 let v = pae_vec([]);
33 assert_eq!(v, b"\x00\x00\x00\x00\x00\x00\x00\x00");
34
35 let v = pae_vec([&[b""]]);
36 assert_eq!(
37 v,
38 b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
39 );
40
41 let v = pae_vec([&[b"test"]]);
42 assert_eq!(
43 v,
44 b"\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00test"
45 );
46 }
47}