internal WinzipAesEncryptionData(WinzipAesKeySize keySize, byte[] salt, byte[] passwordVerifyValue, string password) { this.keySize = keySize; this.salt = salt; this.passwordVerifyValue = passwordVerifyValue; this.password = password; Initialize(); }
internal WinzipAesEncryptionData(WinzipAesKeySize keySize, byte[] salt, byte[] passwordVerifyValue, string password) { this.keySize = keySize; this.salt = salt; this.passwordVerifyValue = passwordVerifyValue; this.password = password; Initialize(); }
internal static int KeyLengthInBytes(WinzipAesKeySize keySize) { return(keySize switch { WinzipAesKeySize.KeySize128 => 16, WinzipAesKeySize.KeySize192 => 24, WinzipAesKeySize.KeySize256 => 32, _ => throw new InvalidOperationException(), });
internal static int KeyLengthInBytes(WinzipAesKeySize keySize) { switch (keySize) { case WinzipAesKeySize.KeySize128: return 16; case WinzipAesKeySize.KeySize192: return 24; case WinzipAesKeySize.KeySize256: return 32; } throw new InvalidOperationException(); }
internal static int KeyLengthInBytes(WinzipAesKeySize keySize) { switch (keySize) { case WinzipAesKeySize.KeySize128: return(16); case WinzipAesKeySize.KeySize192: return(24); case WinzipAesKeySize.KeySize256: return(32); default: throw new InvalidOperationException(); } ; }
internal static int KeyLengthInBytes(WinzipAesKeySize keySize) { switch (keySize) { case WinzipAesKeySize.KeySize128: return(0x10); case WinzipAesKeySize.KeySize192: return(0x18); case WinzipAesKeySize.KeySize256: return(0x20); } throw new InvalidOperationException(); }
private void LoadHeader(ZipFileEntry entryHeader, Stream stream) { if (FlagUtility.HasFlag(entryHeader.Flags, HeaderFlags.Encrypted)) { if (!entryHeader.IsDirectory && entryHeader.CompressedSize == 0 && FlagUtility.HasFlag(entryHeader.Flags, HeaderFlags.UsePostDataDescriptor)) { throw new NotSupportedException( "SharpCompress cannot currently read non-seekable Zip Streams with encrypted data that has been written in a non-seekable manner."); } if (password == null) { throw new CryptographicException("No password supplied for encrypted zip."); } if (entryHeader.CompressionMethod != ZipCompressionMethod.WinzipAes) { byte[] buffer = new byte[12]; stream.Read(buffer, 0, 12); entryHeader.PkwareTraditionalEncryptionData = PkwareTraditionalEncryptionData.ForRead(password, entryHeader, buffer); entryHeader.CompressedSize -= 12; } else { #if NO_CRYPTO throw new NotSupportedException("Cannot decrypt Winzip AES with Silverlight or WP7."); #else var data = entryHeader.Extra.SingleOrDefault(x => x.Type == ExtraDataType.WinZipAes); WinzipAesKeySize keySize = (WinzipAesKeySize)data.DataBytes[4]; byte[] salt = new byte[WinzipAesEncryptionData.KeyLengthInBytes(keySize) / 2]; byte[] passwordVerifyValue = new byte[2]; stream.Read(salt, 0, salt.Length); stream.Read(passwordVerifyValue, 0, 2); entryHeader.WinzipAesEncryptionData = new WinzipAesEncryptionData(keySize, salt, passwordVerifyValue, password); entryHeader.CompressedSize -= (uint)(salt.Length + 2); #endif } } if (entryHeader.IsDirectory) { return; } //if (FlagUtility.HasFlag(entryHeader.Flags, HeaderFlags.UsePostDataDescriptor)) //{ // entryHeader.PackedStream = new ReadOnlySubStream(stream); //} //else //{ 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"); } } //} }