xref: /aosp_15_r20/external/lzma/CPP/7zip/Crypto/RarAes.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Crypto/RarAes.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_CRYPTO_RAR_AES_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_CRYPTO_RAR_AES_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../C/Aes.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyBuffer.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "../IPassword.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker #include "MyAes.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker namespace NCrypto {
15*f6dc9357SAndroid Build Coastguard Worker namespace NRar3 {
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker const unsigned kAesKeySize = 16;
18*f6dc9357SAndroid Build Coastguard Worker 
19*f6dc9357SAndroid Build Coastguard Worker class CDecoder Z7_final:
20*f6dc9357SAndroid Build Coastguard Worker   public CAesCbcDecoder
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker   Byte _salt[8];
23*f6dc9357SAndroid Build Coastguard Worker   bool _thereIsSalt;
24*f6dc9357SAndroid Build Coastguard Worker   bool _needCalc;
25*f6dc9357SAndroid Build Coastguard Worker   // bool _rar350Mode;
26*f6dc9357SAndroid Build Coastguard Worker 
27*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _password;
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker   Byte _key[kAesKeySize];
30*f6dc9357SAndroid Build Coastguard Worker   Byte _iv[AES_BLOCK_SIZE];
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker   void CalcKey();
33*f6dc9357SAndroid Build Coastguard Worker public:
34*f6dc9357SAndroid Build Coastguard Worker   Z7_COM7F_IMP(Init())
35*f6dc9357SAndroid Build Coastguard Worker 
36*f6dc9357SAndroid Build Coastguard Worker   void SetPassword(const Byte *data, unsigned size);
37*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetDecoderProperties2(const Byte *data, UInt32 size);
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker   CDecoder();
40*f6dc9357SAndroid Build Coastguard Worker 
~CDecoder()41*f6dc9357SAndroid Build Coastguard Worker   ~CDecoder() Z7_DESTRUCTOR_override { Wipe(); }
Wipe()42*f6dc9357SAndroid Build Coastguard Worker   void Wipe()
43*f6dc9357SAndroid Build Coastguard Worker   {
44*f6dc9357SAndroid Build Coastguard Worker     _password.Wipe();
45*f6dc9357SAndroid Build Coastguard Worker     Z7_memset_0_ARRAY(_salt);
46*f6dc9357SAndroid Build Coastguard Worker     Z7_memset_0_ARRAY(_key);
47*f6dc9357SAndroid Build Coastguard Worker     Z7_memset_0_ARRAY(_iv);
48*f6dc9357SAndroid Build Coastguard Worker   }
49*f6dc9357SAndroid Build Coastguard Worker   // void SetRar350Mode(bool rar350Mode) { _rar350Mode = rar350Mode; }
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