SDeanComponents (v1.5.5)
------------------------
By Sarah Dean
sdean12@mailcity.com
http://www.fortunecity.com/skyscraper/true/882/
Written: 14th February 2000
Last updated: 5th November 2001


This archive contains the following Delphi packages (stored in the
"Components" directory):


Package         Pallette page   Version       Description
----------------------------------------------------------------------------
SDeanUtils      SDeanUtils      v1.0.5        SDeanUtils: Sarah Dean - General
                                              Utility Classes and Components
KeyboardEntry   SDeanSecurity   v1.0.1        SDeanSecurity: Keyboard Entry
                                              Dialog
Hash            Hash            v1.0.0        Hash: Hash algorithms:
                                                GOST R 34.11-94,
                                                MD2,
                                                MD4,
                                                MD5,
                                                RIPEMD-128,
                                                RIPEMD-160,
                                                RIPEMD-256,
                                                RIPEMD-320,
                                                SHA,
                                                SHA-1
                                              (All inherit from THash)
OTFE            OTFE            v1.0.0        OTFE: Base class for On-The-Fly
                                              Encryption components
OTFEBestCrypt   OTFE            v1.0.0        OTFE: BestCrypt Delphi Component
OTFEScramDisk   OTFE            v2.0.0        OTFE: ScramDisk Delphi Component
OTFEE4M         OTFE            v1.0.2        OTFE: E4M Delphi Component
OTFEPGPDisk     OTFE            v1.0.0        OTFE: PGPDisk Delphi Component
OTFEUnified     OTFE            v1.0.0        OTFE: Unified OTFE Delphi
                                              Component


And the following test applications to demo/test the above components:

  IteratorTestApp
  HashDemo
  OTFEBestCryptTestApp
  ScramDiskDemo          (original demo as supplied with TkrScramDisk)
  OTFEScramDiskTestApp
  OTFEE4MTestApp
  OTFEPGPDiskTestApp
  OTFEUnifiedTestApp



Component Specific Notes and Issues
-----------------------------------

OTFEBestCrypt
-------------

  function  Mount(volumeFilenames: TStringList; var mountedAs: string; readonly: boolean = FALSE): boolean;

    This function will prompt the user for a password for each volume file
    instead of accepting one password, and applying it to all the volume files
    specified


OTFEPGPDisk
-----------
  The PGPDisk component was originally written for the version of PGPDisk
  supplied with PGP v6.0.2i. Because NAI appear to have changed all the APIs to
  PGPDisk, and don't appear to wanna talk to me about what's changed, the
  version of PGPDisk supplied with the commercial release of PGP v7.0.x does
  not work correctly with this component (mounted PGPDisks are misreported,
  etc)

  function  Version(): cardinal;
  function  VersionStr(): string;

    The version number returned is (as with the other OTFE components) the
    version ID the driver identifies as. In the case of PGPDisk, this constant
    should be interpreted as an internal version number only, and has no
    meaning outside of PGPdisk.


  function  Mount(volumeFilename: string; readonly: boolean = FALSE): char;

    The "readonly" parameter is ignored (the user can specify mounting as
    readonly when entering the password)


  function  Mount(volumeFilenames: TStringList; var mountedAs: string; readonly: boolean = FALSE): boolean;

    This function will prompt the user for a password for each volume file
    instead of accepting one password, and applying it to all the volume files
    specified

    Also, the "readonly" parameter is ignored (the user can specify mounting as
    readonly when entering the password)


