blob: ffd9ec892a81bb06f877af5378ecf42a6e32254a [file] [log] [blame]
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +05301# -*- coding: utf-8 -*-
2
3
4import unittest2
5from rsa._compat import b
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +05306from rsa.transform import int2bytes, bytes2int, _int2bytes
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +05307
8
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +05309class Test_int2bytes(unittest2.TestCase):
10 def test_accuracy(self):
11 self.assertEqual(int2bytes(123456789), b('\x07[\xcd\x15'))
12 self.assertEqual(_int2bytes(123456789), b('\x07[\xcd\x15'))
13
14 def test_codec_identity(self):
15 self.assertEqual(bytes2int(int2bytes(123456789, 128)), 123456789)
16 self.assertEqual(bytes2int(_int2bytes(123456789, 128)), 123456789)
17
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053018 def test_chunk_size(self):
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053019 self.assertEqual(int2bytes(123456789, 6), b('\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053020 self.assertEqual(int2bytes(123456789, 7),
21 b('\x00\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053022
23 self.assertEqual(_int2bytes(123456789, 6),
Yesudeep Mangalapillya4453c62011-08-11 12:03:37 +053024 b('\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053025 self.assertEqual(_int2bytes(123456789, 7),
Yesudeep Mangalapillya4453c62011-08-11 12:03:37 +053026 b('\x00\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053027
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053028 def test_zero(self):
29 self.assertEqual(int2bytes(0, 4), b('\x00') * 4)
30 self.assertEqual(int2bytes(0, 7), b('\x00') * 7)
31 self.assertEqual(int2bytes(0), b('\x00'))
32
33 self.assertEqual(_int2bytes(0, 4), b('\x00') * 4)
34 self.assertEqual(_int2bytes(0, 7), b('\x00') * 7)
35 self.assertEqual(_int2bytes(0), b('\x00'))
36
37 def test_correctness_against_base_implementation(self):
38 # Slow test.
39 values = [
40 1 << 512,
41 1 << 8192,
42 1 << 77,
43 ]
44 for value in values:
45 self.assertEqual(int2bytes(value), _int2bytes(value),
46 "Boom %d" % value)
47 self.assertEqual(bytes2int(int2bytes(value)),
48 value,
49 "Boom %d" % value)
50 self.assertEqual(bytes2int(_int2bytes(value)),
51 value,
52 "Boom %d" % value)
53
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053054 def test_raises_OverflowError_when_chunk_size_is_insufficient(self):
55 self.assertRaises(OverflowError, int2bytes, 123456789, 3)
56 self.assertRaises(OverflowError, int2bytes, 299999999999, 4)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053057
58 self.assertRaises(OverflowError, _int2bytes, 123456789, 3)
59 self.assertRaises(OverflowError, _int2bytes, 299999999999, 4)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053060
61 def test_raises_ValueError_when_negative_integer(self):
62 self.assertRaises(ValueError, int2bytes, -1)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053063 self.assertRaises(ValueError, _int2bytes, -1)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053064
65 def test_raises_TypeError_when_not_integer(self):
66 self.assertRaises(TypeError, int2bytes, None)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053067 self.assertRaises(TypeError, _int2bytes, None)