X-Git-Url: http://git.euphorik.ch/?p=crypto_lab1.git;a=blobdiff_plain;f=lab1_rust%2Fsrc%2Fmain.rs;fp=lab1_rust%2Fsrc%2Fmain.rs;h=64aef28e128a89381fd18f561f08c422dd12ef8e;hp=0000000000000000000000000000000000000000;hb=ecdec5bf7022018eadf4a38b01890bbb3ab79c89;hpb=c9318a07ce0ec00f999ff17943b83048d536ecd1 diff --git a/lab1_rust/src/main.rs b/lab1_rust/src/main.rs new file mode 100644 index 0000000..64aef28 --- /dev/null +++ b/lab1_rust/src/main.rs @@ -0,0 +1,59 @@ +#![feature(macro_rules)] + +extern crate openssl; +extern crate serialize; + +use std::io; +use std::os; + +use end_point::{ Client, Server }; + +mod crypto; +mod packet; +mod end_point; +mod oracle_machine; + +const PORT: u16 = 4221; + +fn print_usage() { + println!( + r"{} genkey | tests | oracle-weak | oracle-fixed + genkey: Generate a 256 bits key + tests: launch some tests between a client and a weak server + oracle-weak: launch a padding oracle attack against a weak server + oracle-fixed: launch a padding oracle attack against a fixed server", + os::args()[0] + ); +} + +fn main() { + let args = os::args(); + + if args.iter().any(|a| a.as_slice() == "--help" || a.as_slice() == "-h") { + print_usage(); + } else if args.len() > 1 && args[1].as_slice() == "genkey" { + match crypto::generate_key(256 / 8) { + Ok(key) => println!("key: {}", key), + Err(e) => println!("Unable to generate a key. Error: {}", e) + } + } else { + println!("Starting server..."); + + match Server::new("::1", PORT) { + Ok(mut server) => { + println!("Server started"); + + if args.len() > 1 && args[1].as_slice() == "tests" { + Client::start_tests("::1", PORT); + } + + println!("Press any key to quit"); + io::stdin().read_line().ok().expect("Failed to read line"); + + server.close().ok().expect("Failed to close the server"); + }, + Err(e) => + println!("Unable to create a new server. Error: {}", e) + } + } +}