void SetupCryptoForExtract(string password) { //if (password == null) return; if (_Encryption_FromZipFile == EncryptionAlgorithm.None) { return; } if (_Encryption_FromZipFile == EncryptionAlgorithm.PkzipWeak) { if (password == null) { throw new ZipException("Missing password."); } this.ArchiveStream.Seek(this.FileDataPosition - 12, SeekOrigin.Begin); // workitem 10178 Ionic.Zip.SharedUtilities.Workaround_Ladybug318918(this.ArchiveStream); _zipCrypto_forExtract = ZipCrypto.ForRead(password, this); } #if AESCRYPTO else if (_Encryption_FromZipFile == EncryptionAlgorithm.WinZipAes128 || _Encryption_FromZipFile == EncryptionAlgorithm.WinZipAes256) { if (password == null) { throw new ZipException("Missing password."); } // If we already have a WinZipAesCrypto object in place, use it. // It can be set up in the ReadDirEntry(), or during a previous Extract. if (_aesCrypto_forExtract != null) { _aesCrypto_forExtract.Password = password; } else { int sizeOfSaltAndPv = GetLengthOfCryptoHeaderBytes(_Encryption_FromZipFile); this.ArchiveStream.Seek(this.FileDataPosition - sizeOfSaltAndPv, SeekOrigin.Begin); // workitem 10178 Ionic.Zip.SharedUtilities.Workaround_Ladybug318918(this.ArchiveStream); int keystrength = GetKeyStrengthInBits(_Encryption_FromZipFile); _aesCrypto_forExtract = WinZipAesCrypto.ReadFromStream(password, keystrength, this.ArchiveStream); } } #endif }
void SetupCryptoForExtract(string password) { //if (password == null) return; if (_Encryption_FromZipFile == EncryptionAlgorithm.None) { return; } if (_Encryption_FromZipFile == EncryptionAlgorithm.PkzipWeak) { if (password == null) { throw new ZipException("Missing password."); } this.ArchiveStream.Seek(this.FileDataPosition - 12, SeekOrigin.Begin); _zipCrypto_forExtract = ZipCrypto.ForRead(password, this); } }