* Added convenience call passing a string as a encryption/decryption key

git-svn-id: trunk@13465 -
This commit is contained in:
michael 2009-07-26 17:53:19 +00:00
parent bf07cc4b9f
commit b09cd7ed16

View File

@ -71,27 +71,37 @@ PROCEDURE CipherIdea(Input: TIDEACryptData; VAR outdata: TIDEACryptData; z: TIDE
Type
EIDEAError = Class(EStreamError);
{ TIDEAStream }
TIDEAStream = Class(TOwnerStream)
Private
FKey : TIDEAKey;
FData : TIDEACryptData;
FBufpos : Byte;
FPos : Longint;
Protected
Procedure CreateCryptKey(Const S : String; Var Key : TIDEACryptKey);
Public
Constructor Create(AKey : TIDEAKey; Dest: TStream);
Property Key : TIDEAKey Read FKey;
end;
{ TIDEAEncryptStream }
TIDEAEncryptStream = Class(TIDEAStream)
public
Constructor Create(Const AKey : String; Dest: TStream);
Destructor Destroy; override;
function Write(const Buffer; Count: Longint): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
procedure Flush;
end;
{ TIDEADeCryptStream }
TIDEADeCryptStream = Class(TIDEAStream)
public
Constructor Create(Const AKey : String; Dest: TStream);
function Read(var Buffer; Count: Longint): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
end;
@ -100,6 +110,7 @@ Implementation
Const
SNoSeekAllowed = 'Seek not allowed on encryption streams';
SErrEmptyKey = 'String Key may not be empty';
PROCEDURE mul(VAR a:Word; b: Word);
VAR p: LongInt;
@ -246,7 +257,7 @@ END;
---------------------------------------------------------------------}
Constructor TIDEAStream.Create(AKey : ideakey; Dest: TStream);
Constructor TIDEAStream.Create(AKey : TIDEAKey; Dest: TStream);
begin
inherited Create(Dest);
@ -255,10 +266,37 @@ begin
Fpos:=0;
end;
procedure TIDEAStream.CreateCryptKey(const S: String; var Key: TIDEACryptKey);
Var
KLen : Integer;
begin
KLen:=Length(S);
If (KLen=0) then
Raise EIDEAError.Create(SErrEmptyKey);
If (Length(S)>SizeOf(Key)) then
KLen:=SizeOf(Key);
Move(S[1],Key,KLen);
end;
{ ---------------------------------------------------------------------
TIDEAEncryptStream
---------------------------------------------------------------------}
constructor TIDEAEncryptStream.Create(Const AKey: String; Dest: TStream);
Var
K : TIdeaCryptKey;
Z : TIDeaKey;
begin
CreateCryptKey(AKey,K);
EnKeyIDEA(K,Z);
Inherited Create(Z,Dest);
end;
Destructor TIDEAEncryptStream.Destroy;
@ -329,6 +367,18 @@ end;
TIDEADecryptStream
---------------------------------------------------------------------}
constructor TIDEADeCryptStream.Create(const AKey: String; Dest: TStream);
Var
K : TIdeaCryptKey;
Z1,Z2 : TIDeaKey;
begin
CreateCryptKey(AKey,K);
EnKeyIDEA(K,Z1);
DeKeyIDEA(Z1,Z2);
Inherited Create(Z2,Dest);
end;
function TIDEADeCryptStream.Read(var Buffer; Count: Longint): Longint;