/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
***************************************************************************************
* This class is created with the help of the MS-OFFCRYPTO PDF documentation... http://msdn.microsoft.com/en-us/library/cc313071(office.12).aspx
* Decrypytion library for Office Open XML files(Lyquidity) and Sminks very nice example
* on "Reading compound documents in c#" on Stackoverflow. Many thanks!
***************************************************************************************
*
* Code change notes:
*
* Author Change Date
*******************************************************************************
* Jan Källman Added 10-AUG-2010
* Jan Källman License changed GPL-->LGPL 2011-12-27
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
namespace OfficeOpenXml
{
///
/// Encryption Algorithm
///
public enum EncryptionAlgorithm
{
///
/// 128-bit AES. Default
///
AES128,
///
/// 192-bit AES.
///
AES192,
///
/// 256-bit AES.
///
AES256
}
///
/// The major version of the Encryption
///
public enum EncryptionVersion
{
///
/// Standard Encryption.
/// Used in Excel 2007 and previous version with compatibility pack.
/// Default AES 128 with SHA-1 as the hash algorithm. Spincount is hardcoded to 50000
///
Standard,
///
/// Agile Encryption.
/// Used in Excel 2010-
/// Default.
///
Agile
}
///
/// How and if the workbook is encrypted
///
///
///
public class ExcelEncryption
{
///
/// Constructor
/// Default AES 256 with SHA-512 as the hash algorithm. Spincount is set to 100000
///
internal ExcelEncryption()
{
Algorithm = EncryptionAlgorithm.AES256;
}
///
/// Constructor
///
/// Algorithm used to encrypt the package. Default is AES128
internal ExcelEncryption(EncryptionAlgorithm encryptionAlgorithm)
{
Algorithm = encryptionAlgorithm;
}
bool _isEncrypted = false;
///
/// Is the package encrypted
///
public bool IsEncrypted
{
get
{
return _isEncrypted;
}
set
{
_isEncrypted = value;
if (_isEncrypted)
{
if (_password == null) _password = "";
}
else
{
_password = null;
}
}
}
string _password=null;
///
/// The password used to encrypt the workbook.
///
public string Password
{
get
{
return _password;
}
set
{
_password = value;
_isEncrypted = (value != null);
}
}
///
/// Algorithm used for encrypting the package. Default is AES 128-bit for standard and AES 256 for agile
///
public EncryptionAlgorithm Algorithm { get; set; }
private EncryptionVersion _version = EncryptionVersion.Agile;
///
/// The version of the encryption.
///
public EncryptionVersion Version
{
get
{
return _version;
}
set
{
if (value != Version)
{
if (value == EncryptionVersion.Agile)
{
Algorithm = EncryptionAlgorithm.AES256;
}
else
{
Algorithm = EncryptionAlgorithm.AES128;
}
_version = value;
}
}
}
}
}