full_exchange/
full_exchange.rs1use pq_msg::{
2 exchange::{pair::KEMPair, prekey::SignedPrekey},
3 messaging::{MessageSession, create_nonce, gen_session_id},
4 signatures::keypair::{SignerPair, ViewOperations},
5};
6
7fn main() {
8 let alice_signer = SignerPair::create();
9 let mut bob_signer = SignerPair::create();
10
11 let bob_prekey = KEMPair::create();
13 let bob_signed_prekey = SignedPrekey::new(&mut bob_signer, &bob_prekey).unwrap();
14
15 let base_nonce = create_nonce(&gen_session_id(), 0);
17
18 let (mut alice_session, ciphertext) = MessageSession::new_initiator(
21 alice_signer.clone(),
22 base_nonce,
23 &bob_signed_prekey,
24 bob_signer.pub_key_bytes(), )
26 .unwrap();
27
28 let mut bob_session = MessageSession::new_responder(
30 &bob_prekey,
31 bob_signer.clone(),
32 base_nonce,
33 &ciphertext,
34 alice_signer.pub_key_bytes(), )
36 .unwrap();
37
38 drop(bob_prekey);
40
41 let message = b"Hello, Bob! This is a secret message.";
46 let encrypted_message = alice_session.craft_message(message).unwrap();
47
48 let raw_message = bob_session.validate_message(&encrypted_message).unwrap();
50
51 let message_str = String::from_utf8_lossy(message);
53 let raw_message_str = String::from_utf8_lossy(&raw_message);
54
55 println!("[1] Alice's message: {}", message_str);
56 println!("[2] Bob's decrypted message: {}", raw_message_str);
57
58 let reply = b"Hello, Alice! I received your message safely.";
60 let encrypted_reply = bob_session.craft_message(reply).unwrap();
61
62 let raw_reply = alice_session.validate_message(&encrypted_reply).unwrap();
64
65 let reply_str = String::from_utf8_lossy(reply);
67 let raw_reply_str = String::from_utf8_lossy(&raw_reply);
68
69 println!("[3] Bob's reply: {}", reply_str);
70 println!("[4] Alice's decrypted reply: {}", raw_reply_str);
71}