| // Crypto/ZipCrypto.h |
| |
| #ifndef ZIP7_INC_CRYPTO_ZIP_CRYPTO_H |
| #define ZIP7_INC_CRYPTO_ZIP_CRYPTO_H |
| |
| #include "../../Common/MyCom.h" |
| |
| #include "../ICoder.h" |
| #include "../IPassword.h" |
| |
| namespace NCrypto { |
| 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 |
| { |
| Z7_COM_UNKNOWN_IMP_1(ICryptoSetPassword) |
| Z7_COM7F_IMP(Init()) |
| public: |
| Z7_IFACE_COM7_IMP(ICryptoSetPassword) |
| protected: |
| UInt32 Key0; |
| UInt32 Key1; |
| UInt32 Key2; |
| |
| UInt32 KeyMem0; |
| UInt32 KeyMem1; |
| UInt32 KeyMem2; |
| |
| void RestoreKeys() |
| { |
| Key0 = KeyMem0; |
| Key1 = KeyMem1; |
| Key2 = KeyMem2; |
| } |
| |
| public: |
| virtual ~CCipher() |
| { |
| Key0 = KeyMem0 = |
| Key1 = KeyMem1 = |
| Key2 = KeyMem2 = 0; |
| } |
| }; |
| |
| class CEncoder Z7_final: public CCipher |
| { |
| Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) |
| public: |
| HRESULT WriteHeader_Check16(ISequentialOutStream *outStream, UInt16 crc); |
| }; |
| |
| class CDecoder Z7_final: public CCipher |
| { |
| Z7_COM7F_IMP2(UInt32, Filter(Byte *data, UInt32 size)) |
| public: |
| Byte _header[kHeaderSize]; |
| HRESULT ReadHeader(ISequentialInStream *inStream); |
| void Init_BeforeDecode(); |
| }; |
| |
| }} |
| |
| #endif |