| // Crypto/ZipCrypto.h |
| |
| #ifndef __CRYPTO_ZIP_CRYPTO_H |
| #define __CRYPTO_ZIP_CRYPTO_H |
| |
| #include "Common/MyCom.h" |
| |
| #include "../ICoder.h" |
| #include "../IPassword.h" |
| |
| namespace NCrypto { |
| namespace NZip { |
| |
| const unsigned kHeaderSize = 12; |
| |
| class CCipher: |
| public ICompressFilter, |
| public ICryptoSetPassword, |
| public CMyUnknownImp |
| { |
| UInt32 Keys[3]; |
| UInt32 Keys2[3]; |
| |
| protected: |
| void UpdateKeys(Byte b); |
| Byte DecryptByteSpec(); |
| void RestoreKeys() |
| { |
| for (int i = 0; i < 3; i++) |
| Keys[i] = Keys2[i]; |
| } |
| |
| public: |
| STDMETHOD(Init)(); |
| STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size); |
| }; |
| |
| class CEncoder: public CCipher |
| { |
| public: |
| MY_UNKNOWN_IMP1(ICryptoSetPassword) |
| STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); |
| HRESULT WriteHeader(ISequentialOutStream *outStream, UInt32 crc); |
| }; |
| |
| class CDecoder: public CCipher |
| { |
| public: |
| MY_UNKNOWN_IMP1(ICryptoSetPassword) |
| STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size); |
| HRESULT ReadHeader(ISequentialInStream *inStream); |
| }; |
| |
| }} |
| |
| #endif |