#![allow(dead_code)]
use std::io::Cursor;
use pcf::{Container, HashAlgo};
pub fn canonical() -> Vec<u8> {
let mut c = Container::create_with(Cursor::new(Vec::new()), 8, HashAlgo::Sha256).unwrap();
c.add_partition(
0x0000_0010,
[0x11u8; 16],
"alpha",
b"Hello, PCF!",
0,
HashAlgo::Sha256,
)
.unwrap();
c.add_partition(
0xFFFF_FFFF,
[0x22u8; 16],
"raw",
&[0, 1, 2, 3, 4, 5, 6, 7],
0,
HashAlgo::Crc32c,
)
.unwrap();
c.compacted_image().unwrap()
}
pub fn wrap(partitions: &[(u32, [u8; 16], &str, Vec<u8>)]) -> Vec<u8> {
let mut c = Container::create_with(Cursor::new(Vec::new()), 8, HashAlgo::Sha256).unwrap();
for (ty, uid, label, data) in partitions {
c.add_partition(*ty, *uid, label, data, 0, HashAlgo::Sha256)
.unwrap();
}
c.compacted_image().unwrap()
}
pub fn pfs_node_direct(name: &str) -> Vec<u8> {
let mut r = Vec::new();
r.extend_from_slice(b"PFSN"); r.push(1); r.push(1); r.extend_from_slice(&0u16.to_le_bytes()); r.extend_from_slice(&[0xAB; 16]); r.extend_from_slice(&[0xCD; 16]); r.extend_from_slice(&1700000000000u64.to_le_bytes()); r.extend_from_slice(&0o644u32.to_le_bytes()); r.extend_from_slice(&(name.len() as u16).to_le_bytes()); r.extend_from_slice(name.as_bytes()); r.push(1); r.push(1); r.extend_from_slice(&[0xEE; 16]); r.extend_from_slice(&42u64.to_le_bytes()); r.push(16); let mut hash = [0u8; 64];
hash[..4].copy_from_slice(&[0xDE, 0xAD, 0xBE, 0xEF]);
r.extend_from_slice(&hash); r
}
pub fn pfs_session(writer: &str) -> Vec<u8> {
let mut r = Vec::new();
r.extend_from_slice(b"PFSS"); r.push(1); r.push(0); r.extend_from_slice(&0u16.to_le_bytes()); r.extend_from_slice(&1u64.to_le_bytes()); r.extend_from_slice(&1700000000000u64.to_le_bytes()); r.push(0); r.extend_from_slice(&[0u8; 64]); r.extend_from_slice(&1u32.to_le_bytes()); r.push(0); r.extend_from_slice(&[0u8; 64]); r.extend_from_slice(&3u16.to_le_bytes()); r.extend_from_slice(&(writer.len() as u16).to_le_bytes()); r.extend_from_slice(writer.as_bytes()); r
}