Version 3.1.7 - 23.02.2002
==========================

Some minor internal changes/additions and a more important one: OnGetPassphrase
for TPGPEncode now provides passphrase checking for the selected signing key and
passes the corresponding BadPassphrase parameter.


Version 3.1.6 - 01.02.2002
==========================

Two bugs with verifying detached signatures via TPGPDecode have been fixed.


Version 3.1.5 - 30.01.2002
==========================

A rather old bug in TPGPEncode causing access violations when using methods
without signing and some more bugs in TPGPDecode and TPGPKeysGenerate when using
OnGetPassphrase have been fixed.


Version 3.1.4 - 27.01.2002
==========================

- This version includes some more bug fixes regarding the TPGPSetKeyProps
methods DoKeyPassChange and DoKeyRevoke and implements OnChangePassphrase resp.
OnGetPassphrase events.

- The TMinPassLen and TMinPassQual types have been extended to include zero as
the lowest value (applying to TPGPSetKeyProps and TPGPKeysGenerate): Please
absolutely read the warning before using this feature!

- Another bug with the BadPassphrase parameter in OnGetPassphrase of TPGPDecode
has been fixed.

- OnGetPassphrase of TPGPEncode now provides a Cancel parameter to interrupt the
encoding process.

- And finally some internal enhancements have been implemented.


Version 3.1.3 - 20.01.2002
==========================

Some internal enhancements, a bug fix in TPGPSetKeyProps (to correctly retrieve
the 64bit hex IDs) and a new property for retrieving user ID dependent
validities from user ID lists (see KeyPropStructs) have been implemented. You
can now also turn off the internal initialization failure mechanism by enabling
a compiler switch in pgpBase.pas.


Version 3.1.2 - 12.01.2002
==========================

Two changes/additions:

- If a component is owned by a Form the component's ParentHandle property (if
any) will automatically be set to the form's handle, thus making any PGP dialogs
act as modal windows on top of the owning form.

- A new method called SetCipherAlgPrefs has been added to TPGPKeysGenerate
(including the necessary changes to pgpPubTypes.pas and pgpOptionList.pas),
which provides the option of specifying a particular order of preferred cipher
algorithms for newly created keys (please pay attention to the restrictions of
this feature).


Version 3.1.1 - 30.12.2001
==========================

A PGPFreeGroupSet() bug (the PGP SDK doesn't check groups list pointers for
nil like it usually does with pointers) causing an access violation when no
groups file exists has been fixed.


Version 3.1.0 - 22.12.2001
==========================

Some more important changes have been applied with this version:

- The standard format of hex IDs has been extended to their 64bit
representation. Especially if you've been using the KeyPropsList.Strings[Index]
property you may have to change some of your code as it now provides the long
version, whereas KeyPropsRec.kHexID still contains the 32bit string. Altough you
may still use short hex IDs it is recommended to change for the longer ones. In
case you need to abbreviate these (for displaying to users, f.e.) you may use
the utility function GetShortHexID.

- Retrieving key property records of a key properties list has been simplified a
lot (I really wish I had figured this out earlier ...): You can now simply use
KeyPropsList.KeyProps[Index] like Strings[Index] or Objects[Index] with Delphi's
StringLists. This property is read-only.

- Access to PGP groups files has been implemented requiring a new unit called
pgpGroups: If a groups file exists it's groups are now displayed in the
recipients dialog of PGPEncode, and another property called GroupsList has been
added to TKeyPropsList, which enables you to retrieve the groups' names,
descriptions and hex IDs via TPGPGetKeyProps.GetGroupHexIDs.

- A bug in TPGPPreferences.DoSetPreferences with PGP 7.X.X has been fixed where
the default key preference didn't get set properly.

- Further minor enhancements and fixes.


Version 3.0.4 - 19.11.2001
==========================

A VersionString bug with PGP 6.5.X has been fixed.


Version 3.0.3 - 06.11.2001
==========================

A new property has been added to PGPEncode and PGPKeyExport: VersionString,
which takes the version string generated with armored PGP data. If you don't
assign your own string it will contain the standard PGP SDK version string:
"PGPsdk Version Version X.X.X (C) 1997-XXXX Network Associates, Inc.", where
X.X.X is the respective version number. Assigning a string in one of the
components will set it for the other one as well. NB: The string get's truncated
if exceeding 255 chars, and long strings might cause decoding problems in
special situations (email plugins might force quoted-printable encoding to wrap
the long line if containing more than 76 chars, f.e.).



Version 3.0.2 - 25.10.2001
==========================

A small fix now truely lists all known keys in PGP's decryption passphrase
dialog, and a workaround for avoiding a strange kPGPError_BadIntegrity error
when analysing certain PGP data has been implemented. It only occurs after
skipping further processing of these data (seems to be related to using RSA
V4 keys).

