Skip to content

Commit 56b3f34

Browse files
committed
Replaced PByteArray with PUInt8Array, Cleanup of helper
Removal of unnecessary code, changed data type to allow bigger blocks
1 parent 1b93c63 commit 56b3f34

File tree

3 files changed

+97
-100
lines changed

3 files changed

+97
-100
lines changed

Source/DECCipherModes.pas

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -170,37 +170,37 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
170170
/// This mode should not be used in practice, as it makes the encrypted
171171
/// message vulnerable to certain attacks without knowing the encryption key
172172
/// </remarks>
173-
procedure EncodeECBx(Source, Dest: PByteArray; Size: Integer); virtual;
173+
procedure EncodeECBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
174174
/// <summary>
175175
/// 8bit Output Feedback mode, needs no padding
176176
/// </summary>
177-
procedure EncodeOFB8(Source, Dest: PByteArray; Size: Integer); virtual;
177+
procedure EncodeOFB8(Source, Dest: PUInt8Array; Size: Integer); virtual;
178178
/// <summary>
179179
/// 8 bit Cipher Feedback mode, needs no padding and works on 8 bit
180180
/// Feedback Shift Registers.
181181
/// </summary>
182-
procedure EncodeCFB8(Source, Dest: PByteArray; Size: Integer); virtual;
182+
procedure EncodeCFB8(Source, Dest: PUInt8Array; Size: Integer); virtual;
183183
/// <summary>
184184
/// 8Bit CFS, double Cipher Feedback mode (CFB), needs no padding and
185185
/// works on 8 bit Feedback Shift Registers.
186186
/// This one is a proprietary mode developed by Hagen Reddmann. This mode
187187
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
188188
/// inputstream into Feedback register.
189189
/// </summary>
190-
procedure EncodeCFS8(Source, Dest: PByteArray; Size: Integer); virtual;
190+
procedure EncodeCFS8(Source, Dest: PUInt8Array; Size: Integer); virtual;
191191
/// <summary>
192192
/// Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding
193193
/// This one works on Blocks of Cipher.BufferSize bytes, when using a
194194
/// Blockcipher that's equal to Cipher.BlockSize.
195195
/// </summary>
196-
procedure EncodeCFBx(Source, Dest: PByteArray; Size: Integer); virtual;
196+
procedure EncodeCFBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
197197
/// <summary>
198198
/// Output Feedback mode on Blocksize of Cipher, needs no padding and
199199
/// works on 8 bit Feedback Shift Registers.
200200
/// This one works on Blocks of Cipher.BufferSize bytes, when using a
201201
/// Blockcipher that's equal to Cipher.BlockSize.
202202
/// </summary>
203-
procedure EncodeOFBx(Source, Dest: PByteArray; Size: Integer); virtual;
203+
procedure EncodeOFBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
204204
/// <summary>
205205
/// double Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding.
206206
/// This one works on Blocks of Cipher.BufferSize bytes, when using a
@@ -209,7 +209,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
209209
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
210210
/// inputstream into Feedback register.
211211
/// </summary>
212-
procedure EncodeCFSx(Source, Dest: PByteArray; Size: Integer); virtual;
212+
procedure EncodeCFSx(Source, Dest: PUInt8Array; Size: Integer); virtual;
213213
/// <summary>
214214
/// Cipher Block Chaining, with CFB8 padding of truncated final block
215215
/// It needs no external padding, because internally the last
@@ -219,7 +219,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
219219
/// This one works on Blocks of Cipher.BufferSize bytes, when using a
220220
/// Blockcipher that's equal to Cipher.BlockSize.
221221
/// </summary>
222-
procedure EncodeCBCx(Source, Dest: PByteArray; Size: Integer); virtual;
222+
procedure EncodeCBCx(Source, Dest: PUInt8Array; Size: Integer); virtual;
223223
/// <summary>
224224
/// double CBC, with CFS8 padding of truncated final block
225225
/// It needs no external padding, because internally the last
@@ -232,13 +232,13 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
232232
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
233233
/// inputstream into Feedback register.
234234
/// </summary>
235-
procedure EncodeCTSx(Source, Dest: PByteArray; Size: Integer); virtual;
235+
procedure EncodeCTSx(Source, Dest: PUInt8Array; Size: Integer); virtual;
236236
/// <summary>
237237
/// Galois Counter Mode: encryption with addtional optional authentication.
238238
/// Implemented in its own unit, but needed here to be callable even if
239239
/// source length is 0.
240240
/// </summary>
241-
procedure EncodeGCM(Source, Dest: PByteArray; Size: Integer); virtual;
241+
procedure EncodeGCM(Source, Dest: PUInt8Array; Size: Integer); virtual;
242242
{$IFDEF DEC3_CMCTS}
243243
/// <summary>
244244
/// double CBC, with
@@ -250,7 +250,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
250250
/// cmCTSx has. It has a less secure padding of the truncated final block.
251251
/// (to enable it see DECOptions.inc)
252252
/// </summary>
253-
procedure EncodeCTS3(Source, Dest: PByteArray; Size: Integer); virtual;
253+
procedure EncodeCTS3(Source, Dest: PUInt8Array; Size: Integer); virtual;
254254
{$ENDIF}
255255
/// <summary>
256256
/// Electronic Code Book
@@ -259,37 +259,37 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
259259
/// This one works on blocks of Cipher.BufferSize bytes, when using a
260260
/// blockcipher that's equal to Cipher.BlockSize.
261261
/// </summary>
262-
procedure DecodeECBx(Source, Dest: PByteArray; Size: Integer); virtual;
262+
procedure DecodeECBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
263263
/// <summary>
264264
/// 8 bit Output Feedback mode, needs no padding
265265
/// </summary>
266-
procedure DecodeOFB8(Source, Dest: PByteArray; Size: Integer); virtual;
266+
procedure DecodeOFB8(Source, Dest: PUInt8Array; Size: Integer); virtual;
267267
/// <summary>
268268
/// 8 bit Cipher Feedback mode, needs no padding and works on 8 bit
269269
/// Feedback Shift Registers.
270270
/// </summary>
271-
procedure DecodeCFB8(Source, Dest: PByteArray; Size: Integer); virtual;
271+
procedure DecodeCFB8(Source, Dest: PUInt8Array; Size: Integer); virtual;
272272
/// <summary>
273273
/// 8 Bit CFS, double Cipher Feedback mode (CFB), needs no padding and
274274
/// works on 8 bit Feedback Shift Registers.
275275
/// This one is a proprietary mode developed by Hagen Reddmann. This mode
276276
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
277277
/// inputstream into Feedback register.
278278
/// </summary>
279-
procedure DecodeCFS8(Source, Dest: PByteArray; Size: Integer); virtual;
279+
procedure DecodeCFS8(Source, Dest: PUInt8Array; Size: Integer); virtual;
280280
/// <summary>
281281
/// Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding
282282
/// This one works on blocks of Cipher.BufferSize bytes, when using a
283283
/// blockcipher that's equal to Cipher.BlockSize.
284284
/// </summary>
285-
procedure DecodeCFBx(Source, Dest: PByteArray; Size: Integer); virtual;
285+
procedure DecodeCFBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
286286
/// <summary>
287287
/// Output Feedback mode on Blocksize of Cipher, needs no padding and
288288
/// works on 8 bit Feedback Shift Registers.
289289
/// This one works on blocks of Cipher.BufferSize bytes, when using a
290290
/// blockcipher that's equal to Cipher.BlockSize.
291291
/// </summary>
292-
procedure DecodeOFBx(Source, Dest: PByteArray; Size: Integer); virtual;
292+
procedure DecodeOFBx(Source, Dest: PUInt8Array; Size: Integer); virtual;
293293
/// <summary>
294294
/// double Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding.
295295
/// This one works on blocks of Cipher.BufferSize bytes, when using a
@@ -298,7 +298,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
298298
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
299299
/// inputstream into Feedback register.
300300
/// </summary>
301-
procedure DecodeCFSx(Source, Dest: PByteArray; Size: Integer); virtual;
301+
procedure DecodeCFSx(Source, Dest: PUInt8Array; Size: Integer); virtual;
302302
/// <summary>
303303
/// Cipher Block Chaining, with CFB8 padding of truncated final block.
304304
/// It needs no external padding, because internally the last
@@ -308,7 +308,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
308308
/// This one works on blocks of Cipher.BufferSize bytes, when using a
309309
/// blockcipher that's equal to Cipher.BlockSize.
310310
/// </summary>
311-
procedure DecodeCBCx(Source, Dest: PByteArray; Size: Integer); virtual;
311+
procedure DecodeCBCx(Source, Dest: PUInt8Array; Size: Integer); virtual;
312312
/// <summary>
313313
/// double CBC, with CFS8 padding of truncated final block
314314
/// It needs no external padding, because internally the last
@@ -321,11 +321,11 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
321321
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the
322322
/// inputstream into feedback register.
323323
/// </summary>
324-
procedure DecodeCTSx(Source, Dest: PByteArray; Size: Integer); virtual;
324+
procedure DecodeCTSx(Source, Dest: PUInt8Array; Size: Integer); virtual;
325325
/// <summary>
326326
/// Galois Counter Mode, details are implemented in DECCipherModesGCM
327327
/// </summary>
328-
procedure DecodeGCM(Source, Dest: PByteArray; Size: Integer); virtual;
328+
procedure DecodeGCM(Source, Dest: PUInt8Array; Size: Integer); virtual;
329329
{$IFDEF DEC3_CMCTS}
330330
/// <summary>
331331
/// double CBC
@@ -339,7 +339,7 @@ TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher)
339339
/// <remarks>
340340
/// For DEC 3.0 compatibility only
341341
/// </remarks>
342-
procedure DecodeCTS3(Source, Dest: PByteArray; Size: Integer); virtual;
342+
procedure DecodeCTS3(Source, Dest: PUInt8Array; Size: Integer); virtual;
343343
{$ENDIF}
344344
/// <summary>
345345
/// When setting mode to GCM the GCM implementing class instance needs to
@@ -521,7 +521,7 @@ procedure TDECCipherModes.Encode(const Source; var Dest; DataSize: Integer);
521521
end;
522522
end;
523523

524-
procedure TDECCipherModes.EncodeECBx(Source, Dest: PByteArray; Size: Integer);
524+
procedure TDECCipherModes.EncodeECBx(Source, Dest: PUInt8Array; Size: Integer);
525525
var
526526
I: Integer;
527527
begin
@@ -556,7 +556,7 @@ procedure TDECCipherModes.EncodeECBx(Source, Dest: PByteArray; Size: Integer);
556556
end;
557557
end;
558558

559-
procedure TDECCipherModes.EncodeOFB8(Source, Dest: PByteArray; Size: Integer);
559+
procedure TDECCipherModes.EncodeOFB8(Source, Dest: PUInt8Array; Size: Integer);
560560
var
561561
I: Integer;
562562
begin
@@ -572,7 +572,7 @@ procedure TDECCipherModes.EncodeOFB8(Source, Dest: PByteArray; Size: Integer);
572572
FState := csEncode;
573573
end;
574574

575-
procedure TDECCipherModes.EncodeCFB8(Source, Dest: PByteArray; Size: Integer);
575+
procedure TDECCipherModes.EncodeCFB8(Source, Dest: PUInt8Array; Size: Integer);
576576
// CFB-8
577577
var
578578
I: Integer;
@@ -589,7 +589,7 @@ procedure TDECCipherModes.EncodeCFB8(Source, Dest: PByteArray; Size: Integer);
589589
FState := csEncode;
590590
end;
591591

