From 1e118199f7b338c009c202f201d84bd5aff87d4b Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Thu, 13 Jun 2024 19:24:54 -0700 Subject: [PATCH] fix: Incorrect header when adding AES-encrypted files --- src/write.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/write.rs b/src/write.rs index 4f75bcd0..fb77822b 100644 --- a/src/write.rs +++ b/src/write.rs @@ -847,9 +847,9 @@ impl ZipWriter { #[allow(unused_mut)] let mut aes_extra_data_start = 0; #[cfg(feature = "aes-crypto")] - if let Some(EncryptWith::Aes { .. }) = options.encrypt_with { - const AES_DUMMY_EXTRA_DATA: [u8; 11] = [ - 0x01, 0x99, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + if let Some(EncryptWith::Aes { mode, .. }) = options.encrypt_with { + let aes_dummy_extra_data: [u8; 11] = [ + 0x01, 0x99, 0x07, 0x00, 0x02, 0x00, 0x41, 0x45, mode as u8, 0x00, 0x00, ]; let extra_data = extra_field.get_or_insert_with(Default::default); @@ -861,7 +861,7 @@ impl ZipWriter { } }; - if extra_data.len() + AES_DUMMY_EXTRA_DATA.len() > u16::MAX as usize { + if extra_data.len() + aes_dummy_extra_data.len() > u16::MAX as usize { let _ = self.abort_file(); return Err(InvalidArchive("Extra data field is too large")); } @@ -870,7 +870,7 @@ impl ZipWriter { // We write zero bytes for now since we need to update the data when finishing the // file. - extra_data.write_all(&AES_DUMMY_EXTRA_DATA)?; + extra_data.write_all(&aes_dummy_extra_data)?; } {