Advertisement
fastman92

IMG::UnpackData

May 23rd, 2015
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. // Unpacks data
  2. void IMG::UnpackData(
  3.         eCompressionType compressionType,
  4.         eEncryptionType encryptionType,
  5.         const char* encryptionKey,
  6.         void* UnpackedPtr,
  7.         unsigned long UnpackedSize,
  8.         const void *PackedPtr,
  9.         size_t MaxPackedSize
  10.         )
  11. {
  12.     switch(encryptionType)
  13.     {
  14.     case ENCRYPTION_TYPE_NONE:
  15.         {
  16.             memcpy(UnpackedPtr, PackedPtr, UnpackedSize);
  17.             break;
  18.         }
  19.  
  20.     case ENCRYPTION_TYPE_GTAIV_AES:
  21.         {
  22.             CRijndael oRijndael;
  23.             oRijndael.MakeKey(encryptionKey, CRijndael::sm_chain0, 32, 16);
  24.  
  25.             char* xPackedPtr = new char[MaxPackedSize];
  26.             memcpy(xPackedPtr, PackedPtr, MaxPackedSize);
  27.  
  28.             unsigned long DecryptionSize = MaxPackedSize / 16 * 16;
  29.             unsigned long RemainderSize = MaxPackedSize % 16;
  30.  
  31.             for(int i = 0; i < 16; i++)
  32.             {
  33.                 oRijndael.Decrypt((const char*)xPackedPtr, (char*)UnpackedPtr, DecryptionSize, CRijndael::ECB);
  34.                 memcpy(xPackedPtr, UnpackedPtr, MaxPackedSize);
  35.             }
  36.  
  37.             memcpy((char*)UnpackedPtr + DecryptionSize, (char*)PackedPtr + DecryptionSize, RemainderSize);
  38.            
  39.             delete xPackedPtr;
  40.             break;
  41.         }
  42.     }      
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement