diff --git a/src/tea3.rs b/src/tea3.rs index b347c9b..633111a 100644 --- a/src/tea3.rs +++ b/src/tea3.rs @@ -394,4 +394,26 @@ mod tests { assert_eq!(plaintext.to_vec(), decrypted); } + + #[test] + fn test_non_linearity() { + let key = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + let state = vec![0; 8]; + let mut cipher = Tea3::new(key, state); + cipher.init(); + + let mut keystream = Vec::with_capacity(72); + + for _ in 0..72 { + keystream.push(cipher.next_byte()); + } + + let poly = Lfsr::berlekamp_massey(&keystream); + + + let history = &keystream[keystream.len() - (poly.len() - 1)..]; + let predicted = Lfsr::predict_next_from_poly(history, &poly); + + assert_ne!(predicted, cipher.next_byte()); + } }