From 2aaa384be26f265bf37579a0d23145cb30b6753c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 19 May 2018 17:43:11 +0300 Subject: [PATCH] Various test vectors from X.690 --- tests/test_pyderasn.py | 75 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 4fc8a66..8fe0502 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -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"), + ) -- 2.44.0