Skip to content

Commit 417baa5

Browse files
committed
Implemented the remaining Crypt/BSD tests.
1 parent 34efb05 commit 417baa5

File tree

2 files changed

+58
-8
lines changed

2 files changed

+58
-8
lines changed

Unit Tests/Tests/TestDECFormat.pas

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ TestTFormat_BCryptBSD = class(TFormatTestsBase)
397397
FFormat_BCryptBSD: TFormat_BCryptBSD;
398398

399399
const
400+
// Source of test data: Wolfgang Erhardt's implementation
400401
cTestDataEncode : array[1..22] of TestRecRawByteString = (
401402
(Input: RawByteString('');
402403
Output: ''),
@@ -464,6 +465,7 @@ TestTFormat_BCryptBSD = class(TFormatTestsBase)
464465
#$86#$93#$86#$99#$AD+'E');
465466
Output: 'WApznUOJfkEGSmYRfnkrPO'));
466467

468+
// Source of test data: Wolfgang Erhardt's implementation
467469
cTestDataDecode : array[1..22] of TestRecRawByteString = (
468470
(Input: '';
469471
Output: RawByteString('')),

Unit Tests/Tests/TestDECHash.pas

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -664,11 +664,13 @@ TestTHash_Sapphire = class(THash_TestBaseExtended)
664664
TestTHash_BCrypt = class(THash_TestPasswordBase)
665665
private
666666
type
667+
// Extract only the interesting parts
667668
TBCryptBSDTestData = record
668-
Password : string;
669669
Salt : RawByteString;
670670
Cost : UInt8;
671671
end;
672+
673+
function SplitTestVector(Vector: string):TBCryptBSDTestData;
672674
protected
673675
procedure ConfigHashClass(aHashClass: TDECHash; aIdxTestData:Integer); override;
674676
public
@@ -6206,6 +6208,15 @@ procedure TestTHash_BCrypt.SetUp;
62066208
lDataRow.AddInputVector('~!@#$%^&*() ~!@#$%^&*()PNBFRD');
62076209
end;
62086210

6211+
function TestTHash_BCrypt.SplitTestVector(Vector: string): TBCryptBSDTestData;
6212+
var
6213+
Parts : TArray<string>;
6214+
begin
6215+
Parts := Vector.Split(['$']);
6216+
Result.Cost := Copy(Parts[2], Low(Parts[2]), Length(Parts[2])).ToInteger;
6217+
Result.Salt := Copy(Parts[3], Low(Parts[3]), 22);
6218+
end;
6219+
62096220
procedure TestTHash_BCrypt.TestBlockSize;
62106221
begin
62116222
CheckEquals(8, FHash.BlockSize);
@@ -6227,21 +6238,58 @@ procedure TestTHash_BCrypt.TestCostFactorTooShortException;
62276238
end;
62286239

62296240
procedure TestTHash_BCrypt.TestCryptBSDFormat;
6241+
type
6242+
TPair = record
6243+
pn: byte;
6244+
bs: string[60];
6245+
end;
6246+
const
6247+
PW: array[0..4] of string[40] = ('', 'a', 'abc',
6248+
'abcdefghijklmnopqrstuvwxyz', '~!@#$%^&*() ~!@#$%^&*()PNBFRD');
6249+
const
6250+
// Source of test data: Wolfgang Erhardt's implementation. pn is the index
6251+
// into PW
6252+
TestData: array[1..20] of TPair = (
6253+
(pn: 0; bs: '$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.'),
6254+
(pn: 0; bs: '$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye'),
6255+
(pn: 0; bs: '$2a$10$k1wbIrmNyFAPwPVPSVa/zecw2BCEnBwVS2GbrmgzxFUOqW9dk4TCW'),
6256+
(pn: 0; bs: '$2a$12$k42ZFHFWqBp3vWli.nIn8uYyIkbvYRvodzbfbK18SSsY.CsIQPlxO'),
6257+
(pn: 1; bs: '$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe'),
6258+
(pn: 1; bs: '$2a$08$cfcvVd2aQ8CMvoMpP2EBfeodLEkkFJ9umNEfPD18.hUF62qqlC/V.'),
6259+
(pn: 1; bs: '$2a$10$k87L/MF28Q673VKh8/cPi.SUl7MU/rWuSiIDDFayrKk/1tBsSQu4u'),
6260+
(pn: 1; bs: '$2a$12$8NJH3LsPrANStV6XtBakCez0cKHXVxmvxIlcz785vxAIZrihHZpeS'),
6261+
(pn: 2; bs: '$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i'),
6262+
(pn: 2; bs: '$2a$08$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm'),
6263+
(pn: 2; bs: '$2a$10$WvvTPHKwdBJ3uk0Z37EMR.hLA2W6N9AEBhEgrAOljy2Ae5MtaSIUi'),
6264+
(pn: 2; bs: '$2a$12$EXRkfkdmXn2gzds2SSitu.MW9.gAVqa9eLS1//RYtYCmB1eLHg.9q'),
6265+
(pn: 3; bs: '$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC'),
6266+
(pn: 3; bs: '$2a$08$aTsUwsyowQuzRrDqFflhgekJ8d9/7Z3GV3UcgvzQW3J5zMyrTvlz.'),
6267+
(pn: 3; bs: '$2a$10$fVH8e28OQRj9tqiDXs1e1uxpsjN0c7II7YPKXua2NAKYvM6iQk7dq'),
6268+
(pn: 3; bs: '$2a$12$D4G5f18o7aMMfwasBL7GpuQWuP3pkrZrOAnqP.bmezbMng.QwJ/pG'),
6269+
(pn: 4; bs: '$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO'),
6270+
(pn: 4; bs: '$2a$08$Eq2r4G/76Wv39MzSX262huzPz612MZiYHVUJe/OcOql2jo4.9UxTW'),
6271+
(pn: 4; bs: '$2a$10$LgfYWkbzEvQ4JakH7rOvHe0y8pHKF9OaFgwUZ2q7W2FFZmZzJYlfS'),
6272+
(pn: 4; bs: '$2a$12$WApznUOJfkEGSmYRfnkrPOr466oFDCaj4b6HY3EXGvfxm43seyhgC'));
6273+
62306274
var
62316275
BCrypt : THash_BCrypt;
62326276
Result : string;
6277+
i : Integer;
6278+
SplitData :TBCryptBSDTestData;
62336279
begin
62346280
BCrypt := THash_BCrypt(FHash);
6235-
BCrypt.Cost := 6;
6236-
BCrypt.Salt := TFormat_BCryptBSD.Decode(BytesOf('DCq7YPn5Rq63x1Lad4cll.'));
62376281

6238-
Result := string(BCrypt.GetDigestInCryptFormat('', TFormat_BCryptBSD));
6239-
6240-
CheckEquals('$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.', Result);
6282+
for i := Low(TestData) to High(TestData) do
6283+
begin
6284+
SplitData := SplitTestVector(TestData[i].bs);
6285+
BCrypt.Cost := SplitData.Cost;
6286+
BCrypt.Salt := TFormat_BCryptBSD.Decode(BytesOf(SplitData.Salt));
62416287

6288+
Result := string(BCrypt.GetDigestInCryptFormat(
6289+
RawByteString(PW[TestData[i].pn]), TFormat_BCryptBSD));
62426290

6243-
//function TDECPasswordHash.GetDigestInCryptFormat(Password : RawByteString;
6244-
// Format : TDECFormatClass): RawByteString;
6291+
CheckEquals(TestData[i].bs, Result);
6292+
end;
62456293
end;
62466294

62476295
procedure TestTHash_BCrypt.TestDigestSize;

0 commit comments

Comments
 (0)