Add the report.
[crypto_lab1.git] / lab1_rust / src / main.rs
diff --git a/lab1_rust/src/main.rs b/lab1_rust/src/main.rs
new file mode 100644 (file)
index 0000000..64aef28
--- /dev/null
@@ -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)
+      }
+   }
+}