Another bug has been fixed which didn't move the associated KeyPropsRec with a
KeyPropsList item, and you don't get an error any more when trying to sign data
without using PGP's signing passphrase dialog and no default key defined.

PGPEncode and PGPDecode now return kPGPError_CantOpenFile instead of
kPGPError_FileNotFound if no valid output file has been specified.


Version 3.0.1 - 13.10.2001
==========================

Writing of keyring changes to disk and notifying about them (see "Messages" in
the help file) with PGP 7 have been fixed, a key filtering bug regarding user
IDs has been removed, and the components have been modified (see
KeyPropTypes.pas) to work with Delphi 6, too.


Version 3.0.0 - 07.10.2001
==========================

PGP 7 modifications now make the components work with both versions 6.5.X and
7.X.X: Due to the massive changes of keyring handling this unfortunately results
in some very ugly coding which really makes it difficult to fully understand the
source code without looking up each and every function declaration in the
translated header units - but in general it works well except for some parts
depending on the PGP client and support libraries (PGPcl and PGPsc) of which the
sources aren't available any more. Other important changes in PGP 7.X.X are the
availability of new cipher algorithms (AES and Twofish) and the capability of
adding (DH) subkeys to RSA keys created with this version (so-called V4 keys).
Some minor bugs have also been fixed.


Version 2.0.8 - 18.08.2001
==========================

A new utility function called "WipeFiles" has been added and a warning to
ReadMe.txt about problems with Delphi if PGP 6.5.X can not be found.


Version 2.0.7 - 04.08.2001
==========================

- Fixed a bug in "TPGPDecode" which discarded output if the last part of an
encoded package didn't actually contain any raw data.

- Added "Armor" (for detached signing) resp. "MIME" (for clear signing) checkbox
to the passphrase dialog in "TPGPEncode" and enabled keyboard shortcuts for the
checkboxes in it's key selection dialog.


Version 2.0.6 - 28.07.2001
==========================

- Some more possible Longbool problems have been fixed (sorry, see 2.0.5).

- The property "EncryptToSelf" has been added to "TPGPEncode" to switch the
option of automatically including the signing (or default) key with public key
encryption.


Version 2.0.5 - 22.07.2001
==========================

- Different handling of Longbools depending on the respective Delphi version led
to some invalid error codes in "TPGPDecode" ("OnGetAnalysis" and
"OnGetPassphrase") with versions > 2.X.

- You can now use alternative keyrings instead of PGP's defaults by setting
"AltPubKeyring" and "AltPrivKeyring" in "TPGPPreferences".


Version 2.0.4 - 14.07.2001
==========================

- Change of the keyserver functions implementation and fix of a bug causing
these to abort unexpectedly.

- Clear signing data didn't return with the correct SignKeyID after selecting a
non-default signing key via the passphrase dialog.


Version 2.0.3 - 18.06.2001
==========================

More bug fixes:

- "OnGetPassphrase" in "TPGPEncode" didn't work with only a single signing
key on the keyring.

- Error messages didn't get retrieved when "OnFailure" wasn't assigned.


Version 2.0.2 - 17.06.2001
==========================

Some memory leaks in "TPGPDecode" have been fixed and another interface unit
("pgpKeyServer") has been added.


Version 2.0.1 - 12.06.2001
==========================

A bug fix and another utility function have been added:

- "DoKeyPassChange" in "TPGPSetKeyProps" now correctly changes not only the
master key's but also any subkey's passphrase on DH/DSS keys.

- The new "ValidPassphrase" function checks a passphrase against the key
provided.

- Some error messages will now alert you about missing PGP libraries and the
required version.


Version 2.0.0 - 04.06.2001
==========================

This set of components now only supports PGP versions 6.5.X and later. The whole
code has been completely rewritten to provide a direct interface to PGP, so
their development doesn't rely on third party libraries any more. It gives more
flexibility in using internal features of PGP and makes several jobs easier to
do than before. In addition there are now standard dialogs available for all
components, which is especially valuable for retrieving passphrases as they have
several important security features. And a small bug has been fixed: Time stamps
haven't been reported correctly (due to summertime/wintertime changes) when
converted to local timezones. The most pronounced component changes are listed
below, for more details see the respective parts of this help file:

"TPGPPreferences": The 'old style' methods "DoGetPreference/DoSetPreference"
have been removed, but single preferences can still be retrieved or set using
"DoGetPreferences/DoSetPreferences" with the respective preference property set.

"TPGPKeyServer": This is a new component providing methods for retrieving keys
from and sending keys to the default keyserver defined in PGP's Servers
preferences. It also contains methods for retrieving and changing this default
server preference entry.

