|
@@ -59,8 +59,8 @@ Type
|
|
function GetPosition: Int64; override;
|
|
function GetPosition: Int64; override;
|
|
procedure InvalidSeek; override;
|
|
procedure InvalidSeek; override;
|
|
Public
|
|
Public
|
|
- Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream);
|
|
|
|
- Constructor Create(Const KeyPhrase : String; Dest: TStream);
|
|
|
|
|
|
+ Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream); overload; virtual;
|
|
|
|
+ Constructor Create(Const KeyPhrase : String; Dest: TStream); overload;
|
|
Destructor Destroy; override;
|
|
Destructor Destroy; override;
|
|
Property BlowFish : TBlowFish Read FBF;
|
|
Property BlowFish : TBlowFish Read FBF;
|
|
end;
|
|
end;
|
|
@@ -74,7 +74,11 @@ Type
|
|
end;
|
|
end;
|
|
|
|
|
|
TBlowFishDeCryptStream = Class(TBlowFishStream)
|
|
TBlowFishDeCryptStream = Class(TBlowFishStream)
|
|
|
|
+ private
|
|
|
|
+ FSourcePos0: Int64;
|
|
public
|
|
public
|
|
|
|
+ Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream); override;
|
|
|
|
+
|
|
function Read(var Buffer; Count: Longint): Longint; override;
|
|
function Read(var Buffer; Count: Longint): Longint; override;
|
|
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
|
|
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
|
|
end;
|
|
end;
|
|
@@ -652,6 +656,13 @@ end;
|
|
TBlowFishDecryptStream
|
|
TBlowFishDecryptStream
|
|
---------------------------------------------------------------------}
|
|
---------------------------------------------------------------------}
|
|
|
|
|
|
|
|
+constructor TBlowFishDeCryptStream.Create(AKey: TBlowFishKey; AKeySize: Byte;
|
|
|
|
+ Dest: TStream);
|
|
|
|
+begin
|
|
|
|
+ inherited Create(AKey, AKeySize, Dest);
|
|
|
|
+
|
|
|
|
+ FSourcePos0 := Source.Position;
|
|
|
|
+end;
|
|
|
|
|
|
function TBlowFishDeCryptStream.Read(var Buffer; Count: Longint): Longint;
|
|
function TBlowFishDeCryptStream.Read(var Buffer; Count: Longint): Longint;
|
|
|
|
|
|
@@ -697,7 +708,13 @@ end;
|
|
function TBlowFishDeCryptStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
|
|
function TBlowFishDeCryptStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
|
|
|
|
|
|
begin
|
|
begin
|
|
- FakeSeekForward(Offset,TSeekOrigin(Origin),FPos);
|
|
|
|
|
|
+ if (Offset=0) and (Origin=soBeginning) then
|
|
|
|
+ begin // support seek to beginning
|
|
|
|
+ FBufPos:=0;
|
|
|
|
+ FPos:=0;
|
|
|
|
+ Source.Position := FSourcePos0;
|
|
|
|
+ end else
|
|
|
|
+ FakeSeekForward(Offset,TSeekOrigin(Origin),FPos);
|
|
Result:=FPos;
|
|
Result:=FPos;
|
|
end;
|
|
end;
|
|
|
|
|