use super::TempFile;
use crate::crypto::rand_bytes;
use crate::shared::*;
use crate::*;
use std::io::Read;
#[test]
fn key_derivation_iv() {
let mut iv1 = [0u8; IV_SIZE];
rand_bytes(&mut iv1);
let mut iv2 = [0u8; IV_SIZE];
rand_bytes(&mut iv2);
let derived1 = KeySource::Password("foo").extract_keys(&iv1).unwrap();
let derived2 = KeySource::Password("foo").extract_keys(&iv1).unwrap();
assert_eq!(
derived1, derived2,
"Two keys derived from same password and same IV should not differ"
);
let derived3 = KeySource::Password("foo").extract_keys(&iv2).unwrap();
assert_ne!(
derived1, derived3,
"Two keys derived from the same password but different IVs should differ"
);
}
#[test]
fn buffer_key_source() {
let vault = TempFile::new();
let keyfile = TempFile::new();
let mut sman = SecretsManager::new(KeySource::Csprng).unwrap();
sman.set("foo", "bar");
sman.export_key(&keyfile).unwrap();
sman.save_as(&vault).unwrap();
let mut buffer = Vec::new();
File::open(keyfile)
.unwrap()
.read_to_end(&mut buffer)
.unwrap();
let keysource = KeySource::Buffer(&buffer);
let sman = SecretsManager::load(&vault, keysource).expect("Failed to load keys from buffer!");
assert_eq!(&sman.get_as::<Vec<u8>>("foo").unwrap(), b"bar");
}