| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {}
- { $Log: 11253: HashBox.pas
- {
- { Rev 1.0 11/12/2002 09:18:10 PM JPMugaas
- { Initial check in. Import from FTP VC.
- }
- unit HashBox;
- interface
- uses
- IndyBox,
- IdHash, IdHashCRC, IdHashElf, IdHashMessageDigest;
- const
- MaxMemToLoad = 16777216; // 16MB
- type
- THashBox = class(TIndyBox)
- public
- procedure Test; override;
- end;
- implementation
- uses
- Classes,
- IdGlobal,
- SysUtils;
- { THashBox }
- procedure THashBox.Test;
- const
- CHashTests = 6;
- var
- FHash16 : TIdHash16;
- FHash32 : TIdHash32;
- FHashMD2 : TIdHash128;
- FHashMD4 : TIdHash128;
- FHashMD5 : TIdHash128;
- FHashElf : TidHashElf;
-
- finddata: TSearchRec;
- FS : TFileStream;
- MS : TMemoryStream;
- TS : TStream;
- TestData : TStringList;
- i : Integer;
- H16 : Word;
- H32 : LongWord;
- H128 : T4x4LongWordRecord;
- function ToHex : String;
- var
- T128 : T128BitRecord;
- i : Integer;
- begin
- result := '';
- Move(H128, T128, 16);
- for i := 0 to 15 do
- begin
- result := result + IntToHex(T128[i], 2);
- end;
- end;
- begin
- FHash16 := TIdHashCRC16.Create;
- FHash32 := TIdHashCRC32.Create;
- FHashMD2 := TIdHashMessageDigest2.Create;
- FHashMD4 := TIdHashMessageDigest4.Create;
- FHashMD5 := TIdHashMessageDigest5.Create;
- FHashElf := TIdHashElf.Create;
- TestData := TStringList.Create;
- i:= 0;
- try
- if FindFirst(GetDataDir + '*.ini', faAnyFile - faDirectory, finddata) = 0 then begin
- repeat
- inc(i);
- Status('Test ' + IntToStr(i) + ': ' + finddata.Name);
- TestData.LoadFromFile(GetDataDir + finddata.Name);
- if TestData.Count < CHashTests then
- begin
- raise Exception.Create('Insufficient test results in .ini for tests');
- end;
- // Change the extension to .dat
- FS := TFileStream.Create(GetDataDir+ChangeFileExt(finddata.Name, '.dat'), fmOpenRead or fmShareDenyNone);
- TS := FS;
- MS := TMemoryStream.Create;
- if FS.Size <= MaxMemToLoad then
- begin
- MS.LoadFromStream(FS);
- TS := MS;
- end;
- try
- // CRC-16
- H16 := FHash16.HashValue(TS);
- Status('HashCRC16, expected: ' + TestData[0] + ', got: '
- + IntToHex(H16, 4));
- Check(AnsiSameText(IntToHex(H16, 4), TestData[0]), 'Failed on HashCRC16.');
- // CRC-32
- TS.Seek(0, soFromBeginning);
- H32 := FHash32.HashValue(TS);
- Status('HashCRC32, expected: ' + TestData[1] + ', got: '
- + IntToHex(H32, 8));
- Check(AnsiSameText(IntToHex(H32, 8), TestData[1]), 'Failed on HashCRC32.');
- // MD2
- TS.Seek(0, soFromBeginning);
- H128 := FHashMD2.HashValue(TS);
- Status('HashMD2, expected: ' + TestData[2] + ', got: '
- + ToHex);
- Check(AnsiSameText(ToHex, TestData[2]), 'Failed on HashMD2.');
- // MD4
- TS.Seek(0, soFromBeginning);
- H128 := FHashMD4.HashValue(TS);
- Status('HashMD4, expected: ' + TestData[3] + ', got: '
- + ToHex);
- Check(AnsiSameText(ToHex, TestData[3]), 'Failed on HashMD4.');
- // MD5
- TS.Seek(0, soFromBeginning);
- H128 := FHashMD5.HashValue(TS);
- Status('HashMD5, expected: ' + TestData[4] + ', got: '
- + ToHex);
- Check(AnsiSameText(ToHex, TestData[4]), 'Failed on HashMD5.');
- // Elf
- TS.Seek(0, soFromBeginning);
- H32 := FHashElf.HashValue(TS);
- Status('HashElf, expected: ' + TestData[5] + ', got: '
- + IntToHex(H32, 8));
- Check(AnsiSameText(IntToHex(H32, 8), TestData[5]), 'Failed on HashElf.');
- finally
- FreeAndNil(FS);
- FreeAndNil(MS);
- end;
- until FindNext(finddata) <> 0;
- FindClose(finddata);
- end;
- finally
- FreeAndNil(TestData);
- FreeAndNil(FHash16);
- FreeAndNil(FHash32);
- FreeAndNil(FHashMD2);
- FreeAndNil(FHashMD4);
- FreeAndNil(FHashMD5);
- FreeAndNil(FHashElf);
- end;
- end;
- initialization
- TIndyBox.RegisterBox(THashBox, 'Hash', 'Misc');
- end.
|