From 35c2b3479f4cb0e1df4feb80ce3f111945f675fe Mon Sep 17 00:00:00 2001 From: Dennis Schwerdel Date: Mon, 19 Oct 2020 23:31:02 +0200 Subject: [PATCH] Finish crypto tests --- src/crypto/rotate.rs | 88 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 3 deletions(-) diff --git a/src/crypto/rotate.rs b/src/crypto/rotate.rs index 6311239..3d16e0c 100644 --- a/src/crypto/rotate.rs +++ b/src/crypto/rotate.rs @@ -318,9 +318,91 @@ mod tests { assert_eq!(key.use_for_sending, true); } - // TODO: test duplication + #[test] + fn test_duplication() { + let mut out1 = MsgBuffer::new(8); + let mut out2 = MsgBuffer::new(8); - // TODO: test lost message + let mut node1 = RotationState::new(true, &mut out1).unwrap(); + let mut node2 = RotationState::new(false, &mut out2).unwrap(); + let msg1 = out1.clone().msg().unwrap(); + let msg1_copy = out1.msg().unwrap(); + node2.process_message(msg1); + assert!(node2.process_message(msg1_copy).is_none()); + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg2 = out2.clone().msg().unwrap(); + let msg2_copy = out2.msg().unwrap(); + // Message 2 + assert!(node1.process_message(msg2).is_some()); + assert!(node1.process_message(msg2_copy).is_none()); + // Cycle 2 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg1 = out1.clone().msg().unwrap(); + let msg1_copy = out1.msg().unwrap(); + // Message 3 + assert!(node2.process_message(msg1).is_some()); + assert!(node2.process_message(msg1_copy).is_none()); + // Cycle 3 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg2 = out2.clone().msg().unwrap(); + let msg2_copy = out2.msg().unwrap(); + // Message 4 + assert!(node1.process_message(msg2).is_some()); + assert!(node1.process_message(msg2_copy).is_none()); + } - // TODO: test potential attack: reflect message back to sender + #[test] + fn test_lost_message() { + let mut out1 = MsgBuffer::new(8); + let mut out2 = MsgBuffer::new(8); + + let mut node1 = RotationState::new(true, &mut out1).unwrap(); + let mut node2 = RotationState::new(false, &mut out2).unwrap(); + let _msg1 = out1.msg().unwrap(); + // drop msg1 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + assert!(out2.msg().is_none()); + // Cycle 2 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg1 = out1.msg().unwrap(); + // Message 3 + assert!(node2.process_message(msg1).is_none()); + // Cycle 3 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg2 = out2.msg().unwrap(); + // Message 4 + assert!(node1.process_message(msg2).is_some()); + } + + #[test] + fn test_reflect_back() { + let mut out1 = MsgBuffer::new(8); + let mut out2 = MsgBuffer::new(8); + + let mut node1 = RotationState::new(true, &mut out1).unwrap(); + let mut node2 = RotationState::new(false, &mut out2).unwrap(); + let msg1 = out1.msg().unwrap(); + assert!(node1.process_message(msg1).is_none()); + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + assert!(out2.msg().is_none()); + // Cycle 2 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg1 = out1.msg().unwrap(); + // Message 3 + assert!(node2.process_message(msg1).is_none()); + // Cycle 3 + node1.cycle(&mut out1).unwrap(); + node2.cycle(&mut out2).unwrap(); + let msg2 = out2.msg().unwrap(); + // Message 4 + assert!(node1.process_message(msg2).is_some()); + } }