Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. // addcrc.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include <conio.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <windows.h>
  9.  
  10.  
  11.  
  12. unsigned int calc_crc(unsigned char *,unsigned int,unsigned int init_crc=0x0000FFFF);
  13.  
  14.  
  15. int main(int argc, char* argv[])
  16. {
  17.         unsigned int filesize;
  18.         unsigned int crc16;
  19.  
  20.         FILE * infile;
  21.  
  22.         unsigned char * indata = 0;
  23.  
  24.         if(argc < 2)
  25.         {
  26.            printf("usage: crc16ccitt file\n");
  27.            return -1;
  28.         }
  29.  
  30.         infile = fopen(argv[1],"rb");
  31.         if( infile==NULL )
  32.         {
  33.                 printf("cant open %s!\n",argv[1]);
  34.                 return -1;
  35.         }
  36.  
  37.  
  38.         // get length of input file
  39.         fseek(infile,0,SEEK_END);
  40.         filesize=ftell(infile);
  41.         fseek(infile,0,SEEK_SET);
  42.  
  43.  
  44.  
  45.         // load file in mem
  46.         indata=(unsigned char*)malloc(filesize);
  47.         if(!indata)
  48.         {
  49.                 printf("can't allocate memory for input file!\n");\
  50.                 fclose(infile);
  51.                 return -1;
  52.         }
  53.  
  54.         if(filesize != fread(indata,1,filesize,infile))
  55.         {
  56.                 printf("can't load input file in mem!\n");
  57.                 fclose(infile);
  58.                 free(indata);
  59.                 return -1;
  60.         }
  61.  
  62.        
  63.         // calc and write crc
  64.         crc16=0x0000FFFF;
  65.        
  66.         crc16 = calc_crc(indata,filesize,crc16);
  67.  
  68.         printf("crc16_ccitt is 0x%X\n",crc16);
  69.  
  70.         FILE *f = fopen("crc.bin", "wb");
  71.         if(f)
  72.         {
  73.             fwrite(&crc16, 1, 2, f);
  74.             fclose(f);
  75.         }
  76.        
  77.         free(indata);
  78.  
  79.         return 0;
  80. }
  81.  
  82.  
  83.  
  84. unsigned int calc_crc(unsigned char * data,unsigned int size,unsigned int init_crc)
  85. {
  86.  
  87.         unsigned int i,ctr,crc;
  88.  
  89.         unsigned char * ptr;
  90.  
  91.         crc = init_crc;
  92.  
  93.         ptr=data;
  94.         ctr=0;
  95.         while( (ctr++) <size)
  96.         {
  97.                 crc ^= (*ptr++) << 8;
  98.                
  99.                 for(i=8;i!=0;i--)
  100.                         crc = (crc&0x00008000) ? ( (crc<<1)^0x1021 ) : (crc<<1);
  101.         }
  102.  
  103.         return crc&0x0000FFFF;
  104. }
  105.