592-
procedure TDECCipherModes.EncodeCFS8(Source, Dest: PByteArray; Size: Integer);
592+
procedure TDECCipherModes.EncodeCFS8(Source, Dest: PUInt8Array; Size: Integer);
593593
// CFS-8, CTS as CFB
594594
var
595595
I: Integer;
@@ -606,7 +606,7 @@ procedure TDECCipherModes.EncodeCFS8(Source, Dest: PByteArray; Size: Integer);
606606
FState := csEncode;
607607
end;
608608

609-
procedure TDECCipherModes.EncodeCFBx(Source, Dest: PByteArray; Size: Integer);
609+
procedure TDECCipherModes.EncodeCFBx(Source, Dest: PUInt8Array; Size: Integer);
610610
// CFB-BlockSize
611611
var
612612
I: Integer;
@@ -650,7 +650,7 @@ procedure TDECCipherModes.EncodeCFBx(Source, Dest: PByteArray; Size: Integer);
650650
end;
651651
end;
652652

653-
procedure TDECCipherModes.EncodeOFBx(Source, Dest: PByteArray; Size: Integer);
653+
procedure TDECCipherModes.EncodeOFBx(Source, Dest: PUInt8Array; Size: Integer);
654654
// OFB-BlockSize
655655
var
656656
I: Integer;
@@ -748,7 +748,7 @@ procedure TDECCipherModes.InitMode;
748748
FreeAndNil(FGCM);
749749
end;
750750

