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; |