@@ -147,6 +147,7 @@ TestTHash_SHA3_Base = class(THash_TestBaseExtended)
147147 // / <returns>
148148 // / The input vector with added padding
149149 // / </returns>
150+ { TODO : Namen überlegen zu ändern, im Kommentar Keccak drin lassen }
150151 function AddLastByteForKeccakTest (SHA3InputVector : RawByteString;
151152 var LastByteLength : UInt8): RawByteString; virtual ;
152153
@@ -318,15 +319,15 @@ TestTHash_Keccak_Base = class(TestTHash_SHA3_Base)
318319 // / The SHA3 input vector in bytes (not hex encoded!) which shall get
319320 // / the padding appended.
320321 // / </param>
321- // / <param name="LastByteLength ">
322+ // / <param name="NumBitsOfLastByteUsed ">
322323 // / Number of bits used in the last byte. In the keccak override this will
323324 // / be adjusted inside so it's a var param.
324325 // / </param>
325326 // / <returns>
326327 // / The input vector with added padding
327328 // / </returns>
328- function AddLastByteForKeccakTest (SHA3InputVector : RawByteString;
329- var LastByteLength : UInt8): RawByteString; override;
329+ function AddLastByteForKeccakTest (SHA3InputVector : RawByteString;
330+ var NumBitsOfLastByteUsed : UInt8): RawByteString; override;
330331 end ;
331332
332333 // Test methods for class THash_Keccak_224
@@ -1767,28 +1768,28 @@ procedure TestTHash_SHA3_Base.AddLastByteForCodeTest(var lDataRow : IHashTest
17671768 CalcUnicodeHash(string(TFormat_HexL.Encode(MsgWithFixup)), FHash);
17681769end ;
17691770
1770- function TestTHash_Keccak_Base.AddLastByteForKeccakTest (SHA3InputVector : RawByteString;
1771- var LastByteLength : UInt8): RawByteString;
1771+ function TestTHash_Keccak_Base.AddLastByteForKeccakTest (SHA3InputVector : RawByteString;
1772+ var NumBitsOfLastByteUsed : UInt8): RawByteString;
17721773var
17731774 lastbyte : UInt8;
17741775begin
1775- case LastByteLength of
1776+ case NumBitsOfLastByteUsed of
17761777 0 : begin // ist ok
1777- SHA3InputVector := SHA3InputVector + chr($02 );
1778- LastByteLength := 2 ;
1778+ SHA3InputVector := SHA3InputVector + chr($02 );
1779+ NumBitsOfLastByteUsed := 2 ;
17791780 end ;
17801781 1 ..6 :
17811782 begin
17821783 lastbyte := UInt8(SHA3InputVector[High(SHA3InputVector)]);
17831784 // in lastbyte 0 an stelle fblSHA3 einfügen:
1784- lastbyte := lastbyte and (( 1 shl LastByteLength ) xor $FF);
1785+ lastbyte := lastbyte and (( 1 shl NumBitsOfLastByteUsed ) xor $FF);
17851786 // in lastbyte 1 an stelle fblSHA3+1 einfügen:
1786- lastbyte := lastbyte or BYTE( 1 shl (LastByteLength + 1 ));
1787+ lastbyte := lastbyte or BYTE( 1 shl (NumBitsOfLastByteUsed + 1 ));
17871788 SHA3InputVector[High(SHA3InputVector)] := Ansichar(lastbyte);
1788- if LastByteLength < 6 then
1789- inc(LastByteLength ,2 )
1789+ if NumBitsOfLastByteUsed < 6 then
1790+ inc(NumBitsOfLastByteUsed ,2 )
17901791 else
1791- LastByteLength := 0 ;
1792+ NumBitsOfLastByteUsed := 0 ;
17921793 end ;
17931794 7 : begin // ist ok
17941795 // 0 anhängen - es könnte sein, dass in mSHA3 eine 1 steht
@@ -1799,7 +1800,7 @@ function TestTHash_Keccak_Base.AddLastByteForKeccakTest(SHA3InputVector : Raw
17991800 SHA3InputVector[High(SHA3InputVector)] := Ansichar(lastbyte);
18001801
18011802 SHA3InputVector := SHA3InputVector + chr($01 );
1802- LastByteLength := 1 ;
1803+ NumBitsOfLastByteUsed := 1 ;
18031804 end ;
18041805 end ;
18051806
@@ -1828,41 +1829,64 @@ procedure TestTHash_Keccak_224.SetUp;
18281829
18291830 // Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-
18301831 // Validation-Program/documents/sha3/sha-3bittestvectors.zip
1831- FTestFileNames.Add( ' ..\..\Unit Tests\Data\Keccak.rsp ' );
1832- // FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_224ShortMsg.rsp');
1833- // FTestFileNames.Add('..\..\Unit Tests\Data\SHA3_224LongMsg.rsp');
1832+
1833+ FTestFileNames.Add(' ..\..\Unit Tests\Data\SHA3_224ShortMsg.rsp' );
1834+ FTestFileNames.Add(' ..\..\Unit Tests\Data\SHA3_224LongMsg.rsp' );
18341835 // SourceEnd
18351836
18361837 // Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
18371838 // and-Guidelines/documents/examples/SHA3-224_Msg5.pdf
1838- lDataRow := FTestData.AddRow;
1839- lDataRow.ExpectedOutput := ' ffbad5da96bad71789330206dc6768ecaeb1b32d' +
1840- ' ca6b3301489674ab' ;
1841- AddLastByteForCodeTest(lDataRow, #$19 , 5 );
18421839
18431840 lDataRow := FTestData.AddRow;
1844- lDataRow.ExpectedOutput := ' 6f2fc54a6b11a6da611ed734505b9cab89eec ' +
1845- ' c1dc7dd2debd27bd1c9 ' ;
1846- AddLastByteForCodeTest(lDataRow, #$ 01 , 1 );
1841+ lDataRow.ExpectedOutput := ' 6b4e03423667dbb73b6e15454f0eb1abd459 ' +
1842+ ' 7f9a1b078e3f5b5a6bc7 ' ;
1843+ AddLastByteForCodeTest(lDataRow, ' ' , 0 );
18471844
18481845
1849- // Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
1850- // and-Guidelines/documents/examples/SHA3-224_Msg30.pdf
18511846 lDataRow := FTestData.AddRow;
1852- lDataRow.ExpectedOutput := ' d666a514cc9dba25ac1ba69ed3930460deaac985' +
1853- ' 1b5f0baab007df3b' ;
1854- AddLastByteForCodeTest(lDataRow, #$53 #$58 #$7B#$19 , 6 );
1847+ lDataRow.ExpectedOutput := ' ffbad5da96bad71789330206dc6768ecaeb1b32d' +
1848+ ' ca6b3301489674ab' ;
1849+ lDataRow.AddInputVector(RawByteString(#$19 ), 1 , 1 );
1850+ lDataRow.AddInputVector(RawByteString(#$02 ), 1 , 1 );
1851+ lDataRow.FinalBitLength := 5 ;
1852+ // AddLastByteForCodeTest(lDataRow, #$19, 5);
1853+ // exit;
1854+ //
1855+ // // MsgWithFixup := AddLastByteForKeccakTest(
1856+ // // TFormat_HexL.Decode(RawByteString(msg)),
1857+ // // FinalByteLen);
1858+ //
1859+ //
1860+ // lDataRow := FTestData.AddRow;
1861+ // lDataRow.ExpectedOutput := '6f2fc54a6b11a6da611ed734505b9cab89eec' +
1862+ // 'c1dc7dd2debd27bd1c9';
1863+ // AddLastByteForCodeTest(lDataRow, #$01, 1);
1864+ //
1865+ //
1866+ // // Source https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
1867+ // // and-Guidelines/documents/examples/SHA3-224_Msg30.pdf
1868+ // lDataRow := FTestData.AddRow;
1869+ // lDataRow.ExpectedOutput := 'd666a514cc9dba25ac1ba69ed3930460deaac985' +
1870+ // '1b5f0baab007df3b';
1871+ // AddLastByteForCodeTest(lDataRow, #$53#$58#$7B#$19, 6);
18551872
18561873// Commented out because AddLastByteForCodeTest cannot handle the 1, 20 syntax
1857- // // Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
1858- // // and-Guidelines/documents/examples/SHA3-224_1600.pdf
1859- // lDataRow := FTestData.AddRow;
1860- // lDataRow.ExpectedOutput := '9376816aba503f72f96ce7eb65ac095deee3be4b' +
1861- // 'f9bbc2a1cb7e11e0';
1874+ // Source: https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-
1875+ // and-Guidelines/documents/examples/SHA3-224_1600.pdf
1876+ lDataRow := FTestData.AddRow;
1877+ lDataRow.ExpectedOutput := ' 9376816aba503f72f96ce7eb65ac095deee3be4b' +
1878+ ' f9bbc2a1cb7e11e0' ;
18621879// lDataRow.ExpectedOutputUTFStrTest := '28a4a80fded04a676674687c8330422eedeb18c9' +
18631880// 'dba976234a9e007a';
1864- // lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1, 20);
1881+
1882+ lDataRow.AddInputVector(RawByteString(#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3#$A3), 1 , 20 );
1883+ lDataRow.AddInputVector(RawByteString(#$02 ), 1 , 1 );
1884+ lDataRow.FinalBitLength := 2 ;
1885+ exit;
1886+
1887+ // lDataRow.AddInputVector(RawByteString(#$80), 1, 1);
18651888// lDataRow.FinalBitLength := 0;
1889+ // lDataRow.FinalBitLength := 2;
18661890//
18671891// // Source: https://emn178.github.io/online-tools/sha3_224.html
18681892// lDataRow := FTestData.AddRow;
0 commit comments