SDeanComponents
By Sarah Dean (sdean12@sdean12.org)
http://www.SDean12.org/
Last updated: 1st January 2009
Contents
Summary
Current version: v2.82
SDeanComponents currently contains the following Delphi
packages:
Package |
Version |
Description |
SDeanUtils |
v2.0.0 |
SDeanUtils: Sarah Dean - General Utility Classes and
Components
Includes file and directory iterators for walking through directory
structures/filesytems, system tray icon (aka tasktray icon), endian
integers, TSDUStringGrid (enhanced TStringGrid with sorting and column
resize), named pipes, wrappers for Windows Vista's TaskDialog API, display
of partition information, etc
|
SDeanSecurity |
v2.5.0 |
Includes:
- AFSplitter
- HMAC
- Keyboard Entry Dialog
- MouseRNG
- MouseRNG Random Data Capture Dialog
- MSCryptoAPI
- PKCS#11 (Cryptoki)
- Shredder
|
Hash |
v2.0.0 |
Hash: Hash algorithms:
- GOST R 34.11-94,
- MD2,
- MD4,
- MD5,
- RIPEMD-128,
- RIPEMD-160,
- RIPEMD-256,
- RIPEMD-320,
- SHA,
- SHA-1
- SHA-256
- SHA-384
- SHA-512
- Tiger
(All of which inherit from THash) |
OTFE |
v1.1.0 |
OTFE: Base class for On-The-Fly Encryption components |
OTFEBestCrypt |
v2.0.0 |
OTFE: BestCrypt Delphi Component |
OTFECrossCrypt
|
v1.0.0
|
OTFE: CrossCrypt Delphi Component
|
OTFEE4M
|
v1.0.2 |
OTFE: E4M Delphi Component
|
OTFEFreeOTFE
|
v3.0.0 |
OTFE: FreeOTFE Delphi Component |
OTFEPGPDisk |
v1.0.0 |
OTFE: PGPDisk Delphi Component |
OTFEScramDisk |
v2.0.0 |
OTFE: ScramDisk Delphi Component |
OTFETrueCrypt
|
v1.1.0
|
OTFE: TrueCrypt Delphi Component
|
OTFEUnified |
v2.0.0 |
OTFE: Unified OTFE Delphi Component |
OTFEDriveCrypt
|
n/a
|
OTFE: DriveCrypt Delphi Component
Do not use - development
shelved (see below)
|
OTFEStrongDisk
|
n/a |
OTFE: StrongDisk Delphi Component
Do not use - under development
(see below)
|
Additionally, the following test applications to demo/test the above
components are included:
- SDUCreateLargeFile
- SDUPrettyPrintHex
- SDUNamedPipes
- SDUURLLabelTestApp
- IteratorTestApp
- AFSplitter
- MouseRNGTestApp
- MouseRNGDialogTestApp
- PasswordRichEdit
- MSCryptoAPI
- SimpleHash
- SDHash
- HashTestVectorSuite
- TigerTest
- ScramDiskDemo (original demo as supplied with TkrScramDisk)
- OTFEBestCryptTestApp
- OTFECrossCryptTestApp
- OTFEE4MTestApp
- OTFEFreeOTFETestApp
- OTFEFreeOTFEDetectLinuxSettings
- OTFEPGPDiskTestApp
- OTFEScramDiskTestApp
- OTFEUnifiedTestApp
- OTFEDriveCryptTestApp
- OTFEStrongDiskTestApp
Licence and Legal Stuff
- I retain all rights to this software
- You are free to distribute this software, although no charge may
be
made
of any kind for doing so (that includes any fees for copying and/or the
distribution media)
- If you distribute this software, this file must be included with
it,
intact
and unmodified.
- Any software derived from any part, or using, any of these
components
and/or
their source code are to be released into the public domain with full
source code
freely available (Note: This condition may be lifted,
subject to negotiation; please
email
me for further information)
- Blah, blah, blah ... you use this software at your own risk ...
blah,
blah
... author takes no responsibility ... blah, blah ... (i.e. the usual
disclaimers,
etc. Do be careful with the TShredder though - test it out with junk
files
before trusting this component
Download
The latest version of this software can be downloaded
from: http://www.SDean12.org/Download.htm
Component Specific Notes and Issues
SDeanUtils
SDUGeneral
SDUCreateLargeFile
Files created with this function consist of the $00 character, repeated.
SDUFileIterator
Note that setting "FileMask" to a string including a path (e.g.
"C:\test\*.*"), the path will be stripped off and "Directory" will be
set to that value, while "FileMask" is set to just the mask ("*.*", in
this example)
SDUSystemTrayIcon
Usage of this component should be fairly obvious;
it provides full functionality with respect to creating, animating, etc system tray icons.
Note that balloon messages will not appear with early versions of MS
Windows which include an older shell (shell32.dll; e.g. pre-Windows
2000)
This component may be compiled with the either one of the following parameters for debug purposes:
GEXPERTS - Send debug output to the GExpers debug window. Requires GExperts to be installed; see http://www.GExperts.org/
SDUSYSTEMTRAYICON_DEBUG - Send debug output to file using SDULogger object (see source for output filename)
SDUSystemTrayIcon includes support for "minimize to system tray icon"
functionality.
In order to support "close to system tray icon" functionality, certain
minor
code changes are required to the form which this must apply for; see
comments in the "Min/Close to System Tray" test application source for
details; specifically those below the "Functions required for
close/minimize to system tray follow" source code comment. These
changes
are required in order to override the default operations carried out
when Close() is called, in order to minimise the form to the system
tray
instead of closing it.
Note that when MinToIcon is set on an SDUSystemTrayIcon, if WindowState
is set to wsMinimized on the form it is placed on, the normal
WidowState behavious will occur; i.e. the form is minimized to the
desktop; use Application.Minimize to minimize the application
completely.
Named Pipes
This software is currently under development - do not use.
SDeanSecurity
HMAC
This file contains a number of functions that may be
called to generate HMAC values using a number of different hashes
including SHA-1, MD5, SHA-512, Tiger - any hash that has an
implementation based on THash.
TMouseRNG
The height and width of this component should be set to a multiple of
(2 to the power of BITS_PER_SAMPLE)
e.g.
If BITS_PER_SAMPLE is 1, then the width and height should be a multiple
of 2
If BITS_PER_SAMPLE is 2, then the width and height should be a multiple
of 4
If you want the component to have BorderStyle=bsSingle, then the window
should be further increased in size by 2 pixels in both width and
height.
If the component is not sized as shown above, you risk biasing the RNG.
At both design time and runtime, if the control is dynamically resized,
then it will take care of the above rules and will automatically adjust
itself appropriately. This however, does have the effect that the
window may appear "jerky" when resized; especially for very large
values of BITS_PER_SAMPLE (say, 4 or 5).
TMouseRNGDialog
This is a standard dialog that uses TMouseRNG. It is designed to be
used in a similar manner as other standard dialogs supplied with Delphi
(e.g. TOpenDialogTo, TFontDialog).
To use:
- Set "RequiredBits" to the number of random bits of data that are
required (Note: This value gives the number of bits, not bytes of random data that will be
captured)
- Call Execute(...)
- If the return value of the call to Execute(...) is TRUE, then
call GetRandomData(...) to retrieve the random data captured.
TPasswordRichEdit
This is a standard TRichEdit component, but "PasswordChar" is exposed in the same manner as TEdit.
It should be noted that this control is intended for obscuring
passwords from visual inspection only. In the same way as passwords
entered into TEdit controls with PasswordChar set, passwords entered
into TPasswordRichEdit can be "lifted" using tools such as "Password
Spectator Pro".
AFSplitter
This is not a Delphi component, but library code intended to be used by applications.
This implementation reflects the AFSplitter as used by "cryptsetup";
the Linux LUKS encryption version, and as such it should be noted that
a single bit change in split data will only change up to <hash
algorithm's hash length> bits in the recovered data.
CryptoAPI
This is not a Delphi component, but library code intended to be used by applications.
This library is fairly limited, and currenly only supports those
interfaces required to generate random data.
Hash
No notes.
OTFE
The OTFE package is required
in order to use the other OTFE components; it holds the base class on
which they all depend.
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
Note to self (the following table is really only intended as a
development aid to the author):
The following table lists the buffer sizes used by the BestCrypt
Control Panel when carrying out various DeviceIOControl calls. The
sizes shown are in hex.
In all cases, unless otherwise indicated, the buffer in is exactly the
same as the buffer out (both in size, and memory location)
The "Driver Version" lists the version ID of the driver installed for
each combination of BestCrypt release version/OS combination. The
versions shown are:
- The version displayed in the "About BestCrypt" dialog by the
BestCrypt Control Panel
- The version ID returned by the DeviceIOControl called (in hex)
BestCrypt
version
|
OS
|
Driver
Version
|
DeviceIOControl:
0x72001
(Driver version)
|
DeviceIOControl:
0x72005
(Get mounted disks mask)
|
DeviceIOControl:
0x72009
(Get disk info)
|
DeviceIOControl:
0x7200d
(Mount disk)
|
DeviceIOControl:
0x72011
(Disconnect disk)
|
DeviceIOControl:
0x72051
(??? - called on create/mount)
|
DeviceIOControl:
0x72061
(???) |
v6.06
|
Windows Me
|
v2.31
(0x21F)
|
0x00b |
0x010
(old struct) |
0x1b8
(old struct)
|
0x1b8
(old struct) |
0x014 |
0x01c
in/0x200 out |
(this
one not checked for) |
v6.06
|
Windows
XP
|
v2.14
(0x20E)
|
0x00b |
0x010
(old struct)
|
0x1b8
(old struct)
|
0x1b8
(old struct) |
0x014
|
0x01c
in/0x200 out
|
(this
one not checked for) |
v6.07.2
|
Windows
Me |
v2.41
(0x229)
|
0x00b |
0x014
(new struct)
|
0x1b8
(old struct) |
0x1b8
(old struct) |
0x014 |
(this
one not checked for) |
(this
one not checked for) |
v6.07.2 |
Windows
XP |
v2.18
(0x212)
|
0x00b |
0x014
(new struct) |
0x1b8
(old struct)
|
0x1b8
(old struct) |
0x014 |
0x01c
in/0x200 out |
(this
one not checked for) |
v7.05
|
Windows
Me |
v2.41
(0x229)
|
0x00b |
0x014
(new struct) |
0x1b8
(old struct) |
0x1b8
(old struct) |
0x014 |
(this
one not checked for) |
(this
one not checked for) |
v7.05 |
Windows
XP |
v3.18
(0x312)
|
0x00b |
0x014
(new struct) |
0x1b8
(old struct) |
0x1b8
(old struct) |
0x014 |
0x01c
in/0x200 out |
(this
one not checked for) |
v7.10.4
|
Windows
Me |
v2.42
(0x22A)
|
0x00b
|
0x014
(new struct) |
0x1c0
(new struct) |
0x1c0
(new struct) |
0x014 |
(this
one not checked for) |
0x010 |
v7.10.4
|
Windows
XP |
v3.30
(0x31E)
|
0x00b |
0x014
(new struct) |
0x1c0
(new struct) |
0x1c0
(new struct) |
0x014 |
0x01c
in/0x200 out |
0x010 |
The v6.07.2 release used for these tests was downloaded from Jetico's
WWW site on the 24th
September 2004
The v7.10.4 release used for these tests was downloaded from Jetico's
WWW site on the 19th
September 2004
OTFECrossCrypt
function Version(): cardinal; override;
function VersionStr(): string; override;
Note that the version ID returned by these functions will only be valid
if a
CrossCrypt volume is mounted. This is due to weirdness in
CrossCrypt.
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.
OTFEFreeOTFE
Projects built with the conditional "FREEOTFE_DEBUG" defined will
generate additional debug information.
An additional test application "OTFEFreeOTFEDetectLinuxSettings" is
included for this component. This particular test app is not intended
for general use; it was a quick 'n' dirty tool to detect the settings
used in encrypting a Linux cryptoloop/dm-crypt volume, given the
volumes password. Requires conditional "DETECT_LINUX" defined during
compilation to use.
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)
OTFEScramDisk
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.
OTFETrueCrypt
property VersionHint: TTrueCryptVersionHint;
The TrueCrypt driver supplied with TrueCrypt v2.1 and v2.1a both identify as version 0x0210.
Normally, this would not be too much of a problem, however the cypher IDs used by the driver changed between these two versions
(Arrrrgh! It's a chore, but why can't people just update their version IDs when they update their software?!!).
As a direct result of this, when attempting to identify the driver
version, the component will determine the version ID returned by the
driver. In the case of v2.1 and v2.1a, the component will then proceed
to further check the filesize of the TrueCrypt executable, comparing it
against the filesize known to be in the different releases in order to
find out which of the two versions it's working with. Setting this
property to anything other than "tcvAuto" will skip this check, and the
version you supply will be assumed.
If the version is incorrectly set, then the names of cyphers returned
when getting volume information from the component may be incorrect,
although it should be noted that this is largely a cosmetic issue, and
has no impact on the rest of the component's functionality.
function Version(): cardinal;
This function will operate as per normal, however both TrueCrypt v2.1 and v2.1a will both be reported as 0x210.
function VersionStr(): cardinal;
This function will operate as per normal, however for
TrueCrypt v2.1 and v2.1a, because the component cannot differentiate
between these two versions:
If the TrueCrypt executable as one of two known filesizes, this
function will return either "v2.1" or "v2.1a". If the filesize cannot
be determined, or does not match a known executable filesize, then
"v2.1(???)" will be returned.
If you set the "VersionHint" property to something other than
"tcvAuto", then this filesize check will be skipped, and the version
will be assumed to be that which you specified.
function GetVolFileForDrive(driveLetter: char): string;
When getting filenames of mounted volumes under NT, the TrueCrypt 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 TrueCrypt 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 TrueCrypt 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 TrueCrypt 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 (TrueCrypt does not support mounting
volume files as readonly)
function Mount(volumeFilenames: TStringList; var mountedAs: string; readonly: boolean = FALSE): boolean;
The "readonly" parameter is ignored (TrueCrypt does not support mounting
volume files as readonly)
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).
OTFEDriveCrypt
A modified TOTFEScramDisk. Development shelved indefinatly due to lack
of DriveCrypt API documentation
OTFEStrongDisk
This component is currently under development. Current development is
based on API documentation for StrongDisk v2, pending API information
relating to later versions.
Development comment to self:
strdsk.dll for StrongDisk v3 appears to require Language.dll be loaded
- not was not the case in the earlier versions (v2.x?), it seems
- IS IT THE CASE WITH
STRONGDISK SERVER????
PKCS#11
PKCS#11 (Cryptoki) components
See "PKCS#11 Explorer" for an example of usage.
Credits
Full credit is given to Andy Jeffries at Kwik-Rite Development for
writing
the original TkrScramdisk, the basis of TOTFEScramDisk and the (now
redundant)
TEnhKrScramDisk.
Appendix A: OTFE Compatibility
The OTFE components have been tested for compatibility with the OTFE
system/versions described in the table below.
Note that this table is not exhaustive, and only lists those versions
which I have tested - other versions of the packages listed may very
well work, provided there have been no driver API changes within the
particular OTFE system.
OTFE
System
|
Version
|
Comments
|
FreeOTFE
|
v4.50
|
Fully supported.
|
v4.40
|
Fully supported.
|
v4.30
|
Fully supported.
|
v4.00
|
Fully supported.
|
v3.00
|
Fully supported.
|
v2.00
|
Fully supported.
|
v1.60
|
Fully supported.
|
v1.50
|
Fully supported.
|
v1.00
|
Fully supported.
|
v00.58
|
Fully supported.
|
v00.59
|
Fully supported.
|
BestCrypt
|
v6.06 |
Fully supported. |
v6.07.2 |
Fully supported. |
v7.05 |
Fully supported. |
v7.10.4
|
Fully supported. |
v7.12.01
|
Fully supported. |
CrossCrypt
|
v0.4.3
|
Fully supported, with minor
cosmetic issue (CrossCrypt is slightly weird in that it will not report
it's version number correctly unless it has one or more CrossCrypt
volumes mounted.)
|
E4M
|
v2.00
|
Fully supported. |
v2.02a
|
Fully supported. |
PGPDisk
|
v6.0.2i
|
Fully supported (Note: This is
the version
of
PGPDisk supplied with freeware version of PGP v6.0.2i) |
ScramDisk
|
v2.02g
|
Fully supported. |
v3.xx
|
Fully supported. |
TrueCrypt
|
v1.0
|
Fully supported.
|
v2.0
|
Fully supported. |
v2.1
|
Fully
supported, with minor
issue if the version ID cannot be determined (TrueCrypt v2.1 and v2.1a
both identify themselves as version 0x0210 - but the cipher IDs changed
between these versions! This issue has no effect on security, and can
be easily eliminated if you use the component correctly)
|
v2.1a
|
Fully supported, with minor
issue if the version ID cannot be determined (TrueCrypt v2.1 and v2.1a
both identify themselves as version 0x0210 - but the cipher IDs changed
between these versions! This issue has no effect on security, and can
be easily eliminated if you use the component correctly) |
v3.0a
|
Fully supported.
|
v3.1
|
Fully supported.
|
v3.1a
|
Fully supported.
|
Appendix B: Shredder overwrite algorithms
The following overwrite algorithms are implemented by TShredder:
Note: Overwrite passes which should be followed by a verification read
to ensure written data is actually written out correctly are indicated
with "[*]". This implementation does not currently carry out verify reads on written data.
Zeros
Storage is overwritten a user specified number of times with 0x00s
Pseudorandom data
Storage is overwritten a user specified number of times with pseudorandom data
RCMP (DSX)
Royal Canadian Mounted Police DSX triple overwrite
Overwrite pass |
Data |
1 |
0x00 [*] |
2 |
0xFF [*] |
3 |
"1.40YYYYMMDDHHMM" repeated (DSX version followed by date/timestamp) [*] |
NISPOM US DoD 5220.22-M (E)
Overwrite pass |
Data |
1 |
Any character (0x00) |
2 |
It's complement (0xFF) |
3 |
PRNG data [*] |
NISPOM US DoD 5220.22-M (ECE)
Overwrite pass |
Data |
1 |
Any character (0x00) |
2 |
It's complement (0xFF) |
3 |
PRNG data [*] |
4 |
A single character (0x7F) |
5 |
Any character (0x00) |
6 |
It's complement (0xFF) |
7 |
PRNG data [*] |
Gutmann
Overwrite pass |
Data |
1 |
PRNG data |
2 |
PRNG data |
3 |
PRNG data |
4 |
PRNG data |
5 |
$55, $55, $55 |
6 |
$aa, $aa, $aa |
7 |
$92, $49, $24 |
8 |
$49, $24, $92 |
9 |
$24, $92, $49 |
10 |
$00, $00, $00 |
11 |
$11, $11, $11 |
12 |
$22, $22, $22 |
13 |
$33, $33, $33 |
14 |
$44, $44, $44 |
15 |
$55, $55, $55 |
16 |
$66, $66, $66 |
17 |
$77, $77, $77 |
18 |
$88, $88, $88 |
19 |
$99, $99, $99 |
20 |
$aa, $aa, $aa |
21 |
$bb, $bb, $bb |
22 |
$cc, $cc, $cc |
23 |
$dd, $dd, $dd |
24 |
$ee, $ee, $ee |
25 |
$ff, $ff, $ff |
26 |
$92, $49, $24 |
27 |
$49, $24, $92 |
28 |
$24, $92, $49 |
29 |
$6d, $b6, $db |
30 |
$b6, $db, $6d |
31 |
$db, $6d, $b6 |
32 |
PRNG data |
33 |
PRNG data |
34 |
PRNG data |
35 |
PRNG data |
Appendix C: Version History
- v2.83 - [XXth XXXXXXX XXXX]
- Package: SDeanUtils
- Changes to improve support for Delphi 7
- Combined SDUURLLabel.pas (TSDUURLLabel) and SDUFilenameLabel.pas (TSDUFilenameLabel) into SDUStdCtrls.pas
- Split graphics routines out from SDUGeneral.pas into SDUGraphics.pas
- Add routines to flip, rotate and grayscale TBitmaps (in SDUGraphics.pas)
- Changed icon overlay routines to improve code when used with standard Windows icons (e.g. loaded in from shell32.dll)
- Package: OTFEFreeOTFE
- Changes to improve support for Delphi 7
- v2.82 - [1st January 2009]
- Package: SDeanUtils
- Added SDUParamSubstitute(...) function SDUGeneral to substitute %1, %2, %3, etc in string for parameters in passed in array.
- Changed a number of display texts to use SDUParamSubstitute(...) instead of Format(...)
- Added TSDUFilenameEdit (combined TEdit and browse button)
- Added TSDUFileDropPanel
- Added TSDListView
- Various other minor changes
- Package: SDeanUtils
- Changed TShredder API to return an enum instead of magic numbers(!)
- Corrected fault causing shredder to fail when overwriting items over 4GB under some circumstances
- Package: OTFEFreeOTFE
- Updated to support FreeOTFE v4.50
- v2.81 - [20th November 2008]
- Package: SDeanUtils
- Added SDUi18n unit for translation, etc
- Added "value and units" component; TSpin64Units
- Various other changes
- Package: OTFEFreeOTFE
- Updated to support FreeOTFE v4.40
- v2.80 - [27th October 2008]
- Package: SDeanUtils
- Corrected estimated time remaining display on progress dialog
- Corrected fault causing SDUGetFileSize(...) to return the incorrect filesize when used on files greater than 4GB
- Package: SDeanSecurity
- Extended PKCS#11 library to include support for more PKCS#11 functions
- Package: OTFEFreeOTFE
- Updated to support FreeOTFE v4.30
- v2.75 - [26th June 2008]
- Package: SDeanUtils
- Added support for MS Windows x64 functions
- Added functions for getting partitions/disk geometry information and displaying partition information graphically
- Added support for displaying estimated time remaining on progress dialog
- Added TSDUStringGrid (enhanced TStringGrid with column resizing and sorting)
- Renamed SDUProgress_U to SDUProgressDlg, TSDUProgress_F to TSDUProgressDialog and added tool palette icon
- Package: SDeanSecurity
- Added PKCS#11 library support
- Added extra functionality to TShredder to support multiple other overwrite algorithms, including RCMP and US DoD 5220.22-M
- Added estimated time remaining to shredder progress dialog
- Package: OTFEFreeOTFE
- Added support for FreeOTFE v3.00 and v4.00
- Password entry dialog is now only dismissed when the volume is
successfully mounted, or the user cancels the mount when mounting
a FreeOTFE volume
- Removed short password warning when mounting a LUKS volume with less than 20 characters in its password
- Added LRW and XTS cypher mode support
- v2.60 - [18th Match 2007]
- Package: OTFEFreeOTFE
- Added support for FreeOTFE v2.00
- Added Windows Vista support
- Added support for (nonstandard) LUKS volumes created with Tiger and Whirlpool hashes
- Package: SDeanUtils
- Added wrapper for Windows Vista's TaskDialog API
- Added support for Windows Vista detection
- Added SDUXOR function to XOR strings together
- Extended SDUProgress dialog to include status text
- Added test application for SDUProgress dialog
- Package: SDeanSecurity
- Added HMAC (implemented according to RFC 2104 specification)
- Package: Hash
- Updated THash components to make more logical, object oriented (OO),
easy to use, to extend flexability, add const correctness and to open up lower level
functionality.
Note:
Users of previous versions of the THash components will have to
add the "HashValue_U" into their "uses" clause, and may need to rebuild
and reinstall some of the SDeanComponents packages. (i.e. Remove the
packages from Delphi, exist Delphi, rebuild and reinstall). Some older
methods have been marked "depreciated", though can still be used.
- Added additional test/demo applications for the THash package,
and rationalised the test vectors file to allow easier verification.
- Added fixes for Borland Delphi 2006 for Windows Vista
- v2.54 - [28th January 2006]
- Fixed minor bug that prevented FreeOTFE from properly dismounting volumes under certain conditions.
- v2.53 - [8th January 2006]
- Updated email address from sdean12@softhome.net to sdean12@sdean12.org
- Package: SDeanUtils
- Added SDUSimplePieChart(...) and test application
- Package: OTFEFreeOTFE
- Added ability to resize the driver control dialog
- Corrected fault that prevented LUKS partitions from being mounted
- Corrected errors that were displayed when a non-admin attempted to access the driver control dialog
- Added support for LUKS volumes which use ESSIV, subject to the
hashlength of the ESSIV hash generating the same number or less bits as
the cypher used. Note: Although LUKS can create volumes with ESSIV -
ESSIV is not part of the LUKS specification!
- v2.52.00 - [20th November 2005]
- Package: OTFEFreeOTFE
- Updated documentation to reflect fact that FreeOTFE component supports FreeOTFE v1.00.00
- Changed red warning panels with white text to clBtnFace
colored panels with red text; required as under Windows XP Themes the
red panels were displayed in grey, giving white text on grey background.
- v2.51.00 - [17th October 2005]
- General
- Switched from Delphi 5 to Delphi 7
- Package: SDeanUtils
- TSDUTaskTray renamed to TSDUSystemTrayIcon
- Added minimise/close to system tray to SDUSystemTrayIcon
- SDUEnableControl now colours disabled THotKeys correctly (why couldn't Microsoft just do this?!)
- SDUInstalledOS changed to return an enumerated type
- Package: OTFETrueCrypt
- Minor revision letter ("a") now correctly appended onto end of VersionStr() when TrueCrypt v3.xa is installed
- Fixed
bug that sometimes prevented TrueCrypt volumes from being mounted
- Implemented additional TrueCrypt v3.1+ shell notification when volumes are mounted/dismounted
- Corrected bug with broadcast message when a volume is mounted/dismounted
- v2.50.00 - [31st August 2005]
- Added SDUEndianIntegers
- Added SDUTaskTray
- Modified
SDUGeneral.SDUEnableControl to automatically enable/disable controls
that have FocusControl set to the one being enabled/disabled (e.g. if
you have a TEdit with a label next to it with an accelerator key and
FocusControl set to the TEdit, you can disable both by simply disabling
the TEdit)
- Added Delphi implementation of Clemens Fruhwirth's AFSplitter software.
- Added hex dump of entered data for TPasswordRichEdit test app.
- Package: OTFEFreeOTFE
- Added support for encrypted CDs/DVDs
- Added support for encrypting disk devices, as well as
partitions (i.e. You can now encrypt an entire disk, not just
partitions held on it)
- Added support for cryptlib (cl32.dll) as an RNG, if installed
- Added support for Linux LUKS volumes
- Removed redundant warnings when run by a user without Administrative privileges
- v2.25.00 - [28th May 2005]
- Package: OTFEFreeOTFE
- Added progress dialog when creating volume files.
- Fixed bug in sample application that caused incorrect data to be written to file during the cypher testing.
- Updated package version ID to 00.57.00
- Updated to support FreeOTFE v0.57.00
- Support for FreeOTFE v0.50.00 and previous widthdrawn, though older volumes may still be mounted.
- Added warning to user if an attempt is made to use a volume file created under a later version of FreeOTFE
- Corrected fault with Windows XP/Windows 2000 differing
QueryDosDevice behaviour that sometimes prevented FreeOTFE listing all
cyphers/hash algorithms installed
- Removed redundant warnings when attempting to stop/uninstall drivers while no volumes are mounted
- Fixed
bug found in volume creation wizard when creating a new volume and
storing the volume's CDB separatly. (The CDB file wasn't being created
before the CDB was written to it, causing an "Unable to write critical
data block" error.)
- ESSIV - better support; added user selectable cypher for IV generation with linux volumes
- Fixed bug found when creating a new volume and storing the
volume's CDB separatly. (The CDB file wasn't being created before the
CDB was written to it, causing an "Unable to write critical data block"
error.)
- Package: SDeanSecurity
- Shredder overwrite free space revamped to significantly
improve progress dialog's responsiveness wrt cancelling and displaying
progress.
- Package: SDeanUtils
- SDUCreateLargeFile(...) and test application added to
SDUGeneral to give simple function to create (potentially large) files
on demand.
- v2.21.00 - [6th April 2005]
- v2.20.00 - [4th April 2005]
- Package: SDeanUtils
- Changed SDUURLLabel so that the mouse cursor changes to the standard "hand" icon when hovered over the component.
- Added test application for SDUURLLabel
- Added TSpinEdit64 component - a 64 bit version of the TSpin component that comes supplied with Delphi
- Added SDUParseASCIIToData(...) to SDUGeneral
- Package: SDeanSecurity
- Added "TPasswordRichEdit" control.
- Package: OTFEFreeOTFE
- Setting TOTFEFreeOTFE components to Active when the driver is not installed/running will raise an exception
- Added support for "portable mode drivers"
- Rewrote most of the "Driver Control" dialog
- Fixed
bug that caused extra newline to be added to user's password when
creating a new FreeOTFE volume via the volume creation wizard
- Added portable mode
- Starting portable mode will cause the CWD will be checked
for "*.sys" files, which will be treated as FreeOTFE device drivers,
installed and started.
- Stopping portable mode will stop and uninstall all portable mode drivers
- User passwords are no longer displayed; they are blanked out with "*" characters
- Added option to backup and restore the CDB from volumes with a CDB
- Added option to dump critical data block to a human readable file
- Added support for keyfiles
- Added option to change user's password/salt length/drive letter
- Note: Changing any of the above details will update the CDB to the latest version
- Fixed significant bug that caused VolumeFlags to be read back from the volume incorrectly
- In order to continue support for these v1 CDBs, they will
still be read in incorrectly, but in new v2 CDBs, they are handled
correctly.
- To fix volumes which old version CDBs, just change your password; this will update the CDB used to a v2 CDB
- HIGHLY RECOMMENDED you change your password to do this, in order to ensure future-compatability
- Added option to store a volume's CDB in a separate keyfile
instead of including it at the start of the volume file when creating a
new volume
- Driver control dlg now indicates state of drivers - making it a lot clearer what's happening!
- Added ability to save settings when mounting linux volumes
- Package: OTFECrossCrypt
- Setting TOTFECrossCryptcomponents to Active when the driver is not installed/running will raise an exception
- Package: OTFETrueCrypt
- Package added to allow interfacing with the TrueCrypt OTFE system.
- Package: OTFEUnified
- Removed bug causing the partition select prompt to be shown
once for every OTFE system which supports partition mounting, when
attemping to mount a partition.
- v2.01.00 - [11th October 2004]
- Bugfix relating to mounting FreeOTFE drives with salt.
Grrrrrrr!
- v2.00.00 - [10th October 2004]
- Package: Hash
- Added Tiger hash algorithm
- Updated SDHash demo app to include Tiger hash algorithm
- Package: SDeanSecurity
- Added CryptoAPI library
- Cleaned up the TShredder component - API changed slightly as
well
- Added TMouseRNGDialog for a common TMouseRNG dialog
- Package: OTFE...
- Added FreeOTFE OTFE component
- BestCrypt OTFE component updated to reflect changes in newer
versions
- Added CrossCrypt OTFE component
- Added DriveCrypt OTFE component (development shelved)
- Added StrongDisk OTFE component (still under development)
- Updated TOTFEUnified component to prompt user for which
OTFE system is to be used when mounting a volume which could
potentially be mounted by more than one OTFE system
- v1.85.00 - [29th May 2004]
- Added "Title" property to hashes
- Updated SDHash demo app now uses updated SDUFileIterator
- Updated SDHash demo app to accept /rmdXXX and /rmd-XXX in
addition to existing command line options
- Added "THashAlgUnified" component
- Updated CrossCrypt component:
- Updated CrossCrypt component: Fixed minor bug that caused
the
"*"s obscuring the user's password to reveal the characters being typed
in after "multiline" was selected, and then deselected.
- Updated CrossCrypt component: Modified volume creation
dialog
to prevent users from entering the volume filename directly. Users must
now specify the filename, and full path to it by clicking the browse
("...") button.
- Updated CrossCrypt component: DoMount fixed so volume
size
passed in is now an int64, not integer
- Updated TShredder to use latest SDUFileIterator
- Fixed bug with resizing TMouseRNG components
- Added "SDUGetUsedDriveLetters()" and
"SDUGetUnusedDriveLetters()" functions
- Fixed fault in SDUFileIterator which caused it to return
"."
and ".." directories when IncludeDirNames was TRUE.
- Updated SDUFileIterator properties:
- "IncludeSubDirs" now "RecurseSubDirs"
- "SupressDotDir" removed (superceded by
"OmitStartDirPrefix")
- "OmitStartDirPrefix" added to prevent "Directory"
being
prepended to returned file/dirnames
- v1.80.00 - [7th March 2004]
- Package: SDeanSecurity
- Added MouseRNG visual component (v0.8.0)
- v1.75.00 - [28th February 2004]
- Now at version v1.1.0
- Added SHA-256, SHA-384, SHA-512 hash algorithms
- Updated SHA-1 implementation to be consistant with the
above
SHA implementations
- SDHash demo app updated to v2.0
- Now at version v1.1.0
- Updated to support BestCrypt v7
- Package initially added to SDeanComponents
- Now at version v1.1.0
- Added SDUURLLabel component
- Added "SDUPrettyPrintHex" to SDUGeneral
- v1.55.00 (5th November 2001)
- Package: SDeanUtils
- Now at version v1.0.5
- SDUBase64 unit added to perform base64 encoding/decoding
(e.g.
MIME/UUENCODE)
- SDUDirIterator modified to give the option of returning
directories
iterated
over, as well as the files they contain
- SDUGeneral - bugfix: SFN->LFN and LFN->SFN filename
converter
fixed so
they work with directories as well.
- SDUGeneral - added functions:
- SDUSplitString - Split a string into two parts, given a
charactor to
split
on
- SDUHexToInt - Function to convert a hex number into an
integer. Yeah,
it's
a bit noddy, but can be useful :)
- v1.51.00 (10th August 2001)
- Added "Licence and Legal" stuff section to README.TXT
- v1.50.00 (1st August 2001)
- All packages switched to Delphi 5
- Package: SDeanUtils
- Now at version v1.0.2
- Added support for passing a dir/filename to the
TSDUFileIterator as a
filemask.
- SDUProgress_F - added support for accepting int64 as well
as
integers
- SDUGeneral - bugfix wrt calling SDUConvertSFNToLFN with a
UNC
path
filename
- Package: Hash
- Now at version 1.0.0; package taken out of beta
- Added in recursive hashes into the "HashDemo.exe" test
application
- ClearHash(...) added to cleardown a hash/initialize it to
zero
- Package: OTFE
- Note: All OTFE packages now have full support for
recursively
mounted
OTF
volumes (where possible)
- Package: OTFEBestCrypt
- Now at version v1.0.0
- Updated to support BestCrypt's "half dismounting". When a
volume can't
be dismounted as it's in use, BestCrypt "half dismounts" the volume,
and
it can't be remounted under any other drive letter until it's mounted
again
under the original drive letter, and dismounted properly. "Half
dismounting"
a volume also prevents BestCrypt from mounting any other volume as that
drive letter.
- Package: OTFEScramDisk
- Now at version v2.0.0
- Upgraded to better support ScramDisk v3
Bugfix: when entering passwords via the red screen, pressing cancel
was effectivly the same as entering a set of passwords (i.e. it didn't
act as though the user had cancelled)
"VolumeName" has been removed from TSlotInfo - call
GetVolumeInformation
if you need this information
- TSlotInfo now has the following changes:
- added "softReadOnly" - only applies to the ScramDisk
(v3
and above)
driver
- set if the volume was mounted as readonly by information in the
header
field
- added "mediaReadOnly" - set to TRUE if the volume was
mounted as
readonly
because the media on which the volume resides is readonly/the volume
file's
file attributes are readonly
- added "viaSKFFile" - set to TRUE if the volume was
mounted
via an SKF
file
- added "partitionRemovable" - only applies to the
ScramDisk
(v3 and
above)
driver - set if the volume is a partition that is mounted on removable
media
- added "wavFileBits" - set to either 4 or 8, depending
on
how many bits
out of 16 are used when a WAV file is mounted
- added "bfs" (Bypassed File System) - only applies to
the
ScramDisk (v3
and above) Windows 9x/Me driver
- added "partitionName" - under NT/2000, this will be
filled
in with the
device ID of the partition. Under w9x/wMe this will be the vendor ID of
the HDD the partition is on
- changed "FileName" - This will only be filled in if the
volume is
stored
within a file (WAV/SVL) and not a partition
- Various improvements and optimisations (incl faster
mounting
due to not
writing to volume)
- Calls to "GetVolFileForDrive" will no longer return
"<partition>"
for
mounted partitions, but will instead return the device ID of the
partiton
Note: Due to a limitation in the ScramDisk (w9x) driver, although
readonly
will be correct, softReadOnly may be TRUE if the media the volume was
stored
in was readonly (e.g. attrib +r on a SVL file), even though the
volume's
header information was set to read/write
- Note that "summer" encrypted volumes cannot be mounted
with
this
component.
I have no immediate intentions to add support for mounting these
volumes,
unless anyone really wants it...
- Note that under NT, this component will probably fail on
drives with
more
than 256 partitions. This is due to it having a hardcoded limit of 256
PARTITION_INFORMATION records being returned from the ScramDisk call
with
DRIVE_LAYOUT_INFORMATION to get drive information and partition
information.
Not particularly likely that anyone will hit this limit in the
immediate
future, but if anyone does, let me know!
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.
- Added SetEnableVolumeDeletion(...) function to allow the
user
to turn
on/off
the ScramDisk driver protection for ".SVL" files.
- Package: OTFEE4M
- Now at version v1.0.2
- Usability improvement, if there is no default drive, then
neither drive
A: nor B: will be selected by default
- Package: OTFEPGPDisk
- Package: OTFEUnified
- v1.00.00 (16th January 2000) - Initial release
Email me at: sdean12@sdean12.org
Return to the main page