]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - tests/test_pyderasn.py
BER explicit tag support
[pyderasn.git] / tests / test_pyderasn.py
index 15f54f90d43dd611b8239c5aa43e4490daf5554d..faa85699fd2d628058d3c9cf5d2ce83d8fbcc218 100644 (file)
@@ -64,6 +64,7 @@ from pyderasn import DecodeError
 from pyderasn import DecodePathDefBy
 from pyderasn import Enumerated
 from pyderasn import EOC
+from pyderasn import EOC_LEN
 from pyderasn import GeneralizedTime
 from pyderasn import GeneralString
 from pyderasn import GraphicString
@@ -607,6 +608,35 @@ class TestBoolean(CommonMixin, TestCase):
         self.assertTrue(bool(obj))
         self.assertTrue(obj.bered)
 
+    @given(
+        integers(min_value=1).map(tag_ctxc),
+        lists(
+            booleans(),
+            min_size=1,
+            max_size=5,
+        ),
+    )
+    def test_ber_expl(self, expl, values):
+        encoded = b""
+        for value in values:
+            encoded += (
+                expl +
+                b"\x80" +
+                Boolean(value).encode() +
+                EOC
+            )
+        encoded = SequenceOf.tag_default + len_encode(len(encoded)) + encoded
+
+        class SeqOf(SequenceOf):
+            schema = Boolean(expl=expl)
+        seqof, tail = SeqOf().decode(encoded, ctx={"bered": True})
+        self.assertSequenceEqual(tail, b"")
+        self.assertSequenceEqual([bool(v) for v in seqof], values)
+        self.assertSetEqual(
+            set((v.tlvlen, v.expl_tlvlen, v.expl_tlen, v.expl_llen) for v in seqof),
+            set(((3 + EOC_LEN, len(expl) + 1 + 3 + EOC_LEN, len(expl), 1),)),
+        )
+
 
 @composite
 def integer_values_strategy(draw, do_expl=False):