diff --git a/src/SharpCompress/Common/Zip/ZipFilePart.cs b/src/SharpCompress/Common/Zip/ZipFilePart.cs index ed0cc568..4309aa83 100644 --- a/src/SharpCompress/Common/Zip/ZipFilePart.cs +++ b/src/SharpCompress/Common/Zip/ZipFilePart.cs @@ -126,7 +126,7 @@ namespace SharpCompress.Common.Zip protected Stream GetCryptoStream(Stream plainStream) { - if ((Header.CompressedSize == 0) && !string.IsNullOrEmpty(Header.Password)) + if (Header.CompressedSize == 0) { throw new NotSupportedException("Cannot encrypt file with unknown size at start."); } @@ -151,9 +151,12 @@ namespace SharpCompress.Common.Zip case ZipCompressionMethod.BZip2: case ZipCompressionMethod.LZMA: case ZipCompressionMethod.PPMd: + { return new PkwareTraditionalCryptoStream(plainStream, Header.ComposeEncryptionData(plainStream), CryptoMode.Decrypt); + } case ZipCompressionMethod.WinzipAes: + { #if !NO_FILE if (Header.WinzipAesEncryptionData != null) { @@ -161,9 +164,13 @@ namespace SharpCompress.Common.Zip } #endif return plainStream; + } default: + { throw new ArgumentOutOfRangeException(); + } + } } diff --git a/src/SharpCompress/Common/Zip/ZipHeaderFactory.cs b/src/SharpCompress/Common/Zip/ZipHeaderFactory.cs index b1ecc403..cb01f134 100644 --- a/src/SharpCompress/Common/Zip/ZipHeaderFactory.cs +++ b/src/SharpCompress/Common/Zip/ZipHeaderFactory.cs @@ -162,16 +162,22 @@ namespace SharpCompress.Common.Zip switch (mode) { case StreamingMode.Seekable: + { entryHeader.DataStartPosition = stream.Position; stream.Position += entryHeader.CompressedSize; break; + } case StreamingMode.Streaming: + { entryHeader.PackedStream = stream; break; + } default: + { throw new InvalidFormatException("Invalid StreamingMode"); + } } //}