This commit is contained in:
ElenaSubbotina
2018-12-05 15:43:01 +03:00
parent 14f4364962
commit 8bc8b7cf58
7 changed files with 82 additions and 26 deletions

View File

@ -811,10 +811,39 @@ void ECMADecryptor::Decrypt(unsigned char* data_inp, int size, unsigned char*&
}
}
//-----------------------------------------------------------------------------------------------------------
ECMAWriteProtect::ECMAWriteProtect()
void odfWriteProtect::SetPassword (const std::wstring &password_)
{
password = password_;
}
void ECMAWriteProtect::SetPassword (std::wstring password_)
void odfWriteProtect::SetProtectKey (const std::string &key)
{
protect_key = key;
}
void odfWriteProtect::SetProtectAlgorithm (const CRYPT_METHOD::_hashAlgorithm &alg)
{
hash = alg;
}
void odfWriteProtect::Generate()
{
_buf pPassword (password);
_buf empty (NULL, 0, false);
_buf pHashTest = HashAppend(empty, pPassword, hash);
protect_key = std::string((char*)pHashTest.ptr, pHashTest.size);
}
bool odfWriteProtect::Verify()
{
_buf pPassword (password);
_buf empty (NULL, 0, false);
_buf pHash (protect_key);
_buf pHashTest = HashAppend(empty, pPassword, hash);
return (pHashTest == pHash);
}
//----------------------------------------------------------------------------------------------------------
void ECMAWriteProtect::SetPassword (const std::wstring &password_)
{
password = password_;
}
@ -889,8 +918,6 @@ bool ECMAWriteProtect::Verify()
}
return (pHashTest == pHash);
}
//-----------------------------------------------------------------------------------------------------------
ECMAEncryptor::ECMAEncryptor()
{

View File

@ -133,14 +133,13 @@ struct _odfCryptData
CRYPT_METHOD::_hashAlgorithm checksum_hashAlgorithm = CRYPT_METHOD::SHA1;
};
//---------------------------------------------------------------------------------------------------
class ECMAWriteProtect
{
public:
ECMAWriteProtect();
ECMAWriteProtect(){}
virtual ~ECMAWriteProtect(){}
void SetPassword (std::wstring password);
void SetPassword (const std::wstring &password);
void SetCryptData(_ecmaWriteProtectData &data);
void GetCryptData(_ecmaWriteProtectData &data);
@ -154,6 +153,24 @@ private:
_ecmaWriteProtectData data;
};
//---------------------------------------------------------------------------------------------------
class odfWriteProtect
{
public:
odfWriteProtect() : hash(CRYPT_METHOD::SHA1) {}
void SetPassword (const std::wstring & password);
void SetProtectKey (const std::string & protect_key);
void SetProtectAlgorithm (const CRYPT_METHOD::_hashAlgorithm & hash);
void Generate();
bool Verify();
private:
std::wstring password;
CRYPT_METHOD::_hashAlgorithm hash;
std::string protect_key;
};
//---------------------------------------------------------------------------------------------------
class ECMAEncryptor
{
public: