use rgp::{
Components, Decrypt, Encrypt, decrypt, encrypt, extract_components_mut, generate_dh_keys,
generate_fingerprint,
};
pub fn main() -> Result<(), &'static str> {
let (fingerprint, verifier) = generate_fingerprint();
let (sender_priv_key, sender_pub_key) = generate_dh_keys();
let (receiver_priv_key, receiver_pub_key) = generate_dh_keys();
let mut pub_keys = vec![receiver_pub_key];
let content = vec![0u8; 5_000_000];
for _ in 0..10_000 {
let (_, pub_key) = generate_dh_keys();
pub_keys.push(pub_key)
}
let (mut encrypted_content, content_key) = encrypt(
fingerprint,
content.clone(),
Encrypt::Dh(sender_priv_key, &pub_keys, None),
)?;
if let Components::Dh(encrypted_key, _) = extract_components_mut(0, &mut encrypted_content) {
let (decrypted_content, decrypted_content_key) = decrypt(
Some(&verifier),
&encrypted_content,
Decrypt::Dh(encrypted_key, sender_pub_key, receiver_priv_key, None),
)?;
assert_eq!(decrypted_content, content);
assert_eq!(decrypted_content_key, content_key);
};
Ok(())
}