blob: fe0970c9624d25e4466bad94332ab41096fda08f [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#
Sybren A. Stüvel3934ab42016-02-05 16:01:20 +01009# https://www.apache.org/licenses/LICENSE-2.0
Roy Kokkelkoren0659aac2015-10-25 16:12:11 +010010#
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
Sybren A. Stüveled1c81d2016-01-14 12:23:32 +010017import unittest
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053018from rsa.transform import int2bytes, bytes2int, _int2bytes
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053019
20
Sybren A. Stüveled1c81d2016-01-14 12:23:32 +010021class Test_int2bytes(unittest.TestCase):
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053022 def test_accuracy(self):
adamantike9f577402016-05-08 15:36:57 -030023 self.assertEqual(int2bytes(123456789), b'\x07[\xcd\x15')
24 self.assertEqual(_int2bytes(123456789), b'\x07[\xcd\x15')
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053025
26 def test_codec_identity(self):
27 self.assertEqual(bytes2int(int2bytes(123456789, 128)), 123456789)
28 self.assertEqual(bytes2int(_int2bytes(123456789, 128)), 123456789)
29
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053030 def test_chunk_size(self):
adamantike9f577402016-05-08 15:36:57 -030031 self.assertEqual(int2bytes(123456789, 6), b'\x00\x00\x07[\xcd\x15')
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053032 self.assertEqual(int2bytes(123456789, 7),
adamantike9f577402016-05-08 15:36:57 -030033 b'\x00\x00\x00\x07[\xcd\x15')
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053034
35 self.assertEqual(_int2bytes(123456789, 6),
adamantike9f577402016-05-08 15:36:57 -030036 b'\x00\x00\x07[\xcd\x15')
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053037 self.assertEqual(_int2bytes(123456789, 7),
adamantike9f577402016-05-08 15:36:57 -030038 b'\x00\x00\x00\x07[\xcd\x15')
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053039
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053040 def test_zero(self):
adamantike9f577402016-05-08 15:36:57 -030041 self.assertEqual(int2bytes(0, 4), b'\x00' * 4)
42 self.assertEqual(int2bytes(0, 7), b'\x00' * 7)
43 self.assertEqual(int2bytes(0), b'\x00')
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053044
adamantike9f577402016-05-08 15:36:57 -030045 self.assertEqual(_int2bytes(0, 4), b'\x00' * 4)
46 self.assertEqual(_int2bytes(0, 7), b'\x00' * 7)
47 self.assertEqual(_int2bytes(0), b'\x00')
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053048
49 def test_correctness_against_base_implementation(self):
50 # Slow test.
51 values = [
52 1 << 512,
53 1 << 8192,
54 1 << 77,
55 ]
56 for value in values:
57 self.assertEqual(int2bytes(value), _int2bytes(value),
58 "Boom %d" % value)
59 self.assertEqual(bytes2int(int2bytes(value)),
60 value,
61 "Boom %d" % value)
62 self.assertEqual(bytes2int(_int2bytes(value)),
63 value,
64 "Boom %d" % value)
65
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053066 def test_raises_OverflowError_when_chunk_size_is_insufficient(self):
67 self.assertRaises(OverflowError, int2bytes, 123456789, 3)
68 self.assertRaises(OverflowError, int2bytes, 299999999999, 4)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053069
70 self.assertRaises(OverflowError, _int2bytes, 123456789, 3)
71 self.assertRaises(OverflowError, _int2bytes, 299999999999, 4)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053072
73 def test_raises_ValueError_when_negative_integer(self):
74 self.assertRaises(ValueError, int2bytes, -1)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053075 self.assertRaises(ValueError, _int2bytes, -1)
Yesudeep Mangalapillyc19a21b2011-08-11 04:48:11 +053076
77 def test_raises_TypeError_when_not_integer(self):
78 self.assertRaises(TypeError, int2bytes, None)
Yesudeep Mangalapilly81325242011-08-12 13:06:51 +053079 self.assertRaises(TypeError, _int2bytes, None)