CRSee Checksum Tool

This tool can be used for checking file code to see if the file download matches what the tool says. Just open the program with one of my apps and it will verify its checksum. You can type crsee.exe /? at the command prompt to get help.
program crsee;

{$APPTYPE console}
{$RESOURCE crseeres.res}
uses
  SysUtils,
  commdlg,
  windows,
  Classes;

  Const
    CRCSeed = $ffffffff;
    CRC32tab : Array[0..255] of DWord = (
      $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f,
      $e963a535, $9e6495a3, $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988,
      $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, $1db71064, $6ab020f2,
      $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7,
      $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9,
      $fa0f3d63, $8d080df5, $3b6e20c8, $4c69105e, $d56041e4, $a2677172,
      $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, $35b5a8fa, $42b2986c,
      $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59,
      $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423,
      $cfba9599, $b8bda50f, $2802b89e, $5f058808, $c60cd9b2, $b10be924,
      $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, $76dc4190, $01db7106,
      $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433,
      $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d,
      $91646c97, $e6635c01, $6b6b51f4, $1c6c6162, $856530d8, $f262004e,
      $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, $65b0d9c6, $12b7e950,
      $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65,
      $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7,
      $a4d1c46d, $d3d6f4fb, $4369e96a, $346ed9fc, $ad678846, $da60b8d0,
      $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, $5005713c, $270241aa,
      $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f,
      $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81,
      $b7bd5c3b, $c0ba6cad, $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a,
      $ead54739, $9dd277af, $04db2615, $73dc1683, $e3630b12, $94643b84,
      $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1,
      $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb,
      $196c3671, $6e6b06e7, $fed41b76, $89d32be0, $10da7a5a, $67dd4acc,
      $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, $d6d6a3e8, $a1d1937e,
      $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b,
      $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55,
      $316e8eef, $4669be79, $cb61b38c, $bc66831a, $256fd2a0, $5268e236,
      $cc0c7795, $bb0b4703, $220216b9, $5505262f, $c5ba3bbe, $b2bd0b28,
      $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d,
      $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f,
      $72076785, $05005713, $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38,
      $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, $86d3d2d4, $f1d4e242,
      $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777,
      $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69,
      $616bffd3, $166ccf45, $a00ae278, $d70dd2ee, $4e048354, $3903b3c2,
      $a7672661, $d06016f7, $4969474d, $3e6e77db, $aed16a4a, $d9d65adc,
      $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9,
      $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693,
      $54de5729, $23d967bf, $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94,
      $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d  );
function crc32_update(inbuffer: pointer; buffersize, crc: DWord): DWord;
// crc-32.  Processes 4 bytes at a time.
type
  PDWord = ^DWord;
  PByte = ^Byte;
var
  currptr: pointer;
  i: byte;
begin
  currptr := inbuffer;
  Result := crc;
  while buffersize > 4 do
    begin
      Result := Result xor PDWord(currptr)^;
      inc(Longint(currptr), 4);
      Result := (Result shr 8) xor Crc32Tab[Byte(Result)];
      Result := (Result shr 8) xor Crc32Tab[Byte(Result)];
      Result := (Result shr 8) xor CRC32Tab[Byte(Result)];
      Result := (Result shr 8) xor crc32Tab[Byte(Result)];
      dec(buffersize, 4);
    end;
  for i := 1 to buffersize do
    begin
      Result := CRC32tab[Byte(Result xor DWord(PByte(currptr)^))] xor (Result shr 8);
      inc(Longint(currptr), 1);
    end;
end;

function GetConsoleWindow:hwnd;stdcall;external'kernel32.dll';

Function CRCend( crc : DWord ): DWord;
begin
  CRCend := (crc xor CRCSeed);
end;

