2007-11-14: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm: for DomainKeys signatures, use the message
   sender as the identity
 * lib/Mail/DKIM/DkSignature.pm: allow verifier to supply the signing
   identity
 * lib/Mail/DKIM/Verifier.pm, PublicKey.pm: hack for allowing
   DomainKeys signatures to use public keys with empty g= tags

2007-11-14: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm, Signer.pm: update documentation for
   message_sender() and message_originator() methods, which are now
   guaranteed to return an object
 * lib/Mail/DKIM/Common.pm (message_sender, message_originator):
   always return a Mail::Address object, even if the relevant headers
   were not found
 * t/corpus/dk_headers_2.txt renamed to bad_dk_2.txt: it turns out this
   message should've been failing all along, since the Sender header
   doesn't match the domain of the signature
 * lib/Mail/DKIM/Verifier.pm: slight change to the "unsupported version"
   detail message (don't want nested parenthesis)

2007-11-14: Jason Long <jlong@messiah.edu>
 * t/corpus/goodkey_4.txt: tests signature with i=a@b, public key implied g=
 * lib/Mail/DKIM/PublicKey.pm (check_granularity): fixed broken
   ends-with check, reported by Mark Martinec
 * t/corpus/good_dk_3.txt, good_dk_4.txt, good_dk_5.txt:
   these files test DomainKeys signatures with g= values in the public keys
 * t/corpus/bad_dk_1.txt: this one should fail, since the signature
   domain does not match the From/Sender header
 * scripts/dkimsign.pl: added option to override signature's d= tag
 * t/corpus/badkey_11.txt: tests a valid, but unmatched h= in public key

2007-11-08: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Canonicalization/relaxed.pm,
   lib/Mail/DKIM/Canonicalization/nowsp.pm,
   lib/Mail/DKIM/Canonicalization/DkCommon.pm,
   lib/Mail/DKIM/Canonicalization/dk_simple.pm,
   lib/Mail/DKIM/Canonicalization/simple.pm,
   lib/Mail/DKIM/Canonicalization/dk_nofws.pm,
   lib/Mail/DKIM/Canonicalization/DkimCommon.pm,
   lib/Mail/DKIM/MessageParser.pm:
   more speed-up optimizations by Mark Martinec, now multiple lines
   at once can be fed into the canonicalization bits

2007-11-08: Jason Long <jlong@messiah.edu>
 * Makefile.PL, others: version bump to 0.30

2007-11-08: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signature.pm: minor doc edit
 * scripts/dkimsign.pl: generate "pretty" signatures;
   die on unrecognized signature type

2007-11-07: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Algorithm/Base.pm: cleanup (delete commented-out code)
 * lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm (finish_message): fix bug
   where DomainKeys signatures were not "pretty",
   reported by Byung-Hee HWANG.

2007-11-07: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signature.pm: allow Timestamp to be specified to new()
 * lib/Mail/DKIM/Signer.pm: allow Timestamp to be specified to new(),
   requested by Mark Martinec
 * t/signer.t: test timestamp creation

2007-11-06: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Canonicalization/simple.pm,
   lib/Mail/DKIM/Canonicalization/Base.pm,
   lib/Mail/DKIM/MessageParser.pm: speedup optimizations contributed
   by Mark Martinec.
 * lib/Mail/DKIM/Canonicalization/dk_simple,pm
   lib/Mail/DKIM/Canonicalization/relaxed.pm: more speed up optimizations
   by Mark Martinec.

 -- VERSION 0.29 --

2007-11-07: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm: signatures() is now public

2007-10-30: Jason Long <jlong@messiah.edu>
 * t/corpus/good_rfc4871_3.txt: to test extra tags in signature
 * scripts/dkimsign.pl: allow user to specify arbitrary extra tags for
   putting in the signature
 * lib/Mail/DKIM/MessageParser.pm: make "not implemented" messages
   more helpful
 * t/corpus/badkey_10.txt: to test key with t=s
 * lib/Mail/DKIM/Verifier.pm: allow check_granularity() to return different
   detail messages; describe two additional result_detail possibilities
 * lib/Mail/DKIM/PublicKey.pm (check_granularity): check for empty g= value;
   check for subdomain usage;
   (subdomain_flag): helper method to look for "s" in flags
   (flags): return default value if no t= tag

2007-10-26: Jason Long <jlong@messiah.edu>
 * t/corpus/badkey_9.txt: to test empty g= in selector
 * t/corpus/ignore_8.txt: to test bad i= value in signature
 * lib/Mail/DKIM/Verifier.pm: check signature identity value

2007-10-24: Jason Long <jlong@messiah.edu>
 * t/corpus/badkey_8.txt, ignore_5.txt, ignore_6.txt: fix signature so
   it would verify if not for the flaw in the public key
 * scripts/dkimsign.pl: allow key protocol to be specified on command
   line
 * lib/Mail/DKIM/Verifier.pm: update documentation on possible error
   codes
 * lib/Mail/DKIM/PublicKey.pm: cleanup error code

2007-10-24: Jason Long <jlong@messiah.edu>
 * t/corpus/badkey_*.txt: changed subjects to indicate which test it is
 * t/corpus/badkey_7.txt, badkey_8.txt, goodkey_1.txt, goodkey_2.txt,
   goodkey_3.txt: additional tests of public key features
 * t/corpus/verifier.t: test the new test messages
 * lib/Mail/DKIM/Verifier.pm (check_public_key): check key granularity
   and report the problem if it doesn't match
 * lib/Mail/DKIM/PublicKey.pm (check_granularity): a method for testing
   the granularity
   (granularity): return the default value of '*' if g= not defined
 * scripts/dkimsign.pl: ability to set i= tag from command-line

2007-10-24: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm (check_signature): do signature version check
   here
   (finish_header): report invalid signature details to the signature
   object
   (signatures): return all parsed signatures, not just "valid" signatures
 * lib/Mail/DKIM/Signature.pm: some misc. cleanup
   (check_version): version check is now a separate method, rather than
   being part of parse()
 * lib/Mail/DKIM/DkSignature.pm (check_version): always true
 * t/corpus/multiple_2.txt: a message testing multiple signatures with
   different results
 * t/verifier.t: verify that each signature's results are available and
   correct

2007-10-24: Jason Long <jlong@messiah.edu>
 * t/corpus/ignore_7.txt: a message with an expired signature
 * lib/Mail/DKIM/Signature.pm: recognize Expiration as a parameter
 * scripts/dkimsign.pl: make it possible to create a signature with an
   x= tag
 * t/verifier.t: test ignore_7.txt message, should "ignore"
 * lib/Mail/DKIM/Verifier.pm: check signature expiration when verifying
 * lib/Mail/DKIM/Signature.pm (check_expiration): new method

2007-10-08: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signer.pm: use "Key" property instead of "private" to
   store the private key; new methods key() and key_file(); allow each
   signature to have its own private key
 * t/signer_policy.t: test specifying a key file in a policy

2007-10-04: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/MessageParser.pm: return nonzero for PRINT and CLOSE
 * lib/Mail/DKIM/DkSignature.pm: make expiration() for DomainKey-Signature
   behave more compatibly with expiration() for DKIM-Signature
 * lib/Mail/DKIM/Verifier.pm: remove dependency on Error module
 * README: what I'm interested in if make test fails
 * lib/Mail/DKIM/Signer.pm: fix bug reported by dairiki, who noticed that
   the Signer class ignored the signature-specified algorithm when
   building the algorithm object
 * scripts/dkimsign.pl: update POD a bit
 * scripts/dkimverify.pl: add POD
 * lib/Mail/DKIM/Canonicalization/Base.pm, Algorithm/Base.pm:
   add see also, author, copyright sections to POD
 * lib/Mail/DKIM/Algorithm/rsa_sha1.pm, rsa_sha256.pm: remove useless pod
 * ...and others...: inline documentation (POD) cleanup

2007-10-03: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Canonicalization/DkCommon.pm: attempt at making the
   header handling algorithm easier to understand
 * t/signer.t: test case for unreadable private key
 * lib/Mail/DKIM/PrivateKey.pm: die if unable to open private key file
 * lib/Mail/DKIM/Signer.pm: no more need for a separate existance check
   on the private key filename
 * lib/Mail/DKIM/Signature.pm: allow Identity to be specified in new()
 * lib/Mail/DKIM/Signer.pm: allow Identity to be specified in new()
 * t/signer.t: test that specifying Identity works

2007-10-02: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Canonicalization/DkCommon.pm: there are some varying
   opinions about how to verify DomainKey-signed messages when there is
   an h= tag and the headers are in a different order... this is an
   attempt at making our verifier more compatible with other
   implementations
 * dk_headers.txt: some notes on multiple-occuring headers

2007-09-06: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Policy.pm (get_lookup_name): new method that determines
   the name of the record to lookup
 * lib/Mail/DKIM/DkimPolicy.pm: no longer need to override fetch(), now
   it just overrides get_lookup_name()

 -- VERSION 0.28 --

2007-07-31: Jason Long <jlong@messiah.edu>
 * Makefile.PL: OpenSSL 0.23 segfaults on certain signatures, so
   the requirement is now Crypt::OpenSSL::RSA 0.24 or better
 * lib/Mail/DKIM/KeyValueList.pm: don't split the header in the middle
   of a tag name

 -- VERSION 0.27 --

2007-07-25: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signature.pm (identity_matches): new method to help
   comparing a From/Sender address with the signature identity
 * lib/Mail/DKIM/DkimPolicy.pm, Policy.pm: use identity_matches function

2007-07-18: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm: changed fetch_policy() back to
   fetch_author_policy(); added fetch_sender_policy();
   save results for each signature
 * lib/Mail/DKIM/Policy.pm: now implements just Dk policies
 * lib/Mail/DKIM/DkimPolicy.pm: a new module for DKIM signing practices
 * lib/Mail/DKIM/Signature.pm: can now get/set the verification result
   for each signature
 * scripts/dkimsign.pl: handle DOS-formated input
 * scripts/dkimverify.pl: show multiple signatures' results; show
   both policy results

2007-06-11: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm: public_key no longer available as a
   verifier property; use eval block instead of try...otherwise;
   experimental signatures() method
 * lib/Mail/DKIM/Verifier.pm: added description section to Perldocs;
   replaced a couple try...otherwise blocks with eval blocks

2007-06-08: Jason Long <jlong@messiah.edu>
 * policies.txt: some thoughts on dealing with two different types of
   policy records
 * lib/Mail/DKIM/Policy.pm: default() is now a private class method
 * lib/Mail/DKIM/PublicKey.pm: moved DNS query to DNS.pm
 * lib/Mail/DKIM/Policy.pm: moved DNS query to DNS.pm
 * lib/Mail/DKIM/DNS.pm: new module that does the common DNS lookups

2007-06-07: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Common.pm: change "parse Mail::Address" to my preferred
   "Mail::Address->parse" style
 * t/policy.t: test policy lookup by email address instead of domain;
   test policy lookups on a few well known domains
 * lib/Mail/DKIM/Verifier.pm: minor doc changes; renamed
   fetch_author_policy() to fetch_policy(); fetch_author_policy still
   works for backward compatibility
 * lib/Mail/DKIM/Policy.pm: allow lookups given sender/from addresses
   (location): new method to determine where the policy came from

2007-06-05: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Policy.pm: create the default policy only once;
   (is_implied_default_policy): new method to check whether the policy
   was explicit or implied
   (fetch): get policy record at the Yahoo!-DomainKeys-defined location,
   rather than the location in the not-yet-finished DKIM SSP spec.
 * t/policy.t: test is_implied_default_policy method

 -- VERSION 0.26 --

2007-05-24: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signature.pm: accept and use v=1 tag instead of v=0.5
 * lib/Mail/DKIM/Policy.pm: oops, left a syntax error in here
 * t/signer.t: new expected signature value, since signature now has v=1

2007-05-10: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/PublicKey.pm: simplify error handling in fetch()
 * lib/Mail/DKIM/Policy.pm: simplify error handling in fetch()

 -- VERSION 0.25 --

2007-05-10: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/KeyValueList.pm: separator should be "\015\012" not "\n";
   allow splitting on whitespace in a colon-separated list value
 * Makefile.PL: it seems version 0.22 or better is required of
   Crypt::OpenSSL::RSA

2007-05-01: Jason Long <jlong@messiah.edu>
 * t/signature.t: test prettify_safe()
 * lib/Mail/DKIM/TextWrap.pm: new wrapping module to help with prettifying
   the signature
 * lib/Mail/DKIM/KeyValueList.pm (wrap): new method to help wrap the
   signature
 * lib/Mail/DKIM/Signature.pm: wrap the signature
 * lib/Mail/DKIM/Algorithm/Base.pm: oops, prettify() should only be called
   when we're _making_ the signature
 * lib/Mail/DKIM/KeyValueList.pm (wrap): only do something if TextWrap
   has been loaded (no longer automatically load it)
 * lib/Mail/DKIM/Signature.pm (prettify): better default value for Start

2007-04-16: Jason Long <jlong@messiah.edu>
 * t/signature.t: test that prettify() doesn't choke
 * lib/Mail/DKIM/Algorithm/Base.pm: call prettify() before hashing the
   signature header
 * lib/Mail/DKIM/Signer.pm: call prettify_safe() after generating the
   signature data
 * lib/Mail/DKIM/Signature.pm: stubs for prettify() and prettify_safe()
 * lib/Mail/DKIM/KeyValueList.pm: parse() can now be called on an existing
   key-value-list to regenerate the tag data from a string

2007-04-15: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/PublicKey.pm: bug fix- if Net::DNS caused an exception,
   there was a race condition for resetting the alarm
 * lib/Mail/DKIM/Signer.pm: limit which headers are signed
 * t/signer.t: test that undesirable headers are not signed

 -- VERSION 0.24 --

2007-03-09: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/PublicKey.pm, lib/Mail/DKIM/Signature.pm,
   lib/Mail/DKIM/KeyValueList.pm: fix for linebreaks in public key data;
   provided by Mark Martinec.
 * lib/Mail/DKIM/Signature.pm: fix default value q=dns/txt; this fixes a bug
   for DKIM signatures without q= tags
 * t/verifier.t: added six new tests that test problems with the public key
   (e.g. revoked, syntax, etc.)

 -- VERSION 0.23 --

2007-02-22: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/PublicKey.pm: catch certain OpenSSL errors; tweak
   diagnostics
 * lib/Mail/DKIM/Verifier.pm: changed OpenSSL error catching code to
   match that found in PublicKey; document more possible diagnostic codes
 * lib/Mail/DKIM/Signature.pm: tweaked diagnostics for missing public key
 * Makefile.PL: check for Test::Simple, which is required for `make test'

2007-02-21: Jason Long <jlong@messiah.edu>
 * t/signer_policy.t: signature should still work even if no value is
   returned from signer policy
 * t/signer.t: now uses v=0.5 signature, which changes the signature
 * t/verifier.t: added three tests of empty body messages
 * lib/Mail/DKIM/Signer.pm: fixed bug where if signer policy was a
   sub ref, and didn't return a true value, the message would get skipped
 * lib/Mail/DKIM/Canonicalization/simple.pm: argh, hack for handling
   empty body
 * lib/Mail/DKIM/MessageParser.pm: fixed bug in handling of messages
   without bodies
 * lib/Mail/DKIM/Signature.pm: output v=0.5 signatures now
 * scripts/dkimsign.pl: new --binary option to disable line-ending conversion

2007-02-19: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/DkSignature: provide default value for a= tag
   (thanks to mark.martinec@ijs.si for the patch)
 * t/corpus/good_dk_2.txt: test for missing q= and a= tags on DomainKey
   signature

2007-02-09: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm, DkSignature.pm: better diagnostic messages;
   allow missing q= tag for domainkey signatures
   (thanks to mark.martinec@ijs.si for the patch)

 -- VERSION 0.22 --

2007-01-19: Jason Long <jlong@messiah.edu>
 * t/verifiter.t: relaxed the OpenSSL check a little more
 * DKIM.pm, README, others: updated copyright to include 2007;
   updated abstract to include DomainKeys; updated version number

2007-01-19: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Verifier.pm: in case of unsupported algorithm,
   canonicalization method, or key protocol, list the bad protocol
   in the error message to make diagnosing easier
 * lib/Mail/DKIM/DkSignature.pm: fix a use-of-undefined-scalar bug

2007-01-17: Jason Long <jlong@messiah.edu>
 * t/verifier.t: fixed testing bug that was too strict about what
   error message OpenSSL generates
 * lib/Mail/DKIM/Verifier.pm: handle OpenSSL panic message better

 -- VERSION 0.21 --

2006-11-27: Jason Long <jlong@messiah.edu>
 * t/verifier.t: test domainkey message with trailing blank line
 * lib/Mail/DKIM/Canonicalization/dk_nofws.pm: fixed bug where DomainKey-
   signed message with trailing blank line was not canonicalized correctly,
   reported by Mark Martinec.

2006-11-13: Jason Long <jlong@messiah.edu>
 * t/verifier.t: test invalid signature length
 * lib/Mail/DKIM/Verifier.pm: fixed bug where OpenSSL error was not
   reported by moved "local $@" outside try block, thanks to Mark Martinec
   for finding this; detect OpenSSL error and clean up the error message

 -- VERSION 0.20 --

2006-10-24: Jason Long <jlong@messiah.edu>
 * t/signer_policy.t, t/signer.t: use new() instead of new_object()
 * lib/Mail/DKIM/Algorithm/Base.pm: allow debugging body canonicalization
 * lib/Mail/DKIM/MessageParser.pm: removed problematic check for
   "control characters"
 * scripts/dkimsign.pl: document --type argument; replace signer policy class
   with signer policy subroutine

2006-10-23: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signer.pm: bugfix - signatures weren't setup correctly when
   policy built the signature
 * lib/Mail/DKIM/Signature.pm: bugfix - empty headerlist should return empty
   list
 * lib/Mail/DKIM/Canonicalization/Base.pm: moved support for Debug_Canonicalization
   here from Algorithm/*
 * lib/Mail/DKIM/Algorithm/Base.pm: removed Debug_Canonicalization support
 * lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm: removed Debug_Canonicalization support

2006-10-23: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signer.pm, lib/Mail/DKIM/Verifier.pm: use new() instead of
   new_object(); new_object() still supported; documented
   Debug_Canonicalization option

2006-10-20: Jason Long <jlong@messiah.edu>
 * t/signer_policy.t: added test for creating DomainKeys signature;
   added test for creating multiple signatures
 * lib/Mail/DKIM/SigningFilter.pm: removed (obsolete)
 * scripts/test_signing_filter.pl: removed (obsolete)
 * lib/Mail/DKIM/Signer.pm: added signatures method

2006-10-20: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM.pm, lib/Mail/DKIM/Signer.pm, lib/Mail/DKIM/Verifier.pm:
   various documentation fixes
 * lib/Mail/DKIM/Verifier.pm: set signature property when result is determined
 * lib/Mail/DKIM/Signer.pm: support addition of multiple signatures;
   changed default canonicalization method to "relaxed"

2006-10-20: Jason Long <jlong@messiah.edu>
 * t/signer_policy.t: tests different forms of signing policies
 * lib/Mail/DKIM/Signer.pm: support code references as a signing policy;
   removed support for build_signature (I'm gonna do this a different way)

2006-10-20: Jason Long <jlong@messiah.edu>
 * t/verifier: added a message containing multiple signatures, only one of
   which is valid
   - t/corpus/multiple_1.txt: the new message
 * lib/Mail/DKIM/Algorithm/Base.pm: added signature method; changed method
   signature of verify method (no parameters needed any more)
 * lib/Mail/DKIM/Algorithm/rsa_sha1.pm,
   lib/Mail/DKIM/Algorithm/rsa_sha256.pm,
   lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm: updated verify method
 * lib/Mail/DKIM/Verifier.pm: support verification of multiple signatures
 * lib/Mail/DKIM/Signer.pm: documented use of policy _function_ rather than
   policy object; but no implementation yet
 * lib/Mail/DKIM/Common.pm (add_body): support multiple algorithms (needed
   to verify multiple signatures)
 * lib/Mail/DKIM/Signature.pm: renamed signature() to data(); signature still
   available for backwards compatibility

2006-10-19: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/SignerPolicy.pm: document mechanism for users to
   construct the signature themselves
 * lib/Mail/DKIM/Canonicalization/DkCommon.pm,
 * lib/Mail/DKIM/Canonicalization/dk_simple.pm,
   lib/Mail/DKIM/Canonicalization/dk_nofws.pm: implemented DomainKeys'
   canonicalization methods
 * lib/Mail/DKIM/Canonicalization/Base.pm: clarify use of add_body method
 * lib/Mail/DKIM/Algorithm/Base.pm: clarify use of add_body method
 * lib/Mail/DKIM/DkSignature.pm: implements DomainKeys signatures
 * lib/Mail/DKIM/Signer.pm: allow policy to construct the signature, if
   it implements the build_signature method; allow policy access to
   header field names (headers method)
 * lib/Mail/DKIM/Signature.pm: replace use of obsolete method() with
   canonicalization()
 * scripts/dkimsign.pl: allow user to specify signature type

2006-10-12: Jason Long <jlong@messiah.edu>
 * t/verifier: added two new DomainKeys messages to test
   - t/corpus/good_dk_yahoo.txt
   - t/corpus/good_dk_gmail.txt
 * lib/Mail/DKIM/Canonicalization/dk_nofws.pm: added support for the
   DomainKeys "nofws" canonicalization method
 * lib/Mail/DKIM/Verifier.pm: recognize DomainKeys signatures;
   signatures now determine which algorithm class to use
 * lib/Mail/DKIM/Algorithm/Base.pm: refactored a few things to better
   accomodate non-DKIM algorithms
 * lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm: implements the DomainKeys
   rsa-sha1 algorithm
 * lib/Mail/DKIM/DkSignature.pm: handles DomainKeys signatures
 * lib/Mail/DKIM/Signer.pm: signature now determines which algorithm class
   to use
 * lib/Mail/DKIM/PublicKey.pm: change an error message from "headers have
   been alterered" to "message has been altered" (if the headers have been
   altered, we really cannot imply that the body is still intact)
 * lib/Mail/DKIM/Common.pm: removed get_algorithm_class (this is now a
   signature method)
 * lib/Mail/DKIM/Signature.pm: added get_algorithm_class; documented
   get_public_key method

2006-09-28: Jason Long <jlong@messiah.edu>
 * README: include "Error" in the list of dependencies
 * lib/Mail/DKIM/Common.pm (get_algorithm_class): return undef instead of
   throwing an error when an unsupported algorithm is presented
 * lib/Mail/DKIM/Signature.pm (parse): allow v=0.5 tag
   (check_protocol): checks for dns option /txt (i.e. "dns/txt")
   (version): new method for getting/setting v= tag
 * lib/Mail/DKIM/Verifier.pm (check_signature): fixed algorithm check
 * t/verifier: added several additional sample emails to verify, including
   a ietf05 signature, and six cases where the signature should be ignored
   for one reason or another

 -- VERSION 0.19 --

2006-06-15: Jason Long <jlong@messiah.edu>
 * Makefile.PL: change Perl version check to v5.6.1 instead of 5.8
 * t/verifier.t: use binmode function instead of ":raw" layer, for
   Perl 5.6.1 compatibility

 -- VERSION 0.18 --

2006-06-09: Jason Long <jlong@messiah.edu>
 * t/verifier.t: open message in ":raw" mode to avoid CRLF->LF
   conversion (reported by Eugene Pivovarav)

2006-06-08: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/PublicKey.pm: rewrote verify_digest() so that it uses
   the Crypt::OpenSSL::RSA module exclusively, no longer relying on
   Crypt::RSA::Primitives
 * lib/Mail/DKIM/PrivateKey.pm: rewrote sign_digest() so it uses
   Crypt::OpenSSL::RSA exclusively
 * lib/Mail/DKIM/Key.pm: calculate_EM() - remove dependency on
   Crypt::RSA::DataFormat
 * Makefile.PL, README: remove mentions of Crypt::RSA and
   Crypt::OpenSSL::Bignum

 -- VERSION 0.17 --

2006-05-26: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Algorithm/Base.pm: check_body_hash() - new method
   that verifies the body hash against the bh= tag; format for
   canonicalization debugging output has changed
 * lib/Mail/DKIM/Algorithm/rsa_sha1.pm: call check_body_hash() before
   returning results to verify()
 * lib/Mail/DKIM/Algorithm/rsa_sha256.pm: call check_body_hash() before
   returning results to verify()
 * lib/Mail/DKIM/Canonicalization/DkimCommon.pm: fixed bug where extra
   CRLF was being canonicalized
 * lib/Mail/DKIM/Key.pm: moved calculate_EM function here from PrivateKey
   after realizing that it would be needed when verifying
 * lib/Mail/DKIM/PublicKey.pm: now SHA256 hashes can be verified as well;
   also, the verification can distinguish between wrong hash and a
   bad signature
 * lib/Mail/DKIM/Verifier.pm: provide result details when verification
   fails; added documentation for the result_detail() method
 * t/corpus/: added several sample signed messages for the testing routines

2006-04-17: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Algorithm/Base.pm: common class for DKIM algorithms
 * lib/Mail/DKIM/Algorithm/rsa_sha1.pm: now subclasses Algorithm::Base.
 * lib/Mail/DKIM/Algorithm/rsa_sha256.pm: new class for handling the
   rsa-sha256 DKIM algorithm
 * lib/Mail/DKIM/Common.pm: recognize rsa-sha256 algorithm
 * lib/Mail/DKIM/PrivateKey.pm: implemented signing of a SHA-256 digest
 * lib/Mail/DKIM/PublicKey.pm: implemented verifying of a SHA-256 digest
 * lib/Mail/DKIM/Signature.pm: allows algorithm to be "rsa-sha256";
   body_hash() - new method handling the bh tag;
   hash_algorithm() - new method to determine what hash is being used;
 * lib/Mail/DKIM/Verifier.pm: check_public_key() - new method for checking
   the validity of a fetched public key
 * Makefile.PL: added Digest::SHA as a dependency

2006-03-26: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Common.pm: remove version number from this file
 * lib/Mail/DKIM.pm: bump version to 0.17
 * README: bump version to 0.17

 -- VERSION 0.16 --

2006-03-03: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Policy.pm: new() and testing() are now warning-free
   (thanks to jm@jmason.org for the patch)
 * t/policy.t: tests the Policy package

2006-03-01: Jason Long <jlong@messiah.edu>
 * lib/Mail/DKIM/Signature.pm: correctly handle spaces around = character
 * t/signature.t: test for spaces around = character in signature

2006-02-24: Jason Long <jlong@messiah.edu>
 * t/: wrote some tests and added them to the project
 * README, Makefile.PL: discovered additional dependency:
   Crypt::OpenSSL::Bignum
 * lib/Mail/DKIM/Signature.pm: fixed a warning that could occur if
   the h= tag was left undefined

2006-02-23: Jason Long <jlong@messiah.edu>
 * converted to ExtUtils::MakeMaker package format,
   see the dkimproxy project for revision history prior to 2006-02-23.