88 lines
2.8 KiB
Plaintext
88 lines
2.8 KiB
Plaintext
|
{
|
||
|
$Project$
|
||
|
$Workfile$
|
||
|
$Revision$
|
||
|
$DateUTC$
|
||
|
$Id$
|
||
|
|
||
|
This file is part of the Indy (Internet Direct) project, and is offered
|
||
|
under the dual-licensing agreement described on the Indy website.
|
||
|
(http://www.indyproject.org/)
|
||
|
|
||
|
Copyright:
|
||
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
||
|
}
|
||
|
{
|
||
|
$Log$
|
||
|
}
|
||
|
{
|
||
|
Rev 1.0 11/13/2002 08:30:30 AM JPMugaas
|
||
|
Initial import from FTP VC.
|
||
|
}
|
||
|
|
||
|
{*===========================================================================*}
|
||
|
{* DESCRIPTION *}
|
||
|
{*****************************************************************************}
|
||
|
{* PROJECT : Indy 10 *}
|
||
|
{* AUTHOR : Bas Gooijen *}
|
||
|
{* MAINTAINER : Bas Gooijen *}
|
||
|
{*...........................................................................*}
|
||
|
{* DESCRIPTION *}
|
||
|
{* *}
|
||
|
{* Implementation of the Adler 32 hash algoritm *}
|
||
|
{* Adler 32 is almost as reliable as CRC32, but faster *}
|
||
|
{* *}
|
||
|
{*...........................................................................*}
|
||
|
{* HISTORY *}
|
||
|
{* DATE VERSION AUTHOR REASONS *}
|
||
|
{* *}
|
||
|
{* 17/10/2002 1.0 Bas Gooijen Initial start *}
|
||
|
{*****************************************************************************}
|
||
|
|
||
|
unit IdHashAdler32;
|
||
|
|
||
|
interface
|
||
|
{$i IdCompilerDefines.inc}
|
||
|
|
||
|
uses
|
||
|
IdHash;
|
||
|
|
||
|
type
|
||
|
TIdHashAdler32 = class(TIdHash32)
|
||
|
public
|
||
|
procedure HashStart(var VRunningHash : LongWord); override;
|
||
|
procedure HashByte(var VRunningHash : LongWord; const AByte : Byte); override;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
const
|
||
|
BASE = 65521; { largest prime smaller than 65536 }
|
||
|
NMAX = 5552; { NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 }
|
||
|
|
||
|
{ TIdHashAdler32 }
|
||
|
|
||
|
procedure TIdHashAdler32.HashStart(var VRunningHash : LongWord);
|
||
|
begin
|
||
|
VRunningHash := 1;
|
||
|
end;
|
||
|
|
||
|
procedure TIdHashAdler32.HashByte(var VRunningHash : LongWord; const AByte : Byte);
|
||
|
var
|
||
|
s1, s2: LongWord;
|
||
|
begin
|
||
|
s1 := VRunningHash and $FFFF;
|
||
|
s2 := (VRunningHash shr 16) and $FFFF;
|
||
|
|
||
|
Inc(s1, AByte);
|
||
|
Inc(s2, s1);
|
||
|
|
||
|
s1 := s1 mod BASE;
|
||
|
s2 := s2 mod BASE;
|
||
|
|
||
|
VRunningHash := (s2 shl 16) or s1;
|
||
|
end;
|
||
|
|
||
|
end.
|
||
|
|