--- /dev/null
+#![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)
+ }
+ }
+}