@@ -198,3 +198,48 @@ mod real_chachapoly {
198198}
199199
200200pub use self :: real_chachapoly:: ChaCha20Poly1305 ;
201+
202+ mod tests {
203+ #[ test]
204+ fn check_chacha_compat_old_to_new ( ) {
205+ let data_encryption_key = [ 42u8 ; 32 ] ;
206+ let mut nonce = [ 0u8 ; 12 ] ;
207+ nonce[ 4 ..] . copy_from_slice ( & [ 48u8 ; 8 ] ) ;
208+ let aad = b"asdf" ;
209+
210+ let mut old_cipher = super :: ChaCha20Poly1305 :: new ( & data_encryption_key, & nonce, aad) ;
211+
212+ let mut tag = [ 0u8 ; 16 ] ;
213+ let mut very_secret_data = vec ! [ 89u8 ; 128 ] ;
214+ let expected_very_secret_data = very_secret_data. clone ( ) ;
215+ old_cipher. encrypt_inplace ( & mut very_secret_data, & mut tag) ;
216+
217+ let new_key = chacha20_poly1305:: Key :: new ( data_encryption_key) ;
218+ let new_nonce = chacha20_poly1305:: Nonce :: new ( nonce) ;
219+ let new_cipher = chacha20_poly1305:: ChaCha20Poly1305 :: new ( new_key, new_nonce) ;
220+
221+ new_cipher. decrypt ( & mut very_secret_data, tag, Some ( aad) ) . unwrap ( ) ;
222+ assert_eq ! ( very_secret_data, expected_very_secret_data) ;
223+ }
224+
225+ #[ test]
226+ fn check_chacha_compat_new_to_old ( ) {
227+ let data_encryption_key = [ 42u8 ; 32 ] ;
228+ let mut nonce = [ 0u8 ; 12 ] ;
229+ nonce[ 4 ..] . copy_from_slice ( & [ 48u8 ; 8 ] ) ;
230+ let aad = b"asdf" ;
231+
232+ let new_key = chacha20_poly1305:: Key :: new ( data_encryption_key. clone ( ) ) ;
233+ let new_nonce = chacha20_poly1305:: Nonce :: new ( nonce. clone ( ) ) ;
234+ let new_cipher = chacha20_poly1305:: ChaCha20Poly1305 :: new ( new_key, new_nonce) ;
235+
236+ let mut very_secret_data = vec ! [ 89u8 ; 128 ] ;
237+ let expected_very_secret_data = very_secret_data. clone ( ) ;
238+ let tag = new_cipher. encrypt ( & mut very_secret_data, Some ( aad) ) ;
239+
240+ let mut old_cipher = super :: ChaCha20Poly1305 :: new ( & data_encryption_key, & nonce, aad) ;
241+
242+ old_cipher. decrypt_inplace ( & mut very_secret_data, & tag) . unwrap ( ) ;
243+ assert_eq ! ( very_secret_data, expected_very_secret_data) ;
244+ }
245+ }
0 commit comments