Reported broken with Python 3.7.0 on MacOS and 3.7.1 on Linux. Works fine with Python 3.6 and Python 2.7 on multiple OS.
$ python3.7 test.py
..........F.FFFFF....FFFFF..............F...E.E............F......E....F........F.
======================================================================
ERROR: test_degenerate_folding (dkim.tests.test_dkim.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim.py", line 341, in test_degenerate_folding
res = dv.verify(dnsfunc=self.dnsfunc)
File "/home/dkimpy.upstream/dkim/__init__.py", line 808, in verify
return self.verify_sig(sig, include_headers, sigheaders[idx], dnsfunc)
File "/home/dkimpy.upstream/dkim/__init__.py", line 637, in verify_sig
(base64.b64encode(bodyhash), sig[b'bh']))
dkim.ValidationError: body hash mismatch (got b'wm8y8E9SxUZ9nWrbbNn3PwkzdWYQnLKtG8VDOUZFees=', expected b'NRDGmXYX648Rm6cs06aAQIE77gu68nsSHYB4kAMm7QQ=')
======================================================================
ERROR: test_double_previous_verifies (dkim.tests.test_dkim.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim.py", line 203, in test_double_previous_verifies
res = d.verify(dnsfunc=self.dnsfunc5)
File "/home/dkimpy.upstream/dkim/__init__.py", line 808, in verify
return self.verify_sig(sig, include_headers, sigheaders[idx], dnsfunc)
File "/home/dkimpy.upstream/dkim/__init__.py", line 637, in verify_sig
(base64.b64encode(bodyhash), sig[b'bh']))
dkim.ValidationError: body hash mismatch (got b'7CL0x78oCH048LBhdMvNCncQVOWB/f7S4ARXw140j1s=', expected b'4bLNXImK9drULnmePzZNEBleUanJCX5PIsDIFoH4KTQ=')
======================================================================
ERROR: test_rfc8032_previous_verifies (dkim.tests.test_dkim_ed25519.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim_ed25519.py", line 110, in test_rfc8032_previous_verifies
res = d.verify(dnsfunc=self.dnsfunc)
File "/home/dkimpy.upstream/dkim/__init__.py", line 808, in verify
return self.verify_sig(sig, include_headers, sigheaders[idx], dnsfunc)
File "/home/dkimpy.upstream/dkim/__init__.py", line 637, in verify_sig
(base64.b64encode(bodyhash), sig[b'bh']))
dkim.ValidationError: body hash mismatch (got b'7CL0x78oCH048LBhdMvNCncQVOWB/f7S4ARXw140j1s=', expected b'4bLNXImK9drULnmePzZNEBleUanJCX5PIsDIFoH4KTQ=')
======================================================================
FAIL: test_adds_crlf (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 124, in test_adds_crlf
b'Foo bar')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo bar\r\n' != b'Foo bar\r\n\r\n'
======================================================================
FAIL: test_multiple_crlf_body (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 139, in test_multiple_crlf_body
b'\r\n\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 33, in assertCanonicalForm
self.assertEqual(expected, self.func(input))
AssertionError: b'' != b'\r\n\r\n'
======================================================================
FAIL: test_single_crlf_body (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 134, in test_single_crlf_body
b'\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 33, in assertCanonicalForm
self.assertEqual(expected, self.func(input))
AssertionError: b'' != b'\r\n\r\n'
======================================================================
FAIL: test_strips_trailing_empty_lines (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 119, in test_strips_trailing_empty_lines
b'Foo\r\nbar\r\n\r\n\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo\r\nbar\r\n' != b'Foo\r\nbar\r\n\r\n'
======================================================================
FAIL: test_strips_trailing_wsp (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 109, in test_strips_trailing_wsp
b'Foo \t\r\nbar\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo\r\nbar\r\n' != b'Foo\r\nbar\r\n\r\n'
======================================================================
FAIL: test_wsp_compresses (dkim.tests.test_canonicalization.TestRelaxedAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 114, in test_wsp_compresses
b'Foo \t bar\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo bar\r\n' != b'Foo bar\r\n\r\n'
======================================================================
FAIL: test_adds_crlf (dkim.tests.test_canonicalization.TestSimpleAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 59, in test_adds_crlf
b'Foo bar')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo bar\r\n' != b'Foo bar\r\n\r\n'
======================================================================
FAIL: test_empty_body (dkim.tests.test_canonicalization.TestSimpleAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 64, in test_empty_body
b'')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'\r\n' != b'\r\n\r\n'
======================================================================
FAIL: test_multiple_crlf_body (dkim.tests.test_canonicalization.TestSimpleAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 74, in test_multiple_crlf_body
b'\r\n\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'\r\n' != b'\r\n\r\n'
======================================================================
FAIL: test_single_crlf_body (dkim.tests.test_canonicalization.TestSimpleAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 69, in test_single_crlf_body
b'\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'\r\n' != b'\r\n\r\n'
======================================================================
FAIL: test_strips_trailing_empty_lines_from_body (dkim.tests.test_canonicalization.TestSimpleAlgorithmBody)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 54, in test_strips_trailing_empty_lines_from_body
b'Foo \tbar \r\n\r\n')
File "/home/dkimpy.upstream/dkim/tests/test_canonicalization.py", line 32, in assertCanonicalForm
self.assertEqual(expected, self.func(expected))
AssertionError: b'Foo \tbar \r\n' != b'Foo \tbar \r\n\r\n'
======================================================================
FAIL: test_add_body_length (dkim.tests.test_dkim.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim.py", line 262, in test_add_body_length
self.assertIn('; l=%s' % len(msg.get_payload() + '\n'), sig.decode('utf-8'))
AssertionError: '; l=25' not found in 'DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.com; \r\n <email address hidden>; l=27; q=dns/txt; s=test; t=1540686427; \r\n h=message-id : date : from : to : subject : date : from : \r\n subject; bh=xrKtCJzR7O8EgNdBiUe+b1zc0Z2b1/DIBEsDAd75jzE=; \r\n b=a5BnGcImqfAY8VSC7W2FiUANgrbGnUQ+XHhdCd0ldN65Kjd0aVPyYQhb\r\n NlgMGk31FKU1VwjrisfJRD8CICHbmjg3YoHczmerxvUS63Wd78VldrMsSx\r\n 63T1sUBTYzTc540AX7cek/Oi0luJEefk3++BZifz7MjCyKqnIp2Vl456I=\r\n \r\n'
======================================================================
FAIL: test_add_body_length (dkim.tests.test_dkim_ed25519.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim_ed25519.py", line 135, in test_add_body_length
self.assertIn('; l=%s' % len(msg.get_payload() + '\n'), sig.decode('utf-8'))
AssertionError: '; l=25' not found in 'DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/simple; d=example.net; \r\n <email address hidden>; l=27; q=dns/txt; s=test; t=1540686427; \r\n h=message-id : date : from : to : subject : date : from : \r\n subject; bh=xrKtCJzR7O8EgNdBiUe+b1zc0Z2b1/DIBEsDAd75jzE=; \r\n b=gr7D3BQhk9v3qPuUEm+rxXSyYM82JPY9WJlu47WBEXX4HdX1Emd9RrNQ\r\n YxMfyH/b3zSdjqAxLxUaftSmyQc7Aw==\r\n'
======================================================================
FAIL: test_verify_third_party (dkim.tests.test_dkim_ed25519.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_dkim_ed25519.py", line 128, in test_verify_third_party
self.assertTrue(res)
AssertionError: False is not true
======================================================================
FAIL: test_signs_and_verifies (dkim.tests.test_arc.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_arc.py", line 78, in test_signs_and_verifies
self.assertEqual(expected_sig, sig_lines)
AssertionError: Lists differ: [b'AR[70 chars]\n b=3jOfBfTKcq+3r3Xv158DybT4mWFxrGcop+cgyLUX2[753 chars]r\n'] != [b'AR[70 chars]\n b=RQjyYJ5GWtrJkRQ0JHe8D8z+AH8iCzyGckywzrDo5[753 chars]r\n']
First differing element 0:
b'ARC[69 chars]\n b=3jOfBfTKcq+3r3Xv158DybT4mWFxrGcop+cgyLUX2[141 chars]\r\n'
b'ARC[69 chars]\n b=RQjyYJ5GWtrJkRQ0JHe8D8z+AH8iCzyGckywzrDo5[141 chars]\r\n'
Diff is 1477 characters long. Set self.maxDiff to None to see it.
----------------------------------------------------------------------
Ran 82 tests in 0.196s
FAILED (failures=15, errors=3)
F
======================================================================
FAIL: test_signs_and_verifies (dkim.tests.test_arc.TestSignAndVerify)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/dkimpy.upstream/dkim/tests/test_arc.py", line 78, in test_signs_and_verifies
self.assertEqual(expected_sig, sig_lines)
AssertionError: Lists differ: [b'AR[70 chars]\n b=3jOfBfTKcq+3r3Xv158DybT4mWFxrGcop+cgyLUX2[753 chars]r\n'] != [b'AR[70 chars]\n b=RQjyYJ5GWtrJkRQ0JHe8D8z+AH8iCzyGckywzrDo5[753 chars]r\n']
First differing element 0:
b'ARC[69 chars]\n b=3jOfBfTKcq+3r3Xv158DybT4mWFxrGcop+cgyLUX2[141 chars]\r\n'
b'ARC[69 chars]\n b=RQjyYJ5GWtrJkRQ0JHe8D8z+AH8iCzyGckywzrDo5[141 chars]\r\n'
Diff is 1477 characters long. Set self.maxDiff to None to see it.
----------------------------------------------------------------------
Ran 1 test in 0.008s
FAILED (failures=1)
commit 3c2beaf70ecd39b 28e1d6ea64870ed 2343bfb4ba
Author: Scott Kitterman <email address hidden>
Date: Mon Oct 29 19:53:12 2018 -0400
- Python 3.7 compatibility fixup for dkim.canonicali zation.
strip_ trailing_ lines due to changed RE.sub() processing (LP: #1800313)