cryptopals

Matasano's cryptopals challenges (cryptopals.com).
Log | Files | Refs | README | LICENSE

commit 10cf862cee4e13cf11557802ef8f56342b3e3f1b
parent f6818cd7287714e0dc1cb85a43fd0226bb30d3cd
Author: Jared Tobin <jared@jtobin.ca>
Date:   Wed, 31 May 2017 21:31:27 +1200

WIP.

Diffstat:
Alib/ecb_detector/Cargo.lock | 23+++++++++++++++++++++++
Alib/ecb_detector/Cargo.toml | 8++++++++
Alib/ecb_detector/src/main.rs | 39+++++++++++++++++++++++++++++++++++++++
3 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/lib/ecb_detector/Cargo.lock b/lib/ecb_detector/Cargo.lock @@ -0,0 +1,23 @@ +[root] +name = "ecb_detector" +version = "0.1.0" +dependencies = [ + "base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "base64" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "byteorder" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum base64 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30e93c03064e7590d0466209155251b90c22e37fab1daf2771582598b5827557" +"checksum byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c40977b0ee6b9885c9013cd41d9feffdd22deb3bb4dc3a71d901cc7a77de18c8" diff --git a/lib/ecb_detector/Cargo.toml b/lib/ecb_detector/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "ecb_detector" +version = "0.1.0" +authors = ["Jared Tobin <jared@jtobin.ca>"] + +[dependencies] + +base64 = "~0.5.0" diff --git a/lib/ecb_detector/src/main.rs b/lib/ecb_detector/src/main.rs @@ -0,0 +1,39 @@ + +extern crate base64; + +use std::collections::HashSet; +use std::io::{self, Read}; + +fn ecb_detector(encoded: &[u8], size: usize) -> bool { + let mut blocks = HashSet::new(); + + for block in encoded.chunks(size) { + if blocks.contains(block) { + return true; + } + + blocks.insert(block); + } + + false +} + +fn main() { + let mut buffer = String::new(); + + io::stdin().read_to_string(&mut buffer).expect("ecb_decoder"); + + let decoded = match base64::decode(&buffer) { + Ok(val) => val, + Err(err) => panic!("{}", err) + }; + + let ecb = ecb_detector(&decoded[..], 16); + + if ecb { + println!("likely ecb"); + } else { + println!("likely cbc"); + } +} +