/****************************************************************************** * This program implements the XOR stream cipher. * * Copyright © 2021 Richard Lesh. All rights reserved. *****************************************************************************/ #![allow(dead_code)] #![allow(non_snake_case)] #![allow(non_upper_case_globals)] #[macro_use] mod utils; use std::env; use std::io::Read; use std::process; fn process_file(from_filespec:&str, to_filespec:&str, password:&str) -> Result<(), utils::CustomError> { let mut c:u8; let plen:isize = strlen(password); let mut count:isize = 0; while (c = utils::getbyte(&mut ifh)) != -1 { let mut x:isize = c ^ password[count % plen]; ofh.write(&[x])?; count += 1; } return Ok(()); } fn main() { let args: Vec = env::args().collect(); if args.len() != 4 { println!("Syntax: XORCipher {{fromFilespec}} {{toFilespec}} {{password}}"); process::exit(1); } let mut from_filespec:String = args[1]; let mut to_filespec:String = args[2]; let mut password:String = args[3]; match (|| -> Result<(), utils::CustomError>{ process_file(&from_filespec, &to_filespec, &password)?; return Ok(()); })() { Ok(()) => {}, Err(ex) => { match ex { utils::CustomError::IOError(ex) => { println!("Error: {}", format!("{}", ex)); } } } }; }