xref: /aosp_15_r20/external/lzma/CPP/7zip/Crypto/ZipCrypto.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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