1*f6dc9357SAndroid Build Coastguard Worker // Crypto/ZipCrypto.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_CRYPTO_ZIP_CRYPTO_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_CRYPTO_ZIP_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 #include "../IPassword.h" 10*f6dc9357SAndroid Build Coastguard Worker 11*f6dc9357SAndroid Build Coastguard Worker namespace NCrypto { 12*f6dc9357SAndroid Build Coastguard Worker namespace NZip { 13*f6dc9357SAndroid Build Coastguard Worker 14*f6dc9357SAndroid Build Coastguard Worker const unsigned kHeaderSize = 12; 15*f6dc9357SAndroid Build Coastguard Worker 16*f6dc9357SAndroid Build Coastguard Worker /* ICompressFilter::Init() does nothing for this filter. 17*f6dc9357SAndroid Build Coastguard Worker Call to init: 18*f6dc9357SAndroid Build Coastguard Worker Encoder: 19*f6dc9357SAndroid Build Coastguard Worker CryptoSetPassword(); 20*f6dc9357SAndroid Build Coastguard Worker WriteHeader(); 21*f6dc9357SAndroid Build Coastguard Worker Decoder: 22*f6dc9357SAndroid Build Coastguard Worker [CryptoSetPassword();] 23*f6dc9357SAndroid Build Coastguard Worker ReadHeader(); 24*f6dc9357SAndroid Build Coastguard Worker [CryptoSetPassword();] Init_and_GetCrcByte(); 25*f6dc9357SAndroid Build Coastguard Worker [CryptoSetPassword();] Init_and_GetCrcByte(); 26*f6dc9357SAndroid Build Coastguard Worker */ 27*f6dc9357SAndroid Build Coastguard Worker 28*f6dc9357SAndroid Build Coastguard Worker class CCipher: 29*f6dc9357SAndroid Build Coastguard Worker public ICompressFilter, 30*f6dc9357SAndroid Build Coastguard Worker public ICryptoSetPassword, 31*f6dc9357SAndroid Build Coastguard Worker public CMyUnknownImp 32*f6dc9357SAndroid Build Coastguard Worker { 33*f6dc9357SAndroid Build Coastguard Worker Z7_COM_UNKNOWN_IMP_1(ICryptoSetPassword) 34*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP(Init()) 35*f6dc9357SAndroid Build Coastguard Worker public: 36*f6dc9357SAndroid Build Coastguard Worker Z7_IFACE_COM7_IMP(ICryptoSetPassword) 37*f6dc9357SAndroid Build Coastguard Worker protected: 38*f6dc9357SAndroid Build Coastguard Worker UInt32 Key0; 39*f6dc9357SAndroid Build Coastguard Worker UInt32 Key1; 40*f6dc9357SAndroid Build Coastguard Worker UInt32 Key2; 41*f6dc9357SAndroid Build Coastguard Worker 42*f6dc9357SAndroid Build Coastguard Worker UInt32 KeyMem0; 43*f6dc9357SAndroid Build Coastguard Worker UInt32 KeyMem1; 44*f6dc9357SAndroid Build Coastguard Worker UInt32 KeyMem2; 45*f6dc9357SAndroid Build Coastguard Worker RestoreKeys()46*f6dc9357SAndroid Build Coastguard Worker void RestoreKeys() 47*f6dc9357SAndroid Build Coastguard Worker { 48*f6dc9357SAndroid Build Coastguard Worker Key0 = KeyMem0; 49*f6dc9357SAndroid Build Coastguard Worker Key1 = KeyMem1; 50*f6dc9357SAndroid Build Coastguard Worker Key2 = KeyMem2; 51*f6dc9357SAndroid Build Coastguard Worker } 52*f6dc9357SAndroid Build Coastguard Worker 53*f6dc9357SAndroid Build Coastguard Worker public: ~CCipher()54*f6dc9357SAndroid Build Coastguard Worker virtual ~CCipher() 55*f6dc9357SAndroid Build Coastguard Worker { 56*f6dc9357SAndroid Build Coastguard Worker Key0 = KeyMem0 = 57*f6dc9357SAndroid Build Coastguard Worker Key1 = KeyMem1 = 58*f6dc9357SAndroid Build Coastguard Worker Key2 = KeyMem2 = 0; 59*f6dc9357SAndroid Build Coastguard Worker } 60*f6dc9357SAndroid Build Coastguard Worker }; 61*f6dc9357SAndroid Build Coastguard Worker 62*f6dc9357SAndroid Build Coastguard Worker class CEncoder Z7_final: public CCipher 63*f6dc9357SAndroid Build Coastguard Worker { 64*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) 65*f6dc9357SAndroid Build Coastguard Worker public: 66*f6dc9357SAndroid Build Coastguard Worker HRESULT WriteHeader_Check16(ISequentialOutStream *outStream, UInt16 crc); 67*f6dc9357SAndroid Build Coastguard Worker }; 68*f6dc9357SAndroid Build Coastguard Worker 69*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final: public CCipher 70*f6dc9357SAndroid Build Coastguard Worker { 71*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) 72*f6dc9357SAndroid Build Coastguard Worker public: 73*f6dc9357SAndroid Build Coastguard Worker Byte _header[kHeaderSize]; 74*f6dc9357SAndroid Build Coastguard Worker HRESULT ReadHeader(ISequentialInStream *inStream); 75*f6dc9357SAndroid Build Coastguard Worker void Init_BeforeDecode(); 76*f6dc9357SAndroid Build Coastguard Worker }; 77*f6dc9357SAndroid Build Coastguard Worker 78*f6dc9357SAndroid Build Coastguard Worker }} 79*f6dc9357SAndroid Build Coastguard Worker 80*f6dc9357SAndroid Build Coastguard Worker #endif 81