Advertisement
Reptor7

ca52chek.cpp - v0.3

Jun 2nd, 2016
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.44 KB | None | 0 0
  1. /*
  2.   ca52chek.cpp * Debugged & Compilable in Dev-C++ 4.9.9.2
  3.   CA52 - Compression Algorithm 52 - File Header Check
  4.   Coded by [DA2K] Reptor * youtube.com/ReptorULTRA7
  5. */
  6.  
  7. #include <iostream>
  8. #include <iomanip>
  9. #include <fstream>
  10. /* CA52 File Struct, Global Vars and Defines
  11.    Get v0.4 header from pastebin.com/1e5TsfGT */
  12. #include "ca52.h"
  13.  
  14. using namespace std;
  15.  
  16. CA52HEADER CA52Head; // file input header
  17. string     CA52MethInfo;
  18. string     CA52ErrorMsg;
  19.  
  20. /******************************************************************************/
  21. void SetCA52Header(uword si,uword ls,uchar cm)
  22. {
  23.   CA52Head.Sig = si;     // file signature
  24.   CA52Head.DataLen = ls; // packed stream size
  25.   CA52Head.Method = cm;  // compression method
  26. }
  27. /******************************************************************************/
  28. bool CheckCA52Header()
  29. {
  30.   bool bMeth;
  31.   uchar i;
  32.  
  33.   if (CA52Head.Sig==0x52CA) { // CA52HEAD_SIG (ca52.h - v0.4)
  34.     if (CA52Head.DataLen>6) {
  35.       i = 0;
  36.       bMeth = false;
  37.       while (i<4) {
  38.         if (CA52Head.Method==CA52METHOD[i]) { bMeth=true; i=4; }
  39.         else i++;
  40.       }
  41.       if (bMeth) {
  42.         switch (CA52Head.Method) {
  43.           case 0xEF:
  44.              CA52MethInfo = "Ethereum Frontier http-URL Pack";
  45.              break;
  46.           case 0x25:
  47.              CA52MethInfo = "2-Step Stream Crunch";
  48.              break;
  49.           case 0xCD:
  50.              CA52MethInfo = "Compressed Dictionary";
  51.              break;
  52.           case 0x7E:
  53.              CA52MethInfo = "Zetauri WAV Crunch";
  54.              break;
  55.           default:
  56.              CA52MethInfo = "Unspecified";
  57.              break;
  58.         }
  59.         CA52ErrorMsg = "None";
  60.         return true; // input legit!
  61.       }
  62.       else {
  63.         CA52ErrorMsg = "Compression Method unknown or unsupported!";
  64.         return false; // higher decruncher version required
  65.       }
  66.     }
  67.     else {
  68.       CA52ErrorMsg = "Packed Stream below minimum size!";
  69.       return false; // packed streams under 7 bytes are impossible ;)
  70.     }
  71.   }
  72.   else {
  73.     CA52ErrorMsg = "Not a CA52 Archive!";
  74.     return false; // dumb user gave me bad or non-existing input file
  75.   }
  76. }
  77. /******************************************************************************/
  78. bool LoadCA52Header(const char *fn) // fn = filename
  79. {
  80.   ifstream fl;
  81.   size_t fs = 0; // fs = filesize
  82.  
  83.   cout << "Input File  : " << fn << endl;
  84.  
  85.   fl.open(fn, ios::in|ios::binary|ios::ate);
  86.   fl.seekg(0, ios::end); // set pointer to end
  87.   fs = fl.tellg(); // get filesize
  88.   if (fs>4) {
  89.     fl.seekg(0, ios::beg); // set pointer to beginning
  90.     fl.read((char*)&CA52Head, sizeof(CA52Head)); // load entire struct
  91.     IsCA52 = CheckCA52Header();
  92.     return true; // legit filesize
  93.   }
  94.   else {
  95.     IsCA52 = false; // no proper header!
  96.     return false; // filesize is below 5 bytes!
  97.   }
  98.   fl.close();
  99. }
  100. /******************************************************************************/
  101. // Decimal to Hex Conversion Macros w/zerofill (double and quad)
  102. #define DHex(x) setfill('0') << setw(2) << uppercase << hex << (int)(x)
  103. #define QHex(x) setfill('0') << setw(4) << uppercase << hex << (int)(x)
  104. // Linefill Macro
  105. #define Line(x) setfill('=') << setw(x) << "="
  106. /******************************************************************************/
  107. int main(int argc, char *argv[])
  108. {
  109.   cout << Line(29) << endl;
  110.   cout << " CA52 - Archive Checker v0.3" << endl;
  111.   cout << Line(29) << endl;
  112.   cout << endl;
  113.  
  114.   SetCA52Header(0x00,0,0x00); // default setting (bugfix:no CA52 signature!)
  115.  
  116.   if (argc<2) {
  117.     cout << "Usage: " << argv[0] << " filename.ca52" << endl;
  118.     return 1;
  119.   }
  120.   else {
  121.     if ( LoadCA52Header(argv[1]) && IsCA52 ) { // pass filename to loader
  122.       cout << "Data Length : " << CA52Head.DataLen << " Bytes" << endl;
  123.       cout << "Compression : " << CA52MethInfo << " (0x" << DHex(CA52Head.Method) << ")" << endl;
  124.       return 0; // EXIT_SUCCESS
  125.     }
  126.     else {
  127.       cout << "Error Msg   : " << CA52ErrorMsg << endl;
  128.       cout << "Header Data : ";
  129.       cout << "(Sig=0x" << QHex(CA52Head.Sig);
  130.       cout << " /Len=" << CA52Head.DataLen;
  131.       cout << " /Meth=0x" << DHex(CA52Head.Method);
  132.       cout << ")" << endl;
  133.       return -1;
  134.     }
  135.   }
  136. }
  137. /*
  138.   Initial Version 0.1 (2015-12-15)
  139.  
  140.   Updated Version 0.2 (2015-12-16)
  141.   * URL: pastebin.com/pCU6DeXm
  142.   * MD5: d147c974b075781a4ab11b9c38b2e909
  143.  
  144.   Revised Version 0.3 (2016-06-02)
  145.   * URL: pastebin.com/vDm7Mp4k
  146.   * MD5: (n/a)
  147. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement