From b7341b658d6d2285676ce0b3c287383ad69a293e Mon Sep 17 00:00:00 2001 From: Yesudeep Mangalapilly Date: Fri, 12 Aug 2011 13:06:51 +0530 Subject: Adds verification tests for int2bytes and bytes2int * There is a bug in the older int2bytes implementation. I've raised an issue on bitbucket for that already. #11 The pkcs1 file verification test fails if the behavior for int2bytes is corrected. --- tests/test_transform.py | 55 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 10 deletions(-) (limited to 'tests') diff --git a/tests/test_transform.py b/tests/test_transform.py index 9bd3c6d..ffd9ec8 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -3,30 +3,65 @@ import unittest2 from rsa._compat import b -from rsa.transform import int2bytes, old_int2bytes +from rsa.transform import int2bytes, bytes2int, _int2bytes -class Test_integer_to_bytes(unittest2.TestCase): +class Test_int2bytes(unittest2.TestCase): + def test_accuracy(self): + self.assertEqual(int2bytes(123456789), b('\x07[\xcd\x15')) + self.assertEqual(_int2bytes(123456789), b('\x07[\xcd\x15')) + + def test_codec_identity(self): + self.assertEqual(bytes2int(int2bytes(123456789, 128)), 123456789) + self.assertEqual(bytes2int(_int2bytes(123456789, 128)), 123456789) + def test_chunk_size(self): - self.assertEqual(int2bytes(123456789, 6), - b('\x00\x00\x07[\xcd\x15')) + self.assertEqual(int2bytes(123456789, 6), b('\x00\x00\x07[\xcd\x15')) self.assertEqual(int2bytes(123456789, 7), b('\x00\x00\x00\x07[\xcd\x15')) - self.assertEqual(old_int2bytes(123456789, 6), + + self.assertEqual(_int2bytes(123456789, 6), b('\x00\x00\x07[\xcd\x15')) - self.assertEqual(old_int2bytes(123456789, 7), + self.assertEqual(_int2bytes(123456789, 7), b('\x00\x00\x00\x07[\xcd\x15')) + def test_zero(self): + self.assertEqual(int2bytes(0, 4), b('\x00') * 4) + self.assertEqual(int2bytes(0, 7), b('\x00') * 7) + self.assertEqual(int2bytes(0), b('\x00')) + + self.assertEqual(_int2bytes(0, 4), b('\x00') * 4) + self.assertEqual(_int2bytes(0, 7), b('\x00') * 7) + self.assertEqual(_int2bytes(0), b('\x00')) + + def test_correctness_against_base_implementation(self): + # Slow test. + values = [ + 1 << 512, + 1 << 8192, + 1 << 77, + ] + for value in values: + self.assertEqual(int2bytes(value), _int2bytes(value), + "Boom %d" % value) + self.assertEqual(bytes2int(int2bytes(value)), + value, + "Boom %d" % value) + self.assertEqual(bytes2int(_int2bytes(value)), + value, + "Boom %d" % value) + def test_raises_OverflowError_when_chunk_size_is_insufficient(self): self.assertRaises(OverflowError, int2bytes, 123456789, 3) self.assertRaises(OverflowError, int2bytes, 299999999999, 4) - self.assertRaises(OverflowError, old_int2bytes, 123456789, 3) - self.assertRaises(OverflowError, old_int2bytes, 299999999999, 4) + + self.assertRaises(OverflowError, _int2bytes, 123456789, 3) + self.assertRaises(OverflowError, _int2bytes, 299999999999, 4) def test_raises_ValueError_when_negative_integer(self): self.assertRaises(ValueError, int2bytes, -1) - self.assertRaises(ValueError, old_int2bytes, -1) + self.assertRaises(ValueError, _int2bytes, -1) def test_raises_TypeError_when_not_integer(self): self.assertRaises(TypeError, int2bytes, None) - self.assertRaises(TypeError, old_int2bytes, None) + self.assertRaises(TypeError, _int2bytes, None) -- cgit v1.2.1