$Id: Changes,v 1.55 2001/08/16 01:04:56 btrott Exp $
Revision history for Crypt::OpenPGP
0.16 2001.08.15
- Took stupid extraneous files out of lib. Ick.
0.15 2001.08.15
- Added bin/pgplet as an example of Crypt::OpenPGP usage.
- Added PassphraseCallback parameter to Crypt::OpenPGP::decrypt
and Crypt::OpenPGP::sign; this callback will be invoked when a
passphrase to unlock the secret key is not provided, but is needed.
Allows more flexibility etc.
- Added RecipientsCallback parameter to Crypt::OpenPGP::encrypt;
this callback will be invoked after recipients have been mapped
to public keys, and allows review/modification of that key list.
- Crypt::OpenPGP::decrypt will now look through all encrypted
session key packets until it finds one for which we have a
secret key. Once it finds that known key, it uses that key to
decrypt the message.
- Added Recipients param to Crypt::OpenPGP::encrypt, accepts either
key IDs or user IDs. Deprecated usage of KeyID.
- Fixed bug in Certificate::fingerprint with version 3 keys. Was
concatenating integers when should have been concatenating octet
string representations.
- Added Crypt::OpenPGP::Words, which encodes octet/hex strings into
lists of English words. Thanks to Mike Dillon for sending me his
PGPWords.pm, which this module is based on.
- Added Certificate::fingerprint_words and fingerprint_hex. The
former uses Crypt::OpenPGP::Words to encode the fingerprint into a
list of English words; the latter returns the fingerprint as a
string of hex digits.
- Added KeyRing::find_keyblock_by_index, which, given an index into
a list of keyblocks, returns the keyblock at that index. Thanks to
Vipul for the idea.
- Crypt::OpenPGP::Message interface changed: instead of passing
params to read, now pass params to new, and read is called
automatically. Then call pieces to get pieces of message. This
should not affect anyone, unless you were directly accessing
the $msg->{pieces} member, for lack of a better interface :).
- Added Key param to Crypt::OpenPGP::decrypt and Crypt::OpenPGP::verify;
Key should be a Certificate object. This has the effect of bypassing
the keyring lookup and might be useful for decrypting using a key
deserialized from some external source (network, database, etc.).
Thanks to Vipul for the idea.
0.14 2001.08.09
- Crypt::OpenPGP::CFB now works in both standard and PGP-variant
mode (where PGP-variant is the slightly strange mode with the
resyncs). Support added via a 'sync' method to manually resync.
- Added support for encrypted-MDC packets, a more secure variant
on standard encrypted data packets. Encrypted-MDC packets are
followed by a SHA-1 hash of the plaintext so that modifications
to the ciphertext can be detected.
- Added support for writing version-4 packet headers to
Crypt::OpenPGP::PacketFactory.
- Added signing capabilities to Crypt::OpenPGP::encrypt, and
verification to Crypt::OpenPGP::decrypt. This lets you create
encrypted & signed messages, as well as decrypt & verify such
messages. For this purpose, SignKeyID and SignPassphrase have
been added as params to 'encrypt'.
- KeyRing::find_keyblock_by_keyid changed behavior of return value
when called in list context. It now returns all keyblocks with
keys whose key IDs "matched" the provided key ID (rather than the
matched keyblock and the matched certificate, as before).
- Added KeyBlock::encrypting_key and KeyBlock::signing_key; all
high-level Crypt::OpenPGP methods now use these methods instead
of the list-context find_keyblock_by_keyid to find the
appropriate key to use.
- Crypt::OpenPGP::encrypt now accepts multiple key IDs, for
encrypting messages to multiple recipients. Thanks to Vipul
for the idea and patch.
- KeyRing::find_keyblock_by_keyid now can perform lookups using
8 hex-digit key IDs (as opposed to the standard 16 hex-digit
IDs). Thanks to Vipul for the idea and patch (reworked).
- Fixed some compatibility (syntax) issues when using perl 5.005_03.
0.13 2001.07.31
- Fix handling of partial length headers.
- Use proper version of Data::Buffer in Makefile.PL prereq.
- Fix bug with -----BEGIN PGP in text that is not actually armoured;
Crypt::OpenPGP::Message thought it saw armoured text, but it
wasn't really armoured, which caused an error.
- Skip non-Plaintext packets when decrypting; this skips Signature
packets for 'encrypted & signed' messages. This is a temporary
measure; in the future it would be nice to automatically verify
the signatures. Thanks to Vipul for the patch.
- Allow a KeyID param to decrypt that specifies the key ID to use
when decrypting the message, in case there are multiple session
key packets. Thanks to Vipul for the patch.
0.12 2001.07.29
- Added support for clear-text signatures, both creating (Clearsign
param to 'sign') and verifying (transparent support).
- For the time being Makefile.PL will not give a choice of
public key algorithms; you will have to install support for
both DSA and RSA. This will last until the test suite has been
reworked to auto-detect which module is installed and run the
tests with the appropriate key types.
0.11 2001.07.29
- Added support for symmetric-key encrypted session key packets,
which means that Crypt::OpenPGP now supports "conventional"
encryption of data, in addition to the public-key encryption that
was already supported.
- Added KeyRing::find_keyblock_by_uid to find a keyblock in a keyring
given a user id (or part of a user id).
- KeyRing::find_keyblock_by_keyid now caches keyblocks/certs that
it has found, so for any given key ID it only needs to look up
that key ID once, then the block will be cached.
- Added tests for Digest factory objects (t/07-digest.t).
- Added tests for mod_exp and mod_inverse in t/01-util.t.
- Added docs for all main classes/modules.
- Fix Compat settings for PGP5, 3DES => DES3. Thanks to Vipul
for the spot and patch.
0.10 2001.07.27
- Added Compat flag to encrypt and sign, added docs. Thanks to
Vipul for the idea.
- Added support for Twofish and Rijndael ciphers (128-, 192-, and
256-bit keys for Rijndael).
- Added support for RIPE-MD/160 digest algorithm.
- Added Digest param to Crypt::OpenPGP::sign to specify message
digest algorithm.
- Changed semantics of Compress param to Crypt::OpenPGP::encrypt;
it is no longer a simple flag but now the name of a compression
algorithm (Zlib or ZIP).
- Ciphertext::init and Ciphertext::decrypt were making assumptions
about cipher blocksizes; they were using a fixed sync padding of
8 bytes, rather than adjusting based on the blocksize. Now fixed.
- Cipher::key_len => Cipher::keysize.
- Added t/06-cipher.t, test all installed cipher packages.
0.09 2001.07.27
- Fixed incompatibility with PGP2: PGP2 expects packets of certain
types to have certain header len sizes, no matter the actual len
of the data. eg. all Signature packets have to have 2 len bytes,
even if the data is < 255 bytes long and the len would fit in
1 len byte. So to be compatible we need to let the object set
the number of len bytes, if it wants to.
- Plaintext packets generated in encrypt and sign will now have
the proper 'filename' attribute set, if the Filename param was
passed to the respective method.
- Crypt::OpenPGP::verify now handles compressed signature packets
properly.
- Version 3 signatures now default to MD5 digests for compatibility
with PGP2.
- Added tests for Crypt::OpenPGP::PacketFactory (t/05-packets.t).
0.08 2001.07.26
- Fixed DEK encoding on encrypted session keys; the padding size
was incorrect, which meant that PGP5 could not recognize it
as a valid encoding.
- Added support for compressed data packets for encryption and
decryption. 'Compress' param controls compression when
encrypting, and compressed packets will be automatically
decompressed when decrypting.
- Detect and skip Marker packets in encrypted messages.
- Force generated RSA keys to be version 3 for compatibility with
PGP5, which automatically assumes that all RSA keys are version
3.
- Detect pubring.pkr and secring.skr files, thanks to Vipul for
the spot and patch (reworked).
- Fix Armour so that armoured lines are max 64 columns. Add test
for this case. Thanks to Vipul for spot and patch (reworked
slightly).
- Fix misc. warnings. Thanks to Vipul for spot and patch.
- Fix PacketFactory so that it doesn't enter deep recursion when
looking for specific packet types. Thanks to Vipul for the spot.
- Fix PARI error Util::mp2bin by casting 4*8 to PARI. Thanks to
Vipul for the spot and patch.
0.07 2001.07.26
- Added key generation, in low-end Key etc. modules and in
high-level Crypt::OpenPGP frontend, which returns two
keyblocks.
- Added Certificate->lock to encrypt secret key data.
- Applied Vipul's patch to fix warnings about GNUPGHOME
and to add pubring.pkr and secring.skr. Thanks to Vipul.
0.06 2001.07.25
- Fixed bug in SessionKey::_decode with using ciphers with
keys != 16 bytes. This caused incorrect checksums on the
key data.
- 3DES is now the default cipher (not Blowfish).
- Armoured keyrings (eg. PGP PUBLIC KEY BLOCK strings) are
now automatically unarmoured in Crypt::OpenPGP::KeyRing.
- Added docs for Crypt::OpenPGP, ie. the high-level DWIM
interface to the rest of the system.
- Improved speed of octet-string => integer and vice versa
operations. Crypt::OpenPGP::Util::bin2mp is now 3 times
faster than in the last release, and mp2bin is almost
twice as fast. Added lots more tests for these functions
(in 01-util.t).
- Changed Certificate->decrypt to Certificate->unlock.
0.05 2001.07.23
- Started test suite: currently it tests high-level OpenPGP
interface using keyrings from GnuPG.
- Rewrote CFB implementation (now faster).
- Improved installation process (ask questions, check for
required modules, etc.).
0.04 2001.07.22
- Added support RSA signing and verification.
- Added support for ElGamal encryption/decryption.
- Added second arg to Crypt::OpenPGP::PacketFactory::parse that
allows finding only specific packet types; unspecified packet
types are not even parsed (save the header).
- Added Crypt::OpenPGP::KeyRing::find_keyblock_by_keyid, which
looks up a keyblock by key ID, without requiring the entire
keyring to be parsed (just key certificates).
- Changed Crypt::OpenPGP methods to use find_keyblock_by_keyid
instead of reading in entire keyring.
0.03 2001.07.20
- Fixed bug in un-armouring where checksum would not be picked up
properly if base64-encoded data had '=' at the end.
- Improved first crack at CRC24 implementation by using lookup
tables. This helps a lot.
0.02 2001.07.20
- Added armouring in Crypt::OpenPGP::Armour.
- Added high-level DWIM interface to Crypt::OpenPGP.
- Now generate fingerprint on version 4 key certificates while
reading in key; since we already have the serialized data, we
can just generate the fingerprint using that data, rather than
having to serialize to get the key ID.
0.01 2001.07.19
- Initial version.