Hash Algorithms - TDCP_hash
February 11, 2026 ยท View on GitHub
DCPcrypt Cryptographic Component Library v2.0.6 Lazarus / Free Pascal edition
All hashes are derived from the TDCP_hash component. It provides a range of functions to allow the hashing of virtually every type of data.
Functions available are:
property Initialized: boolean;
property Id: integer;
property Algorithm: string;
property HashSize: integer;
class function SelfTest: boolean;
procedure Init;
procedure Final(var Digest);
procedure Burn;
procedure Update(const Buffer; Size: longword);
procedure UpdateStream(Stream: TStream; Size: QWord);
procedure UpdateStr(const Str: string);
Example usage:
- Example 1 - File hashing.
Function descriptions
property Initialized: boolean
This is set to true after Init has been called.
property Id: integer
Every algorithm I implement gets given a unique ID number so that if I use several different algorithms within a program I can determine which one was used. This is a purely arbitrary numbering system.
property Algorithm: string
This is the name of the algorithm implemented in the component.
property HashSize: integer
This is the size of the output of the hash algorithm in BITS.
class function SelfTest: boolean
In order to test whether the implementations have all been compiled correctly you can call the SelfTest function. This compares the results of several hash operations with known results for the algorithms (so called test vectors). If all the tests are passed then true is returned. If ANY of the tests are failed then false is returned. You may want to run this function for all the components when you first install the DCPcrypt package and again if you modify any of the source files, you don't need to run this everytime your program is run. Note: this only performs a selection of tests, it is not exhaustive.
procedure Init
Call this procedure to initialize the hash algorithm, this must be called before using the Update procedure.
procedure Final(var Digest)
This procedure returns the final message digest (hash) in Digest. This variable must be the same size as the hash size. This procedure also calls Burn to clear any stored information.
procedure Burn
Call this procedure if you want to abort the hashing operation (normally Final is used). This clears all information stored within the hash. Before the hash can be used again Init must be called.
procedure Update(const Buffer; Size: longword)
This procedure hashes Size bytes of Buffer. To get the hash result call Final.
Update example:
procedure HashBuffer(const Buffer; Size: longint; var Output);
var
Hash: TDCP_ripemd160;
begin
Hash:= TDCP_ripemd160.Create(nil);
Hash.Init;
Hash.Update(Buffer,Size);
Hash.Final(Output);
Hash.Free;
end;
procedure UpdateStream(Stream: TStream; Size: QWord)
This procedure hashes Size bytes from Stream. The Size parameter is QWord (unsigned 64-bit) to support files larger than 4 GB. To get the hash result call Final.
procedure UpdateStr(const Str: string)
This procedure hashes the string Str. To get the hash result call Final.
Example 1 - File hashing
This example shows how you can hash the contents of a file.
procedure TForm1.Button1Click(Sender: TObject);
var
Hash: TDCP_ripemd160;
Digest: array[0..19] of byte; // RipeMD-160 produces a 160bit digest (20bytes)
Source: TFileStream;
i: integer;
s: string;
begin
Source:= nil;
try
Source:= TFileStream.Create(Edit1.Text,fmOpenRead); // open the file specified by Edit1
except
MessageDlg('Unable to open file',mtError,[mbOK],0);
end;
if Source <> nil then
begin
Hash:= TDCP_ripemd160.Create(Self); // create the hash
Hash.Init; // initialize it
Hash.UpdateStream(Source,Source.Size); // hash the stream contents
Hash.Final(Digest); // produce the digest
Source.Free;
s:= '';
for i:= 0 to 19 do
s:= s + IntToHex(Digest[i],2);
Edit2.Text:= s; // display the digest
end;
end;
Index | Ciphers | Block Ciphers
DCPcrypt is copyrighted by its respective authors. Released under the MIT license. All trademarks are property of their respective owners.