First commit.
[crypto_lab1.git] / src / main.rs
diff --git a/src/main.rs b/src/main.rs
new file mode 100644 (file)
index 0000000..e64323f
--- /dev/null
@@ -0,0 +1,56 @@
+extern crate openssl;
+
+use std::io;
+use std::os;
+
+mod crypto;
+mod command;
+mod client;
+mod server;
+
+/*
+TODO
+   * Comment stocker les clefs? à quels critères doivent elle répondre?
+   * 
+*/
+
+const PORT: u16 = 4221;
+
+fn print_usage() {
+   println!("{} <genkey> | ...", 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 {
+      match server::Server::new(PORT) {
+         Ok(mut server) => {
+            println!("Server started");
+            
+            match client::Client::new("127.0.0.1", PORT) {
+               Ok(mut client) => {
+                  client.start_tests();
+                  client.close();
+               },
+               Err(e) => { 
+                  println!("Unable to create a client. Error: {}", e);
+                  return
+               }
+            }         
+            
+            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)
+      }
+   }
+}