"TPGPGetKeyProps": The methods "DoGetKeyPropUserID", "DoGetKeyPropSig",
"DoGetKeyPropRevokationKey", "DoGetKeyPropADK" have been removed, their main
functionality being integrated into the new "DoGetKeyProps" method.
"DoGetKeyRingToFile" has been completely abandoned. "DoGetKeyProps" and
"KeyIsOnRing" can now both search for user or hex IDs and return the number of
matching keys as result. As the "KeyProps" structures have changed again a
couple of convenience methods have been added to retrieve key properties - and
you may define key filters and key ordering before calling "DoGetKeyProps" or
"Update". Finally a new handling has been introduced for automatically updating
the ID lists which even enables notification about changes applied by PGP
itself.

"TPGPSetKeyProps": A new "DoKeyRevoke" method has been added.

"TPGPKeySign" and "TPGPKeySigRemove" are not available any more (did anyone
really use them?).

"TPGPKeysGenerate" doesn't use a separate thread any more for showing progress
as PGP itself provides an event giving status information about the generation
process and enabling users to cancel it.

"TPGPKeyImport" and "TPGPKeyExport": Some minor changes have been applied to key
selection and data handling.

"TPGPEncode": Besides integrating the "DetachedSign" functionality lots of
changes have been applied making it easier to use the different encoding methods
with a less complex property handling. And an "OnShowProgress" event has been
added passing the bytes processed so far depending on the setting of a
"ProgressInterval" property.

"TPGPDecode": Besides integrating the "DetachedSigVerify" and the "Analyse"
functionality some properties have been added to provide more decoding options
and cover all PGP-encoded data including keys. It now provides "for your eyes
only" capabilities, can use PGP's signature logging window, and an
"OnShowProgress" event has been added passing the bytes processed so far
depending on the setting of a "ProgressInterval" property.


Version 1.3.2 - 04.10.2000
==========================

Just added a missing key properties flag and it's
respective "TKeyRec/TKeyProps" entries: "Expired".


Version 1.3.1 - 27.08.2000
==========================

Important bug fix: Due to the PChar() type casting of pchars returned by SPGP's
functions your applications gathered lots of waste memory during execution which
was only released when closing the application. This has been fixed now by
adjusting the returned strings to their real length using the SetLength()
function.

And another problem occuring in Delphi 5 (at least) has been solved: "var
ADKeyCount" for the imported function "spgpKeyPropADK" and "var RevKeyCount" for
the imported function "spgpKeyPropRevocationKey" had to be declared as Longint
to prevent compiler errors.


Version 1.3.0 - 08.08.2000
==========================

New features available since SPGP version 2.5.0.0:

