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/zip/driver.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/zip/driver.rs') diff --git a/src/zip/driver.rs b/src/zip/driver.rs index 0905d9a..87f9c1a 100644 --- a/src/zip/driver.rs +++ b/src/zip/driver.rs @@ -3,7 +3,8 @@ use crate::utils::ReadUtils; use crate::zip::cp437::FromCp437; use crate::zip::structs::{deserialize, Cdr, Eocdr, Eocdr64, Eocdr64Locator, ExtraHeader}; use crate::zip::{ - BitFlag, CompressionMethod, ZipError, ZipFileInfo, ZipFileReader, ZipFileWriter, ZipResult, + BitFlag, CompressionMethod, EncryptionMethod, ZipError, ZipFileInfo, ZipFileReader, + ZipFileWriter, ZipResult, }; use chrono::{DateTime, Local, NaiveDate, NaiveDateTime, NaiveTime}; use std::collections::HashMap as Map; @@ -220,6 +221,7 @@ impl ArchiveRead for Zip { indexes.insert(name.clone(), i); files.push(ZipFileInfo::new( CompressionMethod::from_struct_id(cdr.compression_method)?, + EncryptionMethod::from_bit_flag(bit_flag), bit_flag, mtime, atime, @@ -256,10 +258,15 @@ impl ArchiveRead for Zip { self.files.get(index).ok_or(ZipError::FileNotFound.into()) } - fn get_file_reader<'d>(&'d mut self, index: usize) -> ZipResult> { + fn get_file_reader<'d>( + &'d mut self, + index: usize, + password: Option<&str>, + ) -> ZipResult> { Ok(ZipFileReader::new( &mut self.io, self.files.get(index).ok_or(ZipError::FileNotFound)?, + password, )?) } } -- cgit v1.2.3