diff options
author | Jesse Luehrs <doy@tozt.net> | 2015-05-13 19:01:17 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2015-05-13 19:01:17 -0400 |
commit | 14b532933eaef71ead0d716b7b23db3c22df00d6 (patch) | |
tree | ab1a0e8d3d5ab6f08f2adfc308246b39c9ada480 /src/crack.rs | |
parent | a8143dc0ec29bff92787be1abfa580109cca139c (diff) | |
download | matasano-14b532933eaef71ead0d716b7b23db3c22df00d6.tar.gz matasano-14b532933eaef71ead0d716b7b23db3c22df00d6.zip |
problem 29
Diffstat (limited to 'src/crack.rs')
-rw-r--r-- | src/crack.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/crack.rs b/src/crack.rs index 5b387bb..a05155f 100644 --- a/src/crack.rs +++ b/src/crack.rs @@ -474,6 +474,28 @@ pub fn crack_cbc_iv_key<F1, F2> (encrypt: &F1, verify: &F2) -> Vec<u8> where F1: } } +pub fn crack_sha1_mac_length_extension (input: &[u8], mac: [u8; 20], extension: &[u8]) -> Vec<(Vec<u8>, [u8; 20])> { + let mut sha1_state: [u32; 5] = unsafe { ::std::mem::transmute(mac) }; + for word in sha1_state.iter_mut() { + *word = u32::from_be(*word); + } + + (0..100).map(|i| { + let new_input: Vec<u8> = input + .iter() + .chain(::sha1::sha1_padding(i + input.len() as u64).iter()) + .chain(extension.iter()) + .map(|x| *x) + .collect(); + let new_hash = ::sha1::sha1_with_state( + extension, + sha1_state, + i + new_input.len() as u64 + ); + (new_input, new_hash) + }).collect() +} + fn crack_single_byte_xor_with_confidence (input: &[u8]) -> (u8, f64) { let mut min_diff = 100.0; let mut best_key = 0; |