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