751-
procedure TDECCipherModes.EncodeCFSx(Source, Dest: PByteArray; Size: Integer);
751+
procedure TDECCipherModes.EncodeCFSx(Source, Dest: PUInt8Array; Size: Integer);
752752
// CFS-BlockSize
753753
var
754754
I: Integer;
@@ -788,7 +788,7 @@ procedure TDECCipherModes.EncodeCFSx(Source, Dest: PByteArray; Size: Integer);
788788
end;
789789
end;
790790

791-
procedure TDECCipherModes.EncodeCBCx(Source, Dest: PByteArray; Size: Integer);
791+
procedure TDECCipherModes.EncodeCBCx(Source, Dest: PUInt8Array; Size: Integer);
792792
var
793793
F: PUInt8Array;
794794
I: Integer;
@@ -815,7 +815,7 @@ procedure TDECCipherModes.EncodeCBCx(Source, Dest: PByteArray; Size: Integer);
815815
FState := csEncode;
816816
end;
817817

818-
procedure TDECCipherModes.EncodeCTSx(Source, Dest: PByteArray; Size: Integer);
818+
procedure TDECCipherModes.EncodeCTSx(Source, Dest: PUInt8Array; Size: Integer);
819819
var
820820
I: Integer;
821821
begin
@@ -838,7 +838,7 @@ procedure TDECCipherModes.EncodeCTSx(Source, Dest: PByteArray; Size: Integer);
838838
FState := csEncode;
839839
end;
840840

841-
procedure TDECCipherModes.EncodeGCM(Source, Dest: PByteArray; Size: Integer);
841+
procedure TDECCipherModes.EncodeGCM(Source, Dest: PUInt8Array; Size: Integer);
842842
var
843843
PlainText,
844844
CipherText : TBytes;
@@ -858,7 +858,7 @@ procedure TDECCipherModes.EncodeGCM(Source, Dest: PByteArray; Size: Integer);
858858
end;
859859

860860
{$IFDEF DEC3_CMCTS}
861-
procedure TDECCipherModes.EncodeCTS3(Source, Dest: PByteArray; Size: Integer);
861+
procedure TDECCipherModes.EncodeCTS3(Source, Dest: PUInt8Array; Size: Integer);
862862
var
863863
I: Integer;
864864
begin
@@ -903,7 +903,7 @@ procedure TDECCipherModes.Decode(const Source; var Dest; DataSize: Integer);
903903
end;
904904
end;
905905

906-
procedure TDECCipherModes.DecodeECBx(Source, Dest: PByteArray; Size: Integer);
906+
procedure TDECCipherModes.DecodeECBx(Source, Dest: PUInt8Array; Size: Integer);
907907
var
908908
I: Integer;
909909
begin
@@ -938,7 +938,7 @@ procedure TDECCipherModes.DecodeECBx(Source, Dest: PByteArray; Size: Integer);
938938
end;
939939
end;
940940

941-
procedure TDECCipherModes.DecodeGCM(Source, Dest: PByteArray; Size: Integer);
941+
procedure TDECCipherModes.DecodeGCM(Source, Dest: PUInt8Array; Size: Integer);
942942
var
943943
PlainText,
944944
CipherText : TBytes;
@@ -957,7 +957,7 @@ procedure TDECCipherModes.DecodeGCM(Source, Dest: PByteArray; Size: Integer);
957957
FGCM.DecodeGCM(PlainText, CipherText, Size);
958958
end;
959959

960-
procedure TDECCipherModes.DecodeCFB8(Source, Dest: PByteArray; Size: Integer);
960+
procedure TDECCipherModes.DecodeCFB8(Source, Dest: PUInt8Array; Size: Integer);
961961
// CFB-8
962962
var
963963
I: Integer;
@@ -974,7 +974,7 @@ procedure TDECCipherModes.DecodeCFB8(Source, Dest: PByteArray; Size: Integer);
974974
FState := csDecode;
975975
end;
976976

