Add a test to ensure witness data continues to be hashed
This commit is contained in:
18
src/entry.rs
18
src/entry.rs
@ -113,6 +113,7 @@ pub fn next_tick(start_hash: &Hash, num_hashes: u64) -> Entry {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use chrono::prelude::*;
|
||||||
use entry::create_entry;
|
use entry::create_entry;
|
||||||
use event::Event;
|
use event::Event;
|
||||||
use hash::hash;
|
use hash::hash;
|
||||||
@ -146,6 +147,23 @@ mod tests {
|
|||||||
assert!(!e0.verify(&zero));
|
assert!(!e0.verify(&zero));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_witness_reorder_attack() {
|
||||||
|
let zero = Hash::default();
|
||||||
|
|
||||||
|
// First, verify entries
|
||||||
|
let keypair = KeyPair::new();
|
||||||
|
let tr0 = Event::new_timestamp(&keypair, Utc::now());
|
||||||
|
let tr1 = Event::new_signature(&keypair, Default::default());
|
||||||
|
let mut e0 = create_entry(&zero, 0, vec![tr0.clone(), tr1.clone()]);
|
||||||
|
assert!(e0.verify(&zero));
|
||||||
|
|
||||||
|
// Next, swap two witness events and ensure verification fails.
|
||||||
|
e0.events[0] = tr1; // <-- attack
|
||||||
|
e0.events[1] = tr0;
|
||||||
|
assert!(!e0.verify(&zero));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_next_tick() {
|
fn test_next_tick() {
|
||||||
let zero = Hash::default();
|
let zero = Hash::default();
|
||||||
|
Reference in New Issue
Block a user