DCPcrypt CTS

Rozszerzenie funkcjonalności modułu DCPcrypt o tryb deszyfrowania CTS

type
TDCP_helper = class helper for TDCP_blockcipher64
public
procedure DecryptCTS(const Indata; var Outdata; Size: longword);
end;
 
procedure TDCP_helper.DecryptCTS(const Indata; var Outdata; Size: longword);
var
i: longword;
p1, p2: pointer;
Temp: array[0..7] of byte;
CV: array[0..7] of byte;
begin
if not fInitialized then
raise EDCP_blockcipher.Create('Cipher not initialized');
GetIV(CV);
p1 := @Indata;
p2 := @Outdata;
for i:= 1 to (Size div 8) do
begin
Move(p1^, p2^, 8);
Move(p2^, Temp, 8);
XorBlock(Temp, CV, 8);
DecryptECB(p2^, p2^);
XorBlock(p2^, CV, 8);
Move(Temp, CV, 8);
Inc(p1, 8);
Inc(p2, 8);
end;
if not ((Size mod 8) = 0) then
begin
EncryptECB(CV,CV);
Move(p1^,p2^,Size mod 8);
XorBlock(p2^,CV,Size mod 8);
end;
end;