#![forbid(unsafe_code)]
pub mod aead;
pub mod case;
pub mod checkin;
pub mod error;
pub mod operational;
pub mod pase;
#[cfg(feature = "test-support")]
pub mod test_support;
pub use aead::SessionAead;
pub use case::initiator::CaseInitiator;
pub use case::responder::CaseResponder;
pub use case::signer::{CaseSigner, RingSigner, SignerError};
pub use case::signer::CaseSigner as Signer;
pub use case::{
CaseCredentials, CaseMessageKind, CaseSessionKeys, CaseSessionOutput, LocalInfo, PeerInfo,
ResumptionId, ResumptionRecord, Sigma1Outcome,
};
pub use error::{Error, Result};
pub use operational::{
derive_compressed_fabric_id, derive_group_privacy_key, derive_group_session_id,
derive_operational_ipk, group_multicast_ipv6,
};
pub use pase::{
pake_passcode_verifier, PaseMessageKind, PasePbkdfParams, PaseProver, PaseSessionKeys,
PaseVerifier,
};
pub fn random_bytes(buf: &mut [u8]) -> Result<()> {
use ring::rand::SecureRandom;
ring::rand::SystemRandom::new()
.fill(buf)
.map_err(|_| Error::Rng)
}
#[cfg(test)]
#[allow(clippy::unwrap_used)] mod tests {
#[test]
fn random_bytes_fills_and_varies() {
let mut a = [0u8; 32];
let mut b = [0u8; 32];
crate::random_bytes(&mut a).unwrap();
crate::random_bytes(&mut b).unwrap();
assert_ne!(a, [0u8; 32]);
assert_ne!(a, b); }
}