mirror of
https://github.com/hashcat/hashcat.git
synced 2024-11-15 12:29:35 +00:00
56 lines
1.6 KiB
C++
56 lines
1.6 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 = new 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 ();
|
||
|
|
||
|
delete Unp;
|
||
|
|
||
|
return crc32;
|
||
|
}
|