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.