use philbin::easy::{Error, Key128, Key256};
use std::assert_matches;
#[cfg(feature = "rand")]
use philbin::easy::Result;
#[test]
#[cfg(feature = "rand")]
fn generate_key_not_zeros() -> Result<()> {
assert_ne!(Key128::generate()?.expose_secret(), &[0; Key128::BYTES]);
assert_ne!(Key256::generate()?.expose_secret(), &[0; Key256::BYTES]);
Ok(())
}
#[test]
#[cfg(feature = "rand")]
fn generate_keys_are_different() -> Result<()> {
assert_ne!(
Key128::generate()?.expose_secret(),
Key128::generate()?.expose_secret()
);
assert_ne!(
Key256::generate()?.expose_secret(),
Key256::generate()?.expose_secret()
);
Ok(())
}
#[test]
fn new_non_zero_input_works() {
assert!(Key128::new([1; Key128::BYTES]).is_ok());
assert!(Key256::new([1; Key256::BYTES]).is_ok());
}
#[test]
fn new_all_zero_key_rejected() {
assert_matches!(
Key128::new([0; Key128::BYTES]),
Err(Error::AllZeroNotAllowed)
);
}
#[test]
fn from_bytes_vec_works() {
assert!(Key128::from_bytes(vec![1; Key128::BYTES]).is_ok());
assert!(Key256::from_bytes(vec![1; Key256::BYTES]).is_ok());
}
#[test]
fn from_bytes_all_zero_key_rejected() {
assert_matches!(
Key128::from_bytes(vec![0; Key128::BYTES]),
Err(Error::AllZeroNotAllowed)
);
}
#[test]
fn from_bytes_short_vec_rejected() {
assert_matches!(
Key256::from_bytes(vec![1; Key128::BYTES]),
Err(Error::InputBufferWrongSize)
);
}
#[test]
fn from_bytes_long_vec_rejected() {
assert_matches!(
Key128::from_bytes(vec![1; Key256::BYTES]),
Err(Error::InputBufferWrongSize)
);
}
#[test]
fn debug_is_redacted() {
let key = Key128::new([123; Key128::BYTES]);
let debug = format!("{key:?}");
assert!(!debug.contains("123"));
assert!(debug.contains("redacted"));
}