]> Cypherpunks.ru repositories - pyderasn.git/commitdiff
.hexencode, .hexdecode, .hexdecod
authorSergey Matveev <stargrave@stargrave.org>
Thu, 6 Feb 2020 12:11:08 +0000 (15:11 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Thu, 6 Feb 2020 13:36:51 +0000 (16:36 +0300)
doc/news.rst
pyderasn.py
tests/test_pyderasn.py

index 60247ba70ee523a52622dc3150766a95213b9975..7d60369b6037e6b292fdd76ad8753c77f0a9d47a 100644 (file)
@@ -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:
 
index 8ae9d6e27b8ced4f8de733da94cae4e09b31cfbc..9635e71d70de0e89474fb8a958b0bfe10dd13dbb 100755 (executable)
@@ -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`
index 010b17f7244dad285235ecfd7dbf88482efa0c5a..1a7ed2c488f713e9af4b79a174816546547fc957 100644 (file)
@@ -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,
             )