diff options
author | Jesse Luehrs <doy@tozt.net> | 2015-04-06 01:46:11 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2015-04-06 01:46:11 -0400 |
commit | cf5f54073a9494fbd0c44c54f2b1a29b1b87e642 (patch) | |
tree | 5ba6ce04e58d19fe179cb04e02d4bb7fc25bf301 | |
parent | 82fde31b637e72d381857e3e2cb669298073edd1 (diff) | |
download | matasano-cf5f54073a9494fbd0c44c54f2b1a29b1b87e642.tar.gz matasano-cf5f54073a9494fbd0c44c54f2b1a29b1b87e642.zip |
problem 24 part 2
-rw-r--r-- | src/crack.rs | 13 | ||||
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | tests/lib.rs | 9 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/crack.rs b/src/crack.rs index 396eb6b..39a8e1a 100644 --- a/src/crack.rs +++ b/src/crack.rs @@ -414,6 +414,19 @@ pub fn recover_16_bit_mt19937_key (ciphertext: &[u8], suffix: &[u8]) -> Option<u return None; } +pub fn recover_mt19937_key_from_time (token: &[u8]) -> Option<u32> { + let now = ::time::now().to_timespec().sec as u32; + for i in -500..500i32 { + let seed = (now as i32).wrapping_add(i) as u32; + let mut mt = MersenneTwister::from_seed(seed); + let test_token: Vec<u8> = mt.gen_iter().take(16).collect(); + if &test_token[..] == token { + return Some(seed); + } + } + return None; +} + fn crack_single_byte_xor_with_confidence (input: &[u8]) -> (u8, f64) { let mut min_diff = 100.0; let mut best_key = 0; @@ -40,3 +40,4 @@ pub use crack::crack_fixed_nonce_ctr_statistically; pub use crack::recover_mersenne_twister_seed_from_time; pub use crack::clone_mersenne_twister_from_output; pub use crack::recover_16_bit_mt19937_key; +pub use crack::recover_mt19937_key_from_time; diff --git a/tests/lib.rs b/tests/lib.rs index d38e3e3..3961b84 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -512,3 +512,12 @@ fn problem_24 () { ).unwrap(); assert_eq!(got, key); } + +#[test] +fn problem_24_part_2 () { + let seed = time::now().to_timespec().sec as u32; + let mut mt = matasano::MersenneTwister::from_seed(seed); + let token: Vec<u8> = mt.gen_iter().take(16).collect(); + let got = matasano::recover_mt19937_key_from_time(&token[..]).unwrap(); + assert_eq!(got, seed); +} |