From b3160726b5f1aaf721569018291e9bc6b25a9ab7 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 6 Feb 2020 15:11:08 +0300 Subject: [PATCH] .hexencode, .hexdecode, .hexdecod --- doc/news.rst | 2 ++ pyderasn.py | 15 +++++++++++++++ tests/test_pyderasn.py | 10 +++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/doc/news.rst b/doc/news.rst index 60247ba..7d60369 100644 --- a/doc/news.rst +++ b/doc/news.rst @@ -12,6 +12,8 @@ News * All objects are friendly to ``pickle`` libraries * ``PrintableString`` has ``allow_asterisk`` and ``allow_ampersand`` property +* ``.hexencode()``, ``.hexdecode()`` and ``.hexdecod()`` methods + appeared, working with hexadecimal encoded data .. _release5.6: diff --git a/pyderasn.py b/pyderasn.py index 8ae9d6e..9635e71 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -1179,6 +1179,11 @@ class Obj(object): return raw return b"".join((self._expl, len_encode(len(raw)), raw)) + def hexencode(self): + """Do hexadecimal encoded :py:meth:`pyderasn.Obj.encode` + """ + return hexenc(self.encode()) + def decode( self, data, @@ -1323,6 +1328,16 @@ class Obj(object): raise ExceedingData(len(tail)) return obj + def hexdecode(self, data, *args, **kwargs): + """Do :py:meth:`pyderasn.Obj.decode` with hexadecimal decoded data + """ + return self.decode(hexdec(data), *args, **kwargs) + + def hexdecod(self, data, *args, **kwargs): + """Do :py:meth:`pyderasn.Obj.decod` with hexadecimal decoded data + """ + return self.decod(hexdec(data), *args, **kwargs) + @property def expled(self): """See :ref:`decoding` diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 010b17f..1a7ed2c 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -587,10 +587,10 @@ class TestBoolean(CommonMixin, TestCase): repr(obj_expled) list(obj_expled.pps()) pprint(obj_expled, big_blobs=True, with_decode_path=True) - obj_expled_encoded = obj_expled.encode() + obj_expled_hex_encoded = obj_expled.hexencode() ctx_copied = deepcopy(ctx_dummy) - obj_decoded, tail = obj_expled.decode( - obj_expled_encoded + tail_junk, + obj_decoded, tail = obj_expled.hexdecode( + obj_expled_hex_encoded + hexenc(tail_junk), offset=offset, ctx=ctx_copied, ) @@ -603,7 +603,7 @@ class TestBoolean(CommonMixin, TestCase): self.assertNotEqual(obj_decoded, obj) self.assertEqual(bool(obj_decoded), bool(obj_expled)) self.assertEqual(bool(obj_decoded), bool(obj)) - self.assertSequenceEqual(obj_decoded.encode(), obj_expled_encoded) + self.assertSequenceEqual(obj_decoded.hexencode(), obj_expled_hex_encoded) self.assertSequenceEqual(obj_decoded.expl_tag, tag_expl) self.assertEqual(obj_decoded.expl_tlen, len(tag_expl)) self.assertEqual( @@ -619,7 +619,7 @@ class TestBoolean(CommonMixin, TestCase): self.assertEqual(obj_decoded.expl_offset, offset) assert_exceeding_data( self, - lambda: obj_expled.decod(obj_expled_encoded + tail_junk), + lambda: obj_expled.hexdecod(obj_expled_hex_encoded + hexenc(tail_junk)), tail_junk, ) -- 2.44.0