diff options
Diffstat (limited to 'src/zip/file/info.rs')
| -rw-r--r-- | src/zip/file/info.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/zip/file/info.rs b/src/zip/file/info.rs index f5d4d8a..599dcc3 100644 --- a/src/zip/file/info.rs +++ b/src/zip/file/info.rs | |||
| @@ -2,7 +2,7 @@ use crate::driver::ArchiveFileInfo; | |||
| 2 | use crate::zip::{ZipError, ZipResult}; | 2 | use crate::zip::{ZipError, ZipResult}; |
| 3 | use chrono::{DateTime, Local}; | 3 | use chrono::{DateTime, Local}; |
| 4 | 4 | ||
| 5 | #[derive(Debug, PartialEq, Eq, Clone, Copy)] | 5 | #[derive(Debug, PartialEq, Eq, Clone)] |
| 6 | pub enum CompressionMethod { | 6 | pub enum CompressionMethod { |
| 7 | Store, | 7 | Store, |
| 8 | Deflate, | 8 | Deflate, |
| @@ -28,18 +28,22 @@ impl CompressionMethod { | |||
| 28 | } | 28 | } |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | #[derive(Debug, PartialEq, Eq, Clone, Copy)] | 31 | #[derive(Debug, PartialEq, Eq, Clone)] |
| 32 | pub enum EncryptionMethod { | 32 | pub enum EncryptionMethod { |
| 33 | None, | 33 | None, |
| 34 | Weak, | 34 | Weak(u8), |
| 35 | Unsupported, | 35 | Unsupported, |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | impl EncryptionMethod { | 38 | impl EncryptionMethod { |
| 39 | pub(crate) fn from_bit_flag(bit_flag: BitFlag) -> EncryptionMethod { | 39 | pub(crate) fn from_bif_flag(bit_flag: BitFlag, crc: u32, dos_time: u16) -> EncryptionMethod { |
| 40 | match (bit_flag.is_encrypted(), bit_flag.is_strong_encryption()) { | 40 | match (bit_flag.is_encrypted(), bit_flag.is_strong_encryption()) { |
| 41 | (false, false) => EncryptionMethod::None, | 41 | (false, false) => EncryptionMethod::None, |
| 42 | (true, false) => EncryptionMethod::Weak, | 42 | (true, false) => EncryptionMethod::Weak(if bit_flag.is_has_data_descriptor() { |
| 43 | (dos_time >> 8) as u8 // Info-ZIP modification | ||
| 44 | } else { | ||
| 45 | (crc >> 24) as u8 | ||
| 46 | }), | ||
| 43 | (true, true) => EncryptionMethod::Unsupported, | 47 | (true, true) => EncryptionMethod::Unsupported, |
| 44 | _ => panic!("impossible"), | 48 | _ => panic!("impossible"), |
| 45 | } | 49 | } |
| @@ -52,7 +56,7 @@ pub struct BitFlag { | |||
| 52 | } | 56 | } |
| 53 | 57 | ||
| 54 | pub mod bit { | 58 | pub mod bit { |
| 55 | #[derive(Debug, PartialEq, Eq, Clone, Copy)] | 59 | #[derive(Debug, PartialEq, Eq, Clone)] |
| 56 | pub enum DeflateMode { | 60 | pub enum DeflateMode { |
| 57 | Normal, | 61 | Normal, |
| 58 | Maximum, | 62 | Maximum, |
