]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - tests/test_pyderasn.py
Fix CHOICE's tlvlen with explicitly tagged value
[pyderasn.git] / tests / test_pyderasn.py
index c3744157344f2db548adb2fada8e5ef36700d904..864c66bbbc847b6ed2ae573bedb4ce67e9d4ee66 100644 (file)
@@ -77,6 +77,7 @@ from pyderasn import InvalidOID
 from pyderasn import InvalidValueType
 from pyderasn import len_decode
 from pyderasn import len_encode
+from pyderasn import LENINDEF
 from pyderasn import NotEnoughData
 from pyderasn import Null
 from pyderasn import NumericString
@@ -113,7 +114,6 @@ from pyderasn import VisibleString
 
 settings.register_profile("local", settings(
     deadline=5000,
-    perform_health_check=False,
 ))
 settings.load_profile("local")
 LONG_TEST_MAX_EXAMPLES = settings().max_examples * 4
@@ -613,7 +613,7 @@ class TestBoolean(CommonMixin, TestCase):
         binary().filter(lambda x: not x.startswith(EOC)),
     )
     def test_ber_expl_no_eoc(self, expl, junk):
-        encoded = expl + b"\x80" + Boolean(False).encode()
+        encoded = expl + LENINDEF + Boolean(False).encode()
         with assertRaisesRegex(self, DecodeError, "no EOC"):
             Boolean(expl=expl).decode(encoded + junk, ctx={"bered": True})
         obj, tail = Boolean(expl=expl).decode(
@@ -636,7 +636,7 @@ class TestBoolean(CommonMixin, TestCase):
         for value in values:
             encoded += (
                 expl +
-                b"\x80" +
+                LENINDEF +
                 Boolean(value).encode() +
                 EOC
             )
@@ -1477,7 +1477,7 @@ class TestBitString(CommonMixin, TestCase):
         def chunk_constructed(contents):
             return (
                 tag_encode(form=TagFormConstructed, num=3) +
-                b"\x80" +
+                LENINDEF +
                 b"".join(BitString(content).encode() for content in contents) +
                 EOC
             )
@@ -1501,7 +1501,7 @@ class TestBitString(CommonMixin, TestCase):
         bit_len_expected += chunk_last.bit_len
         encoded_indefinite = (
             tag_encode(form=TagFormConstructed, num=impl) +
-            b"\x80" +
+            LENINDEF +
             b"".join(chunks) +
             chunk_last.encode() +
             EOC
@@ -1568,7 +1568,7 @@ class TestBitString(CommonMixin, TestCase):
         bs = BitString(b"data").encode()
         with self.assertRaises(NotEnoughData) as err:
             BitString().decode(
-                tag_encode(3, form=TagFormConstructed) + b"\x80" + chunks * bs,
+                tag_encode(3, form=TagFormConstructed) + LENINDEF + chunks * bs,
                 offset=offset,
                 decode_path=decode_path,
                 ctx={"bered": True},
@@ -1606,7 +1606,7 @@ class TestBitString(CommonMixin, TestCase):
     def test_ber_indefinite_no_chunks(self, offset, decode_path):
         with assertRaisesRegex(self, DecodeError, "no chunks") as err:
             BitString().decode(
-                tag_encode(3, form=TagFormConstructed) + b"\x80" + EOC,
+                tag_encode(3, form=TagFormConstructed) + LENINDEF + EOC,
                 offset=offset,
                 decode_path=decode_path,
                 ctx={"bered": True},
@@ -1628,7 +1628,7 @@ class TestBitString(CommonMixin, TestCase):
             BitString().decode(
                 (
                     tag_encode(3, form=TagFormConstructed) +
-                    b"\x80" +
+                    LENINDEF +
                     b"".join(chunks) +
                     EOC
                 ),
@@ -1987,7 +1987,7 @@ class TestOctetString(CommonMixin, TestCase):
         def chunk_constructed(contents):
             return (
                 tag_encode(form=TagFormConstructed, num=4) +
-                b"\x80" +
+                LENINDEF +
                 b"".join(OctetString(content).encode() for content in contents) +
                 EOC
             )
@@ -2003,7 +2003,7 @@ class TestOctetString(CommonMixin, TestCase):
                 payload_expected += payload
         encoded_indefinite = (
             tag_encode(form=TagFormConstructed, num=impl) +
-            b"\x80" +
+            LENINDEF +
             b"".join(chunks) +
             EOC
         )
@@ -2052,7 +2052,7 @@ class TestOctetString(CommonMixin, TestCase):
         bs = OctetString(b"data").encode()
         with self.assertRaises(NotEnoughData) as err:
             OctetString().decode(
-                tag_encode(4, form=TagFormConstructed) + b"\x80" + chunks * bs,
+                tag_encode(4, form=TagFormConstructed) + LENINDEF + chunks * bs,
                 offset=offset,
                 decode_path=decode_path,
                 ctx={"bered": True},
@@ -3900,7 +3900,7 @@ class TestAny(CommonMixin, TestCase):
         chunk = Boolean(False, expl=expl).encode()
         encoded = (
             OctetString.tag_default +
-            b"\x80" +
+            LENINDEF +
             b"".join([chunk] * chunks) +
             EOC
         )
@@ -3928,12 +3928,18 @@ class TestAny(CommonMixin, TestCase):
 def choice_values_strategy(draw, value_required=False, schema=None, do_expl=False):
     if schema is None:
         names = list(draw(sets(text_letters(), min_size=1, max_size=5)))
-        tags = [tag_encode(tag) for tag in draw(sets(
-            integers(min_value=0),
+        tags = [{tag_type: tag_value} for tag_type, tag_value in draw(sets(
+            one_of(
+                tuples(just("impl"), integers(min_value=0).map(tag_encode)),
+                tuples(just("expl"), integers(min_value=0).map(tag_ctxp)),
+            ),
             min_size=len(names),
             max_size=len(names),
         ))]
-        schema = [(name, Integer(impl=tag)) for name, tag in zip(names, tags)]
+        schema = [
+            (name, Integer(**tag_kwargs))
+            for name, tag_kwargs in zip(names, tags)
+        ]
     value = None
     if value_required or draw(booleans()):
         value = draw(tuples(
@@ -4175,8 +4181,8 @@ class TestChoice(CommonMixin, TestCase):
         self.assertEqual(obj_decoded.expl_offset, offset)
         self.assertSequenceEqual(
             obj_expled_encoded[
-                obj_decoded.value.offset - offset:
-                obj_decoded.value.offset + obj_decoded.value.tlvlen - offset
+                obj_decoded.value.fulloffset - offset:
+                obj_decoded.value.fulloffset + obj_decoded.value.fulllen - offset
             ],
             obj_encoded,
         )
@@ -4650,7 +4656,7 @@ class SeqMixing(object):
 
         t, _, lv = tag_strip(seq_encoded)
         _, _, v = len_decode(lv)
-        seq_encoded_lenindef = t + b"\x80" + v + EOC
+        seq_encoded_lenindef = t + LENINDEF + v + EOC
         seq_decoded_lenindef, tail_lenindef = seq.decode(
             seq_encoded_lenindef + tail_junk,
             ctx={"bered": True},
@@ -5260,7 +5266,7 @@ class SeqOfMixing(object):
 
         t, _, lv = tag_strip(obj_encoded)
         _, _, v = len_decode(lv)
-        obj_encoded_lenindef = t + b"\x80" + v + EOC
+        obj_encoded_lenindef = t + LENINDEF + v + EOC
         obj_decoded_lenindef, tail_lenindef = obj.decode(
             obj_encoded_lenindef + tail_junk,
             ctx={"bered": True},