@@ -215,6 +215,22 @@ THash_TestBaseExtended = class(THash_TestBase)
215215 procedure TestCalcStreamNoDoneMulti ;
216216 end ;
217217
218+ // / <summary>
219+ // / Type for test data specified for Crypt/BSD format tests. Not declared in
220+ // / THash_TestPasswordBase as the compiler couldn't find it there.
221+ // / </summary>
222+ TCryptTestData = record
223+ // / <summary>
224+ // / Number of the password from the password array
225+ // / to use for that test case
226+ // / </summary>
227+ PWNum: UInt8;
228+ // / <summary>
229+ // / Crypt/BSD formatted password storage data
230+ // / </summary>
231+ CryptData: string;
232+ end ;
233+
218234 // / <summary>
219235 // / Adds test data initialization common for all password hash algorithms
220236 // / </summary>
@@ -676,38 +692,34 @@ TBCryptBSDTestData = record
676692 Cost : UInt8;
677693 end ;
678694
679- TPair = record
680- pn: byte;
681- bs: string;
682- end ;
683695 const
684696 Passwords: array [0 ..4 ] of string = (' ' , ' a' , ' abc' ,
685697 ' abcdefghijklmnopqrstuvwxyz' ,
686698 ' ~!@#$%^&*() ~!@#$%^&*()PNBFRD' );
687699
688700 // Source of test data: Wolfgang Erhardt's implementation.
689701 // pn is the index into Passwords
690- TestData: array [1 ..20 ] of TPair = (
691- (pn : 0 ; bs : ' $2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.' ),
692- (pn : 0 ; bs : ' $2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye' ),
693- (pn : 0 ; bs : ' $2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW' ),
694- (pn : 0 ; bs : ' $2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO' ),
695- (pn : 1 ; bs : ' $2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe' ),
696- (pn : 1 ; bs : ' $2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V.' ),
697- (pn : 1 ; bs : ' $2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u' ),
698- (pn : 1 ; bs : ' $2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS' ),
699- (pn : 2 ; bs : ' $2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i' ),
700- (pn : 2 ; bs : ' $2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm' ),
701- (pn : 2 ; bs : ' $2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi' ),
702- (pn : 2 ; bs : ' $2a$12$EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q' ),
703- (pn : 3 ; bs : ' $2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC' ),
704- (pn : 3 ; bs : ' $2a$08$aTsUwsyowQuzRrDqFflhgekJ8d9/7Z3GV3UcgvzQW3J5zMyrTvlz.' ),
705- (pn : 3 ; bs : ' $2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq' ),
706- (pn : 3 ; bs : ' $2a$12$D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ/pG' ),
707- (pn : 4 ; bs : ' $2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO' ),
708- (pn : 4 ; bs : ' $2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW' ),
709- (pn : 4 ; bs : ' $2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS' ),
710- (pn : 4 ; bs : ' $2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC' ));
702+ TestData: array [1 ..20 ] of TCryptTestData = (
703+ (PWNum : 0 ; CryptData : ' $2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.' ),
704+ (PWNum : 0 ; CryptData : ' $2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye' ),
705+ (PWNum : 0 ; CryptData : ' $2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW' ),
706+ (PWNum : 0 ; CryptData : ' $2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO' ),
707+ (PWNum : 1 ; CryptData : ' $2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe' ),
708+ (PWNum : 1 ; CryptData : ' $2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V.' ),
709+ (PWNum : 1 ; CryptData : ' $2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u' ),
710+ (PWNum : 1 ; CryptData : ' $2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS' ),
711+ (PWNum : 2 ; CryptData : ' $2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i' ),
712+ (PWNum : 2 ; CryptData : ' $2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm' ),
713+ (PWNum : 2 ; CryptData : ' $2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi' ),
714+ (PWNum : 2 ; CryptData : ' $2a$12$EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q' ),
715+ (PWNum : 3 ; CryptData : ' $2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC' ),
716+ (PWNum : 3 ; CryptData : ' $2a$08$aTsUwsyowQuzRrDqFflhgekJ8d9/7Z3GV3UcgvzQW3J5zMyrTvlz.' ),
717+ (PWNum : 3 ; CryptData : ' $2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq' ),
718+ (PWNum : 3 ; CryptData : ' $2a$12$D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ/pG' ),
719+ (PWNum : 4 ; CryptData : ' $2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO' ),
720+ (PWNum : 4 ; CryptData : ' $2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW' ),
721+ (PWNum : 4 ; CryptData : ' $2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS' ),
722+ (PWNum : 4 ; CryptData : ' $2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC' ));
711723
712724 function SplitTestVector (const Vector: string):TBCryptBSDTestData;
713725 protected
@@ -6371,14 +6383,14 @@ procedure TestTHash_BCrypt.TestCreateCryptBSDFormat;
63716383 try
63726384 for i := Low(TestData) to High(TestData) do
63736385 begin
6374- SplitData := SplitTestVector(TestData[i].bs );
6375- Result := HashInst.GetDigestInCryptFormat(Passwords[TestData[i].pn ],
6386+ SplitData := SplitTestVector(TestData[i].CryptData );
6387+ Result := HashInst.GetDigestInCryptFormat(Passwords[TestData[i].PWNum ],
63766388 SplitData.Cost.ToString,
63776389 SplitData.Salt,
63786390 False,
63796391 TFormat_BCryptBSD);
63806392
6381- CheckEquals(TestData[i].bs , Result);
6393+ CheckEquals(TestData[i].CryptData , Result);
63826394 end ;
63836395 finally
63846396 HashInst.Free;
@@ -6415,13 +6427,13 @@ procedure TestTHash_BCrypt.TestIsValidPasswordFalse;
64156427 CheckEquals(false, Result, ' Failure at wrong CryptData length' );
64166428
64176429 Result := HashInst.IsValidPassword(' a' ,
6418- TestData[1 ].bs ,
6430+ TestData[1 ].CryptData ,
64196431 TFormat_BCryptBSD);
64206432
64216433 CheckEquals(false, Result, ' Failed to detect wrong password for empty password' );
64226434
64236435 Result := HashInst.IsValidPassword(' ab' ,
6424- TestData[5 ].bs ,
6436+ TestData[5 ].CryptData ,
64256437 TFormat_BCryptBSD);
64266438
64276439 CheckEquals(false, Result, ' Failed to detect wrong password for password a' );
@@ -6479,8 +6491,8 @@ procedure TestTHash_BCrypt.TestIsValidPasswordOK;
64796491 try
64806492 for i := Low(TestData) to High(TestData) do
64816493 begin
6482- Result := HashInst.IsValidPassword(Passwords[TestData[i].pn ],
6483- TestData[i].bs ,
6494+ Result := HashInst.IsValidPassword(Passwords[TestData[i].PWNum ],
6495+ TestData[i].CryptData ,
64846496 TFormat_BCryptBSD);
64856497
64866498 CheckEquals(true, Result, ' Failure at test data index: ' + i.ToString);
0 commit comments