64aef28e128a89381fd18f561f08c422dd12ef8e
[crypto_lab1.git] / src / main.rs
1 #![feature(macro_rules)]
2
3 extern crate openssl;
4 extern crate serialize;
5
6 use std::io;
7 use std::os;
8
9 use end_point::{ Client, Server };
10
11 mod crypto;
12 mod packet;
13 mod end_point;
14 mod oracle_machine;
15
16 const PORT: u16 = 4221;
17
18 fn print_usage() {
19 println!(
20 r"{} genkey | tests | oracle-weak | oracle-fixed
21 genkey: Generate a 256 bits key
22 tests: launch some tests between a client and a weak server
23 oracle-weak: launch a padding oracle attack against a weak server
24 oracle-fixed: launch a padding oracle attack against a fixed server",
25 os::args()[0]
26 );
27 }
28
29 fn main() {
30 let args = os::args();
31
32 if args.iter().any(|a| a.as_slice() == "--help" || a.as_slice() == "-h") {
33 print_usage();
34 } else if args.len() > 1 && args[1].as_slice() == "genkey" {
35 match crypto::generate_key(256 / 8) {
36 Ok(key) => println!("key: {}", key),
37 Err(e) => println!("Unable to generate a key. Error: {}", e)
38 }
39 } else {
40 println!("Starting server...");
41
42 match Server::new("::1", PORT) {
43 Ok(mut server) => {
44 println!("Server started");
45
46 if args.len() > 1 && args[1].as_slice() == "tests" {
47 Client::start_tests("::1", PORT);
48 }
49
50 println!("Press any key to quit");
51 io::stdin().read_line().ok().expect("Failed to read line");
52
53 server.close().ok().expect("Failed to close the server");
54 },
55 Err(e) =>
56 println!("Unable to create a new server. Error: {}", e)
57 }
58 }
59 }