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 '7zip/Compress/Rar29/Original/crypt.hpp')
-rwxr-xr-x7zip/Compress/Rar29/Original/crypt.hpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/7zip/Compress/Rar29/Original/crypt.hpp b/7zip/Compress/Rar29/Original/crypt.hpp
new file mode 100755
index 00000000..809d76a5
--- /dev/null
+++ b/7zip/Compress/Rar29/Original/crypt.hpp
@@ -0,0 +1,60 @@
+#ifndef _RAR_CRYPT_
+#define _RAR_CRYPT_
+
+enum { OLD_DECODE=0,OLD_ENCODE=1,NEW_CRYPT=2 };
+
+struct CryptKeyCacheItem
+{
+#ifndef _SFX_RTL_
+ CryptKeyCacheItem()
+ {
+ *Password=0;
+ }
+
+ ~CryptKeyCacheItem()
+ {
+ memset(AESKey,0,sizeof(AESKey));
+ memset(AESInit,0,sizeof(AESInit));
+ memset(Password,0,sizeof(Password));
+ }
+#endif
+ byte AESKey[16],AESInit[16];
+ char Password[MAXPASSWORD];
+ bool SaltPresent;
+ byte Salt[SALT_SIZE];
+};
+
+class CryptData
+{
+ private:
+ void Encode13(byte *Data,uint Count);
+ void Decode13(byte *Data,uint Count);
+ void Crypt15(byte *Data,uint Count);
+ void UpdKeys(byte *Buf);
+ void Swap(byte *Ch1,byte *Ch2);
+ void SetOldKeys(char *Password);
+
+ Rijndael rin;
+
+ byte SubstTable[256];
+ uint Key[4];
+ ushort OldKey[4];
+ byte PN1,PN2,PN3;
+
+ byte AESKey[16],AESInit[16];
+
+ static CryptKeyCacheItem Cache[4];
+ static int CachePos;
+ public:
+ void SetCryptKeys(char *Password,byte *Salt,bool Encrypt,bool OldOnly=false);
+ void SetAV15Encryption();
+ void SetCmt13Encryption();
+ void EncryptBlock20(byte *Buf);
+ void DecryptBlock20(byte *Buf);
+ void EncryptBlock(byte *Buf,int Size);
+ void DecryptBlock(byte *Buf,int Size);
+ void Crypt(byte *Data,uint Count,int Method);
+ static void SetSalt(byte *Salt,int SaltSize);
+};
+
+#endif