diff --git a/src/cipher/aes/mod.rs b/src/cipher/aes/mod.rs index df56a66..4f43fe9 100644 --- a/src/cipher/aes/mod.rs +++ b/src/cipher/aes/mod.rs @@ -7,7 +7,7 @@ use itertools::Itertools; use crate::cipher::{aes::sbox::SBox, Block, BlockCipher, Key, Word}; -mod sbox; +pub mod sbox; /// https://en.wikipedia.org/wiki/AES_key_schedule#Round_constants const ROUND_CONSTANTS: [[u8; 4]; 10] = [ @@ -47,6 +47,12 @@ where [(); K / 8]: { sbox: SBox, } +impl<const K: usize, const B: usize> Default for AES<K, B> +where [(); K / 8]: +{ + fn default() -> Self { Self::new() } +} + /// Instead of arranging its bytes in a line (array), /// AES operates on a grid, specifically a 4x4 column-major array: /// @@ -183,7 +189,7 @@ where [(); K / 8]: { /// Instantiates a new `AES` instance according to `key_size` - this /// affects the number of rounds that the AES encryption will do. - fn new() -> Self { + pub fn new() -> Self { let num_rounds = match K { 128 => 10, 192 => 12, @@ -256,8 +262,8 @@ where [(); K / 8]: /// a(x) = 3x^3 + x^2 + x + 2. fn mix_columns(&mut self) { for col in self.state.0.iter_mut() { - let tmp = col.clone(); - let mut col_doubled = col.clone(); + let tmp = *col; + let mut col_doubled = *col; for (i, c) in col_doubled.iter_mut().enumerate() { let hi_bit = col[i] >> 7; @@ -296,7 +302,7 @@ where [(); K / 8]: // block size (Nb words) // num rounds (Nr) for i in key_len..(block_num_words * (self.num_rounds + 1)) { - let mut last = self.expanded_key.last().unwrap().clone(); + let mut last = *self.expanded_key.last().unwrap(); if i % key_len == 0 { self.rotate_word(&mut last);