diff options
Diffstat (limited to 'CPP/7zip/Crypto/RarAES/RarAES.h')
-rwxr-xr-x | CPP/7zip/Crypto/RarAES/RarAES.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/CPP/7zip/Crypto/RarAES/RarAES.h b/CPP/7zip/Crypto/RarAES/RarAES.h new file mode 100755 index 00000000..4b435b5e --- /dev/null +++ b/CPP/7zip/Crypto/RarAES/RarAES.h @@ -0,0 +1,61 @@ +// Crypto/CRarAES/RarAES.h + +#ifndef __CRYPTO_RARAES_H +#define __CRYPTO_RARAES_H + +#include "Common/MyCom.h" +#include "../../ICoder.h" +#include "../../IPassword.h" +#include "../../Archive/Common/CoderLoader.h" + +#include "Common/Types.h" +#include "Common/Buffer.h" + +DEFINE_GUID(CLSID_CCrypto_AES_CBC_Decoder, +0x23170F69, 0x40C1, 0x278B, 0x06, 0x01, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00); + +namespace NCrypto { +namespace NRar29 { + +class CDecoder: + public ICompressFilter, + public ICompressSetDecoderProperties2, + public ICryptoSetPassword, + public CMyUnknownImp +{ + Byte _salt[8]; + bool _thereIsSalt; + CByteBuffer buffer; + Byte aesKey[16]; + Byte aesInit[16]; + bool _needCalculate; + + CCoderLibrary _aesLib; + CMyComPtr<ICompressFilter> _aesFilter; + + bool _rar350Mode; + + void Calculate(); + HRESULT CreateFilter(); + +public: + + MY_UNKNOWN_IMP2( + ICryptoSetPassword, + ICompressSetDecoderProperties2) + + STDMETHOD(Init)(); + STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); + + STDMETHOD(CryptoSetPassword)(const Byte *aData, UInt32 aSize); + + // ICompressSetDecoderProperties + STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size); + + CDecoder(); + void SetRar350Mode(bool rar350Mode) { _rar350Mode = rar350Mode; } +}; + +}} + +#endif |