$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.