type
  EWeakKey = class(Exception); //schwaches Kennwort

TOnRenameFile = procedure(Sender: TObject; const Path: String;
                          var Name: String) of object;
TBFH = class(TComponent)
public
  OriginalName: ShortString;
  OriginalSize: LongInt;
  OriginalDate: LongInt;
  function GetRandomFileName: String;
  // Public Stream
  function CheckBFHStream(CryptStream: TStream): Boolean;
  procedure EncryptStream(PlainStream, CryptStream: TStream);
  function DecryptStream(CryptStream, PlainStream: TStream): Boolean;
  // Public File
  function CheckBFHFile(CryptFileName: String): Boolean;
  procedure EncryptFile(PlainFileName: String);
  function DecryptFile(CryptFileName: String): Boolean;
  function WriteOrigInfo(CryptFileName: String): Boolean;
published
  property Keyword: String write SetKeyword stored False;
  property FastFileCrypt: Boolean read fFastFileCrypt write fFastFileCrypt;
  property SecureFileName: Boolean read fSecureFileName write fSecureFileName;
  property OnRenameFile: TOnRenameFile read fOnRenameFile write fOnRenameFile;
end;


Die Exception "EWeakKey" wird ausgelst, wenn das Kennwort durch zwei
identische Werte in den S-Boxen als schwach bewertet wird.

Wenn "FastFileCrypt" aktiv ist, werden keine Temp-Files erzeugt und
die Daten auf den gleichen Platz des Datentrgers gespeichert. Die
Geschwindigkeit steigt dadurch etwas, doch bei Fehlern ist keine
Sicherheitskopie des Originals vorhanden.

Wenn "SecureFileName" aktiv ist, werden die Dateinamen der verschlsselten
Dateien durch Zufallszahlen ersetzt.

Der Event "OnRenameFile" wird ausgelst, wenn eine zu erzeugende Datei
schon vorhanden ist.
