use sodiumoxide::crypto::box_::Nonce;
pub const FADEDBEE: &[u8; 4] = &[0xFA, 0xDE, 0xDB, 0xEE];
pub const TURNSTILE: &[u8; 9] = b"turnstile";
pub const MAX_CIPHERTEXT_CHUNK: usize = u16::MAX as usize;
pub const BOX_OVERHEAD: usize = 16;
pub const MAX_PLAINTEXT_CHUNK: usize = MAX_CIPHERTEXT_CHUNK - BOX_OVERHEAD;
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub fn version_bytes() -> [u8; 3] {
let parts: Vec<&str> = VERSION.split(".").collect(); [
parts[0].parse().expect("a number"),
parts[1].parse().expect("a number"),
parts[2].parse().expect("a number"),
]
}
pub fn calculate_chunk_nonce(initial_nonce: &Nonce, chunk_num: u64) -> Nonce {
let chunk_num_be_bytes = chunk_num.to_be_bytes();
let mut chunk_nonce = Nonce(initial_nonce.0);
for (i, byte) in chunk_num_be_bytes.iter().enumerate() {
chunk_nonce.0[i] ^= byte;
if i >= 8 {
unreachable!("there are only 8 bytes in a u64");
}
}
chunk_nonce
}