1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
mod encryption; use std::fs::File; use std::path::Path; use std::ffi::OsStr; use std::io::{ self, Read, Write }; use crate::encryption::*; fn write_file(filename: &OsStr, data: &Vec<u8>) -> Result<(), io::Error> { let mut file = File::create(filename)?; file.write_all(data)?; Ok(()) } pub fn encrypt_file( input_filename: &Path, output_filename: &OsStr, password: &Vec<u8> ) -> Result<(), io::Error> { assert!(input_filename.is_file()); let mut input_data = Vec::new(); File::open(input_filename)?.read_to_end(&mut input_data)?; let (encrypted_data, iv) = encryption::encrypt_data(&input_data, &password) .expect("Encryption failed!"); let write_data = [&iv[..], &encrypted_data[..]].concat(); write_file(output_filename, &write_data)?; Ok(()) } pub fn decrypt_file( input_filename: &Path, output_filename: &OsStr, password: &Vec<u8> ) -> Result<(), io::Error> { assert!(input_filename.is_file()); let mut input_data = Vec::new(); let mut iv = [0; IV_SIZE as usize]; let mut file = File::open(input_filename)?; file.read(&mut iv)?; file.read_to_end(&mut input_data)?; let decrypted_data = encryption::decrypt_data(&input_data, &password, &iv) .expect("Decryption failed!"); write_file(output_filename, &decrypted_data)?; Ok(()) }