diff --git a/src/tea3.rs b/src/tea3.rs index e90b7ff..1e63864 100644 --- a/src/tea3.rs +++ b/src/tea3.rs @@ -66,6 +66,17 @@ impl Tea3 { r7 } + /// outputs the next cipher byte + pub fn next_byte(&mut self) -> u8 { + let mut kout: u8; + for _i in 1..19 { + kout = self.step_key_register(); + self.step_state_register(kout); + } + kout = self.step_key_register(); + self.step_state_register(kout) + } + pub fn key_register(&self) -> &[u8] { &self.key_register } @@ -318,4 +329,27 @@ mod tests { // 7=0, 8=0, 15=1, 16=1 -> 0011 = 0x3 assert_eq!(out[4], 0b0011); } + + #[test] + fn test_state_register_step() { + let mut tea3 = Tea3::new(vec![0; 10], vec![1, 2, 3, 4, 5, 6, 7, 8]); + + let kout = 0xAA; + + let r7_before = tea3.state_register()[7]; + + let out = tea3.step_state_register(kout); + + assert_eq!(out, r7_before); + + let s = tea3.state_register(); + + assert_eq!(s[1], 1); + assert_eq!(s[2], 2); + assert_eq!(s[3], 3); + assert_eq!(s[4], 4); + + assert_ne!(s[0], 1); + assert_ne!(s[5], 5); + } }