$Id: ToDo,v 1.35 2002/07/15 21:24:32 btrott Exp $

Crypt::OpenPGP todo
-------------------
* add test for uncompressed decrypted packets
* KeyRing support multiple keyrings so that lookups occur over multiple
  rings.
* support for ElGamal signing
* smart detection and description of arbitrary files, eg. pass in some
  data and give back 'RSA signed message, Version 3, probably PGP2'
* subkey generation
* keyblock merging keys, signatures, user IDs
  1. read keyblock
  2. look up public key by key ID in existing keyring(s)
  3. if key does not exist, append it to the keyring
  4. compare keys (need a new Key::equal method)
  5. load original keyblock
  6. compare signatures
  7. add the signatures
  8. add the user IDs
  9. add the subkeys
  10. add the subkey certificates
* test suite: tests for: compressed signatures, compressed encrypted data
  packets, more versions of PGP, more pkalgs, subpackets
* improve subpacket system: constants for types, better integration into
  signatures, etc.
* use key flags to determine key capabilities (signing, encryption, etc.)
* add some example scripts
* caching in find_keyblock. let caller pass in 'marker' code-ref that, given
  a packet, returns a unique 'marker' to point to that keyblock. eg. lookup
  by keyid returns the certificate keyid, lookup by userid returns the
  userid, etc. then, two levels of caching: 1) store offsets of keyblocks
  by marker; 2) store already-parsed keyblocks by marker. we could let the
  calling function do the latter, of course, ie. find_keyblock_by_keyid
  would manage a hash of keyids => keyblocks. also: when reading a keyblock
  (after already finding the start offset), maybe don't parse SECRET_KEY
  and PUBLIC_KEY packets? since we already have the start cert there is
  no use in parsing the next one we come to, because that indicates the
  start of a new keyblock.
* improve CRC24 implementation by using C implementation. problem:
  String::CRC does not work for me (doesn't accept init, for one thing).

Done
----
xx * support for CAST5
xx * bug in Key::Public::ElGamal::_gen_k? naked block?
xx * Crypt::OpenPGP main USAGE docs
xx * docs (for other classes)
xx * PassphraseCallback param for sign and decrypt. give callback function the
     Certificate object (anything else?), let it ask the user for a passphrase.
xx * RecipientCallback for encrypt
xx * clear text signatures; need to make text into canonical text for
     signing
xx * more support for looking up keys in keyring (eg. look up userid, etc.)
xx * encrypt and sign/decrypt and verify
xx * add KeyRing::find_keyblock_by_index; given index, return that keyblock.
     also allow negative indices. create map of keyring on KeyRing::init.
xx * KeyBlock needs some methods to "do stuff" with the keyblock contents;
     for example, there should be a method to return: 1) the master key;
     2) a key given a key ID; 3) the key to be used for encryption, and the
     key to be used for signing.
xx * KeyRing::find_keyblock_by_keyid should no longer return certificate if
     called in list context. Instead it should just return a list of all
     matching keys if called in list context, first match otherwise. Caller
     should use KeyBlock methods to get actual certificate.
xx * compatibility param to encrypt and sign (and keygen, maybe), eg.
     Compat => 'PGP2' turns on Version => 3 and Cipher => 'IDEA'
xx * read existing PGPx/GnuPG config files into Config object
xx * compressed packets
xx * symmetrically-encrypted encrypted data packets
xx * add PGPWords from Mike Dillon; probably should add an interface to this
    through Certificate? ie. $cert->word_fingerprint, which would take
    $cert->fingerprint and run it through the Words module.
xx * encrypted MDC packets
xx * make find_keyblock_by_keyid work with subkeys
xx * key generation, secret certificate saving and encrypting
xx * Crypt::OpenPGP high-level DWIM interface
xx * support for armouring
xx * support for writing packets (v4 fingerprints/key IDs will come with this)
xx * implement a KeyRing::find method that looks only for specific key IDs, etc.
xx * generate fingerprint on cert while reading in (in 'parse'); that way we
     don't have to reserialize
xx * better installation: determine prereqs based on answers to prompts
     about preferred ciphers, pk systems, etc.
xx * support writing v4 packet headers
