mirror of
https://github.com/hashcat/hashcat.git
synced 2024-11-27 10:28:17 +00:00
54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
/**
|
|
* Author......: See docs/credits.txt
|
|
* License.....: MIT
|
|
*/
|
|
|
|
// CREDITS go to the UnRAR project from rarlab.com
|
|
// see license.txt file
|
|
|
|
#include "rar.hpp"
|
|
|
|
#define WINSIZE 0x100000 // minimum window size 0x20000 (MinAllocSize is 0x40000), 1 MiB
|
|
#define SOLID false
|
|
#define METHOD VER_UNPACK // 29 for RAR3 archives
|
|
|
|
extern "C" unsigned int hc_decompress_rar (unsigned char *Win, unsigned char *Inp, unsigned char *VM, unsigned char *PPM, const unsigned int OutputSize, const unsigned char *Input, const unsigned int PackSize, const unsigned int UnpackSize, const unsigned char *Key, const unsigned char *IV)
|
|
{
|
|
ComprDataIO DataIO;
|
|
|
|
DataIO.InitRijindal ((byte *) Key, (byte *) IV);
|
|
|
|
DataIO.SetPackedSizeToRead (PackSize);
|
|
|
|
DataIO.SetTestMode (false);
|
|
DataIO.SetSkipUnpCRC (false); // or 'true', if we use our own crc32 code
|
|
DataIO.UnpHash.Init (HASH_CRC32, 1); // 1: 1 single thread ?
|
|
|
|
DataIO.SetUnpackFromMemory ((byte *) Input, PackSize);
|
|
DataIO.SetUnpackToMemory ((byte *) NULL, UnpackSize);
|
|
|
|
Unpack Unp = Unpack (&DataIO);
|
|
|
|
// not needed in our tests (no false positives):
|
|
// memset (Win, 0, UnpackSize);
|
|
// #define INPSIZE 0x50000
|
|
// memset (Inp, 0, INPSIZE);
|
|
// memset (VM, 0, INPSIZE);
|
|
// #define PPMSIZE 216 * 1024 * 1024
|
|
// memset (PPM, 0, PPMSIZE);
|
|
|
|
Unp.SetWin (Win);
|
|
Unp.SetPPM (PPM);
|
|
|
|
Unp.Init (WINSIZE, SOLID);
|
|
Unp.SetDestSize (UnpackSize);
|
|
|
|
Unp.SetExternalBuffer (Inp, VM);
|
|
|
|
Unp.DoUnpack (METHOD, SOLID); // sets output
|
|
|
|
unsigned int crc32 = (unsigned int) DataIO.UnpHash.GetCRC32 ();
|
|
|
|
return crc32;
|
|
}
|