1*f6dc9357SAndroid Build Coastguard Worker // Crypto/RarAes.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_CRYPTO_RAR_AES_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_CRYPTO_RAR_AES_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../../C/Aes.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyBuffer.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker #include "../IPassword.h" 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker #include "MyAes.h" 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker namespace NCrypto { 15*f6dc9357SAndroid Build Coastguard Worker namespace NRar3 { 16*f6dc9357SAndroid Build Coastguard Worker 17*f6dc9357SAndroid Build Coastguard Worker const unsigned kAesKeySize = 16; 18*f6dc9357SAndroid Build Coastguard Worker 19*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final: 20*f6dc9357SAndroid Build Coastguard Worker public CAesCbcDecoder 21*f6dc9357SAndroid Build Coastguard Worker { 22*f6dc9357SAndroid Build Coastguard Worker Byte _salt[8]; 23*f6dc9357SAndroid Build Coastguard Worker bool _thereIsSalt; 24*f6dc9357SAndroid Build Coastguard Worker bool _needCalc; 25*f6dc9357SAndroid Build Coastguard Worker // bool _rar350Mode; 26*f6dc9357SAndroid Build Coastguard Worker 27*f6dc9357SAndroid Build Coastguard Worker CByteBuffer _password; 28*f6dc9357SAndroid Build Coastguard Worker 29*f6dc9357SAndroid Build Coastguard Worker Byte _key[kAesKeySize]; 30*f6dc9357SAndroid Build Coastguard Worker Byte _iv[AES_BLOCK_SIZE]; 31*f6dc9357SAndroid Build Coastguard Worker 32*f6dc9357SAndroid Build Coastguard Worker void CalcKey(); 33*f6dc9357SAndroid Build Coastguard Worker public: 34*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(Init()) 35*f6dc9357SAndroid Build Coastguard Worker 36*f6dc9357SAndroid Build Coastguard Worker void SetPassword(const Byte *data, unsigned size); 37*f6dc9357SAndroid Build Coastguard Worker HRESULT SetDecoderProperties2(const Byte *data, UInt32 size); 38*f6dc9357SAndroid Build Coastguard Worker 39*f6dc9357SAndroid Build Coastguard Worker CDecoder(); 40*f6dc9357SAndroid Build Coastguard Worker ~CDecoder()41*f6dc9357SAndroid Build Coastguard Worker ~CDecoder() Z7_DESTRUCTOR_override { Wipe(); } Wipe()42*f6dc9357SAndroid Build Coastguard Worker void Wipe() 43*f6dc9357SAndroid Build Coastguard Worker { 44*f6dc9357SAndroid Build Coastguard Worker _password.Wipe(); 45*f6dc9357SAndroid Build Coastguard Worker Z7_memset_0_ARRAY(_salt); 46*f6dc9357SAndroid Build Coastguard Worker Z7_memset_0_ARRAY(_key); 47*f6dc9357SAndroid Build Coastguard Worker Z7_memset_0_ARRAY(_iv); 48*f6dc9357SAndroid Build Coastguard Worker } 49*f6dc9357SAndroid Build Coastguard Worker // void SetRar350Mode(bool rar350Mode) { _rar350Mode = rar350Mode; } 50*f6dc9357SAndroid Build Coastguard Worker }; 51*f6dc9357SAndroid Build Coastguard Worker 52*f6dc9357SAndroid Build Coastguard Worker }} 53*f6dc9357SAndroid Build Coastguard Worker 54*f6dc9357SAndroid Build Coastguard Worker #endif 55