aboutsummaryrefslogtreecommitdiff
path: root/frozen_deps/ecdsa/test_der.py
diff options
context:
space:
mode:
Diffstat (limited to 'frozen_deps/ecdsa/test_der.py')
-rw-r--r--frozen_deps/ecdsa/test_der.py91
1 files changed, 85 insertions, 6 deletions
diff --git a/frozen_deps/ecdsa/test_der.py b/frozen_deps/ecdsa/test_der.py
index 746d927..0ca5bd7 100644
--- a/frozen_deps/ecdsa/test_der.py
+++ b/frozen_deps/ecdsa/test_der.py
@@ -9,7 +9,7 @@ except ImportError:
import unittest
from six import b
import hypothesis.strategies as st
-from hypothesis import given, example
+from hypothesis import given
import pytest
from ._compat import str_idx_as_int
from .curves import NIST256p, NIST224p
@@ -21,6 +21,9 @@ from .der import (
remove_bitstring,
remove_object,
encode_oid,
+ remove_constructed,
+ remove_octet_string,
+ remove_sequence,
)
@@ -39,7 +42,7 @@ class TestRemoveInteger(unittest.TestCase):
val, rem = remove_integer(b("\x02\x02\x00\x80"))
self.assertEqual(val, 0x80)
- self.assertFalse(rem)
+ self.assertEqual(rem, b"")
def test_two_zero_bytes_with_high_bit_set(self):
with self.assertRaises(UnexpectedDER):
@@ -57,19 +60,31 @@ class TestRemoveInteger(unittest.TestCase):
val, rem = remove_integer(b("\x02\x01\x00"))
self.assertEqual(val, 0)
- self.assertFalse(rem)
+ self.assertEqual(rem, b"")
def test_encoding_of_127(self):
val, rem = remove_integer(b("\x02\x01\x7f"))
self.assertEqual(val, 127)
- self.assertFalse(rem)
+ self.assertEqual(rem, b"")
def test_encoding_of_128(self):
val, rem = remove_integer(b("\x02\x02\x00\x80"))
self.assertEqual(val, 128)
- self.assertFalse(rem)
+ self.assertEqual(rem, b"")
+
+ def test_wrong_tag(self):
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_integer(b"\x01\x02\x00\x80")
+
+ self.assertIn("wanted type 'integer'", str(e.exception))
+
+ def test_wrong_length(self):
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_integer(b"\x02\x03\x00\x80")
+
+ self.assertIn("Length longer", str(e.exception))
class TestReadLength(unittest.TestCase):
@@ -368,8 +383,72 @@ class TestRemoveObject(unittest.TestCase):
remove_object(b"\x06\x03\x88\x37")
+class TestRemoveConstructed(unittest.TestCase):
+ def test_simple(self):
+ data = b"\xa1\x02\xff\xaa"
+
+ tag, body, rest = remove_constructed(data)
+
+ self.assertEqual(tag, 0x01)
+ self.assertEqual(body, b"\xff\xaa")
+ self.assertEqual(rest, b"")
+
+ def test_with_malformed_tag(self):
+ data = b"\x01\x02\xff\xaa"
+
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_constructed(data)
+
+ self.assertIn("constructed tag", str(e.exception))
+
+
+class TestRemoveOctetString(unittest.TestCase):
+ def test_simple(self):
+ data = b"\x04\x03\xaa\xbb\xcc"
+ body, rest = remove_octet_string(data)
+ self.assertEqual(body, b"\xaa\xbb\xcc")
+ self.assertEqual(rest, b"")
+
+ def test_with_malformed_tag(self):
+ data = b"\x03\x03\xaa\xbb\xcc"
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_octet_string(data)
+
+ self.assertIn("octetstring", str(e.exception))
+
+
+class TestRemoveSequence(unittest.TestCase):
+ def test_simple(self):
+ data = b"\x30\x02\xff\xaa"
+ body, rest = remove_sequence(data)
+ self.assertEqual(body, b"\xff\xaa")
+ self.assertEqual(rest, b"")
+
+ def test_with_empty_string(self):
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_sequence(b"")
+
+ self.assertIn("Empty string", str(e.exception))
+
+ def test_with_wrong_tag(self):
+ data = b"\x20\x02\xff\xaa"
+
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_sequence(data)
+
+ self.assertIn("wanted type 'sequence'", str(e.exception))
+
+ def test_with_wrong_length(self):
+ data = b"\x30\x03\xff\xaa"
+
+ with self.assertRaises(UnexpectedDER) as e:
+ remove_sequence(data)
+
+ self.assertIn("Length longer", str(e.exception))
+
+
@st.composite
-def st_oid(draw, max_value=2 ** 512, max_size=50):
+def st_oid(draw, max_value=2**512, max_size=50):
"""
Hypothesis strategy that returns valid OBJECT IDENTIFIERs as tuples