Test case for verify problem with degenerate FWS.

This commit is contained in:
Stuart D. Gathman
2013-06-19 15:13:28 -04:00
parent fd0caddf16
commit 1e76d331fe
2 changed files with 52 additions and 10 deletions
+24
View File
@@ -0,0 +1,24 @@
Comment: degenerate folding is ugly but legal, reported in Debian bug#711751
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20120113;
h=mime-version:sender:from:date:x-google-sender-auth:message-id
:subject:to:content-type;
bh=NRDGmXYX648Rm6cs06aAQIE77gu68nsSHYB4kAMm7QQ=;
b=VaN3KmNPlU1uSNproy8wF+6qwTUKEcyzanoPSo/u8P0p8rtHgQpOW5/nJ+/ExQ9jKN
FWTyZ9PLecg/0De0QYV18GQovYb3PVUCDHS7dYzfWp072lFPAhISUancFc30amzRPXcy
J2lnvgoPcFuqDh5tLPchz8LdeIL0hMr2Xt+xEibHftqYT0JRXX4LXkZdO/b/i825qMtL
W51wBB0V6L1ZU156A9cZWQWvwnQ/lV7PV7AwRqGbIESguRLfCbM+UIAGoCR8QtTO0lkY
bGqPQucn+1eZZUNsEJAWFI6eo2MmxY/FABEURGYAukaTg13UC9W+O6kGPH5iS5aRpAAT eKbQ==
MIME-Version: 1.0
Sender: kaner.mail@gmail.com
Received: by 10.42.92.137 with HTTP; Sun, 9 Jun 2013 02:37:02 -0700 (PDT)
From: Christian Fromme <cfr@strace.org>
Date: Sun, 9 Jun 2013 11:37:02 +0200
X-Google-Sender-Auth: ZkDaYkXZHozJZyNGgvWFlv78IRY
Message-ID: <CABop5ezogOsxQXV1pUHCZDf-w3XpOFPsbSm8o8Lx5CRX-eq4fg@mail.gmail.com>
Subject: DKIM test mail #1
To: gettor@gettor.torproject.org
Content-Type: text/plain; charset=ISO-8859-1
Hello, DKIM
+28 -10
View File
@@ -53,12 +53,28 @@ class TestSignAndVerify(unittest.TestCase):
self.key = read_test_data("test.private") self.key = read_test_data("test.private")
def dnsfunc(self, domain): def dnsfunc(self, domain):
sample_dns = """\
k=rsa; \
p=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANmBe10IgY+u7h3enWTukkqtUD5PR52T\
b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ=="""
_dns_responses = {
'example._domainkey.canonical.com.': sample_dns,
'test._domainkey.example.com.': read_test_data("test.txt"),
'20120113._domainkey.gmail.com.': """k=rsa; \
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Kd87/UeJjenpabgbFwh\
+eBCsSTrqmwIYYvywlbhbqoo2DymndFkbjOVIPIldNs/m40KF+yzMn1skyoxcTUGCQ\
s8g3FgD2Ap3ZB5DekAo5wMmk4wimDO+U8QzI3SD07y2+07wlNWwIt8svnxgdxGkVbb\
hzY8i+RQ9DpSVpPbF7ykQxtKXkv/ahW3KjViiAH+ghvvIhkx4xYSIc9oSwVmAl5Oct\
MEeWUwg8Istjqz8BZeTWbf41fbNhte7Y+YqZOwq1Sd0DbvYAD9NOZK9vlfuac0598H\
Y+vtSBczUiKERHv1yRbcaQtZFh5wtiRrN04BLUTD21MycBX5jYchHjPY/wIDAQAB"""
}
try: try:
domain = domain.decode('ascii') domain = domain.decode('ascii')
except UnicodeDecodeError: except UnicodeDecodeError:
return None return None
self.assertEqual('test._domainkey.example.com.', domain) self.assertTrue(domain in _dns_responses,domain)
return read_test_data("test.txt") return _dns_responses[domain]
def test_verifies(self): def test_verifies(self):
# A message verifies after being signed. # A message verifies after being signed.
@@ -118,12 +134,6 @@ b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ==
-----END PUBLIC KEY----- -----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]: for header_mode in [dkim.Relaxed, dkim.Simple]:
dkim_header = dkim.sign(sample_msg, 'example', 'canonical.com', dkim_header = dkim.sign(sample_msg, 'example', 'canonical.com',
@@ -135,7 +145,7 @@ b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ=="""
# simple canonicalization. # simple canonicalization.
# http://tools.ietf.org/html/rfc4871#section-3.5 # http://tools.ietf.org/html/rfc4871#section-3.5
signed = dkim.fold(dkim_header) + sample_msg signed = dkim.fold(dkim_header) + sample_msg
result = dkim.verify(signed,dnsfunc=lambda x: _dns_responses[x], result = dkim.verify(signed,dnsfunc=self.dnsfunc,
minkey=512) minkey=512)
self.assertTrue(result) self.assertTrue(result)
dkim_header = dkim.fold(dkim_header) dkim_header = dkim.fold(dkim_header)
@@ -143,9 +153,17 @@ b/mPfjC0QJTocVBq6Za/PlzfV+Py92VaCak19F4WrbVTK5Gg5tW220MCAwEAAQ=="""
pos = dkim_header.rindex(b'\r\n ') pos = dkim_header.rindex(b'\r\n ')
dkim_header = dkim_header[:pos]+b'\r\n\t'+dkim_header[pos+3:] dkim_header = dkim_header[:pos]+b'\r\n\t'+dkim_header[pos+3:]
result = dkim.verify(dkim_header + sample_msg, result = dkim.verify(dkim_header + sample_msg,
dnsfunc=lambda x: _dns_responses[x], minkey=512) dnsfunc=self.dnsfunc, minkey=512)
self.assertTrue(result) self.assertTrue(result)
def test_degenerate_folding(self):
# <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=711751>
# degenerate folding is ugly but legal
message = read_test_data("test2.message")
dv = dkim.DKIM(message)
res = dv.verify(dnsfunc=self.dnsfunc)
self.assertTrue(res)
def test_extra_headers(self): def test_extra_headers(self):
# <https://bugs.launchpad.net/dkimpy/+bug/737311> # <https://bugs.launchpad.net/dkimpy/+bug/737311>
# extra headers above From caused failure # extra headers above From caused failure