From a83767f9fbd51df654901b52bdba7838f6a10bf9 Mon Sep 17 00:00:00 2001 From: Igor Tolmachev Date: Tue, 16 Jul 2024 01:59:53 +0900 Subject: Add traditional PKWARE decryption. - Compression and encryption may not work together - Password check is not yet implemented - Unoptimized crc32 function --- src/archive.rs | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) (limited to 'src/archive.rs') diff --git a/src/archive.rs b/src/archive.rs index e17db80..73c515c 100644 --- a/src/archive.rs +++ b/src/archive.rs @@ -48,11 +48,31 @@ where self.get_file_info_by_index(self.get_file_index(name)?) } + fn get_file_reader_by_index_with_optional_password<'d>( + &'d mut self, + index: usize, + password: Option<&str>, + ) -> ArchiveResult>, D::Error> { + Ok(ArchiveFile::new( + self.driver.get_file_reader(index, password)?, + )) + } + + #[inline] pub fn get_file_reader_by_index<'d>( &'d mut self, index: usize, ) -> ArchiveResult>, D::Error> { - Ok(ArchiveFile::new(self.driver.get_file_reader(index)?)) + self.get_file_reader_by_index_with_optional_password(index, None) + } + + #[inline] + pub fn get_file_reader_by_index_with_password<'d>( + &'d mut self, + index: usize, + password: &str, + ) -> ArchiveResult>, D::Error> { + self.get_file_reader_by_index_with_optional_password(index, Some(password)) } #[inline] @@ -60,7 +80,19 @@ where &'d mut self, name: &str, ) -> ArchiveResult>, D::Error> { - self.get_file_reader_by_index(self.get_file_index(name)?) + self.get_file_reader_by_index_with_optional_password(self.get_file_index(name)?, None) + } + + #[inline] + pub fn get_file_reader_by_name_with_password<'d>( + &'d mut self, + name: &str, + password: &str, + ) -> ArchiveResult>, D::Error> { + self.get_file_reader_by_index_with_optional_password( + self.get_file_index(name)?, + Some(password), + ) } } -- cgit v1.2.3