Skip to content

Commit c50332d

Browse files
committed
Added a unit test for issue #47
Added a unit test to verify GitHub issue #47 got fixed.
1 parent df97b1a commit c50332d

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

Unit Tests/Tests/TestDECCipherModes.pas

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,12 @@ TestTDECCipherModes = class(TTestCase)
425425
procedure TestEncodeECBDataDoesNotMatchBlockSizeFailure;
426426
procedure TestDecodeECBDataDoesNotMatchBlockSizeFailureSmall;
427427
procedure TestDecodeECBDataDoesNotMatchBlockSizeFailure;
428+
429+
/// <summary>
430+
/// Test for GitHub issue 47: EncodeCBCx threw a range check failure for
431+
/// "block sizes > 32k"
432+
/// </summary>
433+
procedure TestEncodeCBCxFailure_47;
428434
end;
429435

430436
implementation
@@ -868,6 +874,36 @@ procedure TestTDECCipherModes.TestEncodeCBCx;
868874
DoTestEncode(Data, TCipherMode.cmCBCx);
869875
end;
870876

877+
procedure TestTDECCipherModes.TestEncodeCBCxFailure_47;
878+
var
879+
Data : TBytes;
880+
EncrData : TBytes;
881+
AESCipher : TCipher_AES;
882+
AESKey : RawByteString;
883+
IV : RawByteString;
884+
i : Integer;
885+
begin
886+
SetLength(Data, 256*1024); // Size >32 KiB
887+
888+
for i := 0 to length(Data) - 1 do
889+
Data[i] := UInt8(i);
890+
891+
IV := '12345678';
892+
AESKey := IV + IV;
893+
894+
AESCipher := TCipher_AES.Create;
895+
try
896+
AESCipher.Init(AESKey, IV, 0); // Key and InitVector
897+
AESCipher.Mode := cmCBCx;
898+
EncrData := AESCipher.EncodeBytes(Data); // Before the fix there was
899+
// a range check error here!
900+
finally
901+
FreeAndNil(AESCipher);
902+
end;
903+
904+
CheckEquals(256*1024, length(EncrData), 'Length of encrypted data is wrong');
905+
end;
906+
871907
procedure TestTDECCipherModes.TestEncodeCTSx;
872908
begin
873909
DoTestEncode(Data, TCipherMode.cmCTSx);

0 commit comments

Comments
 (0)