@@ -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