aboutsummaryrefslogtreecommitdiff
path: root/src/zip/file/info.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/zip/file/info.rs')
-rw-r--r--src/zip/file/info.rs16
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;
2use crate::zip::{ZipError, ZipResult}; 2use crate::zip::{ZipError, ZipResult};
3use chrono::{DateTime, Local}; 3use chrono::{DateTime, Local};
4 4
5#[derive(Debug, PartialEq, Eq, Clone, Copy)] 5#[derive(Debug, PartialEq, Eq, Clone)]
6pub enum CompressionMethod { 6pub 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)]
32pub enum EncryptionMethod { 32pub enum EncryptionMethod {
33 None, 33 None,
34 Weak, 34 Weak(u8),
35 Unsupported, 35 Unsupported,
36} 36}
37 37
38impl EncryptionMethod { 38impl 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
54pub mod bit { 58pub 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,