📄 dechash.pas
字号:
{Copyright: Hagen Reddmann HaReddmann at T-Online dot de
Author: Hagen Reddmann
Remarks: freeware, but this Copyright must be included
known Problems: none
Version: 5.1, Part I from Delphi Encryption Compendium ( DEC Part I)
Delphi 5
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
unit DECHash;
interface
uses SysUtils, Classes, DECUtil, DECFmt;
{$I VER.INC}
type
{all Hash Classes}
THash_MD2 = class; {$DEFINE THash_MD2_asm}
THash_MD4 = class; {$DEFINE THash_MD4_asm}
THash_MD5 = class; {$DEFINE THash_MD5_asm}
THash_RipeMD128 = class; {$DEFINE THash_RipeMD128_asm}
THash_RipeMD160 = class; {$DEFINE THash_RipeMD160_asm}
THash_RipeMD256 = class; {$DEFINE THash_RipeMD256_asm}
THash_RipeMD320 = class; {$DEFINE THash_RipeMD320_asm}
THash_SHA = class; {$DEFINE THash_SHA_asm}
THash_SHA1 = class;
THash_SHA256 = class; {.$DEFINE THash_SHA256_asm}
THash_SHA384 = class; {$DEFINE THash_SHA384_asm}
THash_SHA512 = class;
THash_Haval128 = class; {$DEFINE THashBaseHaval_asm}
THash_Haval160 = class;
THash_Haval192 = class;
THash_Haval224 = class;
THash_Haval256 = class;
THash_Tiger = class; {$DEFINE THash_Tiger_asm}
THash_Panama = class; {.$DEFINE THash_Panama_asm}
THash_Whirlpool = class; {$DEFINE THashBaseWhirlpool_asm}
THash_Whirlpool1 = class;
THash_Square = class; {$DEFINE THash_Square_asm}
THash_Snefru128 = class; {$DEFINE THash_Snefru128_asm}
THash_Snefru256 = class; {$DEFINE THash_Snefru256_asm}
THash_Sapphire = class; {$DEFINE THash_Sapphire_asm}
TDECHashClass = class of TDECHash;
TDECHash = class(TDECObject)
protected
FCount: array[0..7] of LongWord;
FBuffer: PByteArray;
FBufferSize: Integer;
FBufferIndex: Integer;
FPaddingByte: Byte;
procedure DoTransform(Buffer: PLongArray); virtual; abstract;
procedure DoInit; virtual; abstract;
procedure DoDone; virtual; abstract;
public
destructor Destroy; override;
procedure Init;
procedure Calc(const Data; DataSize: Integer); virtual;
procedure Done;
function Digest: PByteArray; virtual; abstract;
function DigestStr(Format: TDECFormatClass = nil): Binary; virtual;
class function DigestSize: Integer; virtual; abstract;
class function BlockSize: Integer; virtual; abstract;
class function CalcBuffer(const Buffer; BufferSize: Integer; Format: TDECFormatClass = nil): Binary;
class function CalcStream(const Stream: TStream; Size: Int64; Format: TDECFormatClass = nil; const Progress: IDECProgress = nil): Binary;
class function CalcBinary(const Data: Binary; Format: TDECFormatClass = nil): Binary;
class function CalcFile(const FileName: String; Format: TDECFormatClass = nil; const Progress: IDECProgress = nil): Binary;
class function MGF1(const Data: Binary; MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
class function MGF1(const Data; DataSize, MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
class function KDF2(const Data,Seed: Binary; MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
class function KDF2(const Data; DataSize: Integer; const Seed; SeedSize, MaskSize: Integer; Format: TDECFormatClass = nil): Binary; overload;
// DEC's own KDF+MGF
class function MGFx(const Data; DataSize, MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
class function MGFx(const Data: Binary; MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
class function KDFx(const Data,Seed: Binary; MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
class function KDFx(const Data; DataSize: Integer; const Seed; SeedSize, MaskSize: Integer; Format: TDECFormatClass = nil; Index: LongWord = 1): Binary; overload;
published
property PaddingByte: Byte read FPaddingByte write FPaddingByte;
end;
THash_MD2 = class(TDECHash)
private
FDigest: array[0..63] of Byte;
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoInit; override;
procedure DoDone; override;
public
class function DigestSize: Integer; override;
class function BlockSize: Integer; override;
function Digest: PByteArray; override;
end;
THashBaseMD4 = class(TDECHash)
private
FDigest: array[0..9] of LongWord;
protected
procedure DoInit; override;
procedure DoDone; override;
public
class function DigestSize: Integer; override;
class function BlockSize: Integer; override;
function Digest: PByteArray; override;
end;
THash_MD4 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
end;
THash_MD5 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
end;
THash_RipeMD128 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
end;
THash_RipeMD160 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
public
class function DigestSize: Integer; override;
end;
THash_RipeMD256 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoInit; override;
public
class function DigestSize: Integer; override;
end;
THash_RipeMD320 = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
public
class function DigestSize: Integer; override;
end;
THash_SHA = class(THashBaseMD4)
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoDone; override;
public
class function DigestSize: Integer; override;
end;
THash_SHA1 = class(THash_SHA);
THash_SHA256 = class(THash_SHA)
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoInit; override;
public
class function DigestSize: Integer; override;
end;
THash_SHA384 = class(TDECHash)
private
FDigest: array[0..7] of Int64;
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoInit; override;
procedure DoDone; override;
public
class function DigestSize: Integer; override;
class function BlockSize: Integer; override; // 128
function Digest: PByteArray; override;
end;
THash_SHA512 = class(THash_SHA384)
protected
procedure DoInit; override;
public
class function DigestSize: Integer; override;
end;
THashBaseHaval = class(TDECHash)
private
FDigest: array[0..7] of LongWord;
FRounds: Integer; {3 - 5}
FTransform: procedure(Buffer: PLongArray) of object;
procedure SetRounds(Value: Integer);
protected
procedure DoTransform (Buffer: PLongArray); override;
procedure DoTransform3(Buffer: PLongArray);
procedure DoTransform4(Buffer: PLongArray);
procedure DoTransform5(Buffer: PLongArray);
procedure DoInit; override;
procedure DoDone; override;
public
class function BlockSize: Integer; override;
function Digest: PByteArray; override;
published
property Rounds: Integer read FRounds write SetRounds;
end;
THash_Haval128 = class(THashBaseHaval)
public
class function DigestSize: Integer; override;
end;
THash_Haval160 = class(THashBaseHaval)
public
class function DigestSize: Integer; override;
end;
THash_Haval192 = class(THashBaseHaval)
public
class function DigestSize: Integer; override;
end;
THash_Haval224 = class(THashBaseHaval)
public
class function DigestSize: Integer; override;
end;
THash_Haval256 = class(THashBaseHaval)
public
class function DigestSize: Integer; override;
end;
THash_Tiger = class(THashBaseMD4)
private
FRounds: Integer;
procedure SetRounds(Value: Integer);
protected
procedure DoTransform(Buffer: PLongArray); override;
procedure DoInit; override;
public
class function DigestSize: Integer; override;
published
property Rounds: Integer read FRounds write SetRounds;
end;
THash_Panama = class(TDECHash)
private
FLFSRBuffer: array[0..31, 0..7] of LongWord;
FDigest: array[0..16] of LongWord;
FTap: LongWord;
protected
procedure DoInit; override;
procedure DoDone; override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -