DocFormatReader - adding decrypt for format 1995, adding xor method decrypting

This commit is contained in:
ElenaSubbotina
2018-02-06 13:55:59 +03:00
parent ad0f2c89e0
commit c4481eb125
13 changed files with 272 additions and 167 deletions

View File

@ -65,6 +65,7 @@ class Decryptor
virtual void Decrypt(char* data, const size_t size, const unsigned long stream_pos, const size_t block_size) = 0;
virtual void Decrypt(char* data, const size_t size, const unsigned long block_index) = 0;
virtual bool SetPassword(std::wstring password) = 0;
virtual void Init(const unsigned long val) = 0;
virtual bool IsVerify() = 0;
};
@ -73,21 +74,21 @@ typedef boost::shared_ptr<Decryptor> DecryptorPtr;
struct _ecmaCryptData
{
//default ms2010
_ecmaCryptData() : cipherAlgorithm(CRYPT_METHOD::AES_CBC), hashAlgorithm(CRYPT_METHOD::SHA1), spinCount(100000),
keySize(0x10), hashSize(0x14), blockSize(0x10), saltSize(0x10), bAgile(true)
//_ecmaCryptData() : cipherAlgorithm(), hashAlgorithm(), spinCount(100000),
// keySize(0x10), hashSize(), blockSize(0x10), saltSize(0x10), bAgile(true)
//default ms2013/ms2016
//_cryptData(): cipherAlgorithm(CRYPT_METHOD::AES_CBC), hashAlgorithm(CRYPT_METHOD::SHA256), spinCount(100000),
// keySize(0x20), hashSize(0x40), blockSize(0x10), saltSize(0x10), bAgile(true)
{
}
CRYPT_METHOD::_cipherAlgorithm cipherAlgorithm;
CRYPT_METHOD::_hashAlgorithm hashAlgorithm;
//{
//}
CRYPT_METHOD::_cipherAlgorithm cipherAlgorithm = CRYPT_METHOD::AES_CBC;
CRYPT_METHOD::_hashAlgorithm hashAlgorithm = CRYPT_METHOD::SHA1;
int spinCount;
int keySize;
int hashSize;
int blockSize;
int saltSize;
int spinCount = 100000;
int keySize = 0x10;
int hashSize = 0x14;
int blockSize = 0x10;
int saltSize = 0x10;
std::string dataSaltValue;
std::string saltValue;
@ -98,10 +99,12 @@ struct _ecmaCryptData
std::string encryptedHmacKey;
std::string encryptedHmacValue;
bool bAgile;
bool bAgile = true;
//..........
bool fDocProps = true;
};
class ECMAEncryptor
{
@ -129,6 +132,7 @@ public:
ECMADecryptor();
virtual ~ECMADecryptor();
virtual void Init(const unsigned long val) {}
virtual void Decrypt (char* data, const size_t size, const unsigned long stream_pos, const size_t block_size);
virtual void Decrypt (char* data, const size_t size, const unsigned long start_iv_block);