xref: /aosp_15_r20/external/lzma/CPP/7zip/Crypto/Rar20Crypto.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Crypto/Rar20Crypto.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_CRYPTO_RAR20_CRYPTO_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_CRYPTO_RAR20_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 
10*f6dc9357SAndroid Build Coastguard Worker namespace NCrypto {
11*f6dc9357SAndroid Build Coastguard Worker namespace NRar2 {
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker /* ICompressFilter::Init() does nothing for this filter.
14*f6dc9357SAndroid Build Coastguard Worker    Call SetPassword() to initialize filter. */
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker class CData
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   Byte SubstTable[256];
19*f6dc9357SAndroid Build Coastguard Worker   UInt32 Keys[4];
20*f6dc9357SAndroid Build Coastguard Worker 
SubstLong(UInt32 t)21*f6dc9357SAndroid Build Coastguard Worker   UInt32 SubstLong(UInt32 t) const
22*f6dc9357SAndroid Build Coastguard Worker   {
23*f6dc9357SAndroid Build Coastguard Worker     return (UInt32)SubstTable[(unsigned)t         & 255]
24*f6dc9357SAndroid Build Coastguard Worker         | ((UInt32)SubstTable[(unsigned)(t >>  8) & 255] << 8)
25*f6dc9357SAndroid Build Coastguard Worker         | ((UInt32)SubstTable[(unsigned)(t >> 16) & 255] << 16)
26*f6dc9357SAndroid Build Coastguard Worker         | ((UInt32)SubstTable[(unsigned)(t >> 24)      ] << 24);
27*f6dc9357SAndroid Build Coastguard Worker   }
28*f6dc9357SAndroid Build Coastguard Worker   void UpdateKeys(const Byte *data);
29*f6dc9357SAndroid Build Coastguard Worker   void CryptBlock(Byte *buf, bool encrypt);
30*f6dc9357SAndroid Build Coastguard Worker public:
~CData()31*f6dc9357SAndroid Build Coastguard Worker   ~CData() { Wipe(); }
Wipe()32*f6dc9357SAndroid Build Coastguard Worker   void Wipe()
33*f6dc9357SAndroid Build Coastguard Worker   {
34*f6dc9357SAndroid Build Coastguard Worker     Z7_memset_0_ARRAY(SubstTable);
35*f6dc9357SAndroid Build Coastguard Worker     Z7_memset_0_ARRAY(Keys);
36*f6dc9357SAndroid Build Coastguard Worker   }
37*f6dc9357SAndroid Build Coastguard Worker 
EncryptBlock(Byte * buf)38*f6dc9357SAndroid Build Coastguard Worker   void EncryptBlock(Byte *buf) { CryptBlock(buf, true); }
DecryptBlock(Byte * buf)39*f6dc9357SAndroid Build Coastguard Worker   void DecryptBlock(Byte *buf) { CryptBlock(buf, false); }
40*f6dc9357SAndroid Build Coastguard Worker   void SetPassword(const Byte *password, unsigned passwordLen);
41*f6dc9357SAndroid Build Coastguard Worker };
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final:
44*f6dc9357SAndroid Build Coastguard Worker   public ICompressFilter,
45*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp,
46*f6dc9357SAndroid Build Coastguard Worker   public CData
47*f6dc9357SAndroid Build Coastguard Worker {
48*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_UNKNOWN_IMP_0
49*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressFilter)
50*f6dc9357SAndroid Build Coastguard Worker };
51*f6dc9357SAndroid Build Coastguard Worker 
52*f6dc9357SAndroid Build Coastguard Worker }}
53*f6dc9357SAndroid Build Coastguard Worker 
54*f6dc9357SAndroid Build Coastguard Worker #endif
55