Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/Crypto/ZipCrypto.h')
-rw-r--r--CPP/7zip/Crypto/ZipCrypto.h37
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();
};
}}