📄 lbclass.pas
字号:
(* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is TurboPower LockBox
*
* The Initial Developer of the Original Code is
* TurboPower Software
*
* Portions created by the Initial Developer are Copyright (C) 1997-2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** *)
{*********************************************************}
{* LBCLASS.PAS 2.07 *}
{* Copyright (c) 2002 TurboPower Software Co *}
{* All rights reserved. *}
{*********************************************************}
{$I LockBox.inc}
{$H+} {turn on huge strings}
unit LbClass;
{-LockBox components and classes }
interface
uses
{$IFDEF MSWINDOWS}
Windows,
{$ENDIF}
Classes,
SysUtils,
LbCipher;
{ TLbBaseComponent }
type
TLBBaseComponent = class(TLBBase)
protected {private}
function GetVersion : string;
procedure SetVersion(const Value : string);
published {properties}
property Version : string
read GetVersion write SetVersion stored False;
end;
{ TLbCipher }
type
TLbCipherMode = (cmECB, cmCBC);
TLbCipher = class(TLbBaseComponent)
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
function DecryptBuffer(const InBuf; InBufSize : Cardinal; var OutBuf) : Cardinal;
function EncryptBuffer(const InBuf; InBufSize : Cardinal; var OutBuf) : Cardinal;
procedure DecryptFile(const InFile, OutFile : string); virtual; abstract;
procedure DecryptStream(InStream , OutStream : TStream); virtual; abstract;
function DecryptString(const InString : string) : string; virtual; abstract;
procedure EncryptFile(const InFile, OutFile : string); virtual; abstract;
procedure EncryptStream(InStream, OutStream : TStream); virtual; abstract;
function EncryptString(const InString : string) : string; virtual; abstract;
function OutBufSizeNeeded(InBufSize : Cardinal) : Cardinal; virtual; abstract;
end;
{ TLbSymmetricCipher }
type
TLbSymmetricCipher = class(TLbCipher)
protected {private}
FCipherMode : TLbCipherMode;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure GenerateKey(const Passphrase : string); virtual; abstract;
procedure GenerateRandomKey; virtual; abstract;
public {properties}
property CipherMode : TLbCipherMode
read FCipherMode write FCipherMode;
end;
{ TLbBlowfish }
type
TLbBlowfish = class(TLbSymmetricCipher)
protected {private}
FKey : TKey128;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure DecryptFile(const InFile, OutFile : string); override;
procedure DecryptStream(InStream , OutStream : TStream); override;
function DecryptString(const InString : string) : string; override;
procedure EncryptFile(const InFile, OutFile : string); override;
procedure EncryptStream(InStream, OutStream : TStream); override;
function EncryptString(const InString : string) : string; override;
procedure GenerateKey(const Passphrase : string); override;
procedure GenerateRandomKey; override;
procedure GetKey(var Key : TKey128);
procedure SetKey(const Key : TKey128);
function OutBufSizeNeeded(InBufSize : Cardinal) : Cardinal; override;
published {properties}
property CipherMode;
end;
{ TLbDES }
type
TLbDES = class(TLbSymmetricCipher)
protected {private}
FKey : TKey64;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure DecryptFile(const InFile, OutFile : string); override;
procedure DecryptStream(InStream , OutStream : TStream); override;
function DecryptString(const InString : string) : string; override;
procedure EncryptFile(const InFile, OutFile : string); override;
procedure EncryptStream(InStream, OutStream : TStream); override;
function EncryptString(const InString : string) : string; override;
procedure GenerateKey(const Passphrase : string); override;
procedure GenerateRandomKey; override;
procedure GetKey(var Key : TKey64);
procedure SetKey(const Key : TKey64);
function OutBufSizeNeeded(InBufSize : Cardinal) : Cardinal; override;
published {properties}
property CipherMode;
end;
{ TLb3DES }
type
TLb3DES = class(TLbSymmetricCipher)
protected {private}
FKey : TKey128;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure DecryptFile(const InFile, OutFile : string); override;
procedure DecryptStream(InStream , OutStream : TStream); override;
function DecryptString(const InString : string) : string; override;
procedure EncryptFile(const InFile, OutFile : string); override;
procedure EncryptStream(InStream, OutStream : TStream); override;
function EncryptString(const InString : string) : string; override;
procedure GenerateKey(const Passphrase : string); override;
procedure GenerateRandomKey; override;
procedure GetKey(var Key : TKey128);
procedure SetKey(const Key : TKey128);
function OutBufSizeNeeded(InBufSize : Cardinal) : Cardinal; override;
published {properties}
property CipherMode;
end;
{ TLbRijndael }
type
TLbKeySizeRDL = (ks128, ks192, ks256);
type
TLbRijndael = class(TLbSymmetricCipher)
protected {private}
FKey : TKey256;
FKeySize : TLbKeySizeRDL;
FKeySizeBytes : Integer;
procedure SetKeySize(Value : TLbKeySizeRDL);
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure DecryptFile(const InFile, OutFile : string); override;
procedure DecryptStream(InStream , OutStream : TStream); override;
function DecryptString(const InString : string) : string; override;
procedure EncryptFile(const InFile, OutFile : string); override;
procedure EncryptStream(InStream, OutStream : TStream); override;
function EncryptString(const InString : string) : string; override;
procedure GenerateKey(const Passphrase : string); override;
procedure GenerateRandomKey; override;
procedure GetKey(var Key);
procedure SetKey(const Key);
function OutBufSizeNeeded(InBufSize : Cardinal) : Cardinal; override;
published {properties}
property CipherMode;
property KeySize : TLbKeySizeRDL
read FKeySize write SetKeySize;
end;
{ TLbHash }
type
TLbHash = class(TLbBaseComponent)
protected {private}
FBuf : array[0..1023] of Byte;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure HashBuffer(const Buf; BufSize : Cardinal); virtual; abstract;
procedure HashFile(const AFileName : string); virtual; abstract;
procedure HashStream(AStream: TStream); virtual; abstract;
procedure HashString(const AStr : string); virtual; abstract;
end;
{ TLbMD5 }
type
TLbMD5 = class(TLbHash)
protected {private}
FDigest : TMD5Digest;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure GetDigest(var Digest : TMD5Digest);
procedure HashBuffer(const Buf; BufSize : Cardinal); override;
procedure HashFile(const AFileName : string); override;
procedure HashStream(AStream: TStream); override;
procedure HashString(const AStr : string); override;
end;
{ TLbSHA1 }
type
TLbSHA1 = class(TLbHash)
protected {private}
FDigest : TSHA1Digest;
public {methods}
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
procedure GetDigest(var Digest : TSHA1Digest);
procedure HashBuffer(const Buf; BufSize : Cardinal); override;
procedure HashFile(const AFileName : string); override;
procedure HashStream(AStream: TStream); override;
procedure HashString(const AStr : string); override;
end;
{ TLbSCStream }
type
TLbSCStream = class(TMemoryStream)
protected {private}
FContext : TLSCContext;
public {methods}
constructor Create(const Key; KeySize : Integer);
procedure Reinitialize(const Key; KeySize : Integer); dynamic;
procedure ChangeKey(const Key; KeySize : Integer); dynamic;
function Read(var Buffer; Count : Longint) : Longint; override;
function Write(const Buffer; Count : Longint) : Longint; override;
end;
{ TLbSCFileStream }
type
TLbSCFileStream = class(TFileStream)
protected {private}
FContext : TLSCContext;
public {methods}
constructor Create(const FileName : string; Mode : Word; const Key; KeySize : Integer);
procedure Reinitialize(const Key; KeySize : Integer); dynamic;
procedure ChangeKey(const Key; KeySize : Integer); dynamic;
function Read(var Buffer; Count : Longint) : Longint; override;
function Write(const Buffer; Count : Longint) : Longint; override;
end;
{ TLbRNG32Stream }
type
TLbRNG32Stream = class(TMemoryStream)
protected {private}
FContext : TRNG32Context;
public {methods}
constructor Create(const Key : LongInt);
procedure Reinitialize(const Key : LongInt); dynamic;
procedure ChangeKey(const Key : LongInt); dynamic;
function Read(var Buffer; Count : LongInt) : LongInt; override;
function Write(const Buffer; Count : LongInt) : LongInt; override;
end;
{ TLbRNG32FileStream }
type
TLbRNG32FileStream = class(TFileStream)
protected {private}
FContext : TRNG32Context;
public {methods}
constructor Create(const FileName : string; Mode : Word; const Key : LongInt);
procedure Reinitialize(const Key : LongInt); dynamic;
procedure ChangeKey(const Key : LongInt); dynamic;
function Read(var Buffer; Count : LongInt) : LongInt; override;
function Write(const Buffer; Count : LongInt) : LongInt; override;
end;
{ TLbRNG64Stream }
TLbRNG64Stream = class(TMemoryStream)
protected {private}
FContext : TRNG64Context;
public {methods}
constructor Create(const KeyHi, KeyLo : LongInt);
procedure Reinitialize(const KeyHi, KeyLo : LongInt); dynamic;
procedure ChangeKey(const KeyHi, KeyLo : LongInt); dynamic;
function Read(var Buffer; Count : LongInt) : LongInt; override;
function Write(const Buffer; Count : LongInt) : LongInt; override;
end;
{ TLbRNG64FileStream }
type
TLbRNG64FileStream = class(TFileStream)
protected {private}
FContext : TRNG64Context;
public {methods}
constructor Create(const FileName : string; Mode : Word; const KeyHi, KeyLo : LongInt);
procedure Reinitialize(const KeyHi, KeyLo : LongInt); dynamic;
procedure ChangeKey(const KeyHi, KeyLo : LongInt); dynamic;
function Read(var Buffer; Count : LongInt) : LongInt; override;
function Write(const Buffer; Count : LongInt) : LongInt; override;
end;
implementation
uses
LbProc, LbString, LbConst;
const
RDLKeySizeMap : array[TLbKeySizeRDL] of Integer = (16, 24, 32);
{ == TLbBaseComponent ====================================================== }
function TLBBaseComponent.GetVersion : string;
begin
Result := sLbVersion;
end;
{ -------------------------------------------------------------------------- }
procedure TLBBaseComponent.SetVersion(const Value : string);
begin
{ nop }
end;
{ == TLbCipher ============================================================= }
constructor TLbCipher.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
end;
{ -------------------------------------------------------------------------- }
destructor TLbCipher.Destroy;
begin
inherited Destroy;
end;
{ -------------------------------------------------------------------------- }
function TLbCipher.DecryptBuffer(const InBuf; InBufSize : Cardinal; var OutBuf) : Cardinal;
var
InS, OutS : TMemoryStream;
begin
InS := TMemoryStream.Create;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -