{*****************************************************************************
The DEC team (see file NOTICE.txt) licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. A copy of this licence is found in the root directory of
this project in the file LICENCE.txt or alternatively at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*****************************************************************************}
{$M+} // DUnitX would add it anyway
unit TestDECHashSHA3;
interface
// Needs to be included before any other statements
{$INCLUDE TestDefines.inc}
{$INCLUDE ..\..\Source\DECOptions.inc}
{$IF CompilerVersion >= 24.0} // Too many local constants for Delphi XE2 and older
uses
System.SysUtils, System.Classes, Generics.Collections,
{$IFDEF DUnitX}
DUnitX.TestFramework,DUnitX.DUnitCompatibility,
{$ELSE}
TestFramework,
{$ENDIF}
TestDECTestDataContainer,
DECTypes, DECBaseClass, DECHash, DECHashBase, DECHashAuthentication, DECUtil,
DECFormatBase, DECHashBitBase, TestDECHash;
type
///
/// Base class for the SHA3 tests, provides loading the test data from files
///
TestTHash_SHA3_Base = class(THash_TestBase)
strict private
///
/// Load the data of all test files specified for the test class
///
procedure LoadTestFiles; inline;
///
/// Calculate the Unicode hash value of the given test data
///
///
/// Test data as lower case Hex-Value
///
///
/// Instance of the hash algorithm used
///
///
/// Calculated lower case hex formatted hash over the test data
///
function CalcUnicodeHash(TestData : string;
HashInst : TDECHashAuthentication): RawByteString; inline;
strict protected
///
/// List of test data files to laod
///
FTestFileNames : TStringList;
///
/// Overridden so that loading of the test data file only happens here
/// and not also for the metadata etc. tests as well
///
procedure DoTestCalcBuffer(HashClass:TDECHash); override;
///
/// Overridden so that loading of the test data file only happens here
/// and not also for the metadata etc. tests as well
///
procedure DoTestCalcBytes(HashClass:TDECHash); override;
///
/// Overridden so that loading of the test data file only happens here
/// and not also for the metadata etc. tests as well
///
procedure DoTestCalcStream(HashClass:TDECHash); override;
///
/// Overridden so that loading of the test data file only happens here
/// and not also for the metadata etc. tests as well
///
procedure DoTestCalcUnicodeString(HashClass:TDECHash); override;
///
/// Overridden so that loading of the test data file only happens here
/// and not also for the metadata etc. tests as well
///
procedure DoTestCalcRawByteString(HashClass:TDECHash); override;
///
/// Loads data stored in the rsp files provided by NIST into the test
/// data lists. Any exceptions will be caught and entries with wrong format
/// ignored.
///
///
/// Namne of the file to load
///
///
/// Interface to the test data management instance
///
///
/// Instance of the hashing class to be tested for calculating the UTF-string
/// test data.
///
procedure LoadTestDataFile(FileName : string;
TestData : IHashTestDataContainer;
HashInst : TDECHashAuthentication);
public
///
/// Create test file list
///
procedure SetUp; override;
///
/// Free test file lsit
///
procedure TearDown; override;
end;
// Test methods for class THash_SHA3_224
{$IFDEF DUnitX} [TestFixture] {$ENDIF}
TestTHash_SHA3_224 = class(TestTHash_SHA3_Base)
strict protected
///
/// Some tests need to set the SHA3 specific padding byte and final bit length
/// parameters
///
procedure ConfigHashClass(HashClass: TDECHash; IdxTestData:Integer); override;
public
procedure SetUp; override;
published
procedure TestDigestSize;
procedure TestBlockSize;
procedure TestIsPasswordHash;
procedure TestClassByName;
procedure TestIdentity;
end;
// Test methods for class THash_SHA3_256
{$IFDEF DUnitX} [TestFixture] {$ENDIF}
TestTHash_SHA3_256 = class(TestTHash_SHA3_Base)
strict protected
///
/// Some tests need to set the SHA3 specific padding byte and final bit length
/// parameters
///
procedure ConfigHashClass(HashClass: TDECHash; IdxTestData:Integer); override;
public
procedure SetUp; override;
published
procedure TestDigestSize;
procedure TestBlockSize;
procedure TestIsPasswordHash;
procedure TestClassByName;
procedure TestIdentity;
end;
// Test methods for class THash_SHA3_384
{$IFDEF DUnitX} [TestFixture] {$ENDIF}
TestTHash_SHA3_384 = class(TestTHash_SHA3_Base)
strict protected
///
/// Some tests need to set the SHA3 specific padding byte and final bit length
/// parameters
///
procedure ConfigHashClass(HashClass: TDECHash; IdxTestData:Integer); override;
public
procedure SetUp; override;
published
procedure TestDigestSize;
procedure TestBlockSize;
procedure TestIsPasswordHash;
procedure TestClassByName;
procedure TestIdentity;
end;
// Test methods for class THash_SHA3_512
{$IFDEF DUnitX} [TestFixture] {$ENDIF}
TestTHash_SHA3_512 = class(TestTHash_SHA3_Base)
strict protected
///
/// Some tests need to set the SHA3 specific padding byte and final bit length
/// parameters
///
procedure ConfigHashClass(HashClass: TDECHash; IdxTestData:Integer); override;
public
procedure SetUp; override;
published
procedure TestDigestSize;
procedure TestBlockSize;
procedure TestIsPasswordHash;
procedure TestClassByName;
procedure TestIdentity;
end;
implementation
uses
DECFormat;
{ TestTHash_SHA3_Base }
procedure TestTHash_SHA3_Base.SetUp;
begin
inherited;
FTestFileNames := TStringList.Create;
end;
procedure TestTHash_SHA3_Base.TearDown;
begin
inherited;
FTestFileNames.Free;
end;
procedure TestTHash_SHA3_Base.LoadTestFiles;
var
FileName : string;
begin
for FIleName in FTestFIleNames do
LoadTestDataFile(FileName, FTestData, FHash);
end;
procedure TestTHash_SHA3_Base.DoTestCalcBuffer(HashClass:TDECHash);
begin
LoadTestFiles;
inherited;
end;
procedure TestTHash_SHA3_Base.DoTestCalcBytes(HashClass:TDECHash);
begin
LoadTestFiles;
inherited;
end;
procedure TestTHash_SHA3_Base.DoTestCalcStream(HashClass:TDECHash);
begin
LoadTestFiles;
inherited;
end;
procedure TestTHash_SHA3_Base.DoTestCalcUnicodeString(HashClass:TDECHash);
begin
LoadTestFiles;
inherited;
end;
procedure TestTHash_SHA3_Base.DoTestCalcRawByteString(HashClass:TDECHash);
begin
LoadTestFiles;
inherited;
end;
procedure TestTHash_SHA3_Base.LoadTestDataFile(FileName : string;
TestData : IHashTestDataContainer;
HashInst : TDECHashAuthentication);
var
Contents : TStringList;
FileRow,
FileRowTrim,
s1 : string;
Len : Int32;
FinalByteLen : Int16;
lDataRow : IHashTestDataRowSetup;
begin
Len := 0;
Contents := TStringList.Create;
try
Contents.LoadFromFile(FileName);
for FileRow in Contents do
begin
FileRowTrim := LowerCase(Trim(FileRow));
if (Pos('len', FileRowTrim) = 1) then
begin
lDataRow := FTestData.AddRow;
s1 := FileRowTrim;
Delete(s1, 1, 6);
Len := StrToInt(s1);
FinalByteLen := Len mod 8;
lDataRow.FinalBitLength := FinalByteLen;
THash_SHA3Base(HashInst).FinalByteLength := FinalByteLen;
Continue;
end;
if (Pos('msg', FileRowTrim) = 1) then
begin
s1 := FileRowTrim;
Delete(s1, 1, 6);
if (Len > 0) then
begin
lDataRow.AddInputVector(TFormat_HexL.Decode(RawByteString(s1)));
lDataRow.ExpectedOutputUTFStrTest := CalcUnicodeHash(s1, HashInst);
end
else
begin
lDataRow.AddInputVector('');
lDataRow.ExpectedOutputUTFStrTest := CalcUnicodeHash('', HashInst);
end;
Continue;
end;
if (Pos('md', FileRowTrim) = 1) then
begin
s1 := FileRowTrim;
Delete(s1, 1, 5);
lDataRow.ExpectedOutput := RawByteString(s1);
Continue;
end;
end;
finally
Contents.Free;
end;
end;
function TestTHash_SHA3_Base.CalcUnicodeHash(TestData : string;
HashInst : TDECHashAuthentication): RawByteString;
begin
Result := BytesToRawString(TFormat_HEXL.Encode(
System.SysUtils.BytesOf(HashInst.CalcString(
string(TFormat_HexL.Decode(RawByteString(TestData)))))));
end;
{ TestTHash_SHA3_224 }
procedure TestTHash_SHA3_224.ConfigHashClass(HashClass: TDECHash;
IdxTestData: Integer);
begin
inherited;
THash_SHA3_224(FHash).FinalByteLength := FTestData[IdxTestData].FinalByteLength;
THash_SHA3_224(FHash).PaddingByte := FTestData[IdxTestData].PaddingByte;
end;
procedure TestTHash_SHA3_224.SetUp;
var
lDataRow : IHashTestDataRowSetup;
i : Integer;
s : RawByteString;
begin
// All specified data sources are for the non unicode expected outputs
inherited;
FHash := THash_SHA3_224.Create;
//Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-
// Validation-Program/documents/sha3/sha-3bittestvectors.zip
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_224ShortMsg.rsp');
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_224LongMsg.rsp');
// SourceEnd
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_1600.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '9376816aba503f72f96ce7eb65ac095deee3be4b' +
'f9bbc2a1cb7e11e0';
lDataRow.ExpectedOutputUTFStrTest := '28a4a80fded04a676674687c8330422eedeb18c9' +
'dba976234a9e007a';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1, 20);
lDataRow.FinalBitLength := 0;
// Source: https://emn178.github.io/online-tools/sha3_224.html
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '32eb6a4121daebe223db1987740814e1dd9d9ddb' +
'ddfd466feff5c9b4';
lDataRow.ExpectedOutputUTFStrTest := '0f1ad8cd5a85fe68319b67427e1f0b685498bc24' +
'6a81a1f595c89e4e';
lDataRow.AddInputVector(RawByteString('e21et2e2et1208e7t12e07812te08127et1028e' +
'7t1208e7gd81d872t178r02tr370823'), 1, 10);
lDataRow.FinalBitLength := 0;
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'f7fc914c8fe4827d866b02df2459840260f4adb0' +
'db4deb9fa661756c';
lDataRow.ExpectedOutputUTFStrTest := 'e4d44bbda0b8fc8a73b421f6795c6380c0e21d50' +
'539a7b43c20a7529';
for i := 1 to 10 do
s := s + 'e21et2e2et1208e7t12e07812te08127et1028e7t1208e7gd81d872t178r02tr370823';
s := s + 'TurboMagic';
s := s + s + s;
lDataRow.AddInputVector(s);
lDataRow.FinalBitLength := 0;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_Msg5.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'ffbad5da96bad71789330206dc6768ecaeb1b32d' +
'ca6b3301489674ab';
lDataRow.ExpectedOutputUTFStrTest := '3d0e88c1e4fe0f6577e921e50805155b0748b40a' +
'3ab368c96b63f686';
lDataRow.AddInputVector(#$13);
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_Msg30.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'd666a514cc9dba25ac1ba69ed3930460deaac985' +
'1b5f0baab007df3b';
lDataRow.ExpectedOutputUTFStrTest := '098526f4e121e977c325078374bf13ee9b0f2ed3' +
'14ce743c5641cebe';
lDataRow.AddInputVector(#$53#$58#$7B#$19);
lDataRow.FinalBitLength := 6;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_Msg1605.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '22d2f7bb0b173fd8c19686f9173166e3ee627380' +
'47d7eadd69efb228';
lDataRow.ExpectedOutputUTFStrTest := 'a6871aef1c16c4c0fcaef97636711fb6216b1586' +
'26d4e2b7e9e7e962';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3));
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_1630.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '4e907bb1057861f200a599e9d4f85b02d88453bf' +
'5b8ace9ac589134c';
lDataRow.ExpectedOutputUTFStrTest := '30a15a07d7f0a34e5b36de3bec18c31eac2c9495' +
'2b50820095c8807e';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3));
lDataRow.FinalBitLength := 6;
end;
procedure TestTHash_SHA3_224.TestBlockSize;
begin
CheckEquals(144, FHash.BlockSize);
end;
procedure TestTHash_SHA3_224.TestClassByName;
begin
DoTestClassByName('THash_SHA3_224', THash_SHA3_224);
end;
procedure TestTHash_SHA3_224.TestDigestSize;
begin
CheckEquals(28, FHash.DigestSize);
end;
procedure TestTHash_SHA3_224.TestIdentity;
begin
CheckEquals($D0579DA9, FHash.Identity);
end;
procedure TestTHash_SHA3_224.TestIsPasswordHash;
begin
CheckNotEquals(true, FHash.IsPasswordHash);
end;
{ TestTHash_SHA3_256 }
procedure TestTHash_SHA3_256.ConfigHashClass(HashClass: TDECHash;
IdxTestData: Integer);
begin
inherited;
THash_SHA3_256(FHash).FinalByteLength := FTestData[IdxTestData].FinalByteLength;
THash_SHA3_256(FHash).PaddingByte := FTestData[IdxTestData].PaddingByte;
end;
procedure TestTHash_SHA3_256.SetUp;
var
lDataRow:IHashTestDataRowSetup;
begin
// All specified data sources are for the non unicode expected outputs
inherited;
FHash := THash_SHA3_256.Create;
//Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-
// Validation-Program/documents/sha3/sha-3bittestvectors.zip
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_256ShortMsg.rsp');
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_256LongMsg.rsp');
// SourceEnd
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-256_Msg0.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'a7ffc6f8bf1ed76651c14756a061d662f580ff4d' +
'e43b49fa82d80a4b80f8434a';
lDataRow.ExpectedOutputUTFStrTest := 'a7ffc6f8bf1ed76651c14756a061d662f580ff4d' +
'e43b49fa82d80a4b80f8434a';
lDataRow.AddInputVector('');
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-224_1600.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '79f38adec5c20307a98ef76e8324afbfd46cfd81' +
'b22e3973c65fa1bd9de31787';
lDataRow.ExpectedOutputUTFStrTest := '06ea5e186dab1b3f99bcf91918b53748367674c0' +
'5baa627010fba06edb67f0ba';
lDataRow.AddInputVector(RawByteString(
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1, 20);
lDataRow.FinalBitLength := 0;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-256_Msg5.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '7b0047cf5a456882363cbf0fb05322cf65f4b705' +
'9a46365e830132e3b5d957af';
lDataRow.ExpectedOutputUTFStrTest := 'f2771aed86eba40f0f20c80aed2efb2ccdcd2a45' +
'14a89642353dc4ab6f31a0a1';
lDataRow.AddInputVector(#$13);
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-256_Msg30.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'c8242fef409e5ae9d1f1c857ae4dc624b92b1980' +
'9f62aa8c07411c54a078b1d0';
lDataRow.ExpectedOutputUTFStrTest := '0264f8f24160a1c2336453338772637b64864ce1' +
'3c3c4207c40b34d28d68cd23';
lDataRow.AddInputVector(#$53#$58#$7B#$19);
lDataRow.FinalBitLength := 6;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-256_Msg1605.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '81ee769bed0950862b1ddded2e84aaa6ab7bfdd3' +
'ceaa471be31163d40336363c';
lDataRow.ExpectedOutputUTFStrTest := '7a4185574238ca2e2550a9fa85a0c5a327811698' +
'c3a05531a70e0a7ec369e2e5';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3));
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-256_1630.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '52860aa301214c610d922a6b6cab981ccd06012e' +
'54ef689d744021e738b9ed20';
lDataRow.ExpectedOutputUTFStrTest := '8f0bb49b3327e5a03dd69bded05a86c9e7d72a7d' +
'719dd354a873cf2a70c30354';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3));
lDataRow.FinalBitLength := 6;
end;
procedure TestTHash_SHA3_256.TestBlockSize;
begin
CheckEquals(136, FHash.BlockSize);
end;
procedure TestTHash_SHA3_256.TestClassByName;
begin
DoTestClassByName('THash_SHA3_256', THash_SHA3_256);
end;
procedure TestTHash_SHA3_256.TestDigestSize;
begin
CheckEquals(32, FHash.DigestSize);
end;
procedure TestTHash_SHA3_256.TestIdentity;
begin
CheckEquals($71186A42, FHash.Identity);
end;
procedure TestTHash_SHA3_256.TestIsPasswordHash;
begin
CheckNotEquals(true, FHash.IsPasswordHash);
end;
{ TestTHash_SHA3_384 }
procedure TestTHash_SHA3_384.ConfigHashClass(HashClass: TDECHash;
IdxTestData: Integer);
begin
inherited;
THash_SHA3_384(FHash).FinalByteLength := FTestData[IdxTestData].FinalByteLength;
THash_SHA3_384(FHash).PaddingByte := FTestData[IdxTestData].PaddingByte;
end;
procedure TestTHash_SHA3_384.SetUp;
var
lDataRow:IHashTestDataRowSetup;
begin
inherited;
FHash := THash_SHA3_384.Create;
//Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-
// Validation-Program/documents/sha3/sha-3bittestvectors.zip
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_384ShortMsg.rsp');
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_384LongMsg.rsp');
// SourceEnd
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_Msg0.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '0c63a75b845e4f7d01107d852e4c2485c51a50aa' +
'aa94fc61995e71bbee983a2ac3713831264adb47' +
'fb6bd1e058d5f004';
lDataRow.ExpectedOutputUTFStrTest := '0c63a75b845e4f7d01107d852e4c2485c51a50aa' +
'aa94fc61995e71bbee983a2ac3713831264adb47' +
'fb6bd1e058d5f004';
lDataRow.AddInputVector('');
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_1600.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '1881de2ca7e41ef95dc4732b8f5f002b189cc1e4' +
'2b74168ed1732649ce1dbcdd76197a31fd55ee98' +
'9f2d7050dd473e8f';
lDataRow.ExpectedOutputUTFStrTest := '50dd07a64dc6ff190db60e612d8511742baa8eb5' +
'a499a0a02e51cea3f4b922f8ecf72785dc0a2ef3' +
'8230340378d3d104';
lDataRow.AddInputVector(RawByteString(
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1, 20);
lDataRow.FinalBitLength := 0;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_Msg5.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '737c9b491885e9bf7428e792741a7bf8dca96534' +
'71c3e148473f2c236b6a0a6455eb1dce9f779b4b' +
'6b237fef171b1c64';
lDataRow.ExpectedOutputUTFStrTest := 'c2ab721500b00f70be1f5adfcbe70cdf22581c35' +
'ed47d265538c1cbd939f1fe8290e58d096eb3378' +
'f3a75818d623ebb8';
lDataRow.AddInputVector(#$13);
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_Msg30.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '955b4dd1be03261bd76f807a7efd432435c41736' +
'2811b8a50c564e7ee9585e1ac7626dde2fdc030f' +
'876196ea267f08c3';
lDataRow.ExpectedOutputUTFStrTest := '20243fac26472f874f31539f8b26c1eb226f0c02' +
'3f7f3affa688a471a1943c6fb00dbcbb928b5234' +
'e19423670f34c328';
lDataRow.AddInputVector(#$53#$58#$7B#$19);
lDataRow.FinalBitLength := 6;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_Msg1605.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'a31fdbd8d576551c21fb1191b54bda65b6c5fe97' +
'f0f4a69103424b43f7fdb835979fdbeae8b3fe16' +
'cb82e587381eb624';
lDataRow.ExpectedOutputUTFStrTest := 'f3c3516f2b9d8a07233fc3dd427f8aba27d8e2e5' +
'793a6054f5bcdf005ce6de90d8dc6c69a833f5a7' +
'9da35504fc3ea8bc';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3));
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-384_1630.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '3485d3b280bd384cf4a777844e94678173055d1c' +
'bc40c7c2c3833d9ef12345172d6fcd31923bb879' +
'5ac81847d3d8855c';
lDataRow.ExpectedOutputUTFStrTest := '63f5d9652bc5a4619ea4b3baf70a43e9d43d0620' +
'20109c162265f84c95eeb5768a4ce055dbe64385' +
'324650c2cd9091d5';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3));
lDataRow.FinalBitLength := 6;
end;
procedure TestTHash_SHA3_384.TestBlockSize;
begin
CheckEquals(104, FHash.BlockSize);
end;
procedure TestTHash_SHA3_384.TestClassByName;
begin
DoTestClassByName('THash_SHA3_384', THash_SHA3_384);
end;
procedure TestTHash_SHA3_384.TestDigestSize;
begin
CheckEquals(48, FHash.DigestSize);
end;
procedure TestTHash_SHA3_384.TestIdentity;
begin
CheckEquals($2B7A1F14, FHash.Identity);
end;
procedure TestTHash_SHA3_384.TestIsPasswordHash;
begin
CheckNotEquals(true, FHash.IsPasswordHash);
end;
{ TestTHash_SHA3_512 }
procedure TestTHash_SHA3_512.ConfigHashClass(HashClass: TDECHash;
IdxTestData: Integer);
begin
inherited;
THash_SHA3_512(FHash).FinalByteLength := FTestData[IdxTestData].FinalByteLength;
THash_SHA3_512(FHash).PaddingByte := FTestData[IdxTestData].PaddingByte;
end;
procedure TestTHash_SHA3_512.SetUp;
var
lDataRow : IHashTestDataRowSetup;
begin
inherited;
FHash := THash_SHA3_512.Create;
//Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-
// Validation-Program/documents/sha3/sha-3bittestvectors.zip
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_512ShortMsg.rsp');
FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_512LongMsg.rsp');
// SourceEnd
// Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-512_1600.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'e76dfad22084a8b1467fcf2ffa58361bec7628ed' +
'f5f3fdc0e4805dc48caeeca81b7c13c30adf52a3' +
'659584739a2df46be589c51ca1a4a8416df6545a' +
'1ce8ba00';
lDataRow.ExpectedOutputUTFStrTest := '54ab223a7cee7603f2b89596b54f8d838845e0a0' +
'af2be3e9ad2cd7acb111757cb0c41b3564c07778' +
'47684435da78577781eef8e6a6652c9844a85882' +
'e0fa8b28';
lDataRow.AddInputVector(RawByteString(
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1, 20);
lDataRow.FinalBitLength := 0;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-512_Msg5.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'a13e01494114c09800622a70288c432121ce7003' +
'9d753cadd2e006e4d961cb27544c1481e5814bdc' +
'eb53be6733d5e099795e5e81918addb058e22a9f' +
'24883f37';
lDataRow.ExpectedOutputUTFStrTest := '6961fe7f75e0ad35aead16be49c711b373d22226' +
'ea2b7b2897df24048287a1b6d7b43bad246c8a44' +
'ddccb49263a688343fa60142650a3e06af2a87c9' +
'296438a8';
lDataRow.AddInputVector(#$13);
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-512_Msg30.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := '9834c05a11e1c5d3da9c740e1c106d9e590a0e53' +
'0b6f6aaa7830525d075ca5db1bd8a6aa981a2861' +
'3ac334934a01823cd45f45e49b6d7e6917f2f167' +
'78067bab';
lDataRow.ExpectedOutputUTFStrTest := '7e59a0c8fca17a79c748f927c85408bfda1b158d' +
'7ab95df59f650a3bb773e1eb6c1112cd2c351b24' +
'b99a2f8e08688ec19816bfc292fba63305307571' +
'ce9360cf';
lDataRow.AddInputVector(#$53#$58#$7B#$19);
lDataRow.FinalBitLength := 6;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-512_Msg1605.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'fc4a167ccb31a937d698fde82b04348c9539b28f' +
'0c9d3b4505709c03812350e4990e9622974f6e57' +
'5c47861c0d2e638ccfc2023c365bb60a93f52855' +
'0698786b';
lDataRow.ExpectedOutputUTFStrTest := '7e65803342ce242fdc8cfd27019516669615327f' +
'679ced86453df7ee0a745267a453e7b94568c2ea' +
'dc4ce7a7de02f48a5c2204d03418542f1a64f7db' +
'78026218';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3));
lDataRow.FinalBitLength := 5;
// Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
// and-Guidelines/documents/examples/SHA3-512_1630.pdf
lDataRow := FTestData.AddRow;
lDataRow.ExpectedOutput := 'cf9a30ac1f1f6ac0916f9fef1919c595debe2ee8' +
'0c85421210fdf05f1c6af73aa9cac881d0f91db6' +
'd034a2bbadc1cf7fbcb2ecfa9d191d3a5016fb3f' +
'ad8709c9';
lDataRow.ExpectedOutputUTFStrTest := '55971e2e5d0182f25bc453364f9d3a77fef05e7e' +
'32c99e630a8586c37815aea5087a51aa3730f855' +
'df963c7740f4e6bd2b73f5079cf317031ed120c3' +
'3df4054d';
lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3 +
#$A3#$A3#$A3#$A3));
lDataRow.FinalBitLength := 6;
end;
procedure TestTHash_SHA3_512.TestBlockSize;
begin
CheckEquals(72, FHash.BlockSize);
end;
procedure TestTHash_SHA3_512.TestClassByName;
begin
DoTestClassByName('THash_SHA3_512', THash_SHA3_512);
end;
procedure TestTHash_SHA3_512.TestDigestSize;
begin
CheckEquals(64, FHash.DigestSize);
end;
procedure TestTHash_SHA3_512.TestIdentity;
begin
CheckEquals($17567DDA, FHash.Identity);
end;
procedure TestTHash_SHA3_512.TestIsPasswordHash;
begin
CheckNotEquals(true, FHash.IsPasswordHash);
end;
initialization
// Register any test cases with the test runner
{$IFDEF DUnitX}
TDUnitX.RegisterTestFixture(TestTHash_SHA3_224);
TDUnitX.RegisterTestFixture(TestTHash_SHA3_256);
TDUnitX.RegisterTestFixture(TestTHash_SHA3_384);
TDUnitX.RegisterTestFixture(TestTHash_SHA3_512);
{$ELSE}
RegisterTests('DECHash', [TestTHash_SHA3_224.Suite,
TestTHash_SHA3_256.Suite,
TestTHash_SHA3_384.Suite,
TestTHash_SHA3_512.Suite]);
{$ENDIF}
{$ELSE}
implementation
{$IFEND}
end.