1pub use sipx_sip::auth::{
8 Algorithm, Challenge, Credentials, respond, strongest, topmost_supported,
9};
10
11#[must_use]
13pub fn new_cnonce() -> String {
14 use rand::Rng as _;
15 let value: u64 = rand::rng().random();
16 format!("{value:016x}")
17}
18
19#[cfg(test)]
20#[allow(clippy::panic)]
21mod tests {
22 #[test]
24 fn client_nonces_are_not_repeated() {
25 let mut seen = std::collections::HashSet::new();
26 for _ in 0..100 {
27 assert!(seen.insert(super::new_cnonce()), "a cnonce was repeated");
28 }
29 }
30}