use crate::algorithm::Algorithm;
pub mod crypt;
pub mod file;
pub mod header;
pub mod key;
pub const ALGORITHM: Algorithm = Algorithm::XChaCha20Poly1305;
#[cfg(test)]
mod tests {
use crate::v1::{
crypt::encrypt_bytes, file::EncryptedFile, header::FileHeader, key::KeyDerivationParams,
};
#[test]
fn decrypt_round_trip_via_bytes() {
let salt = [1u8; 16];
let params = KeyDerivationParams::test_defaults();
let content_nonce = [2u8; 24];
let filename_nonce = [3u8; 24];
let (key, _) = params.derive_key(b"password", &salt).unwrap();
let (filename_ct, _) = encrypt_bytes(b"name.txt", key.as_bytes(), &filename_nonce).unwrap();
let (content_ct, _) = encrypt_bytes(b"hello", key.as_bytes(), &content_nonce).unwrap();
let header = FileHeader::new(salt, params, content_nonce, filename_nonce, filename_ct);
let file = EncryptedFile::new(header, content_ct);
let parsed = EncryptedFile::from_bytes(&file.to_bytes()).unwrap();
let decrypted = parsed.decrypt(&key).unwrap();
assert_eq!(decrypted.filename().as_str(), "name.txt");
assert_eq!(decrypted.content().as_slice(), b"hello");
}
#[test]
fn decrypt_with_wrong_key_fails() {
let salt = [1u8; 16];
let params = KeyDerivationParams::test_defaults();
let (key, _) = params.derive_key(b"password", &salt).unwrap();
let (wrong_key, _) = params.derive_key(b"wrong", &salt).unwrap();
let (filename_ct, _) = encrypt_bytes(b"name.txt", key.as_bytes(), &[3u8; 24]).unwrap();
let (content_ct, _) = encrypt_bytes(b"hello", key.as_bytes(), &[2u8; 24]).unwrap();
let header = FileHeader::new(salt, params, [2u8; 24], [3u8; 24], filename_ct);
let file = EncryptedFile::new(header, content_ct);
assert!(file.decrypt(&wrong_key).is_err());
}
}