eck 0.0.4

A fast, simple file & folder encryption manager, written in Rust
use gradient_bar::GradientProgressBar;

use crate::{
    context::EnkryptitContext,
    encryption::{
        chunk_job::{decrypt::DecryptChunkJob, encrypt::EncryptChunkJob},
        folder_encryption::intern_archive_encryption::{
            EntryDecryptionContext, treat_entry_decryption, treat_entry_encryption,
        },
    },
    errors::EnkryptitError,
    key::EnkryptitKey,
    metadatas::FileEntry,
    parallelism::pool::EnkryptitPool,
};

pub fn encrypt_folder_single(
    folder_path: &str,
    key: EnkryptitKey,
    entries: &mut Vec<FileEntry>,
    offset: u64,
    context: &mut EnkryptitContext,
    archive_path: &str,
) -> Result<(), EnkryptitError> {
    let mut current_offset = offset;
    let mut pool: Option<EnkryptitPool<EncryptChunkJob>> = None;

    let pb = GradientProgressBar::with_total_steps(entries.len() as u64, "Encrypting folder...");

    for entry in entries {
        current_offset += treat_entry_encryption(
            &mut pool,
            folder_path,
            entry,
            current_offset,
            context,
            archive_path,
            &key,
        )?;
        pb.inc(1);
    }

    pb.finish();

    Ok(())
}

pub fn decrypt_folder_single(
    archive_path: &str,
    dest_folder: &str,
    entries: &Vec<FileEntry>,
    key: EnkryptitKey,
    payload_offset: u64,
    version: u8,
    context: &mut EnkryptitContext,
) -> Result<(), EnkryptitError> {
    let mut pool: Option<EnkryptitPool<DecryptChunkJob>> = None;

    let pb = GradientProgressBar::with_total_steps(entries.len() as u64, "Decrypting archive...");

    for entry in entries {
        treat_entry_decryption(
            &mut pool,
            EntryDecryptionContext {
                version,
                dest_folder,
                entry,
                context,
                archive_path,
                key: &key,
                payload_offset,
            },
        )?;
        pb.inc(1);
    }

    pb.finish();

    Ok(())
}