Răsfoiți Sursa

x3dh: Confirm out-of-order is working.

Luther Blissett 3 ani în urmă
părinte
comite
b46f64bf78
1 a modificat fișierele cu 18 adăugiri și 0 ștergeri
  1. 18 0
      script/research/x3dh/src/main.rs

+ 18 - 0
script/research/x3dh/src/main.rs

@@ -603,6 +603,24 @@ fn main() -> Result<()> {
     let mut bob_ratchet_state_clone = bob_ratchet_state.clone();
     let plaintext = bob_ratchet_state_clone.ratchet_decrypt(header, &ciphertext, &[]);
     assert_eq!(plaintext, message_to_bob);
+    bob_ratchet_state = bob_ratchet_state_clone;
+
+    // Let's try out of order
+    let message_to_bob1 = b"hello";
+    let message_to_bob2 = b"jello";
+    let (header1, ciphertext1) = alice_ratchet_state.ratchet_encrypt(message_to_bob1, &[]);
+    let (header2, ciphertext2) = alice_ratchet_state.ratchet_encrypt(message_to_bob2, &[]);
+
+    // Slow Bob
+    let mut bob_ratchet_state_clone = bob_ratchet_state.clone();
+    let plaintext = bob_ratchet_state_clone.ratchet_decrypt(header2, &ciphertext2, &[]);
+    assert_eq!(plaintext, message_to_bob2);
+    bob_ratchet_state = bob_ratchet_state_clone;
+
+    let mut bob_ratchet_state_clone = bob_ratchet_state.clone();
+    let plaintext = bob_ratchet_state_clone.ratchet_decrypt(header1, &ciphertext1, &[]);
+    assert_eq!(plaintext, message_to_bob1);
+    //bob_ratchet_state = bob_ratchet_state_clone;
 
     Ok(())
 }