977-
procedure TDECCipherModes.DecodeOFB8(Source, Dest: PByteArray; Size: Integer);
977+
procedure TDECCipherModes.DecodeOFB8(Source, Dest: PUInt8Array; Size: Integer);
978978
// same as EncodeOFB
979979
var
980980
I: Integer;
@@ -991,7 +991,7 @@ procedure TDECCipherModes.DecodeOFB8(Source, Dest: PByteArray; Size: Integer);
991991
FState := csDecode;
992992
end;
993993

994-
procedure TDECCipherModes.DecodeCFS8(Source, Dest: PByteArray; Size: Integer);
994+
procedure TDECCipherModes.DecodeCFS8(Source, Dest: PUInt8Array; Size: Integer);
995995
var
996996
I: Integer;
997997
begin
@@ -1007,7 +1007,7 @@ procedure TDECCipherModes.DecodeCFS8(Source, Dest: PByteArray; Size: Integer);
10071007
FState := csDecode;
10081008
end;
10091009

1010-
procedure TDECCipherModes.DecodeCFBx(Source, Dest: PByteArray; Size: Integer);
1010+
procedure TDECCipherModes.DecodeCFBx(Source, Dest: PUInt8Array; Size: Integer);
10111011
// CFB-BlockSize
10121012
var
10131013
I: Integer;
@@ -1063,7 +1063,7 @@ procedure TDECCipherModes.DecodeCFBx(Source, Dest: PByteArray; Size: Integer);
10631063
end;
10641064
end;
10651065

1066-
procedure TDECCipherModes.DecodeOFBx(Source, Dest: PByteArray; Size: Integer);
1066+
procedure TDECCipherModes.DecodeOFBx(Source, Dest: PUInt8Array; Size: Integer);
10671067
// OFB-BlockSize, same as EncodeOFBx
10681068
var
10691069
I: Integer;
@@ -1127,7 +1127,7 @@ procedure TDECCipherModes.OnAfterInitVectorInitialization(const OriginalInitVect
11271127
FGCM.Init(self.DoEncode, OriginalInitVector);
11281128
end;
11291129

1130-
procedure TDECCipherModes.DecodeCFSx(Source, Dest: PByteArray; Size: Integer);
1130+
procedure TDECCipherModes.DecodeCFSx(Source, Dest: PUInt8Array; Size: Integer);
11311131
// CFS-BlockSize
11321132
var
11331133
I: Integer;
@@ -1168,7 +1168,7 @@ procedure TDECCipherModes.DecodeCFSx(Source, Dest: PByteArray; Size: Integer);
11681168
end;
11691169
end;
11701170

1171-
procedure TDECCipherModes.DecodeCBCx(Source, Dest: PByteArray; Size: Integer);
1171+
procedure TDECCipherModes.DecodeCBCx(Source, Dest: PUInt8Array; Size: Integer);
11721172
var
11731173
I: Integer;
11741174
F, B, T: PUInt8Array;
@@ -1212,7 +1212,7 @@ procedure TDECCipherModes.DecodeCBCx(Source, Dest: PByteArray; Size: Integer);
12121212
FState := csDecode;
12131213
end;
12141214

1215-
procedure TDECCipherModes.DecodeCTSx(Source, Dest: PByteArray; Size: Integer);
1215+
procedure TDECCipherModes.DecodeCTSx(Source, Dest: PUInt8Array; Size: Integer);
12161216
var
12171217
I: Integer;
12181218
F, B, T: PUInt8Array;
@@ -1244,10 +1244,10 @@ procedure TDECCipherModes.DecodeCTSx(Source, Dest: PByteArray; Size: Integer);
12441244
end;
12451245

12461246
{$IFDEF DEC3_CMCTS}
1247-
procedure DecodeCTS3(Source, Dest: PByteArray; Size: Integer);
1247+
procedure DecodeCTS3(Source, Dest: PUInt8Array; Size: Integer);
12481248
var
12491249
I: Integer;
1250-
F, B, T: PByteArray;
1250+
F, B, T: PUInt8Array;
12511251
begin
12521252
Dec(Size, FBufferSize);
12531253
F := FFeedback;

0 commit comments

Comments
 (0)