From 9e3ec3665dd723a0d457101f5d73b2f54e2b47b7 Mon Sep 17 00:00:00 2001 From: "Stuart D. Gathman" Date: Thu, 16 Jun 2011 23:38:14 -0400 Subject: [PATCH] Integrate new tests into existing test suite in dkim.tests --- dkim/tests/test_dkim.py | 43 +++++++++++++++++++++++++++++ dkim/tests/test_util.py | 13 +++++++++ test.py | 13 ++------- testsign.py | 61 ----------------------------------------- testutil.py | 24 ---------------- 5 files changed, 58 insertions(+), 96 deletions(-) delete mode 100644 testsign.py delete mode 100644 testutil.py diff --git a/dkim/tests/test_dkim.py b/dkim/tests/test_dkim.py index 9fee36f..ba54654 100644 --- a/dkim/tests/test_dkim.py +++ b/dkim/tests/test_dkim.py @@ -86,6 +86,49 @@ class TestSignAndVerify(unittest.TestCase): res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc) self.assertFalse(res) + def test_dkim_dignature_canonicalization(self): + # + # Relaxed-mode header signing is wrong + sample_msg = """\ +From: mbp@canonical.com +To: scottk@example.com +Subject: this is my + test message +""".replace('\n', '\r\n') + + sample_privkey = """\ +-----BEGIN RSA PRIVATE KEY----- +MIIBOwIBAAJBANmBe10IgY+u7h3enWTukkqtUD5PR52Tb/mPfjC0QJTocVBq6Za/ +PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQJAYFUKsD+uMlcFu1D3YNaR +EGYGXjJ6w32jYGJ/P072M3yWOq2S1dvDthI3nRT8MFjZ1wHDAYHrSpfDNJ3v2fvZ +cQIhAPgRPmVYn+TGd59asiqG1SZqh+p+CRYHW7B8BsicG5t3AiEA4HYNOohlgWan +8tKgqLJgUdPFbaHZO1nDyBgvV8hvWZUCIQDDdCq6hYKuKeYUy8w3j7cgJq3ih922 +2qNWwdJCfCWQbwIgTY0cBvQnNe0067WQIpj2pG7pkHZR6qqZ9SE+AjNTHX0CIQCI +Mgq55Y9MCq5wqzy141rnxrJxTwK9ABo3IAFMWEov3g== +-----END RSA PRIVATE KEY----- +""" + + sample_pubkey = """\ +-----BEGIN PUBLIC KEY----- +MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANmBe10IgY+u7h3enWTukkqtUD5PR52T +b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ== +-----END PUBLIC KEY----- +""" + + sample_dns = """\ +k=rsa; \ +p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANmBe10IgY+u7h3enWTukkqtUD5PR52T\ +b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ==""" + + _dns_responses = {'example._domainkey.canonical.com.': sample_dns} + for header_mode in [dkim.Relaxed, dkim.Simple]: + + dkim_header = dkim.sign(sample_msg, 'example', 'canonical.com', + sample_privkey, canonicalize=(header_mode, dkim.Relaxed)) + signed = dkim_header + sample_msg + + result = dkim.verify(signed,dnsfunc=lambda x: _dns_responses[x]) + self.assertTrue(result) def test_suite(): from unittest import TestLoader diff --git a/dkim/tests/test_util.py b/dkim/tests/test_util.py index 1a46015..85e8106 100644 --- a/dkim/tests/test_util.py +++ b/dkim/tests/test_util.py @@ -61,6 +61,19 @@ class TestParseTagValue(unittest.TestCase): self.assertRaises( DuplicateTag, parse_tag_value, b'foo=bar;foo=baz') + def test_trailing_whitespace(self): + hval = '''v=1; a=rsa-sha256; d=facebookmail.com; s=s1024-2011-q2; c=relaxed/simple; + q=dns/txt; i=@facebookmail.com; t=1308078492; + h=From:Subject:Date:To:MIME-Version:Content-Type; + bh=+qPyCOiDQkusTPstCoGjimgDgeZbUaJWIr1mdE6RFxk=; + b=EUmDmdnAsNtjSEHGHNTa8PXgGaEUtOVezagmninX5Bs/Q26R9r3AMgawyUSKkbHp + /bQZU6QPZfdvmLMPdIWCQPo8SP+gsz4dpox2efO61DlvgYaxBRhwFedAW9LjYhQc + 3KzW0yB9JHwiDCw1EioVkv+OMHhAYzoIypA0bQyi2bc=; + ''' + sig = parse_tag_value(hval) + self.assertEquals(sig[b't'],'1308078492') + self.assertEquals(len(sig),11) + def test_suite(): from unittest import TestLoader diff --git a/test.py b/test.py index 2ba2de9..44275de 100644 --- a/test.py +++ b/test.py @@ -1,13 +1,4 @@ import unittest -import testutil -import testsign - -def suite(): - s = unittest.TestSuite() - s.addTest(testutil.suite()) - s.addTest(testsign.suite()) - return s - -if __name__ == '__main__': - unittest.TextTestRunner().run(suite()) +from dkim.tests import test_suite +unittest.TextTestRunner().run(test_suite()) diff --git a/testsign.py b/testsign.py deleted file mode 100644 index d261440..0000000 --- a/testsign.py +++ /dev/null @@ -1,61 +0,0 @@ - -# Demonstrate -# -# Relaxed-mode header signing is wrong - -import sys -import dkim -import unittest - -sample_msg = """\ -From: mbp@canonical.com -To: scottk@example.com -Subject: this is my - test message -""".replace('\n', '\r\n') - -sample_privkey = """\ ------BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBANmBe10IgY+u7h3enWTukkqtUD5PR52Tb/mPfjC0QJTocVBq6Za/ -PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQJAYFUKsD+uMlcFu1D3YNaR -EGYGXjJ6w32jYGJ/P072M3yWOq2S1dvDthI3nRT8MFjZ1wHDAYHrSpfDNJ3v2fvZ -cQIhAPgRPmVYn+TGd59asiqG1SZqh+p+CRYHW7B8BsicG5t3AiEA4HYNOohlgWan -8tKgqLJgUdPFbaHZO1nDyBgvV8hvWZUCIQDDdCq6hYKuKeYUy8w3j7cgJq3ih922 -2qNWwdJCfCWQbwIgTY0cBvQnNe0067WQIpj2pG7pkHZR6qqZ9SE+AjNTHX0CIQCI -Mgq55Y9MCq5wqzy141rnxrJxTwK9ABo3IAFMWEov3g== ------END RSA PRIVATE KEY----- -""" - -sample_pubkey = """\ ------BEGIN PUBLIC KEY----- -MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANmBe10IgY+u7h3enWTukkqtUD5PR52T -b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ== ------END PUBLIC KEY----- -""" - -sample_dns = """\ -k=rsa; \ -p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANmBe10IgY+u7h3enWTukkqtUD5PR52T\ -b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ==""" - -_dns_responses = {'example._domainkey.canonical.com.': sample_dns} - - -class SignTestCase(unittest.TestCase): - - def testsign(self): - for header_mode in [dkim.Relaxed, dkim.Simple]: - - dkim_header = dkim.sign(sample_msg, 'example', 'canonical.com', - sample_privkey, canonicalize=(header_mode, dkim.Relaxed)) - signed = dkim_header + sample_msg - - result = dkim.verify(signed,dnsfunc=lambda x: _dns_responses[x]) - self.assertTrue(result) - -def suite(): - s = unittest.makeSuite(SignTestCase,'test') - return s - -if __name__ == '__main__': - unittest.TextTestRunner().run(suite()) diff --git a/testutil.py b/testutil.py deleted file mode 100644 index 52ef097..0000000 --- a/testutil.py +++ /dev/null @@ -1,24 +0,0 @@ -import unittest -from dkim.util import parse_tag_value - -class ParseTestCase(unittest.TestCase): - - def testParse(self): - hval = '''v=1; a=rsa-sha256; d=facebookmail.com; s=s1024-2011-q2; c=relaxed/simple; - q=dns/txt; i=@facebookmail.com; t=1308078492; - h=From:Subject:Date:To:MIME-Version:Content-Type; - bh=+qPyCOiDQkusTPstCoGjimgDgeZbUaJWIr1mdE6RFxk=; - b=EUmDmdnAsNtjSEHGHNTa8PXgGaEUtOVezagmninX5Bs/Q26R9r3AMgawyUSKkbHp - /bQZU6QPZfdvmLMPdIWCQPo8SP+gsz4dpox2efO61DlvgYaxBRhwFedAW9LjYhQc - 3KzW0yB9JHwiDCw1EioVkv+OMHhAYzoIypA0bQyi2bc=; -''' - sig = parse_tag_value(hval) - self.assertEquals(sig[b't'],'1308078492') - self.assertEquals(len(sig),11) - -def suite(): - s = unittest.makeSuite(ParseTestCase,'test') - return s - -if __name__ == '__main__': - unittest.TextTestRunner().run(suite())