kuznechik/algorithms/
alg_ecb.rs1use super::Kuznechik;
2use crate::types::mut_cast_unchecked;
3use crate::transforms::{addition_block128_2, addition_rev_block_2, encrypt_block, decrypt_block};
4use crate::key_store::KeyStore;
5
6pub struct AlgEcb<'k> {
7 kuz: &'k KeyStore
8}
9
10impl<'k> Kuznechik<'k> for AlgEcb<'k> {
11 fn new(kuz: &'k KeyStore) -> Self {
12 AlgEcb { kuz }
13 }
14
15 fn set_gamma(&mut self, _gamma: Vec<u8>) { }
16
17 fn encrypt(&mut self, mut data: Vec<u8>) -> Vec<u8> {
18 addition_block128_2(&mut data);
19
20 let count_blocks = data.len() / 16;
21
22 for i in 0..count_blocks {
23 encrypt_block(mut_cast_unchecked(&mut data[i*16 .. (i+1)*16]), &self.kuz.keys);
24 }
25 data
26 }
27
28 fn decrypt(&mut self, mut data: Vec<u8>) -> Vec<u8> {
29 let count_blocks = data.len() / 16;
30
31 for i in 0..count_blocks {
32 decrypt_block(mut_cast_unchecked(&mut data[i*16 .. (i+1)*16]), &self.kuz.keys);
33 }
34
35 addition_rev_block_2(&mut data);
36 data
37 }
38}