use crate::kdf::*;
use crate::hash::{Sha1, Sha256, Sha512};
use hex;
#[test]
fn test_hkdf_sha256_trait() {
let kdf = Hkdf::<Sha256>::new();
let input = b"input key material";
let salt = b"salt";
let info = b"info";
let length = 32;
let key = kdf.derive_key(input, Some(salt), Some(info), length).unwrap();
assert_eq!(key.len(), length);
let key2 = Hkdf::<Sha256>::derive(Some(salt), input, Some(info), length).unwrap();
assert_eq!(key, key2);
}
#[test]
fn test_pbkdf2_sha256_trait() {
let kdf = Pbkdf2::<Sha256>::new();
let password = b"password";
let salt = b"salt";
let length = 32;
let key = kdf.derive_key(password, Some(salt), None, length).unwrap();
assert_eq!(key.len(), length);
let params = Pbkdf2Params {
salt: salt.to_vec(),
iterations: 10000, key_length: length,
};
let pbkdf2 = Pbkdf2::<Sha256>::new_with_params(params);
let key2 = pbkdf2.derive_key_with_options(password, None, None, None).unwrap();
assert_eq!(key, key2);
}
#[test]
fn test_argon2_trait() {
let kdf = Argon2::new();
let password = b"password";
let salt = b"somesalt";
let length = 32;
let key = kdf.derive_key(password, Some(salt), None, length).unwrap();
assert_eq!(key.len(), length);
let params = Argon2Params {
argon_type: Argon2Type::Argon2i, memory_cost: 4096, time_cost: 3, parallelism: 1, salt: salt.to_vec(),
ad: None,
output_len: length,
};
let argon2 = Argon2::new_with_params(params);
let key2 = argon2.hash_password(password).unwrap();
assert_eq!(key, key2);
}
#[test]
fn test_kdf_interoperability() {
let input = b"same input for all KDFs";
let salt = b"same salt";
let length = 32;
let hkdf_key = Hkdf::<Sha256>::derive(Some(salt), input, None, length).unwrap();
let pbkdf2_params = Pbkdf2Params {
salt: salt.to_vec(),
iterations: 1000, key_length: length,
};
let pbkdf2 = Pbkdf2::<Sha256>::new_with_params(pbkdf2_params);
let pbkdf2_key = pbkdf2.derive_key_with_options(input, None, None, None).unwrap();
let argon2_params = Argon2Params {
argon_type: Argon2Type::Argon2i,
memory_cost: 64, time_cost: 1,
parallelism: 1,
salt: salt.to_vec(),
ad: None,
output_len: length,
};
let argon2 = Argon2::new_with_params(argon2_params);
let argon2_key = argon2.hash_password(input).unwrap();
assert_ne!(hkdf_key, pbkdf2_key);
assert_ne!(hkdf_key, argon2_key);
assert_ne!(pbkdf2_key, argon2_key);
}
mod vectors;