From 4213d57bdf70b6339bc4affdc751c296f9aa14f0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Tue, 7 Apr 2015 01:05:28 -0400 Subject: problem 25 --- tests/set4.rs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/set4.rs (limited to 'tests') diff --git a/tests/set4.rs b/tests/set4.rs new file mode 100644 index 0000000..3967f85 --- /dev/null +++ b/tests/set4.rs @@ -0,0 +1,50 @@ +extern crate matasano; +extern crate rand; + +use rand::Rng; + +mod util; + +#[test] +fn problem_25 () { + let key = util::random_aes_128_key(); + let nonce: u64 = rand::thread_rng().gen(); + let plaintext = util::read("data/25.txt"); + + let ciphertext = matasano::aes_128_ctr(&plaintext[..], &key[..], nonce); + let edit = |ciphertext: &[u8], offset: usize, newtext: &[u8]| { + let block_start_number = offset / 16; + let block_start = block_start_number * 16; + let block_end_number = (offset + newtext.len() - 1) / 16; + let block_end = std::cmp::min( + (block_end_number + 1) * 16, + ciphertext.len() + ); + let mut plaintext = matasano::aes_128_ctr_with_counter( + &ciphertext[block_start..block_end], + &key[..], + nonce, + (offset / 16) as u64 + ); + for i in 0..newtext.len() { + plaintext[offset - block_start + i] = newtext[i]; + } + let new_ciphertext = matasano::aes_128_ctr_with_counter( + &plaintext[..], + &key[..], + nonce, + (offset / 16) as u64 + ); + + return ciphertext + .iter() + .take(block_start) + .chain(new_ciphertext.iter()) + .chain(ciphertext.iter().skip(block_end)) + .map(|x| *x) + .collect(); + }; + + let got = matasano::crack_aes_128_ctr_random_access(&ciphertext[..], edit); + assert_eq!(&got[..], &plaintext[..]); +} -- cgit v1.2.3-54-g00ecf