From a673d2332a69774a7aac7398f41dbcd1d74730bf Mon Sep 17 00:00:00 2001 From: "Stuart D. Gathman" Date: Wed, 15 Jun 2011 10:27:13 -0400 Subject: [PATCH] dd testcase for bug 587783 --- dkim/__init__.py | 6 +++++ test.py | 2 ++ testsign.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 testsign.py diff --git a/dkim/__init__.py b/dkim/__init__.py index 25177a2..b296441 100644 --- a/dkim/__init__.py +++ b/dkim/__init__.py @@ -51,10 +51,16 @@ __all__ = [ "KeyFormatError", "MessageFormatError", "ParameterError", + "Relaxed", + "Simple", + "DKIM", "sign", "verify", ] +Relaxed = b'relaxed' +Simple = b'simple' + class DKIMException(Exception): """Base class for DKIM errors.""" pass diff --git a/test.py b/test.py index ca6950e..2ba2de9 100644 --- a/test.py +++ b/test.py @@ -1,9 +1,11 @@ import unittest import testutil +import testsign def suite(): s = unittest.TestSuite() s.addTest(testutil.suite()) + s.addTest(testsign.suite()) return s if __name__ == '__main__': diff --git a/testsign.py b/testsign.py new file mode 100644 index 0000000..d261440 --- /dev/null +++ b/testsign.py @@ -0,0 +1,61 @@ + +# 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())