philbin 1.0.1

A pure Rust AEGIS library with SIMD and runtime CPU detection
Documentation
use philbin::{
  careful::{Nonce128, Nonce256},
  easy::{Error, Result},
};
use similar_asserts::assert_eq;

#[test]
#[cfg(feature = "rand")]
fn generate_nonce_not_zeros() -> Result<()> {
  // In theory, this test could be flaky. In practice, it won't be.

  assert_ne!(Nonce128::generate()?.into_array(), [0; Nonce128::BYTES]);
  assert_ne!(Nonce256::generate()?.into_array(), [0; Nonce256::BYTES]);

  Ok(())
}

#[test]
#[cfg(feature = "rand")]
fn generate_nonces_are_different() -> Result<()> {
  // In theory, this test could be flaky. In practice, it won't be.

  assert_ne!(Nonce128::generate()?, Nonce128::generate()?);
  assert_ne!(Nonce256::generate()?, Nonce256::generate()?);

  Ok(())
}

#[test]
fn new_non_zero_input_works() {
  assert!(Nonce128::new([1; Nonce128::BYTES]).is_ok());
  assert!(Nonce256::new([1; Nonce256::BYTES]).is_ok());
}

#[test]
fn new_all_zero_key_rejected() {
  assert_eq!(
    actual: Nonce128::new([0; Nonce128::BYTES]),
    expected: Err(Error::AllZeroNotAllowed));
}

#[test]
fn from_same_as_into_array() -> Result<()> {
  let array128: [u8; Nonce128::BYTES] =
    Nonce128::new([1; Nonce128::BYTES])?.into();
  assert_eq!(
    actual: array128,
    expected: Nonce128::new([1; Nonce128::BYTES])?.into_array());

  let array256: [u8; Nonce256::BYTES] =
    Nonce256::new([1; Nonce256::BYTES])?.into();
  assert_eq!(
    actual: array256,
    expected: Nonce256::new([1; Nonce256::BYTES])?.into_array());

  Ok(())
}