function FileCRC32(hf:thandle):Dword;
var buf:array[0..64*1024]of byte;
dwread:dword;
begin
dwread:=1;
result:=0;
while dwread>0 do begin
readfile(hf,buf,sizeof(buf),dwread,nil);
result:=crc32_update(@buf,dwread,result);
end;
result:=crcend(result);
end;
function formatfilesize(dwSize:DWord):String;
begin
result:=format('%u bytes',[dwSize]);
if dwsize>1023then result:=format('%fKB',[dwsize/1024]);
if dwsize>=(1024*1024)then result:=format('%fMB',[dwsize/(1024*1024)]);
if dwsize>=(1024*1024*1024)then result:=format('%fGB',[dwsize/(1024*1024*1024)]);
if dwsize=dword(-1)then result:='N/A';
end;
var
fsize,crc32,editflags,crccheck:Dword;
hf:thandle;
filen:Array[0..max_path]of char;
choosefileinfo:topenfilename;
hkcr:HKey;
buff:array[0..255]of char;
label choosefile;
begin
crccheck:=0;
if paramstr(1)='/?'then begin
writeln('Usage: ',extractfilename(paramstr(0)),' [/L crsee:checksum] [filename] [/C]');
writeln('/L     Specifies the URL containing the checksum used by a webbrowser.');
writeln('/C     Do not wait for the enter key to be pressed before closing');
writeln;
writeln('The program sets the errorlevel to the checksum');
exitprocess(0);
end else if(paramstr(1)='')or(paramstr(1)='/L')then begin
regcreatekey(hkey_current_user,'software\classes\crsee',hkcr);
editflags:=2;
regsetvalueex(hkcr,'EditFlags',0,reg_dword,@editflags,4);
regsetvalueex(hkcr,'URL Protocol',0,reg_sz,@buff,0);
strpcopy(buff,Paramstr(0)+' /L %1');
regsetvalue(hkcr,'Shell\Open\command',reg_sz,buff,strlen(buff)+1);
regclosekey(hkcr);
choosefile:
zeromemory(@choosefileinfo,sizeof(choosefileinfo));
choosefileinfo.lStructSize:=sizeof(choosefileinfo);
choosefileinfo.lpstrFile:=@filen;
choosefileinfo.nMaxFile:=max_path+1;
choosefileinfo.hWndOwner:=getconsolewindow;
choosefileinfo.Flags:=ofn_filemustexist or ofn_hidereadonly;
if not GetOpenFileName(choosefileinfo)then exitprocess(0);
end
else strpcopy(filen,paramstr(1));
if paramstr(1)='/L'then crccheck:=strtoint('$'+copy(paramstr(2),length(
'crsee:')+1,length(paramstr(2))));
hf:=createfile(filen,generic_read,file_share_read or
file_share_write or file_share_delete,nil,open_existing,file_attribute_normal,0);
if hf=invalid_handle_value then begin writeln('OpenErr:',syserrormessage(getlasterror),
'(',inttohex(getlasterror,0),')');exitprocess(0);end;
fsize:=getfilesize(hf,nil);
if fsize=dword(-1)then begin writeln('SizeErr:',syserrormessage(getlasterror),'(',
inttohex(getlasterror,0),')');closehandle(hf);exitprocess(dword(-1));end;
writeln('Size: ',formatfilesize(fsize));
crc32:=Filecrc32(hf);
writeln('Checksum: ',Inttohex(crc32,8));
if crc32=crcseed then writeln('ReadErr:',syserrormessage(getlasterror),'(',
inttohex(getlasterror,0),')');
if crccheck>0then begin
if crc32=crccheck then writeln('File successfully passes the test')else
writeln('File has failed the test');
end;
closehandle(hf);
if stricomp('/C',pchar(paramstr(2)))=0then exitprocess(crc32);
write('Press enter to return...');readln;
if paramcount=0then goto choosefile;
end.

Published by Justin Roeder

I am an electronics engineer and computer programmer that has autism. I learned by myself

Leave a comment

Your email address will not be published. Required fields are marked *