$Id: TODO,v 1.22 2005/11/25 13:11:06 rsh Exp $

Write a user guide.  The README is getting too long now: a separate document
with proper formatting is required.  This will probably be written in LyX.

Write custom packet creation code.  This would allow an arbitrary IKE packet
to be created and sent.  The generation rules would be some sort of
specification file as command-line arguments are not flexible enough for this
task.  Probably parse with yacc/lex to avoid having to write C string handling
and pattern matching.  This would override any command-line options that
define the packet such as --aggressive, --auth, --trans, --dhgroup Etc.

Add option for XML output for easier machine readability.

Decode the currently unhandled ID types: ID_IPV6_ADDR, ID_IPV6_ADDR_SUBNET,
ID_IPV6_ADDR_RANGE, ID_DER_ASN1_DN, and ID_DER_ASN1_GN (I've never seen these
used though).

Use Token Bucket algorithm for packet transmission to allow higher output
rates, esp. when minimum select() wait is relatively large.

Allow --trans options to be specified as inclusive ranges.  This would add
a host entry for each transform attribute in the range, which could be used
to determine which attributes a server supports.

Add an option to include all known vendor IDs to the outgoing packet.
Suggested by Max Kosmach.  This would require a more complex structure to
hold the vendor IDs as the current one only contains the pattern to match
which cannot simply be used as the outgoing VendorID as it may contain
metacharacters.

Allow a variable number of packets in the UDP backoff pattern.  Some VPN
servers will return different numbers of packets, but still have a unique
pattern.

Add support for Nortel Contivity PSK cracking.  This system uses a non-
standard algorithm for calculating the hash, which is a variant of Mamro's
method.  This support can be merged from the file: psk-crack-nortel.c

Add support for Main Mode PSK cracking using a MitM attack.  Suggested by
Anton Rager.

Allow an id file to be specified, which would contain multiple identities
(usernames).  Each identity would create a separate host entry, with a
pointer to the associated ID so that it could be correctly displayed.

Increase PSK cracking speed by using faster hash functions.  Possibilities
include Jean-Luc Cooke's MD5crk MD5 cores which use SIMD instructions.

Allow sending of zero values for all the various parameters.  For 1 and 2-byte
sized parameters, this can be achieved by using int instead of unsigned and
using -1 to represent the default rather than 0.  For 4-byte values, it
requires a separate flag variable.  Another option is to define a struct like:

struct value {
   int flag;
   unsigned val;
}
