The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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.