use S_BOX;
pub fn rot_word(word: &[u8]) -> Vec<u8> {
assert_eq!(word.len(), 4);
[&word[1..], &[word[0]]].concat()
}
pub fn sub_word(word: &[u8]) -> Vec<u8> {
assert_eq!(word.len(), 4);
word.iter().map(|byte| S_BOX[*byte as usize]).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rot_word_rotates_word() {
let word: &[u8] = &[0, 1, 2, 3];
let expected_word: &[u8] = &[1, 2, 3, 0];
let actual_word = rot_word(word);
assert_eq!(actual_word.as_slice(), expected_word);
}
#[test]
fn sub_word_substitutes_word() {
let word: &[u8] = &[0, 1, 2, 3];
let expected_word: &[u8] = &[0x63, 0x7c, 0x77, 0x7b];
let actual_word = sub_word(word);
assert_eq!(actual_word.as_slice(), expected_word);
}
}