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