shadow_integration_tests/
crypto_messaging.rs1use shadow_core::PeerId;
4
5pub fn test_full_messaging_pipeline() -> Result<(), String> {
7 let alice_sk = crypto::SigningKey::generate();
8 let alice_id = PeerId::random();
9 let bob_sk = crypto::SigningKey::generate();
10 let bob_id = PeerId::random();
11 let alice_vk = alice_sk.verify_key();
12 let bob_vk = bob_sk.verify_key();
13
14 let (alice_state, alice_pub) = messaging::SecureChannel::initiate(alice_sk, alice_id);
16 let (bob_state, bob_pub) = messaging::SecureChannel::initiate(bob_sk, bob_id);
17
18 let alice_chan = messaging::SecureChannel::complete(alice_state, &bob_pub, bob_vk)
19 .map_err(|e| format!("Alice channel complete failed: {}", e))?;
20 let bob_chan = messaging::SecureChannel::complete(bob_state, &alice_pub, alice_vk)
21 .map_err(|e| format!("Bob channel complete failed: {}", e))?;
22
23 let original = messaging::Message::text(
25 alice_id,
26 messaging::MessageTarget::Direct(bob_id),
27 "Integration test: crypto→messaging pipeline",
28 );
29
30 let envelope = alice_chan
32 .encrypt_message(&original)
33 .map_err(|e| format!("Encrypt failed: {}", e))?;
34
35 let envelope_bytes = envelope
37 .to_bytes()
38 .map_err(|e| format!("Envelope serialize failed: {}", e))?;
39
40 let received_envelope = messaging::EncryptedEnvelope::from_bytes(&envelope_bytes)
42 .map_err(|e| format!("Envelope deserialize failed: {}", e))?;
43
44 let received_msg = bob_chan
46 .decrypt_message(&received_envelope)
47 .map_err(|e| format!("Decrypt failed: {}", e))?;
48
49 if received_msg.sender != alice_id {
51 return Err("Sender mismatch".into());
52 }
53
54 Ok(())
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60
61 #[test]
62 fn test_crypto_messaging_integration() {
63 test_full_messaging_pipeline().unwrap();
64 }
65
66 #[test]
67 fn test_multiple_messages() {
68 let alice_sk = crypto::SigningKey::generate();
69 let alice_id = PeerId::random();
70 let bob_sk = crypto::SigningKey::generate();
71 let bob_id = PeerId::random();
72 let alice_vk = alice_sk.verify_key();
73 let bob_vk = bob_sk.verify_key();
74
75 let (a_state, a_pub) = messaging::SecureChannel::initiate(alice_sk, alice_id);
76 let (b_state, b_pub) = messaging::SecureChannel::initiate(bob_sk, bob_id);
77 let a_chan = messaging::SecureChannel::complete(a_state, &b_pub, bob_vk).unwrap();
78 let b_chan = messaging::SecureChannel::complete(b_state, &a_pub, alice_vk).unwrap();
79
80 for i in 0..50 {
81 let msg = messaging::Message::text(
82 alice_id,
83 messaging::MessageTarget::Direct(bob_id),
84 format!("message #{}", i),
85 );
86 let enc = a_chan.encrypt_message(&msg).unwrap();
87 let dec = b_chan.decrypt_message(&enc).unwrap();
88 assert_eq!(dec.sender, alice_id);
89
90 let reply = messaging::Message::text(
91 bob_id,
92 messaging::MessageTarget::Direct(alice_id),
93 format!("reply #{}", i),
94 );
95 let enc2 = b_chan.encrypt_message(&reply).unwrap();
96 let dec2 = a_chan.decrypt_message(&enc2).unwrap();
97 assert_eq!(dec2.sender, bob_id);
98 }
99 }
100
101 #[test]
102 fn test_message_content_types() {
103 let sender = PeerId::random();
104 let target = messaging::MessageTarget::Direct(PeerId::random());
105
106 let msg_text = messaging::Message::new(
107 sender,
108 target.clone(),
109 messaging::MessageContent::Text("hello".into()),
110 );
111 let bytes = msg_text.to_bytes().unwrap();
112 let decoded = messaging::Message::from_bytes(&bytes).unwrap();
113 assert_eq!(decoded.sender, sender);
114
115 let msg_binary = messaging::Message::new(
116 sender,
117 target.clone(),
118 messaging::MessageContent::Binary(vec![1, 2, 3, 4, 5]),
119 );
120 let bytes2 = msg_binary.to_bytes().unwrap();
121 let decoded2 = messaging::Message::from_bytes(&bytes2).unwrap();
122 assert_eq!(decoded2.sender, sender);
123 }
124}