blob: 02e052e4cd2192218713cc548741eeac361d3a5e [file] [log] [blame]
Sybren A. Stüvel3200f892011-07-31 20:47:49 +02001'''Tests block operations.'''
2
Yesudeep Mangalapilly58024312011-08-11 01:48:25 +05303try:
4 from StringIO import StringIO
5except ImportError:
6 from io import StringIO
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +05307import unittest2
Sybren A. Stüvel3200f892011-07-31 20:47:49 +02008
9import rsa
Sybren A. Stüvel61becf62011-07-31 20:56:13 +020010from rsa import bigfile, varblock, pkcs1
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020011
Yesudeep Mangalapillyaed6e862011-08-11 01:59:50 +053012class BigfileTest(unittest2.TestCase):
Sybren A. Stüvel3200f892011-07-31 20:47:49 +020013
14 def test_encrypt_decrypt_bigfile(self):
15
16 # Expected block size + 11 bytes padding
17 pub_key, priv_key = rsa.newkeys((6 + 11) * 8)
18
19 # Encrypt the file
20 message = '123456Sybren'
21 infile = StringIO(message)
22 outfile = StringIO()
23
24 bigfile.encrypt_bigfile(infile, outfile, pub_key)
25
26 # Test
27 crypto = outfile.getvalue()
28
29 cryptfile = StringIO(crypto)
30 clearfile = StringIO()
31
32 bigfile.decrypt_bigfile(cryptfile, clearfile, priv_key)
33 self.assertEquals(clearfile.getvalue(), message)
34
35 # We have 2x6 bytes in the message, so that should result in two
36 # bigfile.
37 cryptfile.seek(0)
38 varblocks = list(varblock.yield_varblocks(cryptfile))
39 self.assertEqual(2, len(varblocks))
40
Sybren A. Stüvel61becf62011-07-31 20:56:13 +020041
42 def test_sign_verify_bigfile(self):
43
44 # Large enough to store MD5-sum and ASN.1 code for MD5
45 pub_key, priv_key = rsa.newkeys((34 + 11) * 8)
46
47 # Sign the file
48 msgfile = StringIO('123456Sybren')
49 signature = pkcs1.sign(msgfile, priv_key, 'MD5')
50
51 # Check the signature
52 msgfile.seek(0)
53 pkcs1.verify(msgfile, signature, pub_key)
54
55 # Alter the message, re-check
56 msgfile = StringIO('123456sybren')
57 self.assertRaises(pkcs1.VerificationError,
58 pkcs1.verify, msgfile, signature, pub_key)
59