use crate::{zest_block::ZestBlock, zest_digest::zest_digest, zest_hash::zest4096};
pub fn zest_enc(
padded_text: Vec<ZestBlock>,
key: ZestBlock,
init_ctr_enc: Option<ZestBlock>,
init_result_dgst: Option<ZestBlock>,
init_ctr_dgst: Option<ZestBlock>,
) -> Vec<ZestBlock> {
let mut cipher_text = vec![];
let mut counter = init_ctr_enc.unwrap_or_else(ZestBlock::new);
for text_block in padded_text.clone() {
let mut cipher_block = zest4096(key ^ counter);
cipher_block ^= text_block;
counter.increment_block();
cipher_text.push(cipher_block);
}
let digest = zest_digest(padded_text, init_result_dgst, init_ctr_dgst);
let cipher_stream = zest4096(key ^ counter);
cipher_text.push(digest ^ cipher_stream);
cipher_text
}