NB: The most important changes first, as some modifications have been applied
which will affect applications you may have written using former versions. Steve
Heller is introducing a new, more flexible and extensible way of setting options
which can gain you a major improvement of performance. So far it has only been
applied to the SPGP functions KeyRingID, GetKeyProps and two new functions, but
it will be implemented for all applicable functions with his upcoming version 3:
bit flags (see http://www.oz.net/~srheller/spgp/funcref/glossary.html). Using
the components you will not have to deal with them directly, as they have been
converted to option sets. If you still want or need to keep compatibility to
former versions you may set the global flag "CompatibilityMode" to true.

Nevertheless there are some changes you may have to apply to your applications:
- Two record fields in "TKeyRec" and "TSigRec" have been renamed (still
containing the same data, though).
- The property AllProps in "TPGPKeyImport" has been removed (set to true by
default).
- The properties Trust and Validity have been removed from "TPGPKeySign" as they
still are not implemented in SPGP.
- To all components using passphrases (except for "TPGPSetKeyProps") a new
OnWipePassphrase event has been added to retrieve the passphrase before it is
wiped (which hasn't been done before).
- OnGetPass for DoKeyPassChange in "TPGPSetKeyProps" now additionally passes
MinPassLen and MinPassQual.

1. "TPGPGetKeyProps" has been modified to use the new flags feature. The
"Update" method can now retrieve nearly all available information about a
keyring's keys at once without having to call "DoGetKeyProps" for every single
key, just by setting the desired options. "DoGetKeyProps" has accordingly been
changed to only get the properties you have selected instead of providing a
fixed list (like in compatibility mode).
Some new utility functions have been added to retrieve these data without
hassles - see "KeyRec", "KeyProps" and "ExtractKeyProps" for changes. The new
methods "DoGetKeyPropADK" and "DoGetKeyPropRevokationKey" (similar to
DoGetKeyPropUserID) will provide more detailled information about sub-keys added
to DH/DSS keys (no compatibility mode available).

2. "TPGPreferences" provides two new methods besides the old single parameter
functions: Using the flag feature you can now choose which options to get or set
at once without having to call a function for every single preference. And the
last missing preference has been added: PGPPref_GroupsFile.
Furthermore a new standard dialog has been added here: "ShowPrefsDialog" will
show PGPkey's preferences dialog with the tab control page at it's front that
you select by setting the property "PrefsPage" (available for all PGP versions
supported by SPGP).

3. And finally I've added the new "TPGPKeysGenerate" component, though Steve's
reference still characterizes them 'as experimental and subject to change': They
provide four methods for creating RSA keys, DSA (sign-only) keys, DH (encrypt)
sub-keys and the complete DH/DSS key pair at once. Please read the instructions
carefully.

4. All components changing key rings or keys (TPGPKeysGenerate, TPGPKeyImport,
TPGPSetKeyProps, TPGPreferences) now provide the property "GetKeyProps" which
enables you to have your user ID and hey ID lists updated automatically.


Version 1.2.4 - 29.07.2000
==========================

Only fixed two minor bugs in SPGP.PAS: Changed parameters "ADKeyCount" for
function "KeyPropADK" to "var ADKeyCount" and "RevKeyCount" for function
"KeyPropRevocationKey" to "var RevKeyCount".


Version 1.2.3 - 30.06.2000
==========================

This is just released for keeping compatibiliy with the latest SPGP version
(2.5.0.0): Two function calls have been adjusted to make sure they work like
before, and some new error codes have been added.


Version 1.2.2 - 11.04.2000
==========================

Verifying signatures using "TPGPDecode" has been enabled.


Version 1.2.1 - 08.04.2000
==========================

In SPGP version 2.4.1.0 the declaration of "spgpSubKeyGenerate" has been
changed, which now is reflected in the respective function declaration in
spgp.pas. Also Steve Heller has implemented support for gathering random user-
input for "spgpKeyGenerate" with PGP 5.5.X (remember both these functions are
still declared as experimental by Steve and neither supported by any of these
components nor their author). Additionally I've (re-)implemented alphabetical
sorting of the list of public keys, as it is not provided by the latest versions
of SPGP any more.


Version 1.2 - 28.02.2000
========================

With SPGP version 2.4.0.0 the following changes / additional features are
available:

1. "TPGPEncode": The "DoEncode" method (by default) has been restricted to
doing textmode/armored encoding only, as binary encoding wouldn't work properly
(you cannot pass binary data as strings).

2. "TPGPEncode": The "DoEncodeFile" method now attaches .pgp to "FileIn's" name
if you don't provide "FileOut".

3. "TPGPDetachedSigCreate": The "DoSigCreate" method now attaches .sig to
"FileIn's" name instead of changing it's extension if you don't provide
"FileOut".

4. "TPGPSetKeyProps": The "DoKeyPassChange" method now provides setting and
checking of minimum length and quality.

5. The "OnGetSignKeyPass", "OnGetPassphrase" and "OnGetPass" events in
"TPGPEncode", "TPGPDecode", "TPGPDetachedSigCreate" and "TPGPSetKeyProps" now
verify that you select a private key and provide a "KeyProps" record for showing
detailed information to the user about the key that the passphrase is required
for.

6. Cancelling the passphrase dialogs will now return properly without keeping
the last passphrase entered.

7. The default PGP dialogs (only with PGP versions 6.X.X) are now available for
the following methods:

-	DoEncode / DoEncodeFile (TPGPEncode)

-	DoDecode / DoDecodeFile (TPGPDecode)

-	DoSigCreate (TPGPDeatchedSigCreate)

-	DoKeyPassChange (TPGPSetKeyProps)

To enable using these dialogs just set the new property "StandardDlg" of the
appropriate components to true. Another new property coming along with this
feature is "ParentHandle", which allows you make PGP's dialogs act as child
windows of your application's windows (forms): It takes the handle of the
intended parent window.

8. A "PGP6X" function has been added to determine whether the previous mentioned
standard dialogs are available on the respective computer. It is called
implicitely on execution of these methods.

9. Another unit providing the PGP error constants has been added.

10. A direct link to Steve Heller's function reference has been added to the
help file's References page.

11. Some more functions (f.e. key generation) are available through the spgp.pas
wrapper but currently not included in these components and not supported by the
author (see Steve Heller's function reference).


Version 1.1 - 16.11.1999
========================

With SPGP version 2.2.3.3 (that now fully supports PGP 6.5.1, there was a
problem with the preference functions) a new "TPGPSetKeyProps" method has been
implemented: "KeyRemove", which removes a public key from the default key-ring.
Also the preference methods now support getting and setting the default key ID
and have been completed to make this feature accessible.


Version 1.0 - October 1999
==========================

12 Delphi (2.01) components providing PGP functions for PGP 5.5.3 and later,
based on Steve Heller's library SPGP.DLL:

- Encoding and decoding (encryption/decryption/signing/verifying)
- Creating and verifying file detached signatures
- Importing, exporting and signing keys
- Several key management functions
- Some utilities











