1use df_share::error::Unspecified;
2use df_share::*;
3use std::collections::HashSet;
4
5fn main() -> Result<(), Unspecified> {
6 let secrets: Vec<String> = (1..=100).map(|i| format!("SuperSecret #{}", i)).collect();
7
8 let mut nonce_set = HashSet::new();
9 let mut salt_set = HashSet::new();
10 let mut pubk_set = HashSet::new();
11 let mut client_pubk_set = HashSet::new();
12 for (_, secret) in secrets.iter().enumerate() {
13 let client = EphemeralClient::new()?;
14 let (req, decryptor) = client.sendable();
15
16 let server = EphemeralServer::new()?;
17 let res = server.encrypt_secret(&req, secret.as_bytes())?;
18
19 let decrypted_secret = decryptor.decrypt(&res)?;
20
21 assert!(secret.as_bytes() != res.ciphertext);
24 assert!(secret.as_bytes() == &decrypted_secret);
25
26 assert!(!nonce_set.contains(&res.nonce));
29 nonce_set.insert(res.nonce);
30 assert!(!salt_set.contains(&res.salt));
31 salt_set.insert(res.salt);
32 assert!(!pubk_set.contains(&res.pubk));
33 pubk_set.insert(res.pubk.clone());
34 assert!(!client_pubk_set.contains(&req.pubk));
35 client_pubk_set.insert(req.pubk.clone());
36
37 println!(
39 "{} REQ:\n{}\nRES:\n{}\n",
40 secret,
41 serde_json::to_string_pretty(&req).unwrap(),
42 serde_json::to_string_pretty(&res).unwrap()
43 );
44 }
45
46 Ok(())
47}