1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19  import base64 
 20  import binascii 
 21  import hashlib 
 22  import unittest 
 23   
 24  from dkim.crypto import ( 
 25      DigestTooLargeError, 
 26      UnparsableKeyError, 
 27      EMSA_PKCS1_v1_5_encode, 
 28      int2str, 
 29      parse_pem_private_key, 
 30      parse_public_key, 
 31      RSASSA_PKCS1_v1_5_sign, 
 32      RSASSA_PKCS1_v1_5_verify, 
 33      str2int, 
 34      ) 
 35  from dkim.tests.test_dkim import read_test_data 
 36  from dkim.util import parse_tag_value 
 37   
 38   
 39   
 40  TEST_KEY_MODULUS = int( 
 41      '160190232090260054474895273563294777865179886824815261110923286158270437' 
 42      '657769966074370477716411064825849317279563494735400250019233722215662302' 
 43      '997403060159149904218292658425241195497467863155064737257198115261596066' 
 44      '733086923624062366294295557722551666415445482671442053150678674937682352' 
 45      '837105556539434741981') 
 46  TEST_KEY_PUBLIC_EXPONENT = 65537 
 47  TEST_KEY_PRIVATE_EXPONENT = int( 
 48      '219642251791061057038224045690185219631125389170665415924249912174530136' 
 49      '074693824121380763959239792563755125360354847443780863736947713174228520' 
 50      '489900956461640273471526152019568303807247290486052565153701534491987040' 
 51      '131529720476525111651818771481293273124837542067061293644354088836358900' 
 52      '29771161475005043329') 
 53  TEST_KEY_PRIME1 = int( 
 54      '127343333492908149956322715568115237787784712176275919666517073343689103' 
 55      '280591709737233188193431204382936008602497360201661766158158969883295914' 
 56      '16266272177') 
 57  TEST_KEY_PRIME2 = int( 
 58      '125793967926229270607412639516115399484604596465353856808629588968254772' 
 59      '302339293254103556785310783521521266982500068526354237606773478050287350' 
 60      '33316975853') 
 61  TEST_KEY_EXPONENT1 = int( 
 62      '971401692373919639404678505179789291960987093676634885925231250693661495' 
 63      '080125935714710587508461815572290443270923375888685273287584323569222368' 
 64      '5450962737') 
 65  TEST_KEY_EXPONENT2 = int( 
 66      '405135004809332318340885085107137607293826268763328174261828392259785080' 
 67      '028911220030572618988900118679333717167345003034279703551607153395397272' 
 68      '3014807045') 
 69  TEST_KEY_COEFFICIENT = int( 
 70      '933140693852464192207530806898449261372116224159220632563973880414444021' 
 71      '989007318611849609226428922185905596238131661588470844906391982906126973' 
 72      '1282880267') 
 73  TEST_PK = { 
 74      'version': 0, 
 75      'modulus': TEST_KEY_MODULUS, 
 76      'publicExponent': TEST_KEY_PUBLIC_EXPONENT, 
 77      'privateExponent': TEST_KEY_PRIVATE_EXPONENT, 
 78      'prime1': TEST_KEY_PRIME1, 
 79      'prime2': TEST_KEY_PRIME2, 
 80      'exponent1': TEST_KEY_EXPONENT1, 
 81      'exponent2': TEST_KEY_EXPONENT2, 
 82      'coefficient': TEST_KEY_COEFFICIENT, 
 83  } 
 84   
 85   
 87   
 89          self.assertEqual(1234, str2int(b'\x04\xd2')) 
  90   
 92          self.assertEqual(b'\x04\xd2', int2str(1234)) 
  93   
 95          self.assertEqual(b'\x00\x00\x04\xd2', int2str(1234, 4)) 
  96   
  99   
100   
117   
118   
120   
122          hash = hashlib.sha256(b'message') 
123          self.assertEqual( 
124              b'\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00' 
125              b'010\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04' 
126              b' ' + hash.digest(), 
127              EMSA_PKCS1_v1_5_encode(hash, 62)) 
 128   
130          hash = hashlib.sha1(b'message') 
131          self.assertEqual( 
132              b'\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\x00' 
133              b'0!0\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14' 
134              + hash.digest(), 
135              EMSA_PKCS1_v1_5_encode(hash, 46)) 
 136   
 144   
145   
147   
151   
152      test_digest = b'0123456789abcdef0123' 
153      test_signature = binascii.unhexlify( 
154          b'cc8d3647d64dd3bc12984947a27bdfbb565041fcc9db781afb4b60d29d288d8d60d' 
155          b'e9e1916d6f81569c3e72af442538dd6aecb50a6de9a14565fdd679c46ff7842482e' 
156          b'15e5aa078549621b6f12ca8cd57ecfad95b18e53581e131c6c3c7cd01cb153adeb4' 
157          b'39d2d6ab8b215b19be0e69ef490885004a474eb26d747a219693e8c') 
158   
165   
 172   
173   
175      from unittest import TestLoader 
176      return TestLoader().loadTestsFromName(__name__) 
 177