private static bool TryGetEncryptedPackage(Stream fileStream, CompoundDocument document, string password, out Stream stream) { var encryptedPackage = document.FindEntry(DirectoryEntryEncryptedPackage); var encryptionInfo = document.FindEntry(DirectoryEntryEncryptionInfo); if (encryptedPackage == null || encryptionInfo == null) { stream = null; return(false); } var infoBytes = document.ReadStream(fileStream, encryptionInfo.StreamFirstSector, (int)encryptionInfo.StreamSize, encryptionInfo.IsEntryMiniStream); var encryption = EncryptionInfo.Create(infoBytes); if (encryption.VerifyPassword("VelvetSweatshop")) { // Magic password used for write-protected workbooks password = "******"; } else if (password == null || !encryption.VerifyPassword(password)) { throw new InvalidPasswordException(Errors.ErrorInvalidPassword); } var secretKey = encryption.GenerateSecretKey(password); var packageStream = document.CreateStream(fileStream, encryptedPackage.StreamFirstSector, (int)encryptedPackage.StreamSize, encryptedPackage.IsEntryMiniStream); stream = encryption.CreateEncryptedPackageStream(packageStream, secretKey); return(true); }
private static bool TryGetWorkbook(Stream fileStream, CompoundDocument document, out Stream stream) { var workbookEntry = document.FindEntry(DirectoryEntryWorkbook) ?? document.FindEntry(DirectoryEntryBook); if (workbookEntry != null) { if (workbookEntry.EntryType != STGTY.STGTY_STREAM) { throw new ExcelReaderException(Errors.ErrorWorkbookIsNotStream); } stream = document.CreateStream(fileStream, workbookEntry.StreamFirstSector, (int)workbookEntry.StreamSize, workbookEntry.IsEntryMiniStream); return(true); } stream = null; return(false); }