From cc18a545a87ca616f05114d174690e5cc9614669 Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Tue, 16 Jul 2024 17:24:33 +0900 Subject: Optimize encryption - Add archive for testing encryption of compressed files - Implement incorrect password check - Use custom crc32 function --- tests/files/archive_passwd.zip | Bin 200 -> 1059 bytes tests/zip.rs | 40 ++++++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/files/archive_passwd.zip b/tests/files/archive_passwd.zip index 700a343..291bd12 100644 Binary files a/tests/files/archive_passwd.zip and b/tests/files/archive_passwd.zip differ diff --git a/tests/zip.rs b/tests/zip.rs index 4f0c985..d02e96e 100644 --- a/tests/zip.rs +++ b/tests/zip.rs @@ -4,15 +4,38 @@ use std::io::{Read, Seek, SeekFrom}; #[test] fn test_zip_passwd() { let mut archive = Archive::::read_from_file("tests/files/archive_passwd.zip").unwrap(); - let mut f = archive - .get_file_reader_by_index_with_password(0, "passwd") - .unwrap(); - let mut data = String::new(); - f.read_to_string(&mut data).unwrap(); - assert_eq!(data, "test file data"); + + assert_eq!(archive.comment(), "archive comment"); + assert_eq!( + archive + .files() + .iter() + .map(|f| &f.name) + .collect::>(), + vec!["store", "deflate", "bzip"] + ); + + assert!(archive.get_file_reader_by_name("store").is_err()); + assert!(archive + .get_file_reader_by_name_with_password("store", b"wrong_passwd") + .is_err()); + + for (name, check_data) in [ + ("store", "1e643774f40510e37c6f3c451d9d"), + ("deflate", "a70aff4b6b2754ad47852503236a"), + ("bzip", "f7085f4f8ecc512a8c2c3cbe8227"), + ] { + let mut f = archive + .get_file_reader_by_name_with_password(name, b"passwd") + .unwrap(); + let mut data = String::new(); + f.read_to_string(&mut data).unwrap(); + assert_eq!(&data[..24], "test encrypted file data"); + assert_eq!(&data[172..], check_data); + } } -// #[test] +#[test] fn test_zip() { let mut archive = Archive::::read_from_file("tests/files/archive.zip").unwrap(); @@ -54,7 +77,7 @@ fn test_zip() { f.seek(SeekFrom::Start(7)).unwrap(); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); - f.seek(SeekFrom::End(-100)).unwrap_err(); + assert!(f.seek(SeekFrom::End(-100)).is_err()); assert_eq!(f.seek(SeekFrom::Current(0)).unwrap(), 7); assert_eq!(f.seek(SeekFrom::Start(100)).unwrap(), 14); @@ -64,5 +87,6 @@ fn test_zip() { let mut data = String::new(); f.read_to_string(&mut data).unwrap(); assert_eq!(data, "test file data"); + assert!(!f.is_seekable() || f.info().name == "store") } } -- cgit v1.2.3