private Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry) {
CryptoStream result=null;
if ((entry.Version<ZipConstants.VersionStrongEncryption)
||(entry.Flags&(int)GeneralBitFlags.StrongEncryption)==0) {
var classicManaged=new PkzipClassicManaged();
OnKeysRequired(entry.Name);
if (HaveKeys==false) {
throw new ZipException("No password available for encrypted stream");
}
// Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream
// which doesnt do this.
result=new CryptoStream(new UncompressedStream(baseStream),
classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write);
if ((entry.Crc<0)||(entry.Flags&8)!=0) {
WriteEncryptionHeader(result, entry.DosTime<<16);
} else {
WriteEncryptionHeader(result, entry.Crc);
}
}
return result;
}