Advertisement
Reptor7

ca52chek.cpp - v0.2

Dec 16th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.03 KB | None | 0 0
  1. /*
  2.   ca52chek.cpp (Debugged and 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.3 header from pastebin.com/1zh50698 */
  12. #include "ca52.h"
  13.  
  14. using namespace std;
  15.  
  16. CA52HEADER CA52Head; // 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) {
  34.     if (CA52Head.DataLen>6) {
  35.       i = 0;
  36.       bMeth = false;
  37.       while (i<3) {
  38.         if (CA52Head.Method==CA52METHOD[i]) { bMeth=true; i=3; }
  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.           default:
  53.              CA52MethInfo = "Unspecified";
  54.              break;
  55.         }
  56.         CA52ErrorMsg = "None";
  57.         return true; // input legit!
  58.       }
  59.       else {
  60.         CA52ErrorMsg = "Compression Method unknown or unsupported!";
  61.         return false; // higher decruncher version required
  62.       }
  63.     }
  64.     else {
  65.       CA52ErrorMsg = "Packed Stream below minimum size!";
  66.       return false; // packed streams under 7 bytes are impossible ;)
  67.     }
  68.   }
  69.   else {
  70.     CA52ErrorMsg = "Not a CA52 Archive!";
  71.     return false; // dumb user gave me bad input file
  72.   }
  73. }
  74. /******************************************************************************/
  75. bool LoadCA52Header(const char *fn)
  76. {
  77.   ifstream fl;
  78.   size_t fs = 0;
  79.  
  80.   cout << "Input File  : " << fn << endl;
  81.  
  82.   fl.open(fn, ios::in|ios::binary|ios::ate);
  83.   fl.seekg(0, ios::end);
  84.   fs = fl.tellg(); // get filesize
  85.   if (fs>4) {
  86.     fl.seekg(0, ios::beg);
  87.     fl.read((char*)&CA52Head, sizeof(CA52Head)); // load entire struct
  88.     IsCA52 = CheckCA52Header();
  89.     return true; // legit filesize
  90.   }
  91.   else {
  92.     IsCA52 = false; // no proper header!
  93.     return false; // filesize is below 5 bytes!
  94.   }
  95.   fl.close();
  96. }
  97. /******************************************************************************/
  98. // Decimal to Hex Conversion Macros w/zerofill (double and quad)
  99. #define DHex(x) setfill('0') << setw(2) << uppercase << hex << (int)(x)
  100. #define QHex(x) setfill('0') << setw(4) << uppercase << hex << (int)(x)
  101. // Linefill Macro
  102. #define Line(x) setfill('=') << setw(x) << "="
  103. /******************************************************************************/
  104. int main(int argc, char *argv[])
  105. {
  106.   cout << Line(29) << endl;
  107.   cout << " CA52 - Archive Checker v0.2" << endl;
  108.   cout << Line(29) << endl;
  109.   cout << endl;
  110.  
  111.   SetCA52Header(CA52HEAD_SIG,0,0x00); // default setting
  112.  
  113.   if (argc<2) {
  114.     cout << "Usage: " << argv[0] << " filename.ca52" << endl;
  115.     return 1;
  116.   }
  117.   else {
  118.     if ( LoadCA52Header(argv[1]) && IsCA52 ) { // pass filename to loader
  119.       cout << "Data Length : " << CA52Head.DataLen << " Bytes" << endl;
  120.       cout << "Compression : " << CA52MethInfo << " (0x" << DHex(CA52Head.Method) << ")" << endl;
  121.       return 0;
  122.     }
  123.     else {
  124.       cout << "Error Msg   : " << CA52ErrorMsg << endl;
  125.       cout << "Header Data : ";
  126.       cout << "(Sig=0x" << QHex(CA52Head.Sig);
  127.       cout << " /Len=" << CA52Head.DataLen;
  128.       cout << " /Meth=0x" << DHex(CA52Head.Method);
  129.       cout << ")" << endl;
  130.       return -1;
  131.     }
  132.   }
  133. }
  134. /*
  135.   Initial Version 0.1 (2015-12-15)
  136.   Updated Version 0.2 (2015-12-16)
  137. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement