File: test_der.py

package info (click to toggle)
python-ecdsa 0.13-3%2Bdeb10u1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 560 kB
  • sloc: python: 3,156; sh: 10; makefile: 7
file content (88 lines) | stat: -rw-r--r-- 2,866 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88

# compatibility with Python 2.6, for that we need unittest2 package,
# which is not available on 3.3 or 3.4
try:
    import unittest2 as unittest
except ImportError:
    import unittest
from .der import remove_integer, UnexpectedDER, read_length
from six import b

class TestRemoveInteger(unittest.TestCase):
    # DER requires the integers to be 0-padded only if they would be
    # interpreted as negative, check if those errors are detected
    def test_non_minimal_encoding(self):
        with self.assertRaises(UnexpectedDER):
            remove_integer(b('\x02\x02\x00\x01'))

    def test_negative_with_high_bit_set(self):
        with self.assertRaises(UnexpectedDER):
            remove_integer(b('\x02\x01\x80'))

    def test_two_zero_bytes_with_high_bit_set(self):
        with self.assertRaises(UnexpectedDER):
            remove_integer(b('\x02\x03\x00\x00\xff'))

    def test_zero_length_integer(self):
        with self.assertRaises(UnexpectedDER):
            remove_integer(b('\x02\x00'))

    def test_empty_string(self):
        with self.assertRaises(UnexpectedDER):
            remove_integer(b(''))

    def test_encoding_of_zero(self):
        val, rem = remove_integer(b('\x02\x01\x00'))

        self.assertEqual(val, 0)
        self.assertFalse(rem)

    def test_encoding_of_127(self):
        val, rem = remove_integer(b('\x02\x01\x7f'))

        self.assertEqual(val, 127)
        self.assertFalse(rem)

    def test_encoding_of_128(self):
        val, rem = remove_integer(b('\x02\x02\x00\x80'))

        self.assertEqual(val, 128)
        self.assertFalse(rem)


class TestReadLength(unittest.TestCase):
    # DER requires the lengths between 0 and 127 to be encoded using the short
    # form and lengths above that encoded with minimal number of bytes
    # necessary
    def test_zero_length(self):
        self.assertEqual((0, 1), read_length(b('\x00')))

    def test_two_byte_zero_length(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b('\x81\x00'))

    def test_two_byte_small_length(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b('\x81\x7f'))

    def test_long_form_with_zero_length(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b('\x80'))

    def test_smallest_two_byte_length(self):
        self.assertEqual((128, 2), read_length(b('\x81\x80')))

    def test_zero_padded_length(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b('\x82\x00\x80'))

    def test_two_three_byte_length(self):
        self.assertEqual((256, 3), read_length(b'\x82\x01\x00'))

    def test_empty_string(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b(''))

    def test_length_overflow(self):
        with self.assertRaises(UnexpectedDER):
            read_length(b('\x83\x01\x00'))