mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
78 lines
2.5 KiB
C++
78 lines
2.5 KiB
C++
#ifndef _DECRYPT_H
|
|
#define _DECRYPT_H
|
|
|
|
#include "StringExt.h"
|
|
#include "Object.h"
|
|
#include "Stream.h"
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// Decrypt
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
class Decrypt
|
|
{
|
|
public:
|
|
|
|
// Ñòðîèì FileKey. Ïàðàìåòð <sFileKey> äîëæåí èìåòü ìåñòî êàê ìèíèìóì ïîä 16 áàéò. Ïðîâåðÿåì <seOwnerPassword> è <seUserPassword>
|
|
// è âîçâðàùàåì true, åñëè êàêîé-íèáóäü êîððåêòåí. Ïèøåì <pbOwnerPasswordValide> = true, åñëè <seOwnerPassword> áûë ïðàâèëüíûé.
|
|
// Îäèí êàêîé-íèáóäü èëè îáà ïàðîëÿ ìîãóò áûòü NULL, ÷òî ìû áóäåì ïîíèìàòü êàê ïóñòóþ ñòðîêó.
|
|
static BOOL MakeFileKey(int nEncVersion, int nEncRevision, int nKeyLength, StringExt *seOwnerKey, StringExt *seUserKey, int nPermissions, StringExt *seFileID, StringExt *seOwnerPassword, StringExt *seUserPassword, unsigned char *sFileKey, BOOL bEncryptMetadata, BOOL *pbOwnerPasswordValid);
|
|
|
|
private:
|
|
|
|
static BOOL MakeFileKey2(int nEncVersion, int nEncRevision, int nKeyLength, StringExt *seOwnerKey, StringExt *seUserKey, int nPermissions, StringExt *seFileID, StringExt *seUserPassword, unsigned char *sFileKey, BOOL bEncryptMetadata);
|
|
};
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
// DecryptStream
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
struct DecryptRC4State
|
|
{
|
|
unsigned char sState[256];
|
|
unsigned char unX;
|
|
unsigned char unY;
|
|
int nBuffer;
|
|
};
|
|
|
|
struct DecryptAESState
|
|
{
|
|
unsigned int arrW[44];
|
|
unsigned char sState[16];
|
|
unsigned char sCBC[16];
|
|
unsigned char sBuffer[16];
|
|
int nBufferIndex;
|
|
};
|
|
|
|
class DecryptStream: public FilterStream
|
|
{
|
|
|
|
public:
|
|
|
|
DecryptStream(Stream *pStream, unsigned char *sFileKey, CryptAlgorithm eType, int nKeyLength, int nObjectNum, int nObjectGen);
|
|
virtual ~DecryptStream();
|
|
virtual StreamType GetType()
|
|
{
|
|
return strWeird;
|
|
}
|
|
virtual void Reset();
|
|
virtual int GetChar();
|
|
virtual int LookChar();
|
|
virtual BOOL IsBinary(BOOL bLast);
|
|
virtual Stream *getUndecodedStream() { return this; }
|
|
|
|
private:
|
|
|
|
CryptAlgorithm m_eCryptType;
|
|
int m_nObjectKeyLength;
|
|
unsigned char m_sObjectKey[16 + 9];
|
|
|
|
union
|
|
{
|
|
DecryptRC4State oRC4;
|
|
DecryptAESState oAES;
|
|
} m_oState;
|
|
};
|
|
|
|
#endif /* _DECRYPT_H */
|