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