]> Cypherpunks.ru repositories - pyderasn.git/commitdiff
Various test vectors from X.690
authorSergey Matveev <stargrave@stargrave.org>
Sat, 19 May 2018 14:43:11 +0000 (17:43 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 19 May 2018 14:45:11 +0000 (17:45 +0300)
tests/test_pyderasn.py

index 4fc8a665bc6ca987b212fe5e46cc6daf765bae07..8fe0502eb0d7028ca591abd5fb5d6ec181823bde 100644 (file)
@@ -2240,6 +2240,12 @@ class TestObjectIdentifier(CommonMixin, TestCase):
                 data,
             )))
 
+    def test_x690_vector(self):
+        self.assertEqual(
+            ObjectIdentifier().decode(hexdec("0603883703"))[0],
+            ObjectIdentifier((2, 999, 3)),
+        )
+
 
 @composite
 def enumerated_values_strategy(draw, schema=None, do_expl=False):
@@ -2901,6 +2907,26 @@ class TestVisibleString(
 ):
     base_klass = VisibleString
 
+    def test_x690_vector(self):
+        self.assertEqual(
+            str(VisibleString().decode(hexdec("1A054A6F6E6573"))[0]),
+            "Jones",
+        )
+        self.assertEqual(
+            str(VisibleString().decode(
+                hexdec("3A0904034A6F6E04026573"),
+                ctx={"bered": True},
+            )[0]),
+            "Jones",
+        )
+        self.assertEqual(
+            str(VisibleString().decode(
+                hexdec("3A8004034A6F6E040265730000"),
+                ctx={"bered": True},
+            )[0]),
+            "Jones",
+        )
+
 
 class TestGeneralString(
         UnicodeDecodeErrorMixin,
@@ -4369,6 +4395,16 @@ class TestSequence(SeqMixing, CommonMixin, TestCase):
             seq[missing] = Boolean()
         repr(err.exception)
 
+    def test_x690_vector(self):
+        class Seq(Sequence):
+            schema = (
+                ("name", IA5String()),
+                ("ok", Boolean()),
+            )
+        seq = Seq().decode(hexdec("300A1605536d6974680101FF"))[0]
+        self.assertEqual(seq["name"], "Smith")
+        self.assertEqual(seq["ok"], True)
+
 
 class TestSet(SeqMixing, CommonMixin, TestCase):
     base_klass = Set
@@ -5285,3 +5321,42 @@ class TestStrictDefaultExistence(TestCase):
         seq.decode(raw)
         with assertRaisesRegex(self, DecodeError, "DEFAULT value met"):
             seq.decode(raw, ctx={"strict_default_existence": True})
+
+
+class TestX690PrefixedType(TestCase):
+    def runTest(self):
+        self.assertSequenceEqual(
+            VisibleString("Jones").encode(),
+            hexdec("1A054A6F6E6573"),
+        )
+        self.assertSequenceEqual(
+            VisibleString(
+                "Jones",
+                impl=tag_encode(3, klass=TagClassApplication),
+            ).encode(),
+            hexdec("43054A6F6E6573"),
+        )
+        self.assertSequenceEqual(
+            Any(
+                VisibleString(
+                    "Jones",
+                    impl=tag_encode(3, klass=TagClassApplication),
+                ),
+                expl=tag_ctxc(2),
+            ).encode(),
+            hexdec("A20743054A6F6E6573"),
+        )
+        self.assertSequenceEqual(
+            OctetString(
+                VisibleString(
+                    "Jones",
+                    impl=tag_encode(3, klass=TagClassApplication),
+                ).encode(),
+                impl=tag_encode(7, form=TagFormConstructed, klass=TagClassApplication),
+            ).encode(),
+            hexdec("670743054A6F6E6573"),
+        )
+        self.assertSequenceEqual(
+            VisibleString("Jones", impl=tag_ctxp(2)).encode(),
+            hexdec("82054A6F6E6573"),
+        )