|
@@ -55,15 +55,20 @@ type
|
|
|
var
|
|
var
|
|
|
|
|
|
|
|
FBufferSize: Int32;
|
|
FBufferSize: Int32;
|
|
|
|
|
+ FOnProgress: TBufferedCipherProgressEvent;
|
|
|
|
|
|
|
|
const
|
|
const
|
|
|
BUFFER_SIZE = Int32(64 * 1024); // 64Kb
|
|
BUFFER_SIZE = Int32(64 * 1024); // 64Kb
|
|
|
|
|
|
|
|
function GetBufferSize: Int32; inline;
|
|
function GetBufferSize: Int32; inline;
|
|
|
procedure SetBufferSize(value: Int32); inline;
|
|
procedure SetBufferSize(value: Int32); inline;
|
|
|
|
|
+ function GetOnProgress: TBufferedCipherProgressEvent; inline;
|
|
|
|
|
+ procedure SetOnProgress(const value: TBufferedCipherProgressEvent); inline;
|
|
|
|
|
|
|
|
strict protected
|
|
strict protected
|
|
|
|
|
|
|
|
|
|
+ procedure DoProgress(AProcessed, ATotal: Int64); virtual;
|
|
|
|
|
+
|
|
|
class property EmptyBuffer: TCryptoLibByteArray read GetEmptyBuffer;
|
|
class property EmptyBuffer: TCryptoLibByteArray read GetEmptyBuffer;
|
|
|
|
|
|
|
|
public
|
|
public
|
|
@@ -132,6 +137,8 @@ type
|
|
|
/// encryption/decryption.
|
|
/// encryption/decryption.
|
|
|
/// </summary>
|
|
/// </summary>
|
|
|
property BufferSize: Int32 read GetBufferSize write SetBufferSize;
|
|
property BufferSize: Int32 read GetBufferSize write SetBufferSize;
|
|
|
|
|
+ property OnProgress: TBufferedCipherProgressEvent read GetOnProgress
|
|
|
|
|
+ write SetOnProgress;
|
|
|
|
|
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
@@ -144,6 +151,25 @@ begin
|
|
|
System.SetLength(FEmptyBuffer, 0);
|
|
System.SetLength(FEmptyBuffer, 0);
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
+procedure TBufferedCipherBase.DoProgress(AProcessed, ATotal: Int64);
|
|
|
|
|
+begin
|
|
|
|
|
+ if System.Assigned(FOnProgress) then
|
|
|
|
|
+ begin
|
|
|
|
|
+ FOnProgress(AProcessed, ATotal);
|
|
|
|
|
+ end;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+function TBufferedCipherBase.GetOnProgress: TBufferedCipherProgressEvent;
|
|
|
|
|
+begin
|
|
|
|
|
+ result := FOnProgress;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
|
|
+procedure TBufferedCipherBase.SetOnProgress(const value
|
|
|
|
|
+ : TBufferedCipherProgressEvent);
|
|
|
|
|
+begin
|
|
|
|
|
+ FOnProgress := value;
|
|
|
|
|
+end;
|
|
|
|
|
+
|
|
|
constructor TBufferedCipherBase.Create;
|
|
constructor TBufferedCipherBase.Create;
|
|
|
begin
|
|
begin
|
|
|
Inherited Create();
|
|
Inherited Create();
|
|
@@ -307,14 +333,16 @@ begin
|
|
|
inputStream.Position := inPos;
|
|
inputStream.Position := inPos;
|
|
|
outputStream.Position := outPos;
|
|
outputStream.Position := outPos;
|
|
|
|
|
|
|
|
|
|
+ DoProgress(0, length);
|
|
|
|
|
+
|
|
|
while true do
|
|
while true do
|
|
|
begin
|
|
begin
|
|
|
-
|
|
|
|
|
readed := inputStream.Read(data[0], LBufferSize);
|
|
readed := inputStream.Read(data[0], LBufferSize);
|
|
|
|
|
|
|
|
if ((total + Int64(readed)) >= length) then
|
|
if ((total + Int64(readed)) >= length) then
|
|
|
begin
|
|
begin
|
|
|
tempRes := ProcessBytes(data, 0, Int32(length - total));
|
|
tempRes := ProcessBytes(data, 0, Int32(length - total));
|
|
|
|
|
+ DoProgress(total + readed, length);
|
|
|
if (tempRes <> Nil) then
|
|
if (tempRes <> Nil) then
|
|
|
begin
|
|
begin
|
|
|
outputStream.Write(tempRes[0], System.length(tempRes));
|
|
outputStream.Write(tempRes[0], System.length(tempRes));
|
|
@@ -330,6 +358,7 @@ begin
|
|
|
end;
|
|
end;
|
|
|
total := total + readed;
|
|
total := total + readed;
|
|
|
end;
|
|
end;
|
|
|
|
|
+ DoProgress(total, length);
|
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
tempRes := DoFinal();
|
|
tempRes := DoFinal();
|