diff options
Diffstat (limited to 'CPP/7zip/Crypto/ZipCrypto.h')
-rw-r--r-- | CPP/7zip/Crypto/ZipCrypto.h | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/CPP/7zip/Crypto/ZipCrypto.h b/CPP/7zip/Crypto/ZipCrypto.h index 51b9e301..b23d4216 100644 --- a/CPP/7zip/Crypto/ZipCrypto.h +++ b/CPP/7zip/Crypto/ZipCrypto.h @@ -13,24 +13,41 @@ namespace NZip { const unsigned kHeaderSize = 12; +/* ICompressFilter::Init() does nothing for this filter. + Call to init: + Encoder: + CryptoSetPassword(); + WriteHeader(); + Decoder: + [CryptoSetPassword();] + ReadHeader(); + [CryptoSetPassword();] Init_and_GetCrcByte(); + [CryptoSetPassword();] Init_and_GetCrcByte(); +*/ + class CCipher: public ICompressFilter, public ICryptoSetPassword, public CMyUnknownImp { - UInt32 Keys[3]; - UInt32 Keys2[3]; - protected: - void UpdateKeys(Byte b); - Byte DecryptByteSpec(); + UInt32 Key0; + UInt32 Key1; + UInt32 Key2; + + UInt32 KeyMem0; + UInt32 KeyMem1; + UInt32 KeyMem2; + void RestoreKeys() { - for (int i = 0; i < 3; i++) - Keys[i] = Keys2[i]; + Key0 = KeyMem0; + Key1 = KeyMem1; + Key2 = KeyMem2; } public: + MY_UNKNOWN_IMP1(ICryptoSetPassword) STDMETHOD(Init)(); STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size); }; @@ -38,17 +55,17 @@ public: class CEncoder: public CCipher { public: - MY_UNKNOWN_IMP1(ICryptoSetPassword) STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); - HRESULT WriteHeader(ISequentialOutStream *outStream, UInt32 crc); + HRESULT WriteHeader_Check16(ISequentialOutStream *outStream, UInt16 crc); }; class CDecoder: public CCipher { public: - MY_UNKNOWN_IMP1(ICryptoSetPassword) + Byte _header[kHeaderSize]; STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); HRESULT ReadHeader(ISequentialInStream *inStream); + void Init_BeforeDecode(); }; }} |