use std::env; use std::path::PathBuf; extern crate encryptfile; use encryptfile as ef; fn main() { let args: Vec<_> = env::args().collect(); if args.len() != 3 { println!("Usage: {} filename", args[0]); return; } let in_mode = args[1].to_owned(); let in_file = args[2].to_owned(); match PathBuf::from(&in_file).metadata() { Err(e) => panic!("Error reading file: {}", e), Ok(md) => println!("Input file size is: {}", md.len()) } println!("Mode: {}", &in_mode); let mut c = ef::Config::new(); c.buffer_size(1048576*1) .password(ef::PasswordType::Text("swordfish".to_owned(), ef::scrypt_defaults())) .input_stream(ef::InputStream::File(in_file.to_owned())); match in_mode.as_ref() { "encrypt" => { let mut out_file = PathBuf::from(&in_file).file_name().unwrap().to_str().unwrap().to_owned(); out_file.push_str(".enc"); c.output_stream(ef::OutputStream::File(out_file.to_owned())); c.encrypt(); }, "decrypt" => { let out_file = PathBuf::from(&in_file).file_name().unwrap().to_str().unwrap().to_owned(); let out_file = out_file.replace(".enc", ""); c.add_output_option(ef::OutputOption::AllowOverwrite); c.output_stream(ef::OutputStream::File(out_file.to_owned())); c.decrypt(); }, _ => panic!("unsupported mode: {}", in_mode) } match ef::process(&c) { Err(e) => panic!("Error: {:?}", e), Ok(_) => println!("Done") } }