forked from marcbradshaw/mail-dkim
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Changes
1548 lines (1247 loc) · 64.5 KB
/
Changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This file summarizes what's changed between releases of Mail-DKIM.
{{$NEXT}}
1.20240923 2024-09-23 Australia/Melbourne
* Fix loading of ED25519 keys with CryptX-0.081
1.20240827 2024-08-27 Australia/Melbourne
* Add missing Author prerequisite
Thanks to Giovanni <[email protected]>
* Option to pass a time to the Validator to assert the time
which should be considered as "now" for expiry checks
1.20240619 2024-06-19 Australia/Melbourne
* Remove version check for Net::DNS, this fixes issues when using a
development version of Net::DNS
* Add missing Test required Perl modules
Thanks to Giovanni <[email protected]>
1.20240124 2024-01-24 UTC
* ARC: Return fail for any ARC set with an instance number greater than 50.
This brings ARC verification in line with DKIM verification limits.
1.20230911 2023-09-11 UTC
* Option to add custom tags to generated ARC signatures and seals
1.20230630 2023-06-30 UTC
* Add support for Ed25519 signature types
Thanks to Matthäus Wander @mwander
* Option to add custom tags to generated signatures
1.20230212 2023-02-12 UTC
+ Fix typo in ARC signer example code.
Thanks to @dev-aaront-org
1.20220520 2022-05-20 UTC
+ Change default algorithm in dkimsign.pl to sha-256
+ Use Getopt::Long::Descriptive in scripts for better command help
1.20220408 2022-04-08 UTC
+ Add support for signatures with an Expiration value
1.20200907 2020-09-07 UTC
* ARC::Signer: Preserve leading fold from AR (if any) when copying to AAR.
Thanks to @dev-aaront-org
1.20200824 2020-08-24 UTC
* ARC::Signer: Set cv=none if message contains no ARC headers and no ARC result
Thanks to @dev-aaront-org
1.20200724 2020-07-24 UTC
* Fix test for change in live dns response
1.20200708 2020-07-08 UTC
* Safer internal use of eval
1.20200513.1 2020-05-13 UTC
* ARC: When sealing, don't die on an unparsable Authentication-Results header.
0.58
2019-11-13: Marc Bradshaw <[email protected]>
Thanks to Martin Sluka <[email protected]>
* Prevent outer $SIG{__DIE__} handlers from being called
Thanks to Todd Richmond
* Lowercase q tag before use
* Lowercase domain check
* Strip quotes from PublicKey.pm in addition to other whitespace chars
* Fix regex performance issue
0.57
2019-10-08: Marc Bradshaw <[email protected]>
* Correct the $self->{result_reason} variable name for $self->{details} that is
used by the parent class in Mail::DKIM::ARC::Signer
0.56
2019-08-21: Marc Bradshaw <[email protected]>
* Properly verify the domain, not the instance, of an ARC signature.
This allows ARC signatures by keys marked as no subdomains to
validate correctly.
0.55
2019-04-12: Marc Bradshaw <[email protected]>
* The authserv-id of an Authentication-Results header can contain
CFWS, Use Mail::AuthenticationResults to parse the authserv-id
from this field.
* Improve parsing of authserv-id in ARC signer
0.54
2018-10-12: Marc Bradshaw <[email protected]>
* The T tag on arcseal is not required
0.53
2018-05-27: Marc Bradshaw <[email protected]>
* Make tests less dependent on local resolver setup
* Add thanks to Valimail
0.52
2018-01-12: Marc Bradshaw <[email protected]>
* Internet connection tests were declared in the wrong order
0.51
2018-01-12: Marc Bradshaw <[email protected]>
* Fix for older versions of perl
* Tests no longer fail with no internet connection
0.50
2017-12-16: Marc Bradshaw <[email protected]>
* Added Strict mode to DKIM verifier
* Code formatting fixes
2017-12-14: John Levine <[email protected]>
* Make ARC code work a lot better
* Add new arcsign.pl and arcverify.pl scripts
* ARC code passing all tests and production ready.
* Added strict mode to DKIM to reject sha1 and
key sizes smaller than 1024 bit.
0.44
2017-10-19: Marc Bradshaw <[email protected]>
* Added experimental support for ARC
0.43
2017-09-20: Marc Bradshaw <[email protected]>
* Update tests for new DNS setup
0.42
2017-07-29: Marc Bradshaw <[email protected]>
* Fix tests failing due to dns changes elsewhere
* Moved sample_mime_lite.pl to scripts directory
0.41
2017-04-14: Marc Bradshaw <[email protected]>
* commit aac893fdbaa7f8ccd5d37fa7f20d1785406cda51
Author: Marc Bradshaw <[email protected]>
Date: Fri Mar 17 14:53:53 2017 +1100
Avoid use of $_ in read loop
RT 106485: Mail::DKIM::PrivateKey->load tampering $_ and <FILE>
* commit 06934f259e392b2a3cf94560e6051d9e522d0bf3
Author: Marc Bradshaw <[email protected]>
Date: Fri Mar 17 14:44:44 2017 +1100
Ensure PrivateKey file is closed properly.
Store PrivateKey file handle in lexical variable and close it
once we are done.
RT 120638: Mail::DKIM::PrivateKey does not close FILE
* commit 9e7c1c4cb78a6cb1cf396ece4379c7ed2c44c974
Author: Marc Bradshaw <[email protected]>
Date: Fri Feb 27 12:08:11 2015 +1100
Allow greater control over signed headers
* commit 8291c034dc7db4394e9df80e70b8cbe8428a38c2
Author: Marc Bradshaw <[email protected]>
Date: Fri Jan 23 09:54:02 2015 +1100
Allow greater control over which headers are signed by Signer
2013-02-07: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm (add_signature): call fetch_public_key() iff
the signature passes a validity check;
(finish_header): set result to 'invalid' if signature does not have a
result
* lib/Mail/DKIM/Signature.pm (check_protocol): now returns a list of
supported protocols, or an empty list if no supported protocols found.
2013-02-06: Jason Long <[email protected]>
* t/corpus/good_83176.txt: add new email to test suite; this email contains
a signature with a LIST of query methods, one of which is good, but the
rest should be quietly ignored. This test currently fails.
* lib/Mail/DKIM/Signature.pm (check_protocol): support multiple methods being
specified in signatures q= tag. We look for dns/txt to occur anywhere in
the field; all other values are ignored.
* Fix to better comply with DKIM specification:
* DKIM signatures with multiple methods specified in q= tag are now
accepted. Such signatures are not known to appear in real life.
(rt.cpan.org issue #83176)
* Allow greater control over which headers are signed by Signer
* Added the extended_headers() method to allow headers
to be oversigned, or skipped.
* bugfixes:
* PrivateKey file is now closed correctly after being read.
* Use lexical rather than named file handle
0.40
2013-02-06: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: revert change that enabled EDNS0 by default;
provide enable_EDNS0() subroutine for enabling EDNS0
* scripts/dkimverify.pl: sample verification script updated to enable
EDNS0 before performing the verification
2013-02-06: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: set udppacketsize to 1240, which is small enough
that packet fragmentation will not normally occur; use DNS txtdata()
method on versions of Net::DNS that support it. (This patch contributed
by Mark Martinec.)
2013-02-04: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: set default udppacketsize to 2048, which seems
to be the suggested value to use in the Net::DNS documentation.
2013-02-04: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: avoid an 'uninitialized value' warning when
signature being verified is missing a d= tag; accept a selector name
of '0' rather than treating it as if the s= tag was missing
* lib/Mail/DKIM/PublicKey.pm: sanity check selector/domain before
attempting a DNS query (this fixes another 'uninitialized value' warning)
* lib/Mail/DKIM/Signature.pm: avoid an 'uninitialized value' warning when
calling identity() and d= tag is missing
2013-02-04: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: construct a default RESOLVER that sets
udppacketsize to 1280. This enables EDNS0 (extension mechanism for DNS),
allowing Mail::DKIM to handle larger keys.
2012-11-28: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: replace use of query() with send(), since it
is never appropriate to append the default domain, and using send()
paves the way to using bgsend() in the future for async dns.
Contributed by Mark Martinec.
* lib/Mail/DKIM/DNS.pm: add global variable $RESOLVER which the
user can override if they want to specify options to Net::DNS.
2012-11-28: Jason Long <[email protected]>
* lib/Mail/DKIM/MessageParser.pm: rewrite of line parsing logic to
avoid unnecessary copying of the internal buffer. This replaces use
of $self->{buf} with ${ $self->{buf_ref} } in many places. Patch
contributed by Mark Martinec.
2012-11-28: Jason Long <[email protected]>
* lib/Mail/DKIM/Signer.pm: throw proper error message if an invalid
algorithm is requested
* lib/Mail/DKIM/PublicKey.pm: further refinement to fix Perl warning
about use of uninitialized value
2011-04-21: Jason Long <[email protected]>
* lib/Mail/DKIM/PublicKey.pm: fix a Perl warning about use of an
uninitialized value (reported by [email protected])
released 2013-02-07
* New/changed functionality:
* a single DNS resolver is created for the lifetime of the program,
rather than reinitializing the resolver for each new query.
* bugfixes:
* fix the error message given when an invalid algorithm is
specified in the construction of Mail::DKIM::Signer.
* avoid Perl warning about use of an undefined value in several
places (rt.cpan.org issue #82913).
* speed- improved performance of parsing the message into lines
(rt.cpan.org issue #77902). Patch by Mark Martinec.
* fix DNS queries to use the correct method (txtdata) of Net::DNS
(rt.cpan.org issue #83170). Patch by Mark Martinec.
* API changes:
* global subroutines resolver() or enable_EDNS0() in module
Mail::DKIM::DNS can be called to specify non-default options
to Net::DNS::Resolver (see also rt.cpan.org issue #80425).
0.39
2010-11-14: Jason Long <[email protected]>
* lib/Mail/DKIM/Signer.pm: fix an unusual error message given when
no Key argument has been specified and it is time to load the
key
2010-06-11: Jason Long <[email protected]>
* t/signer_dk.t: create regression tests for DomainKeys signature
generation
2010-06-11: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm, Signer.pm, Algorithm/Base.pm
(finish_header): provide reference to entire list of headers at
completion of header, so that canonicalizers do not need to store
their own copy of the header
* lib/Mail/DKIM/Canonicalization/DkimCommon.pm: do not store header as
parsed, rather only canonicalize header within finish_header()
* lib/Mail/DKIM/Canonicalization/DkCommon.pm: do not store header as
parsed, rather only canonicalize header within finish_header()
* lib/Mail/DKIM/Canonicalization/Base.pm (finish_header): change API
* t/simple_canonicalization.t: update for the API change of
Canonicalization/Base.pm
2010-06-03: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: prevent abuse- if a message has more than
50 signatures headers, we start ignoring them (it's unreasonable for
a message to have more than a very few signature headers).
2010-04-08: Jason Long <[email protected]>
* t/verifier.t: wrote some tests for DomainKey signatures with empty,
missing, or invalid q= tag values
* lib/Mail/DKIM/Verifier.pm: move use of check_signature_identity() out
of finish_header() and into check_and_verify_signature(); this fixes
an issue with getting wrong error codes when q= tag is broken.
released 2010-11-14
* bugfixes:
* fix issue with getting wrong error codes when q= tag is empty
(issue #3011005)
* anti-abuse- prevent a message with thousands of signatures from
thrashing the whole computer (issue #3010997)
* memory usage- significantly reduced memory footprint for
processing a message with a large header and many signatures
* fix error message given when no KeyFile has been specified
(issue #1889690)
* API changes:
* the Canonicalization::finish_header() method now expects a
argument to be passed to it. In the unusual case that you are
using this method from your own code, please update your code.
0.38
2010-03-31: Jason Long <[email protected]>
* lib/Mail/DKIM/DkSignature.pm, Signature.pm: avoid calling lc() on
an undefined value (this generates warnings in Perl 5.12.x).
Patch contributed by Mark Martinec.
2010-03-01: Jason Long <[email protected]>
* lib/Mail/DKIM/PrivateKey.pm (load): fix bug where a private key file
named '0' could not be loaded
2010-03-01: Jason Long <[email protected]>
* lib/Mail/DKIM/DkSignature.pm (new): accept Key parameter when
constructing a DomainKey signature object
2010-02-27: Jason Long <[email protected]>
* t/external_signer.t: test use of an alternate object for Key
during a "sign" operation
2010-02-24: Jason Long <[email protected]>
* lib/Mail/DKIM/Signer.pm: document use of an alternate object for
PrivateKey objects
2010-02-24: Jason Long <[email protected]>
* lib/Mail/DKIM/Signer.pm: import PrivateKey.pm in this module,
rather than in the Algorithm modules
2010-02-24: Jason Long <[email protected]>
* lib/Mail/DKIM/PrivateKey.pm: document the sign_digest() method
* lib/Mail/DKIM/Algorithm/*: use sign_digest() rather than
sign_sha1_digest()
2010-01-23: Jason Long <[email protected]>
* t/public_key.t: test that DNS failure reason is given, when
DNS returns no results
* lib/Mail/DKIM/DNS.pm: bugfix (introduced by async_dns branch):
preserve $@ in case of no error
2010-01-23: Jason Long <[email protected]>
* lib/Mail/DKIM/{DNS,Signature,PublicKey,Policy}.pm: merged my
"async dns" branch
--BEGIN "ASYNC DNS" branch
2009-07-10: Jason Long <[email protected]>
* lib/Mail/DKIM/Policy.pm: new fetch_async method, seems to work
2009-07-10: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm: new fetch_public_key method,
which starts an asynchronous query for the public key
referenced by this signature; redesign get_public_key to
know how to complete the query
2009-07-10: Jason Long <[email protected]>
* lib/Mail/DKIM/PublicKey.pm: new fetch_async method: starts a
query and returns a subref that when called will complete the
query
2009-07-10: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: new query_async method: starts a query and
returns a subref that when called will complete the query
--END "ASYNC DNS" branch
2009-12-14: Jason Long <[email protected]>
* MANIFEST: include sample_mime_lite.pl script in tarball
2009-09-08: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: restart timer after a DNS lookup; based on a
patch contributed by Mark Martinec
released 2010-03-31
* New/changed functionality:
* DNS lookups can now be started asynchronously; the queries are
created as the header is parsed; the results are not actually
needed until the entire message has been read. (The Mail::DKIM
module does not yet do the queries asynchrously; this is just
the infrastructure so that the queries can be asynchronous in
the future.)
* bugfixes:
* DNS lookup overrides alarm() signal (issue #2854325)
* documentation updates:
* document use of custom PrivateKey object, for external signing
* describe how to get "pretty signatures" in Signer.pm
0.37
2009-09-02: Jason Long <[email protected]>
* t/adsp.t: a test script for checking AuthorDomainPolicy.pm
* lib/Mail/DKIM/AuthorDomainPolicy.pm: use d= tag not i= tag when
checking for first-party signatures; fix for testing() method
not found error; fix for "all" and "discardable" not doing the
right thing
2009-08-14: Jason Long <[email protected]>
* sample_mime_lite.pl: a sample script showing how to use Mail::DKIM
with MIME::Lite
2009-07-10: Jason Long <[email protected]>
* lib/Mail/DKIM/Policy.pm: revert ability for subclasses to
override behavior of no-results DNS query
* lib/Mail/DKIM/AuthorDomainPolicy.pm: if ADSP record is not found,
check whether the domain itself exists
* t/policy.t: add a test for the ADSP record causing a DNS error
but the domain itself still existing
2009-07-10: Jason Long <[email protected]>
* t/public_key.t: refine the testing for DNS timeouts and SERVFAIL
errors
* t/policy.t: add some tests for DNS failures during policy queries
* lib/Mail/DKIM/AuthorDomainPolicy.pm: more explicit documentation
describing how DNS errors (and NXDOMAIN results) are handled
2009-07-09: Jason Long <[email protected]>
* lib/Mail/DKIM/Policy.pm: allow subclasses to override behavior
when DNS query returns no records
* lib/Mail/DKIM/AuthorDomainPolicy.pm: when DNS query returns no
records, check the domain itself and possibly die.
2009-07-09: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: wasn't using the right API to get
the ADSP policy
2009-07-09: Jason Long <[email protected]>
* lib/Mail/DKIM/AuthorDomainPolicy.pm, DkimPolicy.pm: changed the
format of how methods are documented
2009-07-07: Jason Long <[email protected]>
* lib/Mail/DKIM/AuthorDomainPolicy.pm, DkimPolicy.pm: add a
description of the class to the documentation
2009-06-09: Jason Long <[email protected]>
* scripts/dkimsign.pl: fix typo in the debugging output
2009-06-09: Jason Long <[email protected]>
* t/signer.t: test case for bug 2803465: space between header field
name and colon cause signature to skip that header
* lib/Mail/DKIM/Common.pm (add_header): fix regexp so that a space
between the header field name and the colon is not treated as part
of the header field name (issue #2803465)
2009-06-02: Jason Long <[email protected]>
* t/policy.t: test for the as_string() method
released 2009-09-08
* New/changed functionality:
* ADSP records now check whether the domain itself exists, in
accordance to the ADSP specification
* bugfixes:
* fixed regexp used to detect header field names (issue #2803465)
* various fixes to ADSP checking
0.36
2009-06-02: Jason Long <[email protected]>
* lib/Mail/DKIM/Policy.pm (as_string): restore this method which was
accidentally removed in 0.34.
released 2009-06-02
* API changes:
* restore the as_string() method which was accidentally removed
in version 0.34
0.35
2009-05-22: Jason Long <[email protected]>
* t/signer.t: add a test-case of a message with 10000's of blank
lines; this seems to DoS the canonicalization routines
* lib/Mail/DKIM/Canonicalization/{simple,relaxed,dk_simple}.pm:
fix for bug reported on amavis-user list, patch provided by
Mark Martinec. Thanks!
released 2009-05-22
* bugfixes:
* fixed a runaway regular expression in the canonicalization
routines (patch provided by Mark Martinec)
0.34
2009-05-20: Jason Long <[email protected]>
* lib/Mail/DKIM.pm: rewrite the description section of the Mail::DKIM
man page
* lib/Mail/DKIM/Verifier.pm: document fetch_author_domain_policies()
* Makefile.PL: release 0.34
2009-05-18: Jason Long <[email protected]>
* t/signer.t: add a test-case of a message without a header
* lib/Mail/DKIM/Common.pm (init): initialize variables used by methods
in this class; fixes RT.CPAN.ORG bug #46179
2009-04-04: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm (fetch_author_domain_policies): new method
for fetching ADSP records for a particular message
2009-04-03: Jason Long <[email protected]>
* lib/Mail/DKIM/DkPolicy.pm: moved the DomainKeys-specific policy
stuff from Policy.pm to here
* t/policy.t: change tests to use DkPolicy instead of Policy
* lib/Mail/DKIM/Verifier.pm (fetch_sender_policy): use DkPolicy
class instead of Policy class
2009-04-03: Jason Long <[email protected]>
* lib/Mail/DKIM/AuthorDomainPolicy.pm: first draft of ADSP support
2009-04-03: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: rename fetch_policies() to policies()
* scripts/dkimverify.pl: replace use of fetch_policies() with
policies()
2009-03-30: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: document a "temperror" result, which
I will soon provide support for
2009-03-30: Jason Long <[email protected]>
* t/verifier.t: add support for testing DNS failures; add tests for
detail messages of public key errors
* t/verifier.t: add some tests of DNS failures
2009-03-30: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm (get_public_key): remember errors and
always report them the same way
2009-03-30: Jason Long <[email protected]>
* lib/Mail/DKIM/Policy.pm, DkPolicy.pm: new method "name" to give a
short name of the policy
* scripts/dkimverify.pl: use the new fetch_policies() api to list
the results of applicable policies
2009-03-24: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm (fetch_policies): new method for fetching
all applicable policies, and is guaranteed not to "die".
2009-03-24: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm: use a global variable to specify what Timeout
to use
* lib/Mail/DKIM/DNS.pm: detect DNS resolver errors and report them
* t/public_key.t: test various DNS failures
2009-03-10: Jason Long <[email protected]>
* t/simple_canonicalization.t: fix simple-canonicalization test, which
broke when I removed support for prestandardized DKIM signatures
2009-03-10: Jason Long <[email protected]>
* lib/Mail/DKIM/Algorithm/*, lib/Mail/DKIM/Canonicalization/*,
lib/Mail/DKIM/Signature.pm, t/verifier.t: remove support and tests
for the prestandardized DKIM signatures (issue #1871948)
* Makefile.PL: bump version
released 2009-05-20
* New/changed functionality:
* support for ADSP (author-domain-signing-practices) records
* removed support for pre-standardized DKIM signatures (i.e. these
are DKIM signatures without a v= or bh= tag).
* DNS resolver errors are detected and reported as such
* API changes:
* renamed Mail::DKIM::Policy to Mail::DKIM::DkPolicy. Programs using
the former name to create policy objects directly (though it would
be more expected to fetch the objects through
Mail::DKIM::Verifier) should update their code
* new policies() method in Mail::DKIM::Verifier for fetching all
applicable sender/author signing policies
* bugfixes:
* Signer object would die if first line of input wasn't a header
(rt.cpan.org issue #46179)
0.33
2009-03-10: Jason Long <[email protected]>
* Makefile.PL: release "0.33"
2008-11-19: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm, DkSignature.pm (DEFAULT_PREFIX): new
method which determines what prefix to use in as_string, prettify,
etc.
* lib/Mail/DKIM/KeyValueList.pm (wrap): when splitting the h= field,
only allow breaks prior to ':' symbols
2008-11-19: Jason Long <[email protected]>
* t/signature.t: further checks for prettify signatures (found a case
where the new code caused a regression)
* lib/Mail/DKIM/TextWrap.pm (flush): remember to update cur position
when flushing text; use a "may_break" internal variable to know
whether a linebreak is acceptable; other fixes
* t/textwrap.t: another test case illustrating failure in TextWrap.pm
* lib/Mail/DKIM/KeyValueList.pm (wrap): call flush() right after the
';' character; this is a further fix for #2257046.
2008-11-10: Jason Long <[email protected]>
* lib/Mail/DKIM/TextWrap.pm (flush): new method to explicitly allow a
break at the current point in the string
* lib/Mail/DKIM/KeyValueList.pm (wrap): call flush() whenever changing
TextWrap parameters (this should complete the fix for #2257046)
2008-11-06: Jason Long <[email protected]>
* t/signature.t: test Mark Martinec's bad-signature-wrapping bug
2008-11-06: Jason Long <[email protected]>
* t/verifier.t: use a "fake" dns implementation, so that this test
will pass no matter the user's state of dns
2008-11-06: Jason Long <[email protected]>
* lib/Mail/DKIM/DNS.pm (query): changed API so that it now returns
a list of Net::DNS::RR objects, rather than a Net::DNS::Packet object.
* lib/Mail/DKIM/Policy.pm: update for the change to the DNS.pm api.
* lib/Mail/DKIM/PublicKey.pm: update for the change to the DNS.pm api.
2008-11-06: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm (encode_qp, decode_qp): suppress a warning
about an uninitialized value
* lib/Mail/DKIM/Common.pm (message_originator, message_sender): if a
From/Sender line is present, but blank, still return a valid object
(issue #2126559)
* t/public_key.t: new test to check for DNS problems
released 2009-03-10
* bugfixes:
* signature wrapping would sometimes cause improper preparation of
DKIM signatures, with "simple" canonicalization (issue #2257046)
* test scripts:
* the included corpus is now verified using a fake-DNS resolver,
which means the test corpus can validate even when your DNS
servers are really slow
0.32
2008-05-09: Jason Long <[email protected]>
* lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm: when populating a DomainKey
signature's identity, record where the identity came from
* lib/Mail/DKIM/DkSignature.pm (identity_source): make the source of
the identity (i.e. sender header or from header) available as a
method
2008-05-09: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm (identity): do quoted-printable encoding/
decoding for the i= tag (issue #1839015)
* t/corpus/good_qp_1.txt, good_qp_2.txt, good_qp_3.txt: three test
files for identities using quoted-printable encoding
2008-04-14: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm: documentation for get_tag()
2008-04-14: Jason Long <[email protected]>
* lib/Mail/DKIM/PublicKey.pm (check_granularity): do case-sensitive
comparison (issue #1938112)
2008-04-14: Jason Long <[email protected]>
* t/corpus/badkey_12.txt: fix g= case-sensitivity test so it won't give
false positives on dkim-milter
* t/corpus/badkey_13.txt: test that the verifier checks granularity
against i= tag, not the From header
2008-04-14: Jason Long <[email protected]>
* lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm, rsa_sha1.pm: replace use of
Digest::SHA1 with equivalent Digest::SHA
* Makefile.PL: remove requirement for Digest::SHA1
2008-04-14: Jason Long <[email protected]>
* Makefile.PL: bump version
released 2008-06-03
* removed requirement for Digest::SHA1 (issue #1832549).
We now use the more capable Digest::SHA module for SHA-1 and SHA-256.
* bugfixes:
* granularity checking should be case-sensitive (issue #1938112).
* identity tag now uses quoted-printable encoding (issue #1839015).
* API improvement:
* implemented identity_source() for DkSignature objects
0.31
2008-04-08: Jason Long <[email protected]>
* lib/Mail/DKIM/PrivateKey.pm: allow Cork argument to new() (#1879209)
2008-04-07: Jason Long <[email protected]>
* lib/Mail/DKIM/DkimPolicy.pm: fix "use of uninitialized value in string"
errors
* lib/Mail/DKIM/Signature.pm: provide public API to public-key object of
signatures, e.g. so its flags can be accessed (issue #1879215);
also, if an error occurs fetching the public-key record, the failure
is cached so it won't get tried again
* lib/Mail/DKIM/Signer.pm: document how to create a DomainKey-Signature
2008-02-20: Jason Long <[email protected]>
* lib/Mail/DKIM/TextWrap.pm: implement BreakBefore option;
provided a bunch of documentation for this module
* t/textwrap.t: tests new functionality of TextWrap
* lib/Mail/DKIM/KeyValueList.pm: colon-separated lists are now "wrapped"
with colons appearing at the beginning of the next line instead of
at the end of the current line (hoping this will fix #1868648)
2008-02-06: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm: conserve space by omitting "c=simple"
and "q=dns/txt" (#1878518)
2008-02-06: Jason Long <[email protected]>
* lib/Mail/DKIM/Canonicalization/DkCommon.pm, DkimCommon.pm:
bugfix for issue #1878954 (undef value used as an ARRAY ref)
* lib/Mail/DKIM/Canonicalization/DkCommon.pm: some cleanup,
possible bugfix for verifying message with two+ DomainKey signatures
* lib/Mail/DKIM/Verifier.pm: allow caller of fetch_author_policy() to
specify domain (#1879197)
* lib/Mail/DKIM/PrivateKey.pm: cleanup- indentation style;
throw error on load() if missing argument
2008-01-24: Jason Long <[email protected]>
* lib/Mail/DKIM/DkimPolicy.pm, Policy.pm, PublicKey.pm, Verifier.pm:
fix parsing regexes used to split email address into localpart and
domain (issue #1878994)
2008-01-10: Jason Long <[email protected]>
* Makefile.PL: bump version
* lib/Mail/DKIM/Signature.pm: make sure all public key problems are
prefixed with "public key:" (most were already, see below for actual
changes)
* lib/Mail/DKIM/PublicKey.pm: since Signature.pm is providing the "public
key:" prefix, it can be omitted in PublicKey.pm error messages
* lib/Mail/DKIM/Verifier: the following result_detail messages have changed:
"no public key available" => "public key: not available"
"key value list syntax error" => "syntax error"
or "public key: syntax error"
* t/verifier.t: test that "public key" is mentioned
released 2008-04-14
* some error detail messages were changed (see ChangeLog, 2008-01-10 entry)
* by default, and when possible, DKIM signatures now omit c= and q= tags
(they are optional tags) (issue #1878518)
* DKIM and DomainKey signatures are now wrapped so that line breaks
occur before colon (':') separators instead of after; this avoids
confusing some broken MUAs (issue #1868648)
* bugfixes:
* "undef value" error when DKIM signature appears at end of header
(issue #1878954)
* use proper regexp for splitting email address (issue #1878994)
* API improvements:
* can specify a domain for fetch_author_policy() (issue #1879197)
* can access a signature's public-key object (issue #1879215)
* can specify an OpenSSL-private-key object for PrivateKey->new()
(issue #1879209)
0.30.1
2008-01-24: Jason Long <[email protected]>
* lib/Mail/DKIM/Algorithm/*: implement wants_pre_signature_headers()
for each algorithm
* lib/Mail/DKIM/Verifier.pm: if the algorithm "wants_pre_signature_headers",
then feed headers found prior to the signature to the
signature-specific algorithm doing the verification. This fixes an
issue where signatures from cisco.com fail to verify (reported by
Mark Martinec).
released 2008-01-24
* bugfix:
* email from cisco.com was failing to verify (issue #1878523)
0.30
2007-12-10: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm (is_subdomain): do case-insensitive
comparison
* t/corpus/good_dk_7.txt: tests DK signature with domain names that
differ only in case
* t/corpus/good_rfc4871_4.txt: tests DKIM signature with i= and d=
contain domain names differing in case
* t/corpus/badkey_12.txt: tests public key where i=JLong, g=jl*ng
2007-12-07: Jason Long <[email protected]>
* t/verifier.t: three new DK tests
* t/corpus/good_dk_6.txt: tests DK signature without h= tag
* t/corpus/bad_dk_2.txt: tests DK signature w/o h= tag, Sender has
been added
* t/corpus/dk_multiple_1.txt: tests two DK signatures (with different
domains) in a single message... both should pass
* Makefile.PL: version bump
2007-12-07: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm, lib/Mail/DKIM/Algorithm/dk_rsa_sha1.pm,
lib/Mail/DKIM/Canonicalization/DkCommon.pm:
domainkeys: determine identity from algorithm object. Currently the
DomainKeys identity is determined by the Verifier. It is
theoretically possible for two different DomainKeys signatures on
the same message to have different identities. (This happens when
one DomainKey signature includes a Sender header, and the other one
does not.) This patch moves the determination of identity to the
algorithm object.
2007-12-07: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm, lib/Mail/DKIM/Common.pm: initialize
signatures early. This patch makes Mail::DKIM::Verifier initialize
and check the signature object as soon as it is parsed, and
subsequent headers are fed into the algorithm as they are read,
instead of waiting for the end of header.
* lib/Mail/DKIM/Verifier.pm: fix DK identity. The previous patch broke
identity-checking for DomainKeys signatures. This patch moves some
things around so that identity checking still works.
2007-12-07: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm (add_signature): changed to take a
signature object, instead of an unparsed header line
2007-11-21: Jason Long <[email protected]>
* t/corpus/bad_dk_2.txt renamed to dk_headers_2.txt: revert this
rename from earlier... the message should "pass" after
all (the Sender header was not part of the signature)
2007-11-21: Jason Long <[email protected]>
* lib/Mail/DKIM/Signer.pm: provide documentation for Key parameter
* lib/Mail/DKIM/PrivateKey.pm: created documentation for this package
* lib/Mail/DKIM/Signature.pm: implement Key parameter for constructor,
and key() method to get/set the private key
2007-11-14: Jason Long <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* Makefile.PL, others: version bump to 0.30
2007-11-08: Jason Long <[email protected]>
* lib/Mail/DKIM/Signature.pm: minor doc edit
* scripts/dkimsign.pl: generate "pretty" signatures;
die on unrecognized signature type
2007-11-07: Jason Long <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* 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.
released 2008-01-10
* includes speed-up optimizations by Mark Martinec
* DomainKeys, implement proper identity matching...
a DomainKey-Signature's domain should match the From/Sender address
* several more test cases
* API improvements:
* accept additional arguments when creating Signer/Signature
* bugfixes:
* DomainKey-Signature headers were not "prettified"
* granularity ending with '*' was not checked correctly
* DomainKey-Signature granularity was checked against the wrong value
0.29
2007-11-07: Jason Long <[email protected]>
* lib/Mail/DKIM/Verifier.pm: signatures() is now public
2007-10-30: Jason Long <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* 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 <[email protected]>
* lib/Mail/DKIM/Verifier.pm (check_signature): do signature version check
here