{***************************************************************************** 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 TestDECHash; interface // Needs to be included before any other statements {$INCLUDE TestDefines.inc} {$INCLUDE ..\..\Source\DECOptions.inc} 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; type /// /// Makes Increment8 method public for testing purposes as we fixed the ASM /// code of it. /// TDECHashIncrement8 = class(TDECHash) strict protected /// /// Needs to be overridden, even if empty, as it's called internally by /// the class to be tested /// procedure DoInit; override; /// /// Needs to be overridden, even if empty, as it's called internally by /// the class to be tested /// procedure DoDone; override; /// /// Needs to be overridden, even if empty, as it's called internally by /// the class to be tested /// procedure DoTransform(Buffer: PUInt32Array); override; /// /// Needs to be overridden, even if empty, as it's called internally by /// the class to be tested /// function Digest: PByteArray; override; public /// /// Need to be overriden, as the originals would raise an exception by design /// class function DigestSize: UInt32; override; /// /// Need to be overriden, as the originals would raise an exception by design /// class function BlockSize: UInt32; override; /// /// Just calls the inherited Increment8 method in order to make it public /// so it can be tested. Internal methods usually do not get unit tested, /// but since this one created quite some heavoc in ASM mode of this library /// (see DECOptions.inc for the necessary define) it deserves some testing. /// procedure Increment8(var Value; Add: UInt32); end; {$IFDEF DUnitX} [TestFixture] {$ENDIF} THash_TestIncrement8 = class(TTestCase) strict protected FHashIncr8 : TDECHashIncrement8; public procedure SetUp; override; procedure TearDown; override; published // special case: test for Increment8 method due to ASM fixes applied procedure TestIncrement8; end; /// /// Base class for all hash tests, provides generalized test methods so that /// concrete classes only need to provide the actual test data. /// THash_TestBase = class(TTestCase) strict protected FTestData : IHashTestDataContainer; FHash : TDECHashAuthentication; // kind of "low-level" test, close to the original test used in DEC5.2 procedure DoTest52(HashClass:TDECHash); procedure DoTestCalcBuffer(HashClass:TDECHash); virtual; procedure DoTestCalcBytes(HashClass:TDECHash); virtual; procedure DoTestCalcStream(HashClass:TDECHash); virtual; procedure DoTestCalcUnicodeString(HashClass:TDECHash); virtual; procedure DoTestCalcRawByteString(HashClass:TDECHash); virtual; procedure DoTestClassByName(ExpectedClassName:String; ExpectedClass:TClass); protected /// /// This method has to be overridden in test classes where the hash object /// to be tested needs to have some special properties set. They have to /// be set in this class. /// procedure ConfigHashClass(HashClass: TDECHash; IdxTestData:Integer); virtual; public procedure SetUp; override; procedure TearDown; override; published // common Tests for all TDECHash classes procedure Test52; procedure TestCalcBuffer; procedure TestCalcBytes; procedure TestCalcStream; procedure TestCalcRawByteString; procedure TestCalcUnicodeString; end; // Test methods for base class for all hash classes {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTDECHash = class(TTestCase) published procedure TestIsClassListCreated; procedure TestValidCipherSetDefaultHashClass; end; // Test methods for class THash_MD2 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_MD2 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_MD4 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_MD4 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_MD5 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_MD5 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_RipeMD128 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_RipeMD128 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_RipeMD160 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_RipeMD160 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_RipeMD256 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_RipeMD256 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_RipeMD320 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_RipeMD320 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA0 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA0 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA, only active if this compatibility define // is set {$IFDEF OLD_SHA_NAME} {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA = class(TestTHash_SHA0) public procedure SetUp; override; published procedure TestClassByName; procedure TestIdentity; end; {$ENDIF} // Test methods for class THash_SHA1 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA1 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA256 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA256 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA224 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA224 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA384 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA384 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_SHA512 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_SHA512 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_Haval128 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Haval128 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMaxRounds; procedure TestGetMinRounds; end; // Test methods for class THash_Haval160 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Haval160 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMaxRounds; procedure TestGetMinRounds; end; // Test methods for class THash_Haval192 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Haval192 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMaxRounds; procedure TestGetMinRounds; end; // Test methods for class THash_Haval224 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Haval224 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMaxRounds; procedure TestGetMinRounds; end; // Test methods for class THash_Haval256 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Haval256 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMaxRounds; procedure TestGetMinRounds; end; // Test methods for class THash_Tiger {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Tiger_3Rounds = class(THash_TestBase) public procedure SetUp; override; published procedure TestSetRounds; procedure TestSetRoundsLowerLimit; procedure TestSetRoundsUpperLimit; procedure TestGetMinRounds; procedure TestGetMaxRounds; procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_Tiger {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Tiger_4Rounds = class(THash_TestBase) public procedure SetUp; override; published procedure TestSetRounds; procedure TestSetRoundsLowerLimit; procedure TestSetRoundsUpperLimit; procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; // not implemented as it's unnecessary as only the number of rounds is // different and not the class to be tested // procedure TestIdentity; end; // Test methods for class THash_Panama {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Panama = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_Whirlpool0 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Whirlpool0 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; virtual; procedure TestIdentity; virtual; end; {$IFDEF OLD_WHIRLPOOL_NAMES} // Test methods for class THash_Whirlpool {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Whirlpool = class(TestTHash_Whirlpool0) public procedure SetUp; override; published procedure TestClassByName; override; procedure TestIdentity; override; end; {$ENDIF} // Test methods for class THash_WhirlpoolT {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_WhirlpoolT = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; virtual; procedure TestIdentity; virtual; end; {$IFDEF OLD_WHIRLPOOL_NAMES} // Test methods for class THash_Whirlpool1 aka WhirlpoolT's old name in DEC 5.2 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Whirlpool1 = class(TestTHash_WhirlpoolT) public procedure SetUp; override; published procedure TestClassByName; override; procedure TestIdentity; override; end; {$ENDIF} {$IFNDEF OLD_WHIRLPOOL_NAMES} // Test methods for class THash_Whirlpool1 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Whirlpool1 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; virtual; procedure TestIdentity; virtual; end; {$ENDIF} // Test methods for class THash_Square {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Square = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; // Test methods for class THash_Snefru128 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Snefru128 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMinRounds; procedure TestGetMaxRounds; end; // Test methods for class THash_Snefru256 {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Snefru256 = class(THash_TestBase) public procedure SetUp; override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; procedure TestGetMinRounds; procedure TestGetMaxRounds; end; // Test methods for class THash_Sapphire {$IFDEF DUnitX} [TestFixture] {$ENDIF} TestTHash_Sapphire = class(THash_TestBase) public procedure SetUp; override; protected procedure ConfigHashClass(aHashClass: TDECHash; aIdxTestData:Integer); override; published procedure TestDigestSize; procedure TestBlockSize; procedure TestIsPasswordHash; procedure TestClassByName; procedure TestIdentity; end; implementation uses DECFormat; procedure TestTHash_MD2.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_MD2.Create; // Source: all including 12345678901234567890123456789012345678901234567890123 // 456789012345678901234567890 are from: https://www.ietf.org/rfc/rfc1319.txt lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8350e5a3e24c153df2275c9f80692773'; lDataRow.ExpectedOutputUTFStrTest := '8350e5a3e24c153df2275c9f80692773'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '32ec01ec4a6dac72c0ab96fb34c0b5d1'; lDataRow.ExpectedOutputUTFStrTest := 'a732378b5c5e0cb55543fbbcc9618d58'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'da853b0d3f88d99b30283a69e6ded6bb'; lDataRow.ExpectedOutputUTFStrTest := '64bc320671ffdb9b433c36693b942852'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ab4f496bfb2a530b219ff33031fe06b0'; lDataRow.ExpectedOutputUTFStrTest := 'ed4c934d78222a95c1a4de10bac74258'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4e8ddff3650292ab5a4108c3aa47940b'; lDataRow.ExpectedOutputUTFStrTest := 'f6456db6a2e5608a2c36cd9c0dc5169d'; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'da33def2a42df13975352846c30338cd'; lDataRow.ExpectedOutputUTFStrTest := 'c4c41d053cba1f7924ca33029724eddf'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd5976f79d83d3a0dc9806c3c66f3efd8'; lDataRow.ExpectedOutputUTFStrTest := 'a6dcaf889aaa5738141b713d8e4fc6c3'; lDataRow.AddInputVector('12345678901234567890123456789012345678901234567890123' + '456789012345678901234567890'); // Source: German MD2 Wikipedia article as of 30.05.2021 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8415570a6653a06314f09b023612a92d'; lDataRow.ExpectedOutputUTFStrTest := '9d76631406e8be4ed7284613edf23fd5'; lDataRow.AddInputVector('Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'); // Source: German MD2 Wikipedia article as of 30.05.2021 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b0e27e91b84246bc4c38bc3008f00374'; lDataRow.ExpectedOutputUTFStrTest := 'b2ea09572c2fcfb278afd72155bc28e7'; lDataRow.AddInputVector('Frank jagt im komplett verwahrlosten Taxi quer durch Bayern'); end; procedure TestTHash_MD2.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_MD2.TestIdentity; begin CheckEquals($D3A02D0F, FHash.Identity); end; procedure TestTHash_MD2.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_MD2.TestBlockSize; begin CheckEquals(16, FHash.BlockSize); end; procedure TestTHash_MD2.TestClassByName; begin DoTestClassByName('THash_MD2', THash_MD2); end; procedure TestTHash_MD4.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_MD4.Create; // Source for all until SourceEnd: https://datatracker.ietf.org/doc/html/rfc1320 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '31d6cfe0d16ae931b73c59d7e0c089c0'; lDataRow.ExpectedOutputUTFStrTest := '31d6cfe0d16ae931b73c59d7e0c089c0'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bde52cb31de33e46245e05fbdbd6fb24'; lDataRow.ExpectedOutputUTFStrTest := '186cb09181e2c2ecaac768c47c729904'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a448017aaf21d8525fc10ae87aa6729d'; lDataRow.ExpectedOutputUTFStrTest := 'e0fba38268d0ec66ef1cb452d5885e53'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd9130a8164549fe818874806e1c7014b'; lDataRow.ExpectedOutputUTFStrTest := '94a8a6cc36108b93db330de54b90bd4b'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd79e1c308aa5bbcdeea8ed63df412da9'; lDataRow.ExpectedOutputUTFStrTest := '0bd63185f3484bb000286c85917dc12e'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '043f8582f241db351ce627e153e7f0e4'; lDataRow.ExpectedOutputUTFStrTest := '2e74cc46c96ee4caee5df20d0898fef8'; lDataRow.AddInputVector('A'); lDataRow.AddInputVector('BCDEFGHIJKLMNOPQRS'); lDataRow.AddInputVector('TUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e33b4ddc9c38f2199c3e7b164fcc0536'; lDataRow.ExpectedOutputUTFStrTest := 'cf17b1ae2606afa964193690df7543b1'; lDataRow.AddInputVector('1234567890', 1, 8); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '186767a4d851893b823e6824c6efda62'; lDataRow.ExpectedOutputUTFStrTest := '720710bdf5588ff54a1541168c49ffbc'; lDataRow.AddInputVector('This test vector intended to detect last zeroized '+ 'block necessity decision error. This block has total '+ 'length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'adba72c3baf834d091eb59f18d022549'; lDataRow.ExpectedOutputUTFStrTest := '077ff2742a36a53d86774f01e4911f46'; lDataRow.AddInputVector('This test vector intended to detect last zeroized '+ 'block necessity decision error. This block has total '+ 'length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bbce80cc6bb65e5c6745e30d4eeca9a4'; lDataRow.ExpectedOutputUTFStrTest := '29830de36ff8d3c23c73535ed6d1c69f'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bbce80cc6bb65e5c6745e30d4eeca9a4'; lDataRow.ExpectedOutputUTFStrTest := '29830de36ff8d3c23c73535ed6d1c69f'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_MD4.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_MD4.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_MD4.TestIdentity; begin CheckEquals($3AC3883A, FHash.Identity); end; procedure TestTHash_MD4.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_MD4.TestClassByName; begin DoTestClassByName('THash_MD4', THash_MD4); end; procedure TestTHash_MD5.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_MD5.Create; // Source for all until SourceEnd: https://datatracker.ietf.org/doc/html/rfc1321 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd41d8cd98f00b204e9800998ecf8427e'; lDataRow.ExpectedOutputUTFStrTest := 'd41d8cd98f00b204e9800998ecf8427e'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0cc175b9c0f1b6a831c399e269772661'; lDataRow.ExpectedOutputUTFStrTest := '4144e195f46de78a3623da7364d04f11'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '900150983cd24fb0d6963f7d28e17f72'; lDataRow.ExpectedOutputUTFStrTest := 'ce1473cf80c6b3fda8e3dfc006adc315'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f96b697d7cb7938d525a2f31aaf161d0'; lDataRow.ExpectedOutputUTFStrTest := '6f9ab83227f65f9b86c380e2c9c33031'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c3fcd3d76192e4007dfb496cca67e13b'; lDataRow.ExpectedOutputUTFStrTest := '35020d67a52d8e915330f0a77f676bbf'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd174ab98d277d9f5a5611c2c9f419d9f'; lDataRow.ExpectedOutputUTFStrTest := '86056d805455c8448f6c09404c3db624'; lDataRow.AddInputVector('A'); lDataRow.AddInputVector('BCDEFGHIJKLMNOPQRS'); lDataRow.AddInputVector('TUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '57edf4a22be3c955ac49da2e2107b67a'; lDataRow.ExpectedOutputUTFStrTest := '903f43f5c1f384fc267110bf07caec04'; lDataRow.AddInputVector('1234567890', 8); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e6810238956987dec0d7bfcbcd4caab8'; lDataRow.ExpectedOutputUTFStrTest := 'a36d511965e2c68794b5fbfe54d74b8c'; lDataRow.AddInputVector('This test vector intended to detect last zeroized '+ 'block necessity decision error. This block has total '+ 'length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '637d2777ed733d5d33b5bfc140f118c5'; lDataRow.ExpectedOutputUTFStrTest := '3995d2a93d5df46406ef04b34d06b177'; lDataRow.AddInputVector('This test vector intended to detect last zeroized '+ 'block necessity decision error. This block has total '+ 'length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7707d6ae4e027c70eea2a935c2296f21'; lDataRow.ExpectedOutputUTFStrTest := '168f7302c596180bb5372f5015098742'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7707d6ae4e027c70eea2a935c2296f21'; lDataRow.ExpectedOutputUTFStrTest := '168f7302c596180bb5372f5015098742'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_MD5.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_MD5.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_MD5.TestIdentity; begin CheckEquals($4DC4B8AC, FHash.Identity); end; procedure TestTHash_MD5.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_MD5.TestClassByName; begin DoTestClassByName('THash_MD5', THash_MD5); end; procedure TestTHash_RipeMD128.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; // Source until SourceEnd: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html FHash := THash_RipeMD128.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cdf26213a150dc3ecb610f18f6b38b46'; lDataRow.ExpectedOutputUTFStrTest := 'cdf26213a150dc3ecb610f18f6b38b46'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '86be7afa339d0fc7cfc785e72f578d33'; lDataRow.ExpectedOutputUTFStrTest := 'b7d45de39098253a3c98c2756101f5aa'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c14a12199c66e4ba84636b0f69144c77'; lDataRow.ExpectedOutputUTFStrTest := '464176f18edc59cb59f7b08e2a6e404f'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9e327b3d6e523062afc1132d7df9d1b8'; lDataRow.ExpectedOutputUTFStrTest := '8adb8445ef4925f7483e0b1738f3e6b3'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'fd2aa607f71dc8f510714922b371834e'; lDataRow.ExpectedOutputUTFStrTest := '7b841da3c9bd2923afe8b8c91f7036ae'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a1aa0689d0fafa2ddc22e88b49133a06'; lDataRow.ExpectedOutputUTFStrTest := 'f2d7d9201198f9b54392033127e59e11'; lDataRow.AddInputVector('abcdbcdecdefdefg'); lDataRow.AddInputVector('efghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd1e959eb179c911faea4624c60c5c702'; lDataRow.ExpectedOutputUTFStrTest := 'b9c16efbf21603ccc20895609999ab75'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3f45ef194732c2dbb2c4a2c769795fa3'; lDataRow.ExpectedOutputUTFStrTest := '48c714a46e60f21802adef5c60b5b63e'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a4137d8c40fa51152905b3747acc0ff4'; lDataRow.ExpectedOutputUTFStrTest := 'd08312b9507ea0edbc38c4b1d421e0f1'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '243988f60681af64730a7ee6b5f0406b'; lDataRow.ExpectedOutputUTFStrTest := 'c227947947ad2085bd35817cf94be3d3'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4a7f5723f954eba1216c9d8f6320431f'; lDataRow.ExpectedOutputUTFStrTest := 'c8c6d2c7e48fc3788ef778426d4382e0'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4a7f5723f954eba1216c9d8f6320431f'; lDataRow.ExpectedOutputUTFStrTest := 'c8c6d2c7e48fc3788ef778426d4382e0'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd end; procedure TestTHash_RipeMD128.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_RipeMD128.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_RipeMD128.TestIdentity; begin CheckEquals($47EEAE41, FHash.Identity); end; procedure TestTHash_RipeMD128.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_RipeMD128.TestClassByName; begin DoTestClassByName('THash_RipeMD128', THash_RipeMD128); end; procedure TestTHash_RipeMD160.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_RipeMD160.Create; // Source until SourceEnd: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9c1185a5c5e9fc54612808977ee8f548b2258d31'; lDataRow.ExpectedOutputUTFStrTest := '9c1185a5c5e9fc54612808977ee8f548b2258d31'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0bdc9d2d256b3ee9daae347be6f4dc835a467ffe'; lDataRow.ExpectedOutputUTFStrTest := '3213d398bb951aa09625539093524fa528848bd0'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8eb208f7e05d987a9b044a8e98c6b087f15a0bfc'; lDataRow.ExpectedOutputUTFStrTest := '44bfc4965cb140dc9bea1f842a9deabdae0be453'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5d0689ef49d2fae572b881b123a85ffa21595f36'; lDataRow.ExpectedOutputUTFStrTest := '3648d57f2b151f9bd2ef3f3d8d16efa869bb7552'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f71c27109c692c1b56bbdceb5b9d2865b3708dbc'; lDataRow.ExpectedOutputUTFStrTest := '2471799ad0ee46968fa5bd32beac4e86da2e956d'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '12a053384a9c0c88e405a06c27dcf49ada62eb2b'; lDataRow.ExpectedOutputUTFStrTest := '11d9f9253bf89efc0de965398321c3a40350abc1'; lDataRow.AddInputVector('abcdbcdecdefdefg'); lDataRow.AddInputVector('efghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b0e20b6e3116640286ed3a87a5713079b21f5189'; lDataRow.ExpectedOutputUTFStrTest := 'cc2712643bb383eadc72099d85d50bc879c93b74'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9b752e45573d4b39f4dbd3323cab82bf63326bfb'; lDataRow.ExpectedOutputUTFStrTest := '5b9333be43b8900e33224375f3a22b66a4d77388'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b8c681512ad02967243bb93d181b5783eb501f2f'; lDataRow.ExpectedOutputUTFStrTest := '99079db8b7532db2699a69ca200dab8eeb8be77e'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e94a9d107e49e4ea81b22cfaa4075437175d383c'; lDataRow.ExpectedOutputUTFStrTest := 'a9a5a0eb2c69ddb61774054cbf800256f7eb4ac9'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '52783243c1697bdbe16d37f97f68f08325dc1528'; lDataRow.ExpectedOutputUTFStrTest := '98182142d06b9952b1c7568fd0d178100e61c098'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '52783243c1697bdbe16d37f97f68f08325dc1528'; lDataRow.ExpectedOutputUTFStrTest := '98182142d06b9952b1c7568fd0d178100e61c098'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd end; procedure TestTHash_RipeMD160.TestDigestSize; begin CheckEquals(20, FHash.DigestSize); end; procedure TestTHash_RipeMD160.TestIdentity; begin CheckEquals($2D59E377, FHash.Identity); end; procedure TestTHash_RipeMD160.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_RipeMD160.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_RipeMD160.TestClassByName; begin DoTestClassByName('THash_RipeMD160', THash_RipeMD160); end; procedure TestTHash_RipeMD256.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_RipeMD256.Create; // Source until SourceEnd: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html#extensions lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '02ba4c4e5f8ecd1877fc52d64d30e37a2d9774fb1e5d026380ae0168e3c5522d'; lDataRow.ExpectedOutputUTFStrTest := '02ba4c4e5f8ecd1877fc52d64d30e37a2d9774fb1e5d026380ae0168e3c5522d'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f9333e45d857f5d90a91bab70a1eba0cfb1be4b0783c9acfcd883a9134692925'; lDataRow.ExpectedOutputUTFStrTest := '9085ecd33f28d345d80830edb9bc9dbdf864810e51538db16b14f229fcce02c2'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'afbd6e228b9d8cbbcef5ca2d03e6dba10ac0bc7dcbe4680e1e42d2e975459b65'; lDataRow.ExpectedOutputUTFStrTest := 'e65742e3316aafdaf74854b5e7406ac7de565d5a8352eb305e00249e158c5bf1'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '87e971759a1ce47a514d5c914c392c9018c7c46bc14465554afcdf54a5070c0e'; lDataRow.ExpectedOutputUTFStrTest := '8456b94a8564fca0356765e9e3e0ccda4af6cd486e65ce1259559143c44ba0ea'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '649d3034751ea216776bf9a18acc81bc7896118a5197968782dd1fd97d8d5133'; lDataRow.ExpectedOutputUTFStrTest := 'd2ed143760b33fc5c338a39d5bbe4296f7a95a60bbb09d479c2708915bd4c281'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3843045583aac6c8c8d9128573e7a9809afb2a0f34ccc36ea9e72f16f6368e3f'; lDataRow.ExpectedOutputUTFStrTest := '9b33e9ed9a3de3a7f018f76e7c3606d67d5da7fe928b4034a9ea05cf3714db3f'; lDataRow.AddInputVector('abcdbcdecdefdefg'); lDataRow.AddInputVector('efghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5740a408ac16b720b84424ae931cbb1fe363d1d0bf4017f1a89f7ea6de77a0b8'; lDataRow.ExpectedOutputUTFStrTest := '9b977a9dc14a8398b42a38f156e6f15063d26e26e4bc900ba544f2708990fdd8'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '06fdcc7a409548aaf91368c06a6275b553e3f099bf0ea4edfd6778df89a890dd'; lDataRow.ExpectedOutputUTFStrTest := '67e959944ad20f439af5cffa4893b5913536bba2e151b7c5bd01da6707fd331c'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ce2a12e4361b03bf914ce35267628a9f26d54ed82b764c903958f29e652e0f5d'; lDataRow.ExpectedOutputUTFStrTest := 'fc0f03e8f9666aa901ddb32482eef939b1abc86d311439ed022b4ece5194363c'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5b622dfcf325aa4476bcdeff971f961120a19bf7642b85cbdd422f46d7c7bad8'; lDataRow.ExpectedOutputUTFStrTest := '3015a97978ad2824ab545aabc411f78b4b6e44acb23a865af696ef5777f7703a'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ac953744e10e31514c150d4d8d7b677342e33399788296e43ae4850ce4f97978'; lDataRow.ExpectedOutputUTFStrTest := 'bcda054f27f32fedeb8374ee93d01fbc0783c30b9e71cc3e2a463265eac08f76'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ac953744e10e31514c150d4d8d7b677342e33399788296e43ae4850ce4f97978'; lDataRow.ExpectedOutputUTFStrTest := 'bcda054f27f32fedeb8374ee93d01fbc0783c30b9e71cc3e2a463265eac08f76'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd end; procedure TestTHash_RipeMD256.TestDigestSize; begin CheckEquals(32, FHash.DigestSize); end; procedure TestTHash_RipeMD256.TestIdentity; begin CheckEquals($ED51ABD8, FHash.Identity); end; procedure TestTHash_RipeMD256.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_RipeMD256.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_RipeMD256.TestClassByName; begin DoTestClassByName('THash_RipeMD256', THash_RipeMD256); end; procedure TestTHash_RipeMD320.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_RipeMD320.Create; // Source until SourceEnd: https://homes.esat.kuleuven.be/~bosselae/ripemd160.html#extensions lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '22d65d5661536cdc75c1fdf5c6de7b41b9f27325ebc61e8557177d705a0ec880151c3a32a00899b8'; lDataRow.ExpectedOutputUTFStrTest := '22d65d5661536cdc75c1fdf5c6de7b41b9f27325ebc61e8557177d705a0ec880151c3a32a00899b8'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ce78850638f92658a5a585097579926dda667a5716562cfcf6fbe77f63542f99b04705d6970dff5d'; lDataRow.ExpectedOutputUTFStrTest := 'becac9657471217026a3e463c4e4198d0a35a628d5b33ea9ce3bfe2e1ec03c8e48d4c71bac843224'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'de4c01b3054f8930a79d09ae738e92301e5a17085beffdc1b8d116713e74f82fa942d64cdbc4682d'; lDataRow.ExpectedOutputUTFStrTest := '4c00c48edf4a07ef988899ee8a2284122c411c975db403e680b90ba7b9d314791a18a12a5f2931b8'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3a8e28502ed45d422f68844f9dd316e7b98533fa3f2a91d29f84d425c88d6b4eff727df66a7c0197'; lDataRow.ExpectedOutputUTFStrTest := 'f18db73fd25af066beeb55389f10f21b0598075bc2febd0fb30f30293e4f08e8d4af496d38103f83'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cabdb1810b92470a2093aa6bce05952c28348cf43ff60841975166bb40ed234004b8824463e6b009'; lDataRow.ExpectedOutputUTFStrTest := '772143ae4d541d7762a53b0844630b1ecdbc52ffb119c9ab3b6eab1d208c0fae32083893af448a4d'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd034a7950cf722021ba4b84df769a5de2060e259df4c9bb4a4268c0e935bbc7470a969c9d072a1ac'; lDataRow.ExpectedOutputUTFStrTest := 'de99fd0c2a981d986935e66be800d6b408e0b4190a0710ea05fc48417a906216e5783344bf34104b'; lDataRow.AddInputVector('abcdbcdecdefdefg'); lDataRow.AddInputVector('efghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ed544940c86d67f250d232c30b7b3e5770e0c60c8cb9a4cafe3b11388af9920e1b99230b843c86a4'; lDataRow.ExpectedOutputUTFStrTest := '0a85ae029693b50fd975ea1444785634b33df413f3698741300ae30b7aace18e70e03e456d10e51e'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '557888af5f6d8ed62ab66945c6d2a0a47ecd5341e915eb8fea1d0524955f825dc717e4a008ab2d42'; lDataRow.ExpectedOutputUTFStrTest := '2de7b865e6692c84c0f23116e609fc99b5717a2c38028e45cdb00cbd5df70fcac63f23aa6493a3a3'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '83254b7c45b10b0f1c7cd9d6bdf1c318d4e807731b7ce21b348ac0ee17e4ee7feb1f49fc3aea7d16'; lDataRow.ExpectedOutputUTFStrTest := '32c9e60055988f4d00284a9a1e6c0d27eb10fc5429dfb2a168fc6016b32759c442586c566f30d941'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '77d7e20be0672bc74ed1cb4d9f56cf455c5e86a045c18db84e2d7bba53b21788575d6d7baa3d3469'; lDataRow.ExpectedOutputUTFStrTest := 'df1d29aec8620e470c45cf77852c7b917877c80d2f63a279b41cc0d65fc5c93c5bd35c08cf08db91'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bdee37f4371e20646b8b0d862dda16292ae36f40965e8c8509e63d1dbddecc503e2b63eb9245bb66'; lDataRow.ExpectedOutputUTFStrTest := '532260a4e62a359a9d1561a1e6cfd1f6988447a3ef4f810a252f69483e4ad5d7f95fc1609d29bb1a'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bdee37f4371e20646b8b0d862dda16292ae36f40965e8c8509e63d1dbddecc503e2b63eb9245bb66'; lDataRow.ExpectedOutputUTFStrTest := '532260a4e62a359a9d1561a1e6cfd1f6988447a3ef4f810a252f69483e4ad5d7f95fc1609d29bb1a'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd end; procedure TestTHash_RipeMD320.TestDigestSize; begin CheckEquals(40, FHash.DigestSize); end; procedure TestTHash_RipeMD320.TestIdentity; begin CheckEquals($4AB1F21D, FHash.Identity); end; procedure TestTHash_RipeMD320.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_RipeMD320.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_RipeMD320.TestClassByName; begin DoTestClassByName('THash_RipeMD320', THash_RipeMD320); end; procedure TestTHash_SHA0.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_SHA0.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f96cea198ad1dd5617ac084a3d92c6107708c0ef'; lDataRow.ExpectedOutputUTFStrTest := 'f96cea198ad1dd5617ac084a3d92c6107708c0ef'; lDataRow.AddInputVector(''); // Source until SourceEnd: NIST.FIPS.180.pdf lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0164b8a914cd2a5e74c4f7ff082c4d97f1edf880'; lDataRow.ExpectedOutputUTFStrTest := 'e286e14cff397cd7e37f755e00af6a8e1b00bc55'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd2516ee1acfa5baf33dfc1c471e438449ef134c8'; lDataRow.ExpectedOutputUTFStrTest := '97163d17d936aa26b97bfad5d8ae1e328e29c532'; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3232affa48628a26653b5aaa44541fd90d690603'; lDataRow.ExpectedOutputUTFStrTest := '209d48020a6dff914d1503e2a760d4ef4ad4c8fe'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3232affa48628a26653b5aaa44541fd90d690603'; lDataRow.ExpectedOutputUTFStrTest := '209d48020a6dff914d1503e2a760d4ef4ad4c8fe'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f79e92290e9f519a62467812ea56920850354796'; lDataRow.ExpectedOutputUTFStrTest := '53f1df401054ccfa66250ace1454b34d55059e3c'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e644dc674505c8260e58e32f6b8bcf565b2fafc4'; lDataRow.ExpectedOutputUTFStrTest := '29a30604bfbd1c23545fd02faf4c6bbce9947377'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); end; procedure TestTHash_SHA0.TestDigestSize; begin CheckEquals(20, FHash.DigestSize); end; procedure TestTHash_SHA0.TestIdentity; begin CheckEquals($0C266BE5, FHash.Identity); end; procedure TestTHash_SHA0.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA0.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_SHA0.TestClassByName; begin DoTestClassByName('THash_SHA0', THash_SHA0); end; {$IFDEF OLD_SHA_NAME} procedure TestTHash_SHA.SetUp; begin inherited; FHash.free; FHash := THash_SHA.Create; end; procedure TestTHash_SHA.TestIdentity; begin CheckEquals($A0A1CCFF, FHash.Identity); end; procedure TestTHash_SHA.TestClassByName; begin DoTestClassByName('THash_SHA', THash_SHA); end; {$ENDIF} { TestTHash_SHA1 } procedure TestTHash_SHA1.SetUp; var lDataRow : IHashTestDataRowSetup; i : Integer; rs : RawByteString; begin inherited; FHash := THash_SHA1.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'da39a3ee5e6b4b0d3255bfef95601890afd80709'; lDataRow.ExpectedOutputUTFStrTest := 'da39a3ee5e6b4b0d3255bfef95601890afd80709'; lDataRow.AddInputVector(''); // Source until SourceEnd: German Wikipedia lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '68ac906495480a3404beee4874ed853a037a7a8f'; lDataRow.ExpectedOutputUTFStrTest := 'ca2bea5813b6914b6d75ee6975af2aa99b7f09ca'; lDataRow.AddInputVector('Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '89fdde0b28373dc4f361cfb810b35342cc2c3232'; lDataRow.ExpectedOutputUTFStrTest := '41e9761e0427676d8b5aead6631c5e7bc2946e81'; lDataRow.AddInputVector('Granz jagt im komplett verwahrlosten Taxi quer durch Bayern'); // SourceEnd // Source until SourceEnd: https://datatracker.ietf.org/doc/html/rfc4634 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a9993e364706816aba3e25717850c26c9cd0d89d'; lDataRow.ExpectedOutputUTFStrTest := '9f04f41a848514162050e3d68c1a7abb441dc2b5'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '84983e441c3bd26ebaae4aa1f95129e5e54670f1'; lDataRow.ExpectedOutputUTFStrTest := '51d7d8769ac72c409c5b0e3f69c60adc9a039014'; lDataRow.AddInputVector('abcdbcdecdefdef'); lDataRow.AddInputVector('gefghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnop'); lDataRow.AddInputVector('q'); rs := ''; for i := 1 to 15625 do rs := rs + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '34aa973cd4c4daa4f61eeb2bdbad27316534016f'; lDataRow.ExpectedOutputUTFStrTest := 'c4609560a108a0c626aa7f2b38a65566739353c5'; lDataRow.AddInputVector(rs); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dea356a2cddd90c7a7ecedc5ebb563934f460452'; lDataRow.ExpectedOutputUTFStrTest := '0600f3d950b5a289a1d9da127f6ad0b946f533d8'; lDataRow.AddInputVector('01234567012345670123456701234567', 10, 2); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '82abff6605dbe1c17def12a394fa22a82b544a35'; lDataRow.ExpectedOutputUTFStrTest := '0835aef8def1f766c534cc36694f6af813312529'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\x9a\x7d\xfd\xf1\xec\xea\xd0\x6e\xd6\x46\xaa\x55\xfe\x75\x71\x46')); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cb0082c8f197d260991ba6a460e76e202bad27b3'; lDataRow.ExpectedOutputUTFStrTest := '5c64c33b3df55af4120314c10614a102e0feada9'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\xf7\x8f\x92\x14\x1b\xcd\x17\x0a\xe8\x9b\x4f\xba\x15\xa1\xd5\x9f' + '\x3f\xd8\x4d\x22\x3c\x92\x51\xbd\xac\xbb\xae\x61\xd0\x5e\xd1\x15' + '\xa0\x6a\x7c\xe1\x17\xb7\xbe\xea\xd2\x44\x21\xde\xd9\xc3\x25\x92' + '\xbd\x57\xed\xea\xe3\x9c\x39\xfa\x1f\xe8\x94\x6a\x84\xd0\xcf\x1f' + '\x7b\xee\xad\x17\x13\xe2\xe0\x95\x98\x97\x34\x7f\x67\xc8\x0b\x04' + '\x00\xc2\x09\x81\x5d\x6b\x10\xa6\x83\x83\x6f\xd5\x56\x2a\x56\xca' + '\xb1\xa2\x8e\x81\xb6\x57\x66\x54\x63\x1c\xf1\x65\x66\xb8\x6e\x3b' + '\x33\xa1\x08\xb0\x53\x07\xc0\x0a\xff\x14\xa7\x68\xed\x73\x50\x60' + '\x6a\x0f\x85\xe6\xa9\x1d\x39\x6f\x5b\x5c\xbe\x57\x7f\x9b\x38\x80' + '\x7c\x7d\x52\x3d\x6d\x79\x2f\x6e\xbc\x24\xa4\xec\xf2\xb3\xa4\x27' + '\xcd\xbb\xfb')); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c464f3b38d34f7bf49b29635e50c8957b3a87dc7'; lDataRow.ExpectedOutputUTFStrTest := '65bbefb5a727dedc039540dc1dcfa18c6fa3aeec'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'df2724a78d507fbfb4b85aa328cf8221e10f74a7'; lDataRow.ExpectedOutputUTFStrTest := '634f2fd10ec73d75bd976990064edfc1e9d75cd5'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); end; procedure TestTHash_SHA1.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_SHA1.TestClassByName; begin DoTestClassByName('THash_SHA1', THash_SHA1); end; procedure TestTHash_SHA1.TestDigestSize; begin CheckEquals(20, FHash.DigestSize); end; procedure TestTHash_SHA1.TestIdentity; begin CheckEquals($7B215B73, FHash.Identity); end; procedure TestTHash_SHA1.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA256.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_SHA256.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'; lDataRow.ExpectedOutputUTFStrTest := 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'; lDataRow.AddInputVector(''); // Source until SourceEnd: https://datatracker.ietf.org/doc/html/rfc4634 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'; lDataRow.ExpectedOutputUTFStrTest := '13e228567e8249fce53337f25d7970de3bd68ab2653424c7b8f9fd05e33caedf'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1'; lDataRow.ExpectedOutputUTFStrTest := 'fa84fa96dd6f1a0fda1769cacec9bac12efadad72ab60ff68ec5ae1a4d3fab8e'; lDataRow.AddInputVector('abcdbcdecdefdef'); lDataRow.AddInputVector('gefghfghighijhijki'); lDataRow.AddInputVector('jkljklmklmnlmnomnopnop'); lDataRow.AddInputVector('q'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0'; lDataRow.ExpectedOutputUTFStrTest := 'a0bc50078623514a87e96de81d8d200527a1b1150acd92252d88aa109dfa0aa4'; lDataRow.AddInputVector('a', 1, 1000000); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '594847328451bdfa85056225462cc1d867d877fb388df0ce35f25ab5562bfbb5'; lDataRow.ExpectedOutputUTFStrTest := '9c27762fb6a10478e2e306ddc4db3ec18529c00227dbd2c0555a31d047d8da12'; lDataRow.AddInputVector('01234567012345670123456701234567', 1, 20); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '175ee69b02ba9b58e2b0a5fd13819cea573f3940a94f825128cf4209beabb4e8'; lDataRow.ExpectedOutputUTFStrTest := '77d0d74c83fc00e4dcac550a425417d67ccad6487dfdc9f15bb14153f39d781e'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\xe3\xd7\x25\x70\xdc\xdd\x78\x7c\xe3\x88\x7a\xb2\xcd\x68\x46\x52')); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '97dbca7df46d62c8a422c941dd7e835b8ad3361763f7e9b2d95f4f0da6e1ccbc'; lDataRow.ExpectedOutputUTFStrTest := '14f3a8f8b751040ed71029032db016e4f17be48709cffd71695ac58020fa7235'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\x83\x26\x75\x4e\x22\x77\x37\x2f' + '\x4f\xc1\x2b\x20\x52\x7a\xfe\xf0' + '\x4d\x8a\x05\x69\x71\xb1\x1a\xd5' + '\x71\x23\xa7\xc1\x37\x76\x00\x00' + '\xd7\xbe\xf6\xf3\xc1\xf7\xa9\x08' + '\x3a\xa3\x9d\x81\x0d\xb3\x10\x77' + '\x7d\xab\x8b\x1e\x7f\x02\xb8\x4a' + '\x26\xc7\x73\x32\x5f\x8b\x23\x74' + '\xde\x7a\x4b\x5a\x58\xcb\x5c\x5c' + '\xf3\x5b\xce\xe6\xfb\x94\x6e\x5b' + '\xd6\x94\xfa\x59\x3a\x8b\xeb\x3f' + '\x9d\x65\x92\xec\xed\xaa\x66\xca' + '\x82\xa2\x9d\x0c\x51\xbc\xf9\x33' + '\x62\x30\xe5\xd7\x84\xe4\xc0\xa4' + '\x3f\x8d\x79\xa3\x0a\x16\x5c\xba' + '\xbe\x45\x2b\x77\x4b\x9c\x71\x09' + '\xa9\x7d\x13\x8f\x12\x92\x28\x96' + '\x6f\x6c\x0a\xdc\x10\x6a\xad\x5a' + '\x9f\xdd\x30\x82\x57\x69\xb2\xc6' + '\x71\xaf\x67\x59\xdf\x28\xeb\x39' + '\x3d\x54\xd6')); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '85c0f2421bdffd1dc9568cd815175fe286e5c18a4c4e0308114f534442c6dc3c'; lDataRow.ExpectedOutputUTFStrTest := 'c4ccadb4452fd1e52ca9e90e4447a2f093b4bf2acd5a1e2293ef622e0a166b53'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c8a0bcda5fec642e44488fd7b782821d478ef17e651eaec0e43f9036388340bb'; lDataRow.ExpectedOutputUTFStrTest := '2f8aa82881b1140af41e95bf96ded6d034654492007b7302e1bd9231ce99bdf3'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); end; procedure TestTHash_SHA256.TestDigestSize; begin CheckEquals(32, FHash.DigestSize); end; procedure TestTHash_SHA256.TestIdentity; begin CheckEquals($9EE7F031, FHash.Identity); end; procedure TestTHash_SHA256.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA256.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_SHA256.TestClassByName; begin DoTestClassByName('THash_SHA256', THash_SHA256); end; { TestTHash_SHA224 } procedure TestTHash_SHA224.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_SHA224.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f'; lDataRow.ExpectedOutputUTFStrTest := 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f'; lDataRow.AddInputVector(''); // Source until SourceEnd: https://datatracker.ietf.org/doc/html/rfc4634 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'; lDataRow.ExpectedOutputUTFStrTest := '57ba76af9d4846f1e08697d79422ea3f516fe3145ad7fc4c93ba85ac'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525'; lDataRow.ExpectedOutputUTFStrTest := '2d30dab9655cd28a84790ae02e742d28b02c1d5d2e7196cee1732ca5'; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67'; lDataRow.ExpectedOutputUTFStrTest := '11bb18d73d725c7d104e1ca15ee9b5094c3703ac152ffb2484b45a78'; lDataRow.AddInputVector('a', 1, 1000000); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '567f69f168cd7844e65259ce658fe7aadfa25216e68eca0eb7ab8262'; lDataRow.ExpectedOutputUTFStrTest := 'e0a85c282eafe3eb64012b257df2e692fdb4ff9e157ad145b5d753ad'; lDataRow.AddInputVector('01234567012345670123456701234567', 1, 20); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'df90d78aa78821c99b40ba4c966921accd8ffb1e98ac388e56191db1'; lDataRow.ExpectedOutputUTFStrTest := '12afe1e6d3b55e3934a3017aba520a9b1be4b585c5965bbc946ace53'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\x18\x80\x40\x05\xdd\x4f\xbd\x15\x56\x29\x9d' + '\x6f\x9d\x93\xdf\x62')); // SourceEnd // Source until SOurceEnd: German Wikipedia lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '49b08defa65e644cbf8a2dd9270bdededabc741997d1dadd42026d7b'; lDataRow.ExpectedOutputUTFStrTest := '17736c9fe07a99442d402a22f6a4a46014e0ea8196508d330e716674'; lDataRow.AddInputVector('Franz jagt im komplett verwahrlosten Taxi quer durch Bayern'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '58911e7fccf2971a7d07f93162d8bd13568e71aa8fc86fc1fe9043d1'; lDataRow.ExpectedOutputUTFStrTest := 'a90f803e04789e2e0984730b4d9c1c71a0921bd714f1a874e13fef29'; lDataRow.AddInputVector('Frank jagt im komplett verwahrlosten Taxi quer durch Bayern'); // SourceEnd end; procedure TestTHash_SHA224.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_SHA224.TestClassByName; begin DoTestClassByName('THash_SHA224', THash_SHA224); end; procedure TestTHash_SHA224.TestDigestSize; begin CheckEquals(28, FHash.DigestSize); end; procedure TestTHash_SHA224.TestIdentity; begin CheckEquals($3FA807DA, FHash.Identity); end; procedure TestTHash_SHA224.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA384.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_SHA384.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0' + 'cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b'; lDataRow.ExpectedOutputUTFStrTest := '38b060a751ac96384cd9327eb1b1e36a21fdb71114be0' + '7434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b'; lDataRow.AddInputVector(''); // Source until SourceEnd: https://datatracker.ietf.org/doc/html/rfc4634 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8' + 'b605a43ff5bed8086072ba1e7cc2358baeca134c825a7'; lDataRow.ExpectedOutputUTFStrTest := '9b7ce7c7af46e400a37c8099cb4bbb5d0408061dd74cdb5dac7' + '661bed1e53724bd07f299e265f400802a48d2e0b2092c'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa' + '08086e3b0f712fcc7c71a557e2db966c3e9fa91746039'; lDataRow.ExpectedOutputUTFStrTest := '3c5fbafef52900a32840433c972999429d5c157426fdfb5c496' + '8278f25bd4fe4f3b7aee8ae060695b05f61e595609637'; lDataRow.AddInputVector('abcdefghbcdefghicdefghijdefghij'); lDataRow.AddInputVector('kefghijklfghijklmghijklmn'); lDataRow.AddInputVector('hijklmnoijklmnopjklmnopqklmnopqrlmnopqr'); lDataRow.AddInputVector('smnopqrstnopqrst'); lDataRow.AddInputVector('u'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9d0e1809716474cb086e834e310a4a1ced149e9c00f24852' + '7972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985'; lDataRow.ExpectedOutputUTFStrTest := '85056c62b9b2eba33a1ea69d06e32e71715188b25d3f7a2b' + 'c37be377890c4b0c08e7f55bc83550f0fe27a209088bc671'; lDataRow.AddInputVector('a', 1, 1000000); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2fc64a4f500ddb6828f6a3430b8dd72a368eb7f3a8322a70' + 'bc84275b9c0b3ab00d27a5cc3c2d224aa6b61a0d79fb4596'; lDataRow.ExpectedOutputUTFStrTest := 'e6ccec32ee864cb67b27155d65d4eefee73f4d9b21683f58' + 'd066d44e3af4959016f31c107dbf3e8bc04bca3f35f3493f'; lDataRow.AddInputVector('01234567012345670123456701234567', 1, 20); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c9a68443a005812256b8ec76b00516f0dbb74fab26d66591' + '3f194b6ffb0e91ea9967566b58109cbc675cc208e4c823f7'; lDataRow.ExpectedOutputUTFStrTest := '9e1bc4e7cc69cd811ad22dcd6ea3666396571171c9585baa' + '490aa25a87dc17af6e648e814a4056454ed93caa28a53a8e'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\xa4\x1c\x49\x77\x79\xc0\x37\x5f\xf1\x0a' + '\x7f\x4e\x08\x59\x17\x39')); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4f440db1e6edd2899fa335f09515aa025ee177a79f4b4aaf' + '38e42b5c4de660f5de8fb2a5b2fbd2a3cbffd20cff1288c0'; lDataRow.ExpectedOutputUTFStrTest := '5e2efe090daef2acb31259391d0002f312b001784f1a8888' + '6fc133d97b14843fc564aa35b956ef37d967ad56a01b1c67'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\x39\x96\x69\xe2\x8f\x6b\x9c\x6d\xbc\xbb' + '\x69\x12\xec\x10\xff\xcf\x74\x79\x03\x49' + '\xb7\xdc\x8f\xbe\x4a\x8e\x7b\x3b\x56\x21' + '\xdb\x0f\x3e\x7d\xc8\x7f\x82\x32\x64\xbb' + '\xe4\x0d\x18\x11\xc9\xea\x20\x61\xe1\xc8' + '\x4a\xd1\x0a\x23\xfa\xc1\x72\x7e\x72\x02' + '\xfc\x3f\x50\x42\xe6\xbf\x58\xcb\xa8\xa2' + '\x74\x6e\x1f\x64\xf9\xb9\xea\x35\x2c\x71' + '\x15\x07\x05\x3c\xf4\xe5\x33\x9d\x52\x86' + '\x5f\x25\xcc\x22\xb5\xe8\x77\x84\xa1\x2f' + '\xc9\x61\xd6\x6c\xb6\xe8\x95\x73\x19\x9a' + '\x2c\xe6\x56\x5c\xbd\xf1\x3d\xca\x40\x38' + '\x32\xcf\xcb\x0e\x8b\x72\x11\xe8\x3a\xf3' + '\x2a\x11\xac\x17\x92\x9f\xf1\xc0\x73\xa5' + '\x1c\xc0\x27\xaa\xed\xef\xf8\x5a\xad\x7c' + '\x2b\x7c\x5a\x80\x3e\x24\x04\xd9\x6d\x2a' + '\x77\x35\x7b\xda\x1a\x6d\xae\xed\x17\x15' + '\x1c\xb9\xbc\x51\x25\xa4\x22\xe9\x41\xde' + '\x0c\xa0\xfc\x50\x11\xc2\x3e\xcf\xfe\xfd' + '\xd0\x96\x76\x71\x1c\xf3\xdb\x0a\x34\x40' + '\x72\x0e\x16\x15\xc1\xf2\x2f\xbc\x3c\x72' + '\x1d\xe5\x21\xe1\xb9\x9b\xa1\xbd\x55\x77' + '\x40\x86\x42\x14\x7e\xd0\x96')); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cdbb41d1164ef06788b8b3f0fcb157de981311f0bc76752c952' + '075fcb14d1c133b27ddc7ad6b6b8c180346d0fe18694b'; lDataRow.ExpectedOutputUTFStrTest := '2cbf89df082d30f912fc15415e3e0ee75cf2d5ebdd2b32626d6' + 'a94ff86e40c68cce673c5a28b59a1ab5f879d11698bdb'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity '+ 'decision error. It has total length 111 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '49b8d662fc136462591f9a96a64d28ea8fb03b7b943dd3400f2' + '633effcab37502927736f19bdeecce842801f41ab3e26'; lDataRow.ExpectedOutputUTFStrTest := '32a077958cdd604f0224941d17c52b37d441152ab0b19bf7594' + '50f39a3c94f1d8521c20e5add06cbb5f56082265f43c5'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity '+ 'decision error. It has total length 112 bytes.'); end; procedure TestTHash_SHA384.TestDigestSize; begin CheckEquals(48, FHash.DigestSize); end; procedure TestTHash_SHA384.TestIdentity; begin CheckEquals($C4858567, FHash.Identity); end; procedure TestTHash_SHA384.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA384.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_SHA384.TestClassByName; begin DoTestClassByName('THash_SHA384', THash_SHA384); end; procedure TestTHash_SHA512.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_SHA512.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f' + '4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931' + 'bd47417a81a538327af927da3e'; lDataRow.ExpectedOutputUTFStrTest := 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f' + '4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931' + 'bd47417a81a538327af927da3e'; lDataRow.AddInputVector(''); // Source until SourceEnd: https://datatracker.ietf.org/doc/html/rfc4634 lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9' + 'eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d44' + '23643ce80e2a9ac94fa54ca49f'; lDataRow.ExpectedOutputUTFStrTest := 'add8b8154df7a734d2947a981f4e61c5366710d610040e5b548' + '94d1006e89283cba082287ed5dd4c25cdaa5af56d24ab9fbedc' + '56897130b0b5f3e50c7f9ee6df'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa1729' + '9aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329' + 'eeb6dd26545e96e55b874be909'; lDataRow.ExpectedOutputUTFStrTest := 'd14cbc5ecfd355acf9d181ee878b91db4f30a7b03f7904388f2' + '52a77b1fffa9feb96803698294556ff7ce87ad0ab3ae748df97' + '9603733105ff3ac038e51483a3'; lDataRow.AddInputVector('abcdefghbcdefghicdefghijdefghij'); lDataRow.AddInputVector('kefghijklfghijklmghijklmn'); lDataRow.AddInputVector('hijklmnoijklmnopjklmnopqklmnopqrlmnopqr'); lDataRow.AddInputVector('smnopqrstnopqrst'); lDataRow.AddInputVector('u'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e718483d0ce769644e2e42c7bc15b4638e1f98b13b204428' + '5632a803afa973ebde0ff244877ea60a4cb0432ce577c31b' + 'eb009c5c2c49aa2e4eadb217ad8cc09b'; lDataRow.ExpectedOutputUTFStrTest := '5e6b9aa02688b69fe5ebe842aeab69b22144d815ca603051' + 'f2e61ab752d202f85dc54252d19f9d62381a2d5e88ab391b' + '7c6565d5e0d39925a4ad5b07e99925bd'; lDataRow.AddInputVector('a', 1, 1000000); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '89d05ba632c699c31231ded4ffc127d5a894dad412c0e024' + 'db872d1abd2ba8141a0f85072a9be1e2aa04cf33c765cb51' + '0813a39cd5a84c4acaa64d3f3fb7bae9'; lDataRow.ExpectedOutputUTFStrTest := '11c3e27d770153716741eb4d62ea4ae8e8796849e70deddf' + '7333e41de50ba8123e7500bf606a7f05794d4aad5c794ae2' + '0a9eba1cb33cdf69eb7e92b225f58804'; lDataRow.AddInputVector('01234567012345670123456701234567', 1, 20); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cb0b67a4b8712cd73c9aabc0b199e9269b20844afb75acbd' + 'd1c153c9828924c3ddedaafe669c5fdd0bc66f630f677398' + '8213eb1b16f517ad0de4b2f0c95c90f8'; lDataRow.ExpectedOutputUTFStrTest := 'c9f285c82c84e25c22034a5ffc8bc14626b94bf1770cd83b' + '5c0744b27f56758f304271dc3676b7a8ba82b9af0c51b886' + '6461f301ecdf52796d061dc118776f10'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\x8d\x4e\x3c\x0e\x38\x89\x19\x14\x91'+ '\x81\x6e\x9d\x98\xbf\xf0\xa0')); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c665befb36da189d78822d10528cbf3b12b3eef726039909' + 'c1a16a270d48719377966b957a878e720584779a62825c18' + 'da26415e49a7176a894e7510fd1451f5'; lDataRow.ExpectedOutputUTFStrTest := '131e7e4a7b3b24152f67680d6e168d6e6973aeb0baf71acd' + '2d1071dc48bf623e7b3bf965df0a6b1b8b893376e41e2ae1' + '74019d5f682d05de2db0865af5ca61d3'; lDataRow.AddInputVector(TFormat_ESCAPE.Decode('\xa5\x5f\x20\xc4\x11\xaa\xd1\x32\x80' + '\x7a\x50\x2d\x65\x82\x4e\x31\xa2\x30' + '\x54\x32\xaa\x3d\x06\xd3\xe2\x82\xa8' + '\xd8\x4e\x0d\xe1\xde\x69\x74\xbf\x49' + '\x54\x69\xfc\x7f\x33\x8f\x80\x54\xd5' + '\x8c\x26\xc4\x93\x60\xc3\xe8\x7a\xf5' + '\x65\x23\xac\xf6\xd8\x9d\x03\xe5\x6f' + '\xf2\xf8\x68\x00\x2b\xc3\xe4\x31\xed' + '\xc4\x4d\xf2\xf0\x22\x3d\x4b\xb3\xb2' + '\x43\x58\x6e\x1a\x7d\x92\x49\x36\x69' + '\x4f\xcb\xba\xf8\x8d\x95\x19\xe4\xeb' + '\x50\xa6\x44\xf8\xe4\xf9\x5e\xb0\xea' + '\x95\xbc\x44\x65\xc8\x82\x1a\xac\xd2' + '\xfe\x15\xab\x49\x81\x16\x4b\xbb\x6d' + '\xc3\x2f\x96\x90\x87\xa1\x45\xb0\xd9' + '\xcc\x9c\x67\xc2\x2b\x76\x32\x99\x41' + '\x9c\xc4\x12\x8b\xe9\xa0\x77\xb3\xac' + '\xe6\x34\x06\x4e\x6d\x99\x28\x35\x13' + '\xdc\x06\xe7\x51\x5d\x0d\x73\x13\x2e' + '\x9a\x0d\xc6\xd3\xb1\xf8\xb2\x46\xf1' + '\xa9\x8a\x3f\xc7\x29\x41\xb1\xe3\xbb' + '\x20\x98\xe8\xbf\x16\xf2\x68\xd6\x4f' + '\x0b\x0f\x47\x07\xfe\x1e\xa1\xa1\x79' + '\x1b\xa2\xf3\xc0\xc7\x58\xe5\xf5\x51' + '\x86\x3a\x96\xc9\x49\xad\x47\xd7\xfb' + '\x40\xd2')); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b4dd09998c54420c9445fb0706715f595435880da13fc56d2f5' + '5b47a86cd9e59a5ee9564f3bc8e91ed9ab6b2a5db2561a3bd56' + 'e21defda4faf831da96210104d'; lDataRow.ExpectedOutputUTFStrTest := 'a3c375fd0d3c264e4197cb4a7087e854d487c1d6e1011408b3d' + 'a60e48d51596c950566215cf8bc917354862c7de4e38f155aed' + '1ee9f3f3416c5364782a534ac2'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. It has total length 111 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ad80509dcad277f40647311294f9b007165ae8456829d4befdf' + 'd0de536c05c8ceec7dbe6d9dac88578fa3037d37b81382c0ae1' + '4c2fd9388fde50105ad1d7d993'; lDataRow.ExpectedOutputUTFStrTest := 'f5fd5871f5d7c55b230fae0d48d054dd6732aa35a0b72074721' + 'b3a28fb685ed5560dad9864a35c16f237696666503bada6cc77' + '082258f65f265c501b31dcf92b'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. It has total length 112 bytes.'); end; procedure TestTHash_SHA512.TestDigestSize; begin CheckEquals(64, FHash.DigestSize); end; procedure TestTHash_SHA512.TestIdentity; begin CheckEquals($F8A9E7A9, FHash.Identity); end; procedure TestTHash_SHA512.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_SHA512.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_SHA512.TestClassByName; begin DoTestClassByName('THash_SHA512', THash_SHA512); end; procedure TestTHash_Haval128.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Haval128.Create; // Source until SourceEnd: https://web.archive.org/web/20120206072234/http:// // Rounds: 3 labs.calyptix.com/haval-1.1.tar.gz lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c68f39913f901f3ddf44c707357a7d70'; lDataRow.ExpectedOutputUTFStrTest := 'c68f39913f901f3ddf44c707357a7d70'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0cd40739683e15f01ca5dbceef4059f1'; lDataRow.ExpectedOutputUTFStrTest := 'f2ac5ac2aae01fc184ef399da42d5865'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dc1f3c893d17cc4edd9ae94af76a0af0'; lDataRow.ExpectedOutputUTFStrTest := 'b0b47bdc3c2434256b49c77675bd0aab'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd4be2164ef387d9f4d46ea8efb180cf5'; lDataRow.ExpectedOutputUTFStrTest := 'a74975d492868f80184a785e163d6a1a'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dc502247fb3eb8376109eda32d361d82'; lDataRow.ExpectedOutputUTFStrTest := '6f2851b51a880c8d725dbddcc7274382'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'de5eb3f7d9eb08fae7a07d68e3047ec6'; lDataRow.ExpectedOutputUTFStrTest := 'f68c39679f1660c0504feaa4d5958587'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4806b64dae93d3606308310a439e2a3a'; lDataRow.ExpectedOutputUTFStrTest := 'dc48ac538e085f81571d4a64aca44fe4'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8beaa7dd5bb591c8009e429d79041813'; lDataRow.ExpectedOutputUTFStrTest := '7669b7e0b3a872b8f4f48c5351c4c9c5'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8beaa7dd5bb591c8009e429d79041813'; lDataRow.ExpectedOutputUTFStrTest := '7669b7e0b3a872b8f4f48c5351c4c9c5'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1bdc556b29ad02ec09af8c66477f2a87'; lDataRow.ExpectedOutputUTFStrTest := '1bdc556b29ad02ec09af8c66477f2a87'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '24d2bc955a219e3e06462c91b555cfa1'; lDataRow.ExpectedOutputUTFStrTest := 'fa53172579efb3ba63cf4b32e4f66bdd'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '16c743e5eefd3266ed50deac6c30313e'; lDataRow.ExpectedOutputUTFStrTest := 'c0716b442299437c01885a4e6335b2c2'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '82d163440f6e853229a97007ec4af0e5'; lDataRow.ExpectedOutputUTFStrTest := '9eb5e08841eb1cdab920d91660339340'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '92e8ec9ad7fd209d97e9ce21b50440e9'; lDataRow.ExpectedOutputUTFStrTest := '0389809978badf696ea0290488be3ddd'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4ae2f37cef9275cce0d73f6a1eb9cdd8'; lDataRow.ExpectedOutputUTFStrTest := '821ea5eb3f12c7cb429eb4f44c60112c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3e1846cda3c9542944672b7150d0f38c'; lDataRow.ExpectedOutputUTFStrTest := '67c7f95b227d60218508df6c7b4b9fe2'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '41b74ec225c9fb7a8e24840a98141b39'; lDataRow.ExpectedOutputUTFStrTest := '85b87eb2cfdf9dc3e6bf25b654c28f5c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '41b74ec225c9fb7a8e24840a98141b39'; lDataRow.ExpectedOutputUTFStrTest := '85b87eb2cfdf9dc3e6bf25b654c28f5c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_Haval128.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_Haval128.TestGetMaxRounds; begin CheckEquals(5, THash_Haval128(FHash).GetMaxRounds); end; procedure TestTHash_Haval128.TestGetMinRounds; begin CheckEquals(3, THash_Haval128(FHash).GetMinRounds); end; procedure TestTHash_Haval128.TestIdentity; begin CheckEquals($B0837E88, FHash.Identity); end; procedure TestTHash_Haval128.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Haval128.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_Haval128.TestClassByName; begin DoTestClassByName('THash_Haval128', THash_Haval128); end; procedure TestTHash_Haval160.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Haval160.Create; // Source until SourceEnd: https://web.archive.org/web/20120206072234/http:// // Rounds: 3 labs.calyptix.com/haval-1.1.tar.gz lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd353c3ae22a25401d257643836d7231a9a95f953'; lDataRow.ExpectedOutputUTFStrTest := 'd353c3ae22a25401d257643836d7231a9a95f953'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4da08f514a7275dbc4cece4a347385983983a830'; lDataRow.ExpectedOutputUTFStrTest := 'd976681ea27160c08ebab0032a76653fae848376'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8822bc6f3e694e73798920c77ce3245120dd8214'; lDataRow.ExpectedOutputUTFStrTest := 'cb5a03288450a452caec0e9154cb56ccaa007361'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'be68981eb3ebd3f6748b081ee5d4e1818f9ba86c'; lDataRow.ExpectedOutputUTFStrTest := '5433add25965d4cef4158530ea11d9cabf5dfae0'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'eba9fa6050f24c07c29d1834a60900ea4e32e61b'; lDataRow.ExpectedOutputUTFStrTest := '4461ef31738d14dca0ad4419f5421c50b05310d3'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '97dc988d97caae757be7523c4e8d4ea63007a4b9'; lDataRow.ExpectedOutputUTFStrTest := 'e7052bbd65c7608cf0589f6471d85d7c0f02a6fd'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ba27e0d51b9ba140804252413c52b42dfe97214b'; lDataRow.ExpectedOutputUTFStrTest := '1eecea4c278e9a797bbcfce396dcebca7243623b'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5ea7fa9a0236aad66a1da8f161985c6e3dae2b81'; lDataRow.ExpectedOutputUTFStrTest := 'b0de8db36f55ea32b57d4333114d4a9d47ce53cd'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5ea7fa9a0236aad66a1da8f161985c6e3dae2b81'; lDataRow.ExpectedOutputUTFStrTest := 'b0de8db36f55ea32b57d4333114d4a9d47ce53cd'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'fe79d0a044ffb75d5354668d664e4f4b9cc33477'; lDataRow.ExpectedOutputUTFStrTest := 'fe79d0a044ffb75d5354668d664e4f4b9cc33477'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5e1610fced1d3adb0bb18e92ac2b11f0bd99d8ed'; lDataRow.ExpectedOutputUTFStrTest := '871624bcbb8c01039b10dbd18f4e85ef2847beec'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8e568ad6ccd58d17e0a11e92183232e0d1d2e9bf'; lDataRow.ExpectedOutputUTFStrTest := '53374669cfde8f3a5013ff3ba218ce84d4fe0764'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '700d43a9b5e38300303fd4e25a6a326beb4a2241'; lDataRow.ExpectedOutputUTFStrTest := '92acab606db474de51c93cb812b125f0a71c413b'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1dd40aeab9610585fcae7492ff3b893c2a018f4e'; lDataRow.ExpectedOutputUTFStrTest := '93cc27c8f8e834a0ecc86f7e15dd25eddc4439f5'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '485abb76ed2f5ac8bb86ddeb8cb4c54cf5bb077b'; lDataRow.ExpectedOutputUTFStrTest := '82424bfabb7afd551fb01478e0bc26099300cd1b'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7e3ec827726ae5ce4f4f67614395aa1c0602551a'; lDataRow.ExpectedOutputUTFStrTest := '297a10aab083211007ffa25be84fcfdb9cb8a94d'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '687e9073f7ec5f01ea4744b86ef40e13aaacf0a4'; lDataRow.ExpectedOutputUTFStrTest := 'd65ef2dcb081c97494e84407033cb29415a80730'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '687e9073f7ec5f01ea4744b86ef40e13aaacf0a4'; lDataRow.ExpectedOutputUTFStrTest := 'd65ef2dcb081c97494e84407033cb29415a80730'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_Haval160.TestDigestSize; begin CheckEquals(20, FHash.DigestSize); end; procedure TestTHash_Haval160.TestGetMaxRounds; begin CheckEquals(5, THash_Haval160(FHash).GetMaxRounds); end; procedure TestTHash_Haval160.TestGetMinRounds; begin CheckEquals(3, THash_Haval160(FHash).GetMinRounds); end; procedure TestTHash_Haval160.TestIdentity; begin CheckEquals($DA3433BE, FHash.Identity); end; procedure TestTHash_Haval160.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Haval160.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_Haval160.TestClassByName; begin DoTestClassByName('THash_Haval160', THash_Haval160); end; procedure TestTHash_Haval192.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Haval192.Create; // Source until SourceEnd: https://web.archive.org/web/20120206072234/http:// // Rounds: 4 labs.calyptix.com/haval-1.1.tar.gz lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4a8372945afa55c7dead800311272523ca19d42ea47b72da'; lDataRow.ExpectedOutputUTFStrTest := '4a8372945afa55c7dead800311272523ca19d42ea47b72da'; lDataRow.AddInputVector(''); lDataRow.PaddingByte := 1; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '856c19f86214ea9a8a2f0c4b758b973cce72a2d8ff55505c'; lDataRow.ExpectedOutputUTFStrTest := 'ea49939cb5a812d962cb3593dd37e35cdcd208961be61bf5'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0c1396d7772689c46773f3daaca4efa982adbfb2f1467eea'; lDataRow.ExpectedOutputUTFStrTest := '5eb34e664e18f78da615ab3424243c49b054af95722509e8'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c3a5420bb9d7d82a168f6624e954aaa9cdc69fb0f67d785e'; lDataRow.ExpectedOutputUTFStrTest := 'ca16d8d258a68bb8443fe6185558e44f34ddad8ba86199e0'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2e2e581d725e799fda1948c75e85a28cfe1cf0c6324a1ada'; lDataRow.ExpectedOutputUTFStrTest := '368df8981494d39560453be6860b2290eced3cf8087d4147'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e5c9f81ae0b31fc8780fc37cb63bb4ec96496f79a9b58344'; lDataRow.ExpectedOutputUTFStrTest := 'd1458c150e3330016f0ebdb1f7003e0eba960739a6830923'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8c80602a16fcca8332c08446ea61a2fbc74e05d3361f0e4d'; lDataRow.ExpectedOutputUTFStrTest := '517f983928861f8a86402101e500fb613070177cfc93914c'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aa15056802a32823332dd551ebe3e39918d6bc9e1fa293b1'; lDataRow.ExpectedOutputUTFStrTest := '80c428dfb6bc4179803c47f840a98ffeb527b491b06cdfd6'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aa15056802a32823332dd551ebe3e39918d6bc9e1fa293b1'; lDataRow.ExpectedOutputUTFStrTest := '80c428dfb6bc4179803c47f840a98ffeb527b491b06cdfd6'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '51fa9e28c96865207ed6dae2eaa1d8af6e7de2783ebec4b4'; lDataRow.ExpectedOutputUTFStrTest := '51fa9e28c96865207ed6dae2eaa1d8af6e7de2783ebec4b4'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a1446e6cedb4b28bc6e13d4d1d2694e9ce4a3d942c73589e'; lDataRow.ExpectedOutputUTFStrTest := '157776b815376afdba30a5de81cb2c3eaa6d28ed7b19bbad'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '74aa31182ff09bcce453a7f71b5a7c5e80872fa90cd93ae4'; lDataRow.ExpectedOutputUTFStrTest := '056003283fb434178a1ff76764812885196cdc74604c967b'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ca05546ffa4b69dafa7c04424cc10802a2523efcb8bebb61'; lDataRow.ExpectedOutputUTFStrTest := '2d95bdbb37c3c74118c739030345f0acd66551b3cd6486d7'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5a238735d9e902e16cad81229cc981a763508c73f4a52dd0'; lDataRow.ExpectedOutputUTFStrTest := '3dc4298f38dced830191e2d6aa012304ddba79dbad83cd05'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd51d73eb03b0d841c24f2007aa9159f0f70a971cbfbed33c'; lDataRow.ExpectedOutputUTFStrTest := 'cfcd7add4233885ec083a5a25662b29afbcbbcb4e6f081c7'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1cee084b711ef399076a4cfa095a81dc6e1667f3c8207204'; lDataRow.ExpectedOutputUTFStrTest := '6e2c2b45cc4efd0422ae3a6c0cf4dc9a400a901723881733'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f5608294798348bfa3fc45f72954a0e980b15804b4c56674'; lDataRow.ExpectedOutputUTFStrTest := 'ff7c15641ca292000ba31bb863b7f3b524943e2ed64c4b12'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f5608294798348bfa3fc45f72954a0e980b15804b4c56674'; lDataRow.ExpectedOutputUTFStrTest := 'ff7c15641ca292000ba31bb863b7f3b524943e2ed64c4b12'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_Haval192.TestDigestSize; begin CheckEquals(24, FHash.DigestSize); end; procedure TestTHash_Haval192.TestGetMaxRounds; begin CheckEquals(5, THash_Haval192(FHash).GetMaxRounds); end; procedure TestTHash_Haval192.TestGetMinRounds; begin CheckEquals(4, THash_Haval192(FHash).GetMinRounds); end; procedure TestTHash_Haval192.TestIdentity; begin CheckEquals($B3A24E5D, FHash.Identity); end; procedure TestTHash_Haval192.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Haval192.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_Haval192.TestClassByName; begin DoTestClassByName('THash_Haval192', THash_Haval192); end; procedure TestTHash_Haval224.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Haval224.Create; // Source until SourceEnd: https://web.archive.org/web/20120206072234/http:// // Rounds: 4 labs.calyptix.com/haval-1.1.tar.gz lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3e56243275b3b81561750550e36fcd676ad2f5dd9e15f2e89e6ed78e'; lDataRow.ExpectedOutputUTFStrTest := '3e56243275b3b81561750550e36fcd676ad2f5dd9e15f2e89e6ed78e'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '742f1dbeeaf17f74960558b44f08aa98bdc7d967e6c0ab8f799b3ac1'; lDataRow.ExpectedOutputUTFStrTest := '949b0e1c272fad467366c614cb79c878f648363c6e34e4a6af2bf0c9'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '85538ffc06f3b1c693c792c49175639666f1dde227da8bd000c1e6b4'; lDataRow.ExpectedOutputUTFStrTest := 'c731136eca1d43c14c0fa34544776e06f1a911ebd245a7ae4cd6624d'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bebd7816f09baeecf8903b1b9bc672d9fa428e462ba699f814841529'; lDataRow.ExpectedOutputUTFStrTest := '97c760aec423f4f0d4fab68e0ea57ca00a402ca258c41495bf396337'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a0ac696cdb2030fa67f6cc1d14613b1962a7b69b4378a9a1b9738796'; lDataRow.ExpectedOutputUTFStrTest := '03973c5c75dcc59f28d7b7798ebe75a9cc4d6d14316ac615e8d9977c'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3e63c95727e0cd85d42034191314401e42ab9063a94772647e3e8e0f'; lDataRow.ExpectedOutputUTFStrTest := '09293b232655058426832f0ceb13ff041688f4fa43243b66a2c19677'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'adf788362468585753a4ebb59c44c8934d2995c6305beb9345ddf485'; lDataRow.ExpectedOutputUTFStrTest := '0f4b666b0257088fe15e05a8b738c9bb7955b62369df9994b92049fe'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0d53e2e5e768707ab94070f6f9b8accd9ad831076780443a2e659fdc'; lDataRow.ExpectedOutputUTFStrTest := 'e0d9ddda7cbdcde1ae543990fc5462193140b97c82646ce9379d751c'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0d53e2e5e768707ab94070f6f9b8accd9ad831076780443a2e659fdc'; lDataRow.ExpectedOutputUTFStrTest := 'e0d9ddda7cbdcde1ae543990fc5462193140b97c82646ce9379d751c'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aacd8950b239b05e8a40a0419afd3bbed206623913d8a6dfe71d174b'; lDataRow.ExpectedOutputUTFStrTest := 'aacd8950b239b05e8a40a0419afd3bbed206623913d8a6dfe71d174b'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '54a26096c951725228d34a1b55c2db5c28446e6b243fe2ae78623a4b'; lDataRow.ExpectedOutputUTFStrTest := 'a4575897b531c3e05a50f950639c47b65ec5e4047af26410773aeb52'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f9040eebae11709245501beffb5fb849f88a9086f24df3a55a03a01a'; lDataRow.ExpectedOutputUTFStrTest := '4eaeb545094367efa73ad92f0c4eff66d3ed8ad57c125bbfe4f98c74'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '144cb2de11f05df7c356282a3b485796da653f6b702868c7dcf4ae76'; lDataRow.ExpectedOutputUTFStrTest := 'c2762d3cfced507c48dd8e0827cffb020c26239cd8fcebcd65ddadb7'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'fbb63f06592fb9aa4f59652b99bc53c1ff72675726c71326c682dabc'; lDataRow.ExpectedOutputUTFStrTest := 'b8cd24f40b7a9f3ba95e5249b1fdb61df93090f85fb50973ccab8c4c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1120b26105044df0b4e5b904705f3b8cbbc14a52b73301c300baff8a'; lDataRow.ExpectedOutputUTFStrTest := 'e427422e29d14a7371874ebc3e3b04ab96766954074c8e7345b6fa10'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '752a1ee3fc2185888a421e148d6a3b8fb33ac20ba0668598c11d755a'; lDataRow.ExpectedOutputUTFStrTest := '4ead6b5944f5453f9f8abf9c863687ac0e7d6b5906d8334f5f334b38'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aff21cea7b3294dd02e6de843650fe82eb51cdd1e9d8873b13834717'; lDataRow.ExpectedOutputUTFStrTest := 'ece302f7e317c2bbab56f1e29ac123441a241297f5696465f8b7ed6d'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aff21cea7b3294dd02e6de843650fe82eb51cdd1e9d8873b13834717'; lDataRow.ExpectedOutputUTFStrTest := 'ece302f7e317c2bbab56f1e29ac123441a241297f5696465f8b7ed6d'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_Haval224.TestDigestSize; begin CheckEquals(28, FHash.DigestSize); end; procedure TestTHash_Haval224.TestGetMaxRounds; begin CheckEquals(5, THash_Haval224(FHash).GetMaxRounds); end; procedure TestTHash_Haval224.TestGetMinRounds; begin CheckEquals(4, THash_Haval224(FHash).GetMinRounds); end; procedure TestTHash_Haval224.TestIdentity; begin CheckEquals($BB738CFA, FHash.Identity); end; procedure TestTHash_Haval224.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Haval224.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_Haval224.TestClassByName; begin DoTestClassByName('THash_Haval224', THash_Haval224); end; procedure TestTHash_Haval256.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Haval256.Create; { TODO : We need to create a method to be able to specify the rounds used for a given test for these classes which support that. But: for the HAVAL algorithms this can only be set after calling DoInit/Init, as in DoInit the number of rounds is initialized depending on the output hash value length. } // Source until SourceEnd: https://web.archive.org/web/20120206072234/http:// // Rounds: 5 labs.calyptix.com/haval-1.1.tar.gz lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330'; lDataRow.ExpectedOutputUTFStrTest := 'be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'de8fd5ee72a5e4265af0a756f4e1a1f65c9b2b2f47cf17ecf0d1b88679a3e22f'; lDataRow.ExpectedOutputUTFStrTest := '42f59f1483a46c33f1d8c19a2b3bfafc5ad8855b6be91f02b1238476764c709f'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '153d2c81cd3c24249ab7cd476934287af845af37f53f51f5c7e2be99ba28443f'; lDataRow.ExpectedOutputUTFStrTest := '3c94e3e4c74a5c873d8f9a12636ec216ff0b8033e03ec6e584ff4c3d294a86db'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '357e2032774abbf5f04d5f1dec665112ea03b23e6e00425d0df75ea155813126'; lDataRow.ExpectedOutputUTFStrTest := 'f4abfc9b62f537b3d525b91f05653ef6ee439896921256aaf5f6e808172fad38'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c9c7d8afa159fd9e965cb83ff5ee6f58aeda352c0eff005548153a61551c38ee'; lDataRow.ExpectedOutputUTFStrTest := '7d4093dcdac779c9e9e2598f70b0ba8d64fb091b6af7c499348676ffd3611334'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('cdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b45cb6e62f2b1320e4f8f1b0b273d45add47c321fd23999dcf403ac37636d963'; lDataRow.ExpectedOutputUTFStrTest := '41cf38ae494b0ff1edc06d99b5085026a057da244a4f62f5882a71cadf6b9054'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'); lDataRow.AddInputVector('hijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '42bb773476b0e978e7fa7414b2e7ecf0dc0a2accb96ade5d815d0e4706969272'; lDataRow.ExpectedOutputUTFStrTest := 'acff80b9410d5116f98979c2440c3fdb0337279cb19971f7946958628d2178fc'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899876543210', 2); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e7467dad3b4f59c182a7869816ec15c8b59e4c5038ff5afbff60e6d44041a670'; lDataRow.ExpectedOutputUTFStrTest := '982f54d460ebe0221fd30391c0b58d139ef98335ffb5ba4551a4cd4b7fb9596e'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3f2be6dd53dc7944290e8939192bcccc8077c99b622e0c20355942dd6a4ec009'; lDataRow.ExpectedOutputUTFStrTest := '8a408f644a207606c853c4b297cf4b1b2768e91ab5b8ef6ce7c6a6c2cc1b056e'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3f2be6dd53dc7944290e8939192bcccc8077c99b622e0c20355942dd6a4ec009'; lDataRow.ExpectedOutputUTFStrTest := '8a408f644a207606c853c4b297cf4b1b2768e91ab5b8ef6ce7c6a6c2cc1b056e'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5981d3f8cce7f5674752595f4ad24c184ba1c738c986d4d2eddf2bd86c3f8679'; lDataRow.ExpectedOutputUTFStrTest := '5981d3f8cce7f5674752595f4ad24c184ba1c738c986d4d2eddf2bd86c3f8679'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '166f2218e0994a78ebad3feab0211b612b14e93e5cceb60e6f143df0fa166d39'; lDataRow.ExpectedOutputUTFStrTest := '8e7ae4af7207e8599142d23d097de42d9f7b5bd314de95261eff46d305834157'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '217bfdf84f5c775596c2f13ceea7417cd4e198d53ca24902f9717585ec5789ac'; lDataRow.ExpectedOutputUTFStrTest := '45e7e26a86f323b0fe52aecb5a354f683b0685aaf0a99d326baa56117bf60368'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('HAVAL'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a6828eeb82d5a9cbfc7c522ad4b3c38a42753deceb20fb3a6fabc0da8ccd6a1a'; lDataRow.ExpectedOutputUTFStrTest := '835505ef404be97dde1bcaf354cab1e88282bb2c03bb973ea80dc323033b64d3'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1a1dc8099bdaa7f35b4da4e805f1a28fee909d8dee920198185cbcaed8a10a8d'; lDataRow.ExpectedOutputUTFStrTest := '1722c5dc88d77708d4787d283d7e263857e984ae5a6f9a1854963906343abbf8'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('cdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c5647fc6c1877fff96742f27e9266b6874894f41a08f5913033d9d532aeddb39'; lDataRow.ExpectedOutputUTFStrTest := '60811e064a010c9324c386084e7e386dc7371276571d6ba4ff38495ea68cd90c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'); lDataRow.AddInputVector('hijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '88c8334686f5ae277de90a2267c7e52ec6e2fe708eedb067d136e046613f2253'; lDataRow.ExpectedOutputUTFStrTest := 'd4e9a56083f2bf6ec457b646698df7357017c53b58f0732d517796d69d057f53'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899876543210', 2); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7da3e3411ae031fa241e6f2f7deaf62827e8e97a2865ce5c1b67da2b6065efe4'; lDataRow.ExpectedOutputUTFStrTest := '1dd3aaf5bc03f3674732a28523f57ed24208d283e3836e5900ec8db0833b3f1c'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. For this detection it is 117 bytes.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6d0efcb27421a2c45c14dd66f5de5e289893360ca2089c26ef491c01bd94b21a'; lDataRow.ExpectedOutputUTFStrTest := 'e42666d73cee62653aecbce6b1bbf76134bf441f8fb04ac7be826bc2493cd537'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6d0efcb27421a2c45c14dd66f5de5e289893360ca2089c26ef491c01bd94b21a'; lDataRow.ExpectedOutputUTFStrTest := 'e42666d73cee62653aecbce6b1bbf76134bf441f8fb04ac7be826bc2493cd537'; lDataRow.PaddingByte := 128; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_Haval256.TestDigestSize; begin CheckEquals(32, FHash.DigestSize); end; procedure TestTHash_Haval256.TestGetMaxRounds; begin CheckEquals(5, THash_Haval256(FHash).GetMaxRounds); end; procedure TestTHash_Haval256.TestGetMinRounds; begin CheckEquals(5, THash_Haval256(FHash).GetMinRounds); end; procedure TestTHash_Haval256.TestIdentity; begin CheckEquals($1A3C7B11, FHash.Identity); end; procedure TestTHash_Haval256.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Haval256.TestBlockSize; begin CheckEquals(128, FHash.BlockSize); end; procedure TestTHash_Haval256.TestClassByName; begin DoTestClassByName('THash_Haval256', THash_Haval256); end; procedure TestTHash_Tiger_3Rounds.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Tiger.Create; THash_Tiger(FHash).Rounds := 3; // Source until SourceEnd: http://www.cs.technion.ac.il/~biham/Reports/Tiger/ // test-vectors-nessie-format.dat // Which is a subpage of the official Tiger website. lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3'; lDataRow.ExpectedOutputUTFStrTest := '3293ac630c13f0245f92bbb1766e16167a4e58492dde73f3'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '77befbef2e7ef8ab2ec8f93bf587a7fc613e247f5f247809'; lDataRow.ExpectedOutputUTFStrTest := '5b548919bc71cca542473494052a8fab1b68c62be0f76985'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2aab1484e8c158f2bfb8c5ff41b57a525129131c957b5f93'; lDataRow.ExpectedOutputUTFStrTest := '70198191f5b6e901c884a5e61a8f16ea0ece41969289210e'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd981f8cb78201a950dcf3048751e441c517fca1aa55a29f6'; lDataRow.ExpectedOutputUTFStrTest := '5140a79cdf23f824ffb327896283d40e028987c3ae57aa56'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1714a472eee57d30040412bfcc55032a0b11602ff37beee9'; lDataRow.ExpectedOutputUTFStrTest := '97fb5aed48239fd2487422f4289ca2774fcc39b1019b6c04'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0f7bf9a19b9c58f2b7610df7e84f0ac3a71c631e7b53f78e'; lDataRow.ExpectedOutputUTFStrTest := '82b6b1126a60eaf0abdb326e31dc3a1559d86c4fe9747fe1'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); // lDataRow := FTestData.AddRow; // lDataRow.ExpectedOutput := '8dcea680a17583ee502ba38a3c368651890ffbccdc49a8cc'; // lDataRow.ExpectedOutputUTFStrTest := '82b6b1126a60eaf0abdb326e31dc3a1559d86c4fe9747fe1'; // lDataRow.PaddingByte := 1; // lDataRow.AddInputVector('A...Za...z0...9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1c14795529fd9f207a958f84c52f11e887fa0cabdfd91bfd'; lDataRow.ExpectedOutputUTFStrTest := 'e329bffcf56e3b751f3b143b31e91da68a9c2e89ef75532b'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('1234567890', 1, 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6db0e2729cbead93d715c6a7d36302e9b3cee0d2bc314b41'; lDataRow.ExpectedOutputUTFStrTest := '0baf3bbd3bdf40a45b6ede3e4c3d644df75db942bc1f9570'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('a', 1, 1000000); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5d9ed00a030e638bdb753a6a24fb900e5a63b8e73e6c25b6'; lDataRow.ExpectedOutputUTFStrTest := 'aabbcca084acecd0511d1f6232a17bfaefa441b2982e5548'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(#0); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cdddcacfea7b70b485655ba3dc3f60dee4f6b8f861069e33'; lDataRow.ExpectedOutputUTFStrTest := '10dd94b66ba6ae0498c9c7754844662e5d8b62e27d2c4d26'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(#0, 24, 1); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dd00230799f5009fec6debc838bb6a27df2b9d6f110c7937'; lDataRow.ExpectedOutputUTFStrTest := '54d1b0b346b9597343ff5a43d89a99c35f1066cff8fb9d52'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f71c8583902afb879edfe610f82c0d4786a3a534504486b5'; lDataRow.ExpectedOutputUTFStrTest := '7ff195ad4fcbd943fc12c42064f342ceb8dac80c21ba170f'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'); lDataRow.AddInputVector('h'); lDataRow.AddInputVector('ijklmnopqrstuvwxyz0123456789+-'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '48ceeb6308b87d46e95d656112cdf18d97915f9765658957'; lDataRow.ExpectedOutputUTFStrTest := 'e18bc4cd6b28b29012a93f02f03ce3db027b2c5a7a17e9a2'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8a866829040a410c729ad23f5ada711603b3cdd357e4c15e'; lDataRow.ExpectedOutputUTFStrTest := 'ec87318e83e4e0a3a449430f2090ff8312d1977ef8fc0b19'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ce55a6afd591f5ebac547ff84f89227f9331dab0b611c889'; lDataRow.ExpectedOutputUTFStrTest := '2a9c054f26080de941ac3a7853b0c9ff80f99b03510c1860'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '631abdd103eb9a3d245b6dfd4d77b257fc7439501d1568dd'; lDataRow.ExpectedOutputUTFStrTest := '7fe631245eafd0a6fb2473c83a58a244ae60ea475880106b'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge, 1996.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c54034e5b43eb8005848a7e0ae6aac76e4ff590ae715fd25'; lDataRow.ExpectedOutputUTFStrTest := '9decaa95dac2e5d11617989563ad8c94d3236809e023ff59'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-', 2); end; procedure TestTHash_Tiger_3Rounds.TestDigestSize; begin CheckEquals(24, FHash.DigestSize); end; procedure TestTHash_Tiger_3Rounds.TestGetMaxRounds; begin CheckEquals(32, THash_Tiger(FHash).GetMaxRounds); end; procedure TestTHash_Tiger_3Rounds.TestGetMinRounds; begin CheckEquals(3, THash_Tiger(FHash).GetMinRounds); end; procedure TestTHash_Tiger_3Rounds.TestIdentity; begin CheckEquals($0E0D5F38, FHash.Identity); end; procedure TestTHash_Tiger_3Rounds.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Tiger_3Rounds.TestSetRoundsLowerLimit; begin THash_Tiger(FHash).Rounds := 2; CheckEquals(3, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_3Rounds.TestSetRoundsUpperLimit; begin THash_Tiger(FHash).Rounds := 33; CheckEquals(32, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_3Rounds.TestSetRounds; begin THash_Tiger(FHash).Rounds := 5; CheckEquals(5, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_3Rounds.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_Tiger_3Rounds.TestClassByName; begin DoTestClassByName('THash_Tiger', THash_Tiger); end; procedure TestTHash_Tiger_4Rounds.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Tiger.Create; THash_Tiger(FHash).Rounds := 4; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '24cc78a7f6ff3546e7984e59695ca13d804e0b686e255194'; lDataRow.ExpectedOutputUTFStrTest := '24cc78a7f6ff3546e7984e59695ca13d804e0b686e255194'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '538883c8fc5f28250299018e66bdf4fdb5ef7b65f2e91753'; lDataRow.ExpectedOutputUTFStrTest := '8deb34e6f352e6b27c40be290f56f8db678022bbfb14913a'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aee020507279c0d2defcb767251cc0f824bbe38569d58ee4'; lDataRow.ExpectedOutputUTFStrTest := '986161d6e753840ad58b8185244fe8ed76fcb282d51ec308'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '439c699b3ca4f2d0cedc940fabca8941932a729a91950710'; lDataRow.ExpectedOutputUTFStrTest := '8e776732af42a346f43809feb0eefdf5f7cc031347b1fb04'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'); lDataRow.AddInputVector('h'); lDataRow.AddInputVector('ijklmnopqrstuvwxyz0123456789+-'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c5fe245ba8e9e3a056efd9f6cfa79cead8571a3c87fe62f1'; lDataRow.ExpectedOutputUTFStrTest := '97bea30a65fea188ceff63018a806c71a251f3d57c81eac6'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '81100cdf2076b0e0392004f703449f41a37b840437b643ff'; lDataRow.ExpectedOutputUTFStrTest := 'f637088a5036d9c5eb1b8f0624e63063a20cf6b2b646ae56'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a1e027aa525a38589ac97cfa325dc08417b3445ab3c27452'; lDataRow.ExpectedOutputUTFStrTest := '15bdac6f9d89b892f55f111a7f74cbcad6f9ff16ded07717'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f72ca9fa0db3332782d7b8ccac29575490b8100803212003'; lDataRow.ExpectedOutputUTFStrTest := '7d8fa74429c8d0010df6015816638891d52e301ec1756b72'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge, 1996.'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '653b3075f1a85c6c74f1a9090b3c46239f29f0f92358e4e3'; lDataRow.ExpectedOutputUTFStrTest := '21073aaf37e4a7bb0ccdaed0705a188f0c19c01f5c8bf7ce'; lDataRow.PaddingByte := 1; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-', 2); end; procedure TestTHash_Tiger_4Rounds.TestSetRoundsLowerLimit; begin THash_Tiger(FHash).Rounds := 2; CheckEquals(3, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_4Rounds.TestSetRoundsUpperLimit; begin THash_Tiger(FHash).Rounds := 33; CheckEquals(32, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_4Rounds.TestSetRounds; begin THash_Tiger(FHash).Rounds := 5; CheckEquals(5, THash_Tiger(FHash).Rounds); end; procedure TestTHash_Tiger_4Rounds.TestDigestSize; begin CheckEquals(24, FHash.DigestSize); end; procedure TestTHash_Tiger_4Rounds.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Tiger_4Rounds.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_Tiger_4Rounds.TestClassByName; begin DoTestClassByName('THash_Tiger', THash_Tiger); end; procedure TestTHash_Panama.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Panama.Create; // An official source could not yet be found. // // Source until SourceEnd: http://radiogatun.noekeon.org/panama/ // lDataRow := FTestData.AddRow; // lDataRow.ExpectedOutput := '45d935220168bdcde830f65a6e46f3e91bb0bbd63d37a576718f40320c65079f'; // lDataRow.ExpectedOutputUTFStrTest := 'aa0cc954d757d7ac7779ca3342334ca471abd47d5952ac91ed837ecd5b16922b'; // lDataRow.AddInputVector(TFormat_HEXL.Decode('002911b8f4046c0d18be467367847de24ae13b513d6c1b7e2cd6267d72ae641d')); // //// // jeweils mit dem benachbarten Byte getauscht: 11223344 -> 22114433 //// lDataRow.AddInputVector(TFormat_HEXL.Decode('2900b81104f40d6cbe1873468467e27de14a513b6c3d7e1bd62c7d26ae721d64')); // // lDataRow := FTestData.AddRow; // lDataRow.ExpectedOutput := '45d935220168bdcde830f65a6e46f3e91bb0bbd63d37a576718f40320c65079f'; // lDataRow.ExpectedOutputUTFStrTest := 'aa0cc954d757d7ac7779ca3342334ca471abd47d5952ac91ed837ecd5b16922b'; // lDataRow.AddInputVector(TFormat_HEXL.Decode('69522bd85f903d8425558553c194e8051f7427d837edf3e4bc92253501eb3a6b')); // // SourceEnd // it was found out that this test vector for an empty string is the same as // in HashLib4Pascal, but that's no real proof. lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'aa0cc954d757d7ac7779ca3342334ca471abd47d5952ac91ed837ecd5b16922b'; lDataRow.ExpectedOutputUTFStrTest := 'aa0cc954d757d7ac7779ca3342334ca471abd47d5952ac91ed837ecd5b16922b'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a2a70386b81fb918be17f00ff3e3b376a0462c4dc2eec7f2c63202c8874c037d'; lDataRow.ExpectedOutputUTFStrTest := '123c6b5cfc252a1ba163ca3a9a89406f5ff2a93e9acdd34ebd1340d4955b65ea'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8f3c497bb2cc4ee1c09f025bd72effef2689e5ade788e5b633c31f7e18c53fec'; lDataRow.ExpectedOutputUTFStrTest := 'fa49e779c987a87a602b65a86e3796976681c04715fdc4a2611e9282185b1c77'; lDataRow.AddInputVector('0123456789abcdeffedcba987654321'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e7742dcf637952e28af6a4f55ab98f70285093162062a73a0baad08f579e83b3'; lDataRow.ExpectedOutputUTFStrTest := 'c04b88a5dbbaadb4a3147fc381c6ad7e807a22ffee28a848542232f9f6fbbe22'; lDataRow.AddInputVector('0123456789abcdeffedcba9876543210'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5f5ca355b90ac622b0aa7e654ef5f27e9e75111415b48b8afe3add1c6b89cba1'; lDataRow.ExpectedOutputUTFStrTest := '1520099b14290b203224cd52c1ba43b372127d6a4abe146a2ce19fee5b55be4c'; lDataRow.AddInputVector('The quick brown fox jumps over the lazy dog'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '63a7a70172f9f1896a8b636f50e7a3950a63fe7ecac9de0441d9f75b8377f664'; lDataRow.ExpectedOutputUTFStrTest := 'df9ef3392dba9cfc3509310276c21047dbb5a9e9f46d850d0c4ffa452a1a761f'; lDataRow.AddInputVector('0123456789abcdeffedcba9876543210', 1, 17); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f5f407b0987499b2af57b19fa63d92fc88a217b08a6928ab521c720a04be6825'; lDataRow.ExpectedOutputUTFStrTest := '825aabccd6e012d24a453c7843bf99819a7ee921003d934b567d1dd2684f2bff'; lDataRow.AddInputVector('0123456789abcdeffedcba987654321010123456789abcdeffedcba987654321010123456789abcdeffedcba98765432101', 1, 10); lDataRow.AddInputVector('0123456789abcdeffedcba98765432101', 3, 1); end; procedure TestTHash_Panama.TestDigestSize; begin CheckEquals(32, FHash.DigestSize); end; procedure TestTHash_Panama.TestIdentity; begin CheckEquals($323031D0, FHash.Identity); end; procedure TestTHash_Panama.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Panama.TestBlockSize; begin CheckEquals(32, FHash.BlockSize); end; procedure TestTHash_Panama.TestClassByName; begin DoTestClassByName('THash_Panama', THash_Panama); end; procedure TestTHash_Whirlpool0.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Whirlpool0.Create; // Source until SourceEnd: https://web.archive.org/web/20060621195406/http:// // www.cosic.esat.kuleuven.ac.be/nessie/workshop/ // submissions/whirlpool.zip lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b3e1ab6eaf640a34f784593f2074416accd3b8e62c620175fca' + '0997b1ba2347339aa0d79e754c308209ea36811dfa40c1c32f1' + 'a2b9004725d987d3635165d3c8'; lDataRow.ExpectedOutputUTFStrTest := 'b3e1ab6eaf640a34f784593f2074416accd3b8e62c620175fca' + '0997b1ba2347339aa0d79e754c308209ea36811dfa40c1c32f1' + 'a2b9004725d987d3635165d3c8'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ee898fa681e89e1bba6764a5c07ced2f4a7bd1b8ec0637dd9ca' + 'ca94d398db29baf6993b278231e2b7a3eecffe027928a4a4c9a' + 'c6eb0de5f0fa58ede5949983d8'; lDataRow.ExpectedOutputUTFStrTest := 'b31116c93f872f625cb09b270e0dc8e7ebc981a4fa671790c0d' + '5399aa0ada93ca24fc3fa8c510e81cd9070e0c8313afe5826b3' + '1887adeb7689988f9e95ad1ebf'; lDataRow.AddInputVector(#$00); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8786611bb3601e913e9f9e0a77181fa6279b286f162e48d32c7' + '79ad2ca0168eae66bf50bb69fb889eaeabafd5613ff8d0aecba' + '52d8a1bcdd48935fa416a10cb8'; lDataRow.ExpectedOutputUTFStrTest := '98fc1d5a206627ba22f14aedf9b7407ca76053d0f26297385e8' + '6b9ed105c993ab93f226b8e921a44de6e19b283f821ccd963df' + 'b96594c1d84e7586ec68e20a92'; lDataRow.AddInputVector(#$80); lDataRow.AddInputVector(#$00, 1, 63); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f4b620445ae62431dbd6dbcec64d2a3031cd2f48df5e755f30b' + '3d069929ed4b4eda0ae65441bc86746021fb7f2167f84d67566' + 'efaba003f0abb67a42a2ce5b13'; lDataRow.ExpectedOutputUTFStrTest := 'a025014030d125c34d3629dde73304535597a7a06ce6b012686' + 'cc064f9aba29fa943e8d07ce689aa2107f2f6162f71182b4ae1' + 'ab9cfd6ddfb3eaa66a12cc3d01'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '54ee18b0bbd4dd38a211699f2829793156e5842df502a2a2599' + '5c6c541f28cc050ff57d4af772dee7cedcc4c34c3b8ec06446c' + '6657f2f36c2c06464399879b86'; lDataRow.ExpectedOutputUTFStrTest := '8d41703489c5399ac0717eb23ec100a5a0ee247948b10f6fab1' + 'be49fec61435a23bf5abc72c65ab30c1132d392cdf49d607e1c' + 'd852cd8c97cf7fc56f50c1321c'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '29e158ba336ce7f930115178a6c86019f0f413adb283d8f0798' + 'af06ca0a06d6d6f295a333b1c24bda2f429ac918a3748aef90f' + '7a2c8bfb084d5f979cf4e7b2b5'; lDataRow.ExpectedOutputUTFStrTest := '5a8e0846029ec68f58ee2c38d2539a295a08a3495f63c98edf1' + '4787ed0be8a3cf7ccc941914b6096e09ba81ac16506718188bf' + '4b27b4719b44b9f7825946277f'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5ac9757e1407432daf348a972b8ad4a65c1123cf1f9b779c1ae' + '7ee2d540f30b3cefa8f98dca5fbb42084c5c2f161a7b40eb6b4' + 'a1fc7f9aaab92a4bb6002edc5e'; lDataRow.ExpectedOutputUTFStrTest := 'cca11e491b08a42a5c36df20f0c1b883b0f73948d3a1821e554' + '2f7230afc71ba0cc3dbdcb5da0418777cacee0df131a24a5c16' + '9a1d41e6cdf1e1d0a917f1952a'; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'cae4175f09753de84974cfa968621092fe41ee9de913919c2b4' + '52e6cb424056721d640e563f628f29dd3bd0030837ae4ac14aa' + '17308505a92e5f7a92f112be75'; lDataRow.ExpectedOutputUTFStrTest := 'f12fddbd9a619288f53f1c94920b24cddbd16a1bd07efebdba0' + 'c9a93fd13c6f8aba44e2b11498a9e8679dc7a4ae50a928c4948' + '68758bf709c65443886213f789'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e5965b4565b041a0d459610e5e48e944c4830cd16feba02d9d2' + '63e7da8de6a6b88966709bf28a5328d928312e7a172da4cff72' + 'fe6de02277dae4b1dba49689a2'; lDataRow.ExpectedOutputUTFStrTest := 'bf8878187b8fb4dfba01049f3de15714a7ecf48f0fc005cb41a' + '79ca4755ab6865409e84256953bca76a0592a5f23998f24b847' + '9d09678c5edc0cd4515ae35444'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '76c8bc5f445140921ceaaed2afce4d0b0722fde3aea20145d9b' + '14a72d22799f2ebb88446b7b46f4646eb33fc7e6f153183b2fd' + '9e9a54557f41b10ab633b8b6e1'; lDataRow.ExpectedOutputUTFStrTest := '3176130a3ffa3b8c9e904c4a3ca20912885613cdd5cad9c1f16' + '906e6e0521da5ba1456a93719a48bd51e22ece0b93a2c1ee533' + '95120946717e9695242fba7036'; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijk'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bb6cba9730d6c029c0c15fb7a2aa3597cf9442dad96a676c5ee' + '9a1d55f1d64d5e0d1ed0e71250ed960a1bd2e065642cfff1c97' + '6e061bab70d6c54d284eaaefb9'; lDataRow.ExpectedOutputUTFStrTest := 'e5df9ba18452dd692fe434fd3427993fb1b33a9ac55a68161e1' + '17d1f6d01d7e87b78f907208e4432da35d2704d1d04ddc85051' + 'ca892b2854c0908bd146789aa1'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bb6cba9730d6c029c0c15fb7a2aa3597cf9442dad96a676c5ee' + '9a1d55f1d64d5e0d1ed0e71250ed960a1bd2e065642cfff1c97' + '6e061bab70d6c54d284eaaefb9'; lDataRow.ExpectedOutputUTFStrTest := 'e5df9ba18452dd692fe434fd3427993fb1b33a9ac55a68161e1' + '17d1f6d01d7e87b78f907208e4432da35d2704d1d04ddc85051' + 'ca892b2854c0908bd146789aa1'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // Test vector from EN Wikipedia article lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4f8f5cb531e3d49a61cf417cd133792ccfa501fd8da53ee368f' + 'ed20e5fe0248c3a0b64f98a6533cee1da614c3a8ddec791ff05' + 'fee6d971d57c1348320f4eb42d'; lDataRow.ExpectedOutputUTFStrTest := '68a834ccecee9b794e8ad869d004cb0afae42f4b98da40dcd22' + '75ef295563ff15fc17ee9ceb0c153f19ab1b24ab959aa1acf08' + '5b8d6db01a25584ab32dce3356'; lDataRow.AddInputVector('The quick brown fox jumps over the lazy dog'); end; procedure TestTHash_Whirlpool0.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_Whirlpool0.TestDigestSize; begin CheckEquals(64, FHash.DigestSize); end; procedure TestTHash_Whirlpool0.TestIdentity; begin CheckEquals($D2619FF2, FHash.Identity); end; procedure TestTHash_Whirlpool0.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Whirlpool0.TestClassByName; begin DoTestClassByName('THash_Whirlpool0', THash_Whirlpool0); end; {$IFDEF OLD_WHIRLPOOL_NAMES} procedure TestTHash_Whirlpool.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash.Free; FHash := THash_Whirlpool.Create; end; procedure TestTHash_Whirlpool.TestIdentity; begin CheckEquals($5CCB1E12, FHash.Identity); end; procedure TestTHash_Whirlpool.TestClassByName; begin DoTestClassByName('THash_Whirlpool', THash_Whirlpool); end; {$ENDIF} procedure TestTHash_WhirlpoolT.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_WhirlpoolT.Create; // Source until SourceEnd: https://en.wikipedia.org/wiki/Whirlpool_(hash_function) lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '470f0409abaa446e49667d4ebe12a14387cedbd10dd17b8243c' + 'ad550a089dc0feea7aa40f6c2aaab71c6ebd076e43c7cfca0ad' + '32567897dcb5969861049a0f5a'; lDataRow.ExpectedOutputUTFStrTest := '470f0409abaa446e49667d4ebe12a14387cedbd10dd17b8243c' + 'ad550a089dc0feea7aa40f6c2aaab71c6ebd076e43c7cfca0ad' + '32567897dcb5969861049a0f5a'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '3ccf8252d8bbb258460d9aa999c06ee38e67cb546cffcf48e91' + 'f700f6fc7c183ac8cc3d3096dd30a35b01f4620a1e3a20d79cd' + '5168544d9e1b7cdf49970e87f1'; lDataRow.ExpectedOutputUTFStrTest := '9c7bb5e44e2721d1b442642719d7afffe2cad341a93ed823da0' + 'fe84a63140af67467cfed7b268d45a77de6510b6e077f1ea0cd' + '69f19efdfd697c7089a3cc79dd'; lDataRow.AddInputVector('The quick brown fox jumps over the lazy dog'); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ebaa1df2e97113be187eb0303c660f6e643e2c090ef2cda9a2e' + 'a6dcf5002147d1d0e1e9d996e879cef9d26896630a5db3308d5' + 'a0dc235b199c38923be2259e03'; lDataRow.ExpectedOutputUTFStrTest := '5777fc1f8467a1c004cd9130439403ccdaa9fdc86092d9cffe3' + '39e6008612374d04c8fc0c724707feae6f7ceb1e030cabf652a' + '673da1849b02654af76eee24a7'; lDataRow.AddInputVector(#$00); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'a8583b83929bd46f0006e8401f87767ff0e23b96cd4cb2fe377' + '4901ee6eeed91f43ab569fb908122c53a264a35687b40a0590d' + '83e69fa82724380bae82a1caa0'; lDataRow.ExpectedOutputUTFStrTest := '535497c6f54acf4a669eadae6f5005b149edbd36a6d32613e4d' + '81c5752948657d4c48f4dd851dd0cddccad88a5ce1ab32cb62a' + '692f3487d7490be2df6ca5c34c'; lDataRow.AddInputVector(#$80); lDataRow.AddInputVector(#$00, 1, 63); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b290e0e7931025ed37043ad568f0036b40e6bff8f7455868780' + 'f47ef7b5d693e62448029a9351cd85ac29cb0725e4cfeb996a9' + '2f2b8da8768483ac58ec0e492c'; lDataRow.ExpectedOutputUTFStrTest := '528f3f670d4dfed05ff342f36d16b8a5a0d884da737dbc1b55c' + '2575362b5fbf9df895013bccc3a72dd7d78c157c52609b42633' + 'a48affdd58297f44b3f40c5626'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8afc0527dcc0a19623860ef2369d0e25de8ebe2abaa40f598af' + 'af6b07c002ed73e4fc0fc220fd4f54f74b5d6b07aa57764c3db' + 'dcc2cdd919d89fa8155a34b841'; lDataRow.ExpectedOutputUTFStrTest := '5e812e973466dde1b43dfcd752ec1828f53ecb0e330f6937311' + '159d6eded439994ccafa867a034266bc16ce73057343a01742d' + '8b13053aa1d4ce82f52f312fce'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '817eadf8efca5afbc11f71d0814e03a8d569c90f748c8603597' + 'a7a0de3c8d55f528199010218249517b58b14bee52351560875' + '4b53a3cca35c0865ba5e361431'; lDataRow.ExpectedOutputUTFStrTest := '5fb89db25c24f3c3d222302ead771d6c371c8fa0af40f62a422' + 'cf092cf6af6bf0ab4c6707e25c34680bfdbf92973de78d37d9f' + 'af2bed23dd9b27d53ed02ea473'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4afc2b07bddc8417635fcb43e695e16f45e116c226dd84339eb' + '95c2ccb39e7acbe1af8f7b1f3bd380077e71929498bc9682003' + '71f9299015434d1df109a0aa1d'; lDataRow.ExpectedOutputUTFStrTest := '1925d2d0eaa3e76ed1cd7d95b0bdd03152f9d2193376f6348c0' + '64fc5115233f88a26610428bea98935464cce2078af9e81ca3f' + '31bdd5b5c5d5f3775c85569c1f'; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0f960ec9ab7d0c7e355a423d1ef4911a39797c836a71414276a' + 'feb8fa475dba0c348547143162f3212edf1fb8d8c652a11a579' + 'a399c2dbd837fe8608f5096131'; lDataRow.ExpectedOutputUTFStrTest := 'c8176962d4e58e8e6174a3e3eecd1ab012345f3fa04ff06515b' + 'b225bcdfa13ccbe5c53c357534aade7db3a46ff24c6c86bd5d3' + '465930c5d4ba0b734efcf8b43b'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6ae43784c69d01c273bba40f8411495167909e0c1acc241473d' + '44e27bc8641e646535d38fce20604941988c387c201cff199c8' + 'fa2afbedd036d66202892a7eee'; lDataRow.ExpectedOutputUTFStrTest := '0fb6cadc695c10b27f8dc5a591e7856acc8edb22459060dfa28' + 'd9f9532e1f7b2206b8b297f9d89f85570f73439592a45fd6475' + 'd0a83923cead6eb443d3f69bb1'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7da3991ff3d40e0beed44b89c83bed5b085cc390a2df47765c9' + '9ae2ddb0a1e2e094ef0e8b0cf7ba4733afd756ef8eef59b9181' + '29fe2efe0b00024d6c4e56dc45'; lDataRow.ExpectedOutputUTFStrTest := '5586a2f7b714de8301412ff72d7bc8d4def56cece16ce4adc48' + 'b3a6ef5b46ab17c979f8e1aedae3cbf4b74a4ea0e8b02e02032' + 'a782094ff00fea088b78759ab9'; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijk'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0ee18ba7ca7ee091dace6285661eedf819a8fa17620f72aeffe' + '5aa62c462138b626aa09072a10fcbcfe7f7ff22db2f4d6d1f07' + '71856c4a7924f9b0e4044d9112'; lDataRow.ExpectedOutputUTFStrTest := '6449537a67085f0ac0d80956d7d92d0cf0ec48cebde1728ad13' + 'b88decd218a951f6b17303bfc552db14cff4607b4155eae9514' + '51d19010a7c43802a0495ccd68'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0ee18ba7ca7ee091dace6285661eedf819a8fa17620f72aeffe' + '5aa62c462138b626aa09072a10fcbcfe7f7ff22db2f4d6d1f07' + '71856c4a7924f9b0e4044d9112'; lDataRow.ExpectedOutputUTFStrTest := '6449537a67085f0ac0d80956d7d92d0cf0ec48cebde1728ad13' + 'b88decd218a951f6b17303bfc552db14cff4607b4155eae9514' + '51d19010a7c43802a0495ccd68'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); end; procedure TestTHash_WhirlpoolT.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_WhirlpoolT.TestDigestSize; begin CheckEquals(64, FHash.DigestSize); end; procedure TestTHash_WhirlpoolT.TestIdentity; begin CheckEquals($98BE3AB3, FHash.Identity); end; procedure TestTHash_WhirlpoolT.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_WhirlpoolT.TestClassByName; begin DoTestClassByName('THash_WhirlpoolT', THash_WhirlpoolT); end; {$IFDEF OLD_WHIRLPOOL_NAMES} procedure TestTHash_Whirlpool1.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash.Free; FHash := THash_Whirlpool1.Create; end; procedure TestTHash_Whirlpool1.TestIdentity; begin CheckEquals($A566AF64, FHash.Identity); end; procedure TestTHash_Whirlpool1.TestClassByName; begin DoTestClassByName('THash_Whirlpool1', THash_Whirlpool1); end; {$ENDIF} {$IFNDEF OLD_WHIRLPOOL_NAMES} procedure TestTHash_Whirlpool1.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Whirlpool1.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4d9444c212955963d425a410176fccfb74161e6839692b4c11f' + 'de2ed6eb559efe0560c39a7b61d5a8bcabd6817a3135af80f34' + '2a4942ccaae745abddfb6afed0'; lDataRow.ExpectedOutputUTFStrTest := '8bdc9d4471d0dabd8812098b8cbdf5090beddb3d582917a61e1' + '76e3d22529d753fed9a37990ca18583855efbc4f26e88f62002' + 'f67722eb05f74c7ea5e07013f5'; lDataRow.AddInputVector(#$00); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '103e0055a9b090e11c8fddebba06c05ace8b64b896128f6eed3' + '071fcf3dc16946778e07223233fd180fc40ccdb8430a640e376' + '34271e655ca1674ebff507f8cb'; lDataRow.ExpectedOutputUTFStrTest := 'caf45c33b5551249ce0fc6d59e778fcb46dc6b682c34a5382f2' + '8efaf3a9a605c9eae0feb081637322e7a56b369453e9ad36bd8' + '58537c103874b80aa4ab138368'; lDataRow.AddInputVector(#$80); lDataRow.AddInputVector(#$00, 1, 63); // Source until SourceEnd: ISO-Testvectors from whirlpool.zip lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '19fa61d75522a4669b44e39c1d2e1726c530232130d407f89af' + 'ee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964' + 'e59b63d93708b138cc42a66eb3'; lDataRow.ExpectedOutputUTFStrTest := '19fa61d75522a4669b44e39c1d2e1726c530232130d407f89af' + 'ee0964997f7a73e83be698b288febcf88e3e03c4f0757ea8964' + 'e59b63d93708b138cc42a66eb3'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8aca2602792aec6f11a67206531fb7d7f0dff59413145e6973c' + '45001d0087b42d11bc645413aeff63a42391a39145a591a9220' + '0d560195e53b478584fdae231a'; lDataRow.ExpectedOutputUTFStrTest := '3f3a6a6d213b7d669e90f1309ff1dad4a6c8d0b0568109aa359' + '34a6586dcc5d1758b5ce644313310a1cf979c19c380b96af62b' + 'dc82bd03bafd94f65d51d43188'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4e2448a4c6f486bb16b6562c73b4020bf3043e3a731bce721ae' + '1b303d97e6d4c7181eebdb6c57e277d0e34957114cbd6c797fc' + '9d95d8b582d225292076d4eef5'; lDataRow.ExpectedOutputUTFStrTest := '2c41adef13bbfd33743ca3aa26a2977852348de9b7e9b70a785' + 'd34a661454403caa110de49f0641048acde14158a58a38b3a36' + '04a6a1096c64fdd880940191ae'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '378c84a4126e2dc6e56dcc7458377aac838d00032230f53ce1f' + '5700c0ffb4d3b8421557659ef55c106b4b52ac5a4aaa692ed92' + '0052838f3362e86dbd37a8903e'; lDataRow.ExpectedOutputUTFStrTest := '69da33ab06954bbb5dea0df780ce48f663e6333470f74b4f3df' + 'bf5724087caeb816c4c661d3e9359740668ae07d2bf8432bfb1' + '07150e5540bd95681c4a744a3e'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f1d754662636ffe92c82ebb9212a484a8d38631ead4238f5442' + 'ee13b8054e41b08bf2a9251c30b6a0b8aae86177ab4a6f68f67' + '3e7207865d5d9819a3dba4eb3b'; lDataRow.ExpectedOutputUTFStrTest := '970c5e7fbf85ab33e1faf78e0e2839955b4a0e401c954fdf778' + '673b625f35662f63fda7f77f5e6859493037d9d513e739c6643' + '98402f555f269cc04e0bc76528'; lDataRow.AddInputVector('abcdefghijklmnopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dc37e008cf9ee69bf11f00ed9aba26901dd7c28cdec066cc6af' + '42e40f82f3a1e08eba26629129d8fb7cb57211b9281a65517cc' + '879d7b962142c65f5a7af01467'; lDataRow.ExpectedOutputUTFStrTest := 'a29d364116fb3398621689907e2baf7dba60a4b51ea3c9671b4' + 'd2408761b3457a7b4ae1f2c6ef935f3f8cbe37578b9c39dac5b' + 'acd1392b966a6943397db1048e'; lDataRow.AddInputVector('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '466ef18babb0154d25b9d38a6414f5c08784372bccb204d6549' + 'c4afadb6014294d5bd8df2a6c44e538cd047b2681a51a2c6048' + '1e88c5a20b2c2a80cf3a9a083b'; lDataRow.ExpectedOutputUTFStrTest := '75ce932e300c665d5527f35d888f8a4fcde76cb693be179eac9' + '8a436542f1cf070c555bac1fef156a18106e3f8c09ddf3e7ef7' + 'e6bfa5317ba97c7e8df9b7caf6'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2a987ea40f917061f5d6f0a0e4644f488a7a5a52deee656207c' + '562f988e95c6916bdc8031bc5be1b7b947639fe050b56939baa' + 'a0adff9ae6745b7b181c3be3fd'; lDataRow.ExpectedOutputUTFStrTest := '369e16f05a6866a72fc27b0a9f0582eb1e370a604b731712456' + '831ae19054dd189d276b32a0a664132146e9e07b8654cb9b3f4' + '312bc8b19a73ed572629b1718e'; lDataRow.AddInputVector('abcdbcdecdefdefgefghfghighijhijk'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0c99005beb57eff50a7cf005560ddf5d29057fd86b20bfd62de' + 'ca0f1ccea4af51fc15490eddc47af32bb2b66c34ff9ad8c6008' + 'ad677f77126953b226e4ed8b01'; lDataRow.ExpectedOutputUTFStrTest := 'e1ddbc099459cad3d521ac1e8352a8946c3eeeacc9129299fdb' + 'fc70c7d36de45ca602087d50adbee16c6f51157234673facfe5' + '3938c8735f3d4266d4b399424f'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 15625, 1); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0c99005beb57eff50a7cf005560ddf5d29057fd86b20bfd62de' + 'ca0f1ccea4af51fc15490eddc47af32bb2b66c34ff9ad8c6008' + 'ad677f77126953b226e4ed8b01'; lDataRow.ExpectedOutputUTFStrTest := 'e1ddbc099459cad3d521ac1e8352a8946c3eeeacc9129299fdb' + 'fc70c7d36de45ca602087d50adbee16c6f51157234673facfe5' + '3938c8735f3d4266d4b399424f'; lDataRow.AddInputVector('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 1, 15625); // SourceEnd // Test vector from EN Wikipedia article lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b97de512e91e3828b40d2b0fdce9ceb3c4a71f9bea8d88e75c4' + 'fa854df36725fd2b52eb6544edcacd6f8beddfea403cb55ae31' + 'f03ad62a5ef54e42ee82c3fb35'; lDataRow.ExpectedOutputUTFStrTest := '54d79c3801365ff9e1c7c64796926ddd715e23a1ac48c3ab086' + '4eb2e29d681e6b0f628982c3167e1987053b5aacfa4e3f3dc53' + 'af65923aa2e2beb2adc74b3591'; lDataRow.AddInputVector('The quick brown fox jumps over the lazy dog'); end; procedure TestTHash_Whirlpool1.TestBlockSize; begin CheckEquals(64, FHash.BlockSize); end; procedure TestTHash_Whirlpool1.TestDigestSize; begin CheckEquals(64, FHash.DigestSize); end; procedure TestTHash_Whirlpool1.TestIdentity; begin CheckEquals($A566AF64, FHash.Identity); end; procedure TestTHash_Whirlpool1.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Whirlpool1.TestClassByName; begin DoTestClassByName('THash_Whirlpool1', THash_Whirlpool1); end; {$ENDIF} procedure TestTHash_Square.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Square.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '417b878eaf7d8ca82414e6e4c4a95149'; lDataRow.ExpectedOutputUTFStrTest := '417b878eaf7d8ca82414e6e4c4a95149'; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '62148aad7927998c545c6f0e5feca9f0'; lDataRow.ExpectedOutputUTFStrTest := 'bb806953f163a83880789c5793df24ff'; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '931b73d1a404f6f18880068056f6fc12'; lDataRow.ExpectedOutputUTFStrTest := '636162bdda72d757efc056b108d82379'; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2068598052889ea245b4906f621f398c'; lDataRow.ExpectedOutputUTFStrTest := '3f1a4493b8bc057a279b9aa38917fb07'; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'fc356316c8a28b7dbfe0ff3fef52bf53'; lDataRow.ExpectedOutputUTFStrTest := '7f63e6f9945e40a16befe6c08347a65f'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'b8654c7c554f18541bb28794a17f0c09'; lDataRow.ExpectedOutputUTFStrTest := '07035852e0f0c5b8282f11bd83a3e60f'; lDataRow.AddInputVector('A'); lDataRow.AddInputVector('BCDEFGHIJKLMNOPQRS'); lDataRow.AddInputVector('TUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '0c004c5b7066610e2a2dd2eecaee3186'; lDataRow.ExpectedOutputUTFStrTest := '1b1a00a69f0f19e887574b1f6a792412'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c3ba10de37cdec5e99def41475f1df5d'; lDataRow.ExpectedOutputUTFStrTest := 'fd99b6eda660c726d0a4e47e13018cfb'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 119 bytes'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '058a1da3a62f3e6a8ba9135373a089ca'; lDataRow.ExpectedOutputUTFStrTest := '9148d4fc4379235a5a065ef88a51cb1d'; lDataRow.AddInputVector('This test vector intended to detect last zeroized block necessity decision error. This block has total length 120 bytes.'); end; procedure TestTHash_Square.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_Square.TestIdentity; begin CheckEquals($996BCEE5, FHash.Identity); end; procedure TestTHash_Square.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Square.TestBlockSize; begin CheckEquals(16, FHash.BlockSize); end; procedure TestTHash_Square.TestClassByName; begin DoTestClassByName('THash_Square', THash_Square); end; procedure TestTHash_Snefru128.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Snefru128.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8617f366566a011837f4fb4ba5bedea2'; lDataRow.ExpectedOutputUTFStrTest := '8617f366566a011837f4fb4ba5bedea2'; lDataRow.AddInputVector(''); // Source until SourceEnd: http://ftp.vim.org/security/coast/crypto/snefru/snefru.c lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd9fcb3171c097fbba8c8f12aa0906bad'; lDataRow.ExpectedOutputUTFStrTest := 'ab3974fcd9f1caa6a2ae226c2974fb0c'; lDataRow.AddInputVector(#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '44ec420ce99c1f62feb66c53c24ae453'; lDataRow.ExpectedOutputUTFStrTest := '39deead469aec32c2ce66aebb7ec3eec'; lDataRow.AddInputVector('1'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7182051aa852ef6fba4b6c9c9b79b317'; lDataRow.ExpectedOutputUTFStrTest := '3e34c975f5308c71523b3fc39a3692e6'; lDataRow.AddInputVector('12'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bc3a50af82bf56d6a64732bc7b050a93'; lDataRow.ExpectedOutputUTFStrTest := 'e71945a2fcd0f0d992b5d24b6a49547f'; lDataRow.AddInputVector('123'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c5b8a04985a8eadfb4331a8988752b77'; lDataRow.ExpectedOutputUTFStrTest := 'ad32e4eb4cbf5c482194596f28902240'; lDataRow.AddInputVector('1234'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd559a2b62f6f44111324f85208723707'; lDataRow.ExpectedOutputUTFStrTest := 'a8b025b7cddd0555b9241dcf16fbd798'; lDataRow.AddInputVector('12345'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6cfb5e8f1da02bd167b01e4816686c30'; lDataRow.ExpectedOutputUTFStrTest := '73b7248a11bbb8425863eec60e5d8a43'; lDataRow.AddInputVector('123456'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '29aa48325f275a8a7a01ba1543c54ba5'; lDataRow.ExpectedOutputUTFStrTest := 'd5c92cb71197ee91fd4f347b8fbac655'; lDataRow.AddInputVector('1234567'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'be862a6b68b7df887ebe00319cbc4a47'; lDataRow.ExpectedOutputUTFStrTest := '8b7b3408b144335774eb6c276ded6e00'; lDataRow.AddInputVector('12345678'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '6103721ccd8ad565d68e90b0f8906163'; lDataRow.ExpectedOutputUTFStrTest := '1a624aa607071a337558911531a0dde6'; lDataRow.AddInputVector('123456789'#$0A); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '553d0648928299a0f22a275a02c83b10'; lDataRow.ExpectedOutputUTFStrTest := '94f3567822b3fe5299c0e109dff4fa70'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7840148a66b91c219c36f127a0929606'; lDataRow.ExpectedOutputUTFStrTest := '9823d5f81402ac45b790633af492097b'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd9204ed80bb8430c0b9c244fe485814a'; lDataRow.ExpectedOutputUTFStrTest := '9a92c0b5e89851f4a5faaa441c250931'; lDataRow.AddInputVector('1234567890', 8); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'dd0d1ab288c3c36671044f41c5077ad6'; lDataRow.ExpectedOutputUTFStrTest := '150c6230252f8497c64f6ccff97928f8'; lDataRow.AddInputVector('Test message for buffer workflow test(47 bytes)'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e7054f05bd72d7e86a052153a17c741d'; lDataRow.ExpectedOutputUTFStrTest := '3ab419c9af627272b2e2cdafed2b7150'; lDataRow.AddInputVector('Test message for buffer workflow test(48 bytes).'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9b34204833422df13c83e10a0c6d080a'; lDataRow.ExpectedOutputUTFStrTest := '906816013ee57f3d2ae1562b9590d82f'; lDataRow.AddInputVector('Test message for buffer workflow test(49 bytes)..'); end; procedure TestTHash_Snefru128.TestDigestSize; begin CheckEquals(16, FHash.DigestSize); end; procedure TestTHash_Snefru128.TestGetMaxRounds; begin CheckEquals(8, THash_Snefru128(FHash).GetMaxRounds); end; procedure TestTHash_Snefru128.TestGetMinRounds; begin CheckEquals(2, THash_Snefru128(FHash).GetMinRounds); end; procedure TestTHash_Snefru128.TestIdentity; begin CheckEquals($E3374275, FHash.Identity); end; procedure TestTHash_Snefru128.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Snefru128.TestBlockSize; begin CheckEquals(48, FHash.BlockSize); end; procedure TestTHash_Snefru128.TestClassByName; begin DoTestClassByName('THash_Snefru128', THash_Snefru128); end; procedure TestTHash_Snefru256.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Snefru256.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8617f366566a011837f4fb4ba5bedea2b892f3ed8b894023d16ae344b2be5881'; lDataRow.ExpectedOutputUTFStrTest := '8617f366566a011837f4fb4ba5bedea2b892f3ed8b894023d16ae344b2be5881'; lDataRow.AddInputVector(''); // Source until SourceEnd: http://ftp.vim.org/security/coast/crypto/snefru/snefru.c lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '2e02687f0d45d5b9b50cb68c3f33e6843d618a1aca2d06893d3eb4e3026b5732'; lDataRow.ExpectedOutputUTFStrTest := 'ea81f0d664c9f14b5af04103212ea129001da9c3c421b6e340bdb9ece6c90244'; lDataRow.AddInputVector(#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'bfea4a05a2a2ef15c736d114598a20b9d9bd4d66b661e6b05ecf6a7737bdc58c'; lDataRow.ExpectedOutputUTFStrTest := 'd26379b028a12a8f8f1b04396a1907ff61e70bf9184c32ebfb254c4e15138762'; lDataRow.AddInputVector('1'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ac677d69761ade3f189c7aef106d5fe7392d324e19cc76d5db4a2c05f2cc2cc5'; lDataRow.ExpectedOutputUTFStrTest := 'f3530df84977152b8a38867acf14c9a46cfae162f9543c986a500cf32d5a7359'; lDataRow.AddInputVector('12'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '061c76aa1db4a22c0e42945e26c48499b5400162e08c640be05d3c007c44793d'; lDataRow.ExpectedOutputUTFStrTest := '25987aee97eeee4d4e3914e8245ecdfe69e45cbe0e728175cb4411e046091fd4'; lDataRow.AddInputVector('123'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1e87fe1d9c927e9e24be85e3cc73359873541640a6261793ce5a974953113f5e'; lDataRow.ExpectedOutputUTFStrTest := 'b76fbfabada71bf38decdd3b4e19ec39292a496dd23c29755c4a96caf77d4b13'; lDataRow.AddInputVector('1234'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '1b59927d85a9349a87796620fe2ff401a06a7ba48794498ebab978efc3a68912'; lDataRow.ExpectedOutputUTFStrTest := '6598676a170cf7075cee8b54da5844a824c0e1cb9830773ba9728ca2c65f7fe5'; lDataRow.AddInputVector('12345'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '28e9d9bc35032b68faeda88101ecb2524317e9da111b0e3e7094107212d9cf72'; lDataRow.ExpectedOutputUTFStrTest := '062cc2b932500825575447e87a9416f38d561b0b3111b36011a9e6ef773cf54b'; lDataRow.AddInputVector('123456'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'f7fff4ee74fd1b8d6b3267f84e47e007f029d13b8af7e37e34d13b469b8f248f'; lDataRow.ExpectedOutputUTFStrTest := '45b05d5126783c33b68f9a813cb3010f84cc9c1d6b133391a88ae61b43c89cc5'; lDataRow.AddInputVector('1234567'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'ee7d64b0102b2205e98926613b200185559d08be6ad787da717c968744e11af3'; lDataRow.ExpectedOutputUTFStrTest := '9e614b25cd9d6b260c2fdeb59b1d6de8e8329157aa581a9f63424b4c012bd0df'; lDataRow.AddInputVector('12345678'#$0A); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4ca72639e40e9ab9c0c3f523c4449b3911632d374c124d7702192ec2e4e0b7a3'; lDataRow.ExpectedOutputUTFStrTest := '7dde03a5c268df01f5cdc408dc1807a677954e6aaf9ad0d6235809b758ef7691'; lDataRow.AddInputVector('123456789'#$0A); // SourceEnd lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '7d033205647a2af3dc8339f6cb25643c33ebc622d32979c4b612b02c4903031b'; lDataRow.ExpectedOutputUTFStrTest := '116509bcc4ec01f1b14d7769241cdb2438073bf9ed2031b11efb52913c0a635c'; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '9304bb2f876d9c4f54546cf7ec59e0a006bead745f08c642f25a7c808e0bf86e'; lDataRow.ExpectedOutputUTFStrTest := '78040669e962b45dd079ad1d98c5a222356c48ae83c531e192a32c34affbf6ae'; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'd5fce38a152a2d9b83ab44c29306ee45ab0aed0e38c957ec431dab6ed6bb71b8'; lDataRow.ExpectedOutputUTFStrTest := '5fa0a6e55b18b8db6f17280bf1312f1b9651664a849feecb34fd792c392f0ae6'; lDataRow.AddInputVector('1234567890', 8); end; procedure TestTHash_Snefru256.TestDigestSize; begin CheckEquals(32, FHash.DigestSize); end; procedure TestTHash_Snefru256.TestGetMaxRounds; begin CheckEquals(8, THash_Snefru256(FHash).GetMaxRounds); end; procedure TestTHash_Snefru256.TestGetMinRounds; begin CheckEquals(2, THash_Snefru256(FHash).GetMinRounds); end; procedure TestTHash_Snefru256.TestIdentity; begin CheckEquals($498847EC, FHash.Identity); end; procedure TestTHash_Snefru256.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Snefru256.TestBlockSize; begin CheckEquals(32, FHash.BlockSize); end; procedure TestTHash_Snefru256.TestClassByName; begin DoTestClassByName('THash_Snefru256', THash_Snefru256); end; procedure TestTHash_Sapphire.ConfigHashClass(aHashClass: TDECHash; aIdxTestData: Integer); begin inherited; THash_Sapphire(FHash).RequestedDigestSize := FTestData[aIdxTestData].RequiredDigestSize; end; procedure TestTHash_Sapphire.SetUp; var lDataRow:IHashTestDataRowSetup; begin inherited; FHash := THash_Sapphire.Create; lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436a'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436a'; lDataRow.RequiredDigestSize := 16; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822'; lDataRow.RequiredDigestSize := 16; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe5'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe5'; lDataRow.RequiredDigestSize := 20; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25c'; lDataRow.RequiredDigestSize := 20; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54'; lDataRow.RequiredDigestSize := 24; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410b717b9a6'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25ced55ad8d'; lDataRow.RequiredDigestSize := 24; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb'; lDataRow.RequiredDigestSize := 28; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410b717b9a699063814'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25ced55ad8ddc81aad5'; lDataRow.RequiredDigestSize := 28; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f'; lDataRow.RequiredDigestSize := 32; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410b717b9a699063814b6df1f32'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25ced55ad8ddc81aad5cba2e6d3'; lDataRow.RequiredDigestSize := 32; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f34606520'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f34606520'; lDataRow.RequiredDigestSize := 36; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410b717b9a699063814b6df1f327c766773'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25ced55ad8ddc81aad5cba2e6d37eb8dbc4'; lDataRow.RequiredDigestSize := 36; lDataRow.AddInputVector('abc'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f34606520fa7a5ad7'; lDataRow.ExpectedOutputUTFStrTest := 'c1e0df6ce706a32fb7b25b7ac55f436ad29c9fe54b096f54a2a128bb08c9651f34606520fa7a5ad7'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector(''); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '8b3763c9e423995743a702a37cc4a82c9771c7ac04fe44990d2cf64a311715406a59cf62b0b4edc9'; lDataRow.ExpectedOutputUTFStrTest := 'a947fdf3a224bcd948c426cec358e84c8468ff42af47dd558979953ee426213ac2f415b0c3c9d476'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('a'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '4acf17d911781571f053ce82e2f70cce5470f410b717b9a699063814b6df1f327c766773fc59830b'; lDataRow.ExpectedOutputUTFStrTest := '9c7d13f4c388cd4dea2b3f513dc08822c7a6d25ced55ad8ddc81aad5cba2e6d37eb8dbc44c70af77'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('ab'); lDataRow.AddInputVector('c'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := 'e0affc0f16c9303c9938dbc9b1e6be3a3dcb75a2879ef8227fdd42595980793c94e7d3e33ce0a20a'; lDataRow.ExpectedOutputUTFStrTest := 'f8ddc0058786d1094b005901927e6743ec8a46ba69a8c0e3821086510dfc338ec839fb729a733c3b'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('message digest'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '23b86cf1a67c6870b90e594be9b4eda4c3862036edf1efb03c86863c274585cf5837429f1ff6f4b0'; lDataRow.ExpectedOutputUTFStrTest := '14d2bc67c1d0ec0afaadff77f03fe563156d416b232eb2f995a038cb5de6a19dcbc3e773decca6ab'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('abcdefghijklm'); lDataRow.AddInputVector('nopqrstuvwxyz'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '341530ae3c1f715197847eddd38b4f58cc9a13c3e65f890772c9c561b103d2bf41340dff2af0335f'; lDataRow.ExpectedOutputUTFStrTest := 'da208c7d3cbb8280f0f9be7b88b6cc54ea24eb9dd900071b15b83cfb6abe68dce87c27f7ce1097ff'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('A'); lDataRow.AddInputVector('BCDEFGHIJKLMNOPQRS'); lDataRow.AddInputVector('TUVWXYZabcdefghijklmnopqrstuvwxyz012345678'); lDataRow.AddInputVector('9'); lDataRow := FTestData.AddRow; lDataRow.ExpectedOutput := '5bb5a1bd1ad4974042aa74992489fbdec857212a29cedc67b1fc79ddc9f139c3f52044be4e6f8588'; lDataRow.ExpectedOutputUTFStrTest := '87b0a006a73261011c4df04dc164216cfe566e54f92f161fec529c3cc956929955b1dc1cbe0215fa'; lDataRow.RequiredDigestSize := 40; lDataRow.AddInputVector('1234567890', 8); end; procedure TestTHash_Sapphire.TestDigestSize; begin CheckEquals(64, FHash.DigestSize); end; procedure TestTHash_Sapphire.TestIdentity; begin CheckEquals($8442C643, FHash.Identity); end; procedure TestTHash_Sapphire.TestIsPasswordHash; begin CheckNotEquals(true, FHash.IsPasswordHash); end; procedure TestTHash_Sapphire.TestBlockSize; begin CheckEquals(1, FHash.BlockSize); end; procedure TestTHash_Sapphire.TestClassByName; begin DoTestClassByName('THash_Sapphire', THash_Sapphire); end; { THash_TestBase } procedure THash_TestBase.ConfigHashClass(HashClass: TDECHash; IdxTestData: Integer); begin HashClass.PaddingByte := FTestData[IdxTestData].PaddingByte; end; procedure THash_TestBase.DoTest52(HashClass: TDECHash); var i : Integer; Buf : TBytes; BufLen : Integer; // Buffer length in whole bytes, may differ from // input vector legtht at least for SHA3 test InputDataVectors : ITestDataInputVectorList; IdxVector : Integer; IdxCount : Integer; HashResult : TBytes; ResultExpected : string; ResultCalculated : string; begin for i := 0 to FTestData.Count-1 do begin InputDataVectors := FTestData[i].InputDataVectors; HashClass.Init; ConfigHashClass(HashClass, i); for IdxVector := 0 to InputDataVectors.Count-1 do begin Buf := BytesOf(RawByteString(InputDataVectors[IdxVector].Data)); BufLen := Length(Buf); // Last part of the test data are bits (relevant for SHA3) if FTestData[i].FinalByteLength > 0 then Break; if length(Buf) > 0 then begin for IdxCount := 1 to InputDataVectors[IdxVector].RepeatCount do HashClass.Calc(Buf[0], BufLen); end else begin for IdxCount := 1 to InputDataVectors[IdxVector].RepeatCount do HashClass.Calc(Buf, BufLen); end; end; if FTestData[i].FinalByteLength > 0 then Continue; HashClass.Done; HashResult := HashClass.DigestAsBytes; ResultCalculated := string(BytesToRawString(TFormat_HEXL.Encode(HashResult))); ResultExpected := string(FTestData[i].ExpectedOutput); CheckEquals(ResultExpected, ResultCalculated, HashClass.ClassName + ' Index: '+IntToStr(i)); end; end; procedure THash_TestBase.DoTestCalcBuffer(HashClass: TDECHash); var i : Integer; Buf : TBytes; begin for i := 0 to FTestData.Count-1 do begin ConfigHashClass(HashClass, i); Buf := BytesOf(RawByteString(FTestData[i].InputData)); if Length(Buf)>0 then CheckEquals(FTestData[i].ExpectedOutput, BytesToRawString( TFormat_HEXL.Encode(HashClass.CalcBuffer(Buf[0], Length(Buf)))), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutput) + '> but was: <' + string(BytesToRawString( TFormat_HEXL.Encode( HashClass.CalcBuffer(Buf[0], Length(Buf))))) + '>') else CheckEquals(FTestData[i].ExpectedOutput, BytesToRawString( TFormat_HEXL.Encode(HashClass.CalcBuffer(Buf, Length(Buf)))), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutput) + '> but was: <' + string(BytesToRawString( TFormat_HEXL.Encode(HashClass.CalcBuffer(Buf, Length(Buf))))) + '>'); end; end; procedure THash_TestBase.DoTestCalcBytes(HashClass: TDECHash); var i : Integer; begin for i := 0 to FTestData.Count-1 do begin ConfigHashClass(HashClass, i); CheckEquals(FTestData[i].ExpectedOutput, BytesToRawString(TFormat_HEXL.Encode( HashClass.CalcBytes( BytesOf(RawByteString(FTestData[i].InputData))))), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutput) + '> but was: <' + string(BytesToRawString(TFormat_HEXL.Encode( HashClass.CalcBytes( BytesOf(RawByteString(FTestData[i].InputData)))))) + '>'); end; end; procedure THash_TestBase.DoTestCalcStream(HashClass: TDECHash); var Stream : TMemoryStream; i : Integer; Buf : TBytes; Hash : TBytes; begin Stream := TMemoryStream.Create; try for i := 0 to FTestData.Count-1 do begin Buf := BytesOf(FTestData[i].InputData); Stream.Clear; {$IF CompilerVersion >= 25.0} Stream.Write(Buf, Length(Buf)); {$ELSE} if Length(Buf) > 0 then Stream.Write(Buf[0], Length(Buf)); {$IFEND} Stream.Position := 0; ConfigHashClass(HashClass, i); HashClass.CalcStream(Stream, Length(Buf), Hash); CheckEquals(FTestData[i].ExpectedOutput, BytesToRawString(TFormat_HEXL.Encode(Hash)), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutput) + '> but was: <' + string(BytesToRawString(TFormat_HEXL.Encode(Hash))) + '>'); end; finally Stream.Free; end; end; procedure THash_TestBase.DoTestCalcUnicodeString(HashClass: TDECHash); var i : Integer; InpStr : string; begin for i := 0 to FTestData.Count-1 do begin InpStr := string(FTestData[i].InputData); ConfigHashClass(HashClass, i); CheckEquals(FTestData[i].ExpectedOutputUTFStrTest, BytesToRawString( TFormat_HEXL.Encode( System.SysUtils.BytesOf(HashClass.CalcString(InpStr)))), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutputUTFStrTest) + '> but was: <' + string(BytesToRawString( TFormat_HEXL.Encode( System.SysUtils.BytesOf(HashClass.CalcString(InpStr))))) + '>'); end; end; procedure THash_TestBase.DoTestClassByName(ExpectedClassName: String; ExpectedClass: TClass); var ReturnValue : TDECHashClass; begin ReturnValue := FHash.ClassByName(ExpectedClassName); CheckEquals(ExpectedClass, ReturnValue, 'unexpected class'); end; procedure THash_TestBase.Setup; begin inherited; FTestData := CreateTestDataContainer as IHashTestDataContainer; end; procedure THash_TestBase.TearDown; begin inherited; FHash.Free; FTestData := nil; end; procedure THash_TestBase.Test52; begin DoTest52(FHash); end; procedure THash_TestBase.TestCalcBuffer; begin DoTestCalcBuffer(FHash); end; procedure THash_TestBase.TestCalcBytes; begin DoTestCalcBytes(FHash); end; procedure THash_TestBase.TestCalcRawByteString; begin DoTestCalcRawByteString(FHash); end; procedure THash_TestBase.TestCalcStream; begin DoTestCalcStream(FHash); end; procedure THash_TestBase.TestCalcUnicodeString; begin DoTestCalcUnicodeString(FHash); end; procedure THash_TestBase.DoTestCalcRawByteString(HashClass: TDECHash); var i : Integer; begin for i := 0 to FTestData.Count-1 do begin ConfigHashClass(HashClass, i); CheckEquals(FTestData[i].ExpectedOutput, HashClass.CalcString(FTestData[i].InputData, TFormat_HEXL), 'Index: ' + IntToStr(i) + ' - expected: <' + string(FTestData[i].ExpectedOutput) + '> but was: <' + string(HashClass.CalcString(FTestData[i].InputData, TFormat_HEXL)) + '>'); end; end; { TestTDECHash } procedure TestTDECHash.TestIsClassListCreated; begin CheckEquals(true, assigned(TDECHash.ClassList), 'Class list has not been created in initialization'); end; procedure TestTDECHash.TestValidCipherSetDefaultHashClass; var result : Boolean; begin // Asumption: nobody has called SetDefaultHash yet so DECHash' initialization // of THash_SHA256 is in effect result := ValidHash(nil) = THash_SHA256; CheckEquals(true, result, 'Initial default hash is not THash_SHA256'); try SetDefaultHashClass(THash_Haval160); result := ValidHash(nil) = THash_Haval160; CheckEquals(true, result, 'Changed default cipher is not THash_Haval160'); SetDefaultHashClass(THash_Haval192); result := ValidHash(nil) = THash_Haval192; CheckEquals(true, result, 'Changed default cipher is not THash_Haval192'); result := ValidHash(THash_Square) = THash_Square; CheckEquals(true, result, 'Passed cipher is not THash_Square'); finally SetDefaultHashClass(THash_SHA256); end; end; { TDECHashUnitTest } class function TDECHashIncrement8.BlockSize: UInt32; begin result := 4; end; function TDECHashIncrement8.Digest: PByteArray; begin // Returns nil on purpose to supress a return value might be undefined warning result := nil; end; class function TDECHashIncrement8.DigestSize: UInt32; begin result := 0; end; procedure TDECHashIncrement8.DoDone; begin // Empty on purpose end; procedure TDECHashIncrement8.DoInit; begin // Empty on purpose end; procedure TDECHashIncrement8.DoTransform(Buffer: PUInt32Array); begin // Empty on purpose end; procedure TDECHashIncrement8.Increment8(var Value; Add: UInt32); begin inherited Increment8(Value, Add); end; { THash_TestIncrement8 } procedure THash_TestIncrement8.SetUp; begin inherited; FHashIncr8 := TDECHashIncrement8.Create; FHashIncr8.Init; end; procedure THash_TestIncrement8.TearDown; begin FHashIncr8.Free; inherited; end; procedure THash_TestIncrement8.TestIncrement8; var i, n : Integer; begin for i := 1 to 255 do begin n := i; FHashIncr8.Increment8(n, 1); CheckEquals(i + 8, n); end; end; initialization // Register any test cases with the test runner {$IFDEF DUnitX} TDUnitX.RegisterTestFixture(THash_TestIncrement8); TDUnitX.RegisterTestFixture(TestTDECHash); TDUnitX.RegisterTestFixture(TestTHash_MD2); TDUnitX.RegisterTestFixture(TestTHash_MD4); TDUnitX.RegisterTestFixture(TestTHash_MD5); TDUnitX.RegisterTestFixture(TestTHash_RipeMD128); TDUnitX.RegisterTestFixture(TestTHash_RipeMD160); TDUnitX.RegisterTestFixture(TestTHash_RipeMD256); TDUnitX.RegisterTestFixture(TestTHash_RipeMD320); TDUnitX.RegisterTestFixture(TestTHash_SHA0); {$IFDEF OLD_SHA_NAME} TDUnitX.RegisterTestFixture(TestTHash_SHA); {$ENDIF} TDUnitX.RegisterTestFixture(TestTHash_SHA1); TDUnitX.RegisterTestFixture(TestTHash_SHA256); TDUnitX.RegisterTestFixture(TestTHash_SHA224); TDUnitX.RegisterTestFixture(TestTHash_SHA384); TDUnitX.RegisterTestFixture(TestTHash_SHA512); TDUnitX.RegisterTestFixture(TestTHash_Haval128); TDUnitX.RegisterTestFixture(TestTHash_Haval160); TDUnitX.RegisterTestFixture(TestTHash_Haval192); TDUnitX.RegisterTestFixture(TestTHash_Haval224); TDUnitX.RegisterTestFixture(TestTHash_Haval256); TDUnitX.RegisterTestFixture(TestTHash_Tiger_3Rounds); TDUnitX.RegisterTestFixture(TestTHash_Tiger_4Rounds); TDUnitX.RegisterTestFixture(TestTHash_Panama); TDUnitX.RegisterTestFixture(TestTHash_Whirlpool0); TDUnitX.RegisterTestFixture(TestTHash_WhirlpoolT); TDUnitX.RegisterTestFixture(TestTHash_Whirlpool1); {$IFDEF OLD_WHIRLPOOL_NAMES} TDUnitX.RegisterTestFixture(TestTHash_Whirlpool); {$ENDIF} TDUnitX.RegisterTestFixture(TestTHash_Square); TDUnitX.RegisterTestFixture(TestTHash_Snefru128); TDUnitX.RegisterTestFixture(TestTHash_Snefru256); TDUnitX.RegisterTestFixture(TestTHash_Sapphire); {$ELSE} RegisterTests('DECHash', [THash_TestIncrement8.Suite, TestTDECHash.Suite, TestTHash_MD2.Suite, TestTHash_MD4.Suite, TestTHash_MD5.Suite, TestTHash_RipeMD128.Suite, TestTHash_RipeMD160.Suite, TestTHash_RipeMD256.Suite, TestTHash_RipeMD320.Suite, TestTHash_SHA0.Suite, {$IFDEF OLD_SHA_NAME} TestTHash_SHA.Suite, {$ENDIF} TestTHash_SHA1.Suite, TestTHash_SHA256.Suite, TestTHash_SHA224.Suite, TestTHash_SHA384.Suite, TestTHash_SHA512.Suite, TestTHash_Haval128.Suite, TestTHash_Haval160.Suite, TestTHash_Haval192.Suite, TestTHash_Haval224.Suite, TestTHash_Haval256.Suite, TestTHash_Tiger_3Rounds.Suite, TestTHash_Tiger_4Rounds.Suite, TestTHash_Panama.Suite, TestTHash_Whirlpool0.Suite, TestTHash_WhirlpoolT.Suite, TestTHash_Whirlpool1.Suite, {$IFDEF OLD_WHIRLPOOL_NAMES} TestTHash_Whirlpool.Suite, {$ENDIF} TestTHash_Square.Suite, TestTHash_Snefru128.Suite, TestTHash_Snefru256.Suite, TestTHash_Sapphire.Suite ]); {$ENDIF} end.