OTFEE4M
-------
  CAUTION!
  If you have an application that uses this component that may still be running
  when the user shuts down/restarts their computer, it is important that you
  intercept the shutdown, and ensure that this components "Active" property to
  FALSE. Failure to do so could result in the user's computer freezing on shutdown
  as the component is still connected to the E4M driver (under Windows Me, at least).

  function  GetVolFileForDrive(driveLetter: char): string;

    When getting filenames of mounted volumes under NT, the E4M driver does not
    return the full filename it is more than 63 chars long; instead it will
    return the first 60 chars, followed by "..." (or if the "filename" is *not*
    the name of a device, only the first 56 chars)

    This is because under NT, the E4M driver does not return the full filename
    it is more than 63 chars long; instead it will return the first 60 chars,
    followed by "...". In the case of volume files (not partitions), the
    filename returned by the driver is prefixed with "/??/" which is stripped
    out by the component

    Note: "Filename" in the above two paragraphs refers to the full filename,
    including the full path to the file.


  function  GetDriveForVolFile(volumeFilename: string): char;

    Calls to this function *may* return the wrong drive letter if there is more
    than one volume file mounted, and the first 56 chars (or 60 in the case of
    partitions) of two or more of the mounted volume filenames match the first
    56 chars of "volumeFilename". In such a case, the drive letter to either one
    of these volumes may be returned.

    This is because under NT, the E4M driver does not return the full filename
    it is more than 63 chars long; instead it will return the first 60 chars,
    followed by "...". In the case of volume files (not partitions), the
    filename returned by the driver is prefixed with "/??/" which is stripped
    out by the component

    Note: "Filename" in the above two paragraphs refers to the full filename,
    including the full path to the file.


  function  Dismount(volumeFilename: string; emergency: boolean = FALSE): boolean;

    Calls to this function *may* dismount the wrong drive if there is more than
    one volume file mounted, and the first 56 chars (or 60 in the case of
    partitions) of two or more of the mounted volume filenames match the first
    56 chars of "volumeFilename". In such a case, one of the matching volume
    filenames will have it's drive dismounted

    This is because under NT, the E4M driver does not return the full filename
    it is more than 63 chars long; instead it will return the first 60 chars,
    followed by "...". In the case of volume files (not partitions), the
    filename returned by the driver is prefixed with "/??/" which is stripped
    out by the component

    Note: "Filename" in the above two paragraphs refers to the full filename,
    including the full path to the file.

    The "Dismount" function that takes a drive letter as it's parameter works
    correctly, and it is recommended that this function should be used instead.


  function  Mount(volumeFilename: string; readonly: boolean = FALSE): char;

    The "readonly" parameter is ignored (E4M does not support mounting volume
    files as readonly)


  function  Mount(volumeFilenames: TStringList; var mountedAs: string; readonly: boolean = FALSE): boolean;

    The "readonly" parameter is ignored (E4M does not support mounting volume
    files as readonly)


  function  GetVolumeInfo(volumeFilename: string; info: pTOTFEE4MVolumeInfo): boolean;

    Due to another limitation with the E4M driver, it is not possible to
    identify the cipher or hash details of a mounted volume that has not been
    mounted with the same instance of TOTFEE4M on which GetVolumeInfo(...) is
    being called, nor is it possible to determine the type of the volume if
    it is a ScramDisk/E4M/SFS volume file, although partitions can be
    identified as such.


OTFEScramDisk
-------------
Note: Because the ScramDisk component is designed to clear all cached
      passwords immediatly after they are used, you cannot mount a volume using
      this component and then create an SKF file; in order to create a SKF
      file, you are required *not* to clear the cached passwords. Instead, you
      can use ScramDisk to mount the volumes, and *then* create any SKF files
      needed.


OTFEUnified
-----------
  CAUTION!
  If you enable support for E4M, then:
  If you have an application that uses this component that may still be running
  when the user shuts down/restarts their computer, it is important that you
  intercept the shutdown, and ensure that this components "Active" property to
  FALSE. Failure to do so could result in the user's computer freezing on shutdown
  as the component is still connected to the E4M driver (under Windows Me, at least).


Additional
----------
Full credit is given to Andy Jeffries at Kwik-Rite Development for writing
TkrScramdisk, the basis of TOTFEScramDisk and the (now redundant)
TEnhKrScramDisk.

