1*f6dc9357SAndroid Build Coastguard Worker // Crypto/Rar20Crypto.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_CRYPTO_RAR20_CRYPTO_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_CRYPTO_RAR20_CRYPTO_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "../ICoder.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NCrypto { 11*f6dc9357SAndroid Build Coastguard Worker namespace NRar2 { 12*f6dc9357SAndroid Build Coastguard Worker 13*f6dc9357SAndroid Build Coastguard Worker /* ICompressFilter::Init() does nothing for this filter. 14*f6dc9357SAndroid Build Coastguard Worker Call SetPassword() to initialize filter. */ 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker class CData 17*f6dc9357SAndroid Build Coastguard Worker { 18*f6dc9357SAndroid Build Coastguard Worker Byte SubstTable[256]; 19*f6dc9357SAndroid Build Coastguard Worker UInt32 Keys[4]; 20*f6dc9357SAndroid Build Coastguard Worker SubstLong(UInt32 t)21*f6dc9357SAndroid Build Coastguard Worker UInt32 SubstLong(UInt32 t) const 22*f6dc9357SAndroid Build Coastguard Worker { 23*f6dc9357SAndroid Build Coastguard Worker return (UInt32)SubstTable[(unsigned)t & 255] 24*f6dc9357SAndroid Build Coastguard Worker | ((UInt32)SubstTable[(unsigned)(t >> 8) & 255] << 8) 25*f6dc9357SAndroid Build Coastguard Worker | ((UInt32)SubstTable[(unsigned)(t >> 16) & 255] << 16) 26*f6dc9357SAndroid Build Coastguard Worker | ((UInt32)SubstTable[(unsigned)(t >> 24) ] << 24); 27*f6dc9357SAndroid Build Coastguard Worker } 28*f6dc9357SAndroid Build Coastguard Worker void UpdateKeys(const Byte *data); 29*f6dc9357SAndroid Build Coastguard Worker void CryptBlock(Byte *buf, bool encrypt); 30*f6dc9357SAndroid Build Coastguard Worker public: ~CData()31*f6dc9357SAndroid Build Coastguard Worker ~CData() { Wipe(); } Wipe()32*f6dc9357SAndroid Build Coastguard Worker void Wipe() 33*f6dc9357SAndroid Build Coastguard Worker { 34*f6dc9357SAndroid Build Coastguard Worker Z7_memset_0_ARRAY(SubstTable); 35*f6dc9357SAndroid Build Coastguard Worker Z7_memset_0_ARRAY(Keys); 36*f6dc9357SAndroid Build Coastguard Worker } 37*f6dc9357SAndroid Build Coastguard Worker EncryptBlock(Byte * buf)38*f6dc9357SAndroid Build Coastguard Worker void EncryptBlock(Byte *buf) { CryptBlock(buf, true); } DecryptBlock(Byte * buf)39*f6dc9357SAndroid Build Coastguard Worker void DecryptBlock(Byte *buf) { CryptBlock(buf, false); } 40*f6dc9357SAndroid Build Coastguard Worker void SetPassword(const Byte *password, unsigned passwordLen); 41*f6dc9357SAndroid Build Coastguard Worker }; 42*f6dc9357SAndroid Build Coastguard Worker 43*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final: 44*f6dc9357SAndroid Build Coastguard Worker public ICompressFilter, 45*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp, 46*f6dc9357SAndroid Build Coastguard Worker public CData 47*f6dc9357SAndroid Build Coastguard Worker { 48*f6dc9357SAndroid Build Coastguard Worker Z7_COM_UNKNOWN_IMP_0 49*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICompressFilter) 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