blob: ed3e38b6066cf6a9bf8f470534b2e4bbdc07991d [file] [log] [blame]
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +05301# -*- coding: utf-8 -*-
Roy Kokkelkoren0659aac2015-10-25 16:12:11 +01002#
3# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu>
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053016
17import unittest2
18from rsa._compat import b
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053019from rsa.transform import int2bytes, bytes2int, _int2bytes
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053020
21
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053022class Test_int2bytes(unittest2.TestCase):
23 def test_accuracy(self):
24 self.assertEqual(int2bytes(123456789), b('\x07[\xcd\x15'))
25 self.assertEqual(_int2bytes(123456789), b('\x07[\xcd\x15'))
26
27 def test_codec_identity(self):
28 self.assertEqual(bytes2int(int2bytes(123456789, 128)), 123456789)
29 self.assertEqual(bytes2int(_int2bytes(123456789, 128)), 123456789)
30
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053031 def test_chunk_size(self):
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053032 self.assertEqual(int2bytes(123456789, 6), b('\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053033 self.assertEqual(int2bytes(123456789, 7),
34 b('\x00\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053035
36 self.assertEqual(_int2bytes(123456789, 6),
Yesudeep Mangalapillya4453c62011-08-11 12:03:37 +053037 b('\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053038 self.assertEqual(_int2bytes(123456789, 7),
Yesudeep Mangalapillya4453c62011-08-11 12:03:37 +053039 b('\x00\x00\x00\x07[\xcd\x15'))
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053040
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053041 def test_zero(self):
42 self.assertEqual(int2bytes(0, 4), b('\x00') * 4)
43 self.assertEqual(int2bytes(0, 7), b('\x00') * 7)
44 self.assertEqual(int2bytes(0), b('\x00'))
45
46 self.assertEqual(_int2bytes(0, 4), b('\x00') * 4)
47 self.assertEqual(_int2bytes(0, 7), b('\x00') * 7)
48 self.assertEqual(_int2bytes(0), b('\x00'))
49
50 def test_correctness_against_base_implementation(self):
51 # Slow test.
52 values = [
53 1 << 512,
54 1 << 8192,
55 1 << 77,
56 ]
57 for value in values:
58 self.assertEqual(int2bytes(value), _int2bytes(value),
59 "Boom %d" % value)
60 self.assertEqual(bytes2int(int2bytes(value)),
61 value,
62 "Boom %d" % value)
63 self.assertEqual(bytes2int(_int2bytes(value)),
64 value,
65 "Boom %d" % value)
66
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053067 def test_raises_OverflowError_when_chunk_size_is_insufficient(self):
68 self.assertRaises(OverflowError, int2bytes, 123456789, 3)
69 self.assertRaises(OverflowError, int2bytes, 299999999999, 4)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053070
71 self.assertRaises(OverflowError, _int2bytes, 123456789, 3)
72 self.assertRaises(OverflowError, _int2bytes, 299999999999, 4)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053073
74 def test_raises_ValueError_when_negative_integer(self):
75 self.assertRaises(ValueError, int2bytes, -1)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053076 self.assertRaises(ValueError, _int2bytes, -1)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053077
78 def test_raises_TypeError_when_not_integer(self):
79 self.assertRaises(TypeError, int2bytes, None)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053080 self.assertRaises(TypeError, _int2bytes, None)