use secrecy::SecretString;
use enc_file::{EncryptOptions, KeyMap, load_keymap, save_keymap};
#[test]
fn keymap_operations_zeroize_sensitive_data() {
use tempfile::tempdir;
let temp_dir = tempdir().unwrap();
let temp_file_path = temp_dir.path().join("keymap.enc");
let password = SecretString::new("test_password".into());
let mut map: KeyMap = std::collections::HashMap::new();
map.insert("test_key".to_string(), vec![0x01; 32]);
let opts = EncryptOptions::default();
save_keymap(&temp_file_path, password.clone(), &map, &opts).unwrap();
let loaded_map = load_keymap(&temp_file_path, password).unwrap();
assert_eq!(loaded_map.len(), 1);
assert!(loaded_map.contains_key("test_key"));
assert_eq!(loaded_map["test_key"], vec![0x01; 32]);
}
#[test]
fn encrypt_decrypt_operations_work_correctly() {
use enc_file::{EncryptOptions, decrypt_bytes, encrypt_bytes};
let password = SecretString::new("secure_password".into());
let opts = EncryptOptions::default();
let plaintext = b"This is sensitive data that should be zeroized";
let ciphertext = encrypt_bytes(plaintext, password.clone(), &opts).unwrap();
let decrypted = decrypt_bytes(&ciphertext, password).unwrap();
assert_eq!(decrypted, plaintext);
}
#[test]
fn streaming_operations_work_correctly() {
use enc_file::{AeadAlg, EncryptOptions, decrypt_file, encrypt_file_streaming};
use std::fs;
use tempfile::tempdir;
let temp_dir = tempdir().unwrap();
let password = SecretString::new("streaming_password".into());
let opts = EncryptOptions {
stream: true,
chunk_size: 1024, alg: AeadAlg::XChaCha20Poly1305,
force: true, ..Default::default()
};
let input_path = temp_dir.path().join("input.bin");
let encrypted_path = temp_dir.path().join("output.enc");
let decrypted_path = temp_dir.path().join("decrypted.bin");
let test_data =
b"This is streaming test data that should be processed in chunks and properly zeroized.";
fs::write(&input_path, test_data).unwrap();
let final_encrypted_path =
encrypt_file_streaming(&input_path, Some(&encrypted_path), password.clone(), opts).unwrap();
let final_decrypted_path =
decrypt_file(&final_encrypted_path, Some(&decrypted_path), password).unwrap();
let decrypted_data = fs::read(&final_decrypted_path).unwrap();
assert_eq!(decrypted_data, test_data);
}