From 6e37f70d55988282cf154e6a0948446c3da6cdae Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Tue, 20 Feb 2018 14:46:36 -0700 Subject: [PATCH] Test reorder attack --- src/log.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/log.rs b/src/log.rs index edb8e9e0ad..96da52eebc 100644 --- a/src/log.rs +++ b/src/log.rs @@ -164,6 +164,32 @@ mod tests { verify_slice_generic(verify_slice_seq); } + #[test] + fn test_reorder_attack() { + let zero = Sha256Hash::default(); + let one = hash(&zero); + + // First, verify UserData events + let mut end_hash = zero; + let events = [Event::UserDataKey(zero), Event::UserDataKey(one)]; + let mut entries: Vec = events + .iter() + .map(|event| { + let entry = next_entry(&end_hash, 0, event.clone()); + end_hash = entry.end_hash; + entry + }) + .collect(); + assert!(verify_slice(&entries, &zero)); // inductive step + + // Next, swap only two UserData events and ensure verification fails. + let event0 = entries[0].event.clone(); + let event1 = entries[1].event.clone(); + entries[0].event = event1; + entries[1].event = event0; + assert!(!verify_slice(&entries, &zero)); // inductive step + } + } #[cfg(all(feature = "unstable", test))]