1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import email
20 import os.path
21 import unittest
22 import time
23
24 import dkim
25
26
28 """Get the content of the given test data file.
29
30 The files live in dkim/tests/data.
31 """
32 path = os.path.join(os.path.dirname(__file__), 'data', filename)
33 with open(path, 'rb') as f:
34 return f.read()
35
36
38 """End-to-end signature and verification tests."""
39
44
45 - def dnsfunc(self, domain, timeout=5):
46 _dns_responses = {
47 'test._domainkey.example.com.': read_test_data("1024_testkey_wo_markers.pub.txt"),
48 'test2._domainkey.example.com.': read_test_data("1024_testkey_wo_markers.pub.rsa.txt"),
49 'test3._domainkey.example.com.': read_test_data("2048_testkey_wo_markers.pub.txt"),
50 'test4._domainkey.example.com.': read_test_data("2048_testkey_wo_markers.pub.rsa.txt"),
51 }
52 try:
53 domain = domain.decode('ascii')
54 except UnicodeDecodeError:
55 return None
56 self.assertTrue(domain in _dns_responses,domain)
57 return _dns_responses[domain]
58
59
61
62 for header_algo in (b"simple", b"relaxed"):
63 for body_algo in (b"simple", b"relaxed"):
64 sig = dkim.sign(
65 self.message, b"test", b"example.com", self.key1024,
66 canonicalize=(header_algo, body_algo))
67 res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc)
68 self.assertTrue(res)
69
70
71
73
74 for header_algo in (b"simple", b"relaxed"):
75 for body_algo in (b"simple", b"relaxed"):
76 sig = dkim.sign(
77 self.message, b"test2", b"example.com", self.key1024,
78 canonicalize=(header_algo, body_algo))
79 res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc)
80 self.assertTrue(res)
81
82
84
85 for header_algo in (b"simple", b"relaxed"):
86 for body_algo in (b"simple", b"relaxed"):
87 sig = dkim.sign(
88 self.message, b"test3", b"example.com", self.key2048,
89 canonicalize=(header_algo, body_algo))
90 res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc)
91 self.assertTrue(res)
92
93
95
96 for header_algo in (b"simple", b"relaxed"):
97 for body_algo in (b"simple", b"relaxed"):
98 sig = dkim.sign(
99 self.message, b"test4", b"example.com", self.key2048,
100 canonicalize=(header_algo, body_algo))
101 res = dkim.verify(sig + self.message, dnsfunc=self.dnsfunc)
102 self.assertTrue(res)
103
104
106 from unittest import TestLoader
107 return TestLoader().loadTestsFromName(__name__)
108