From: Sergey Matveev Date: Thu, 12 Jul 2018 20:37:35 +0000 (+0300) Subject: fulllen and fulloffset useful properties X-Git-Tag: 3.10~1 X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=commitdiff_plain;h=94f91e21c9c17b190596cd1178afbcc0bee84758 fulllen and fulloffset useful properties --- diff --git a/VERSION b/VERSION index bd28b9c..c8cfe39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.9 +3.10 diff --git a/doc/news.rst b/doc/news.rst index aaffcd8..d414284 100644 --- a/doc/news.rst +++ b/doc/news.rst @@ -1,6 +1,12 @@ News ==== +.. _release3.10: + +3.10 +---- +* Add ``.fulllen`` and ``.fulloffset`` properties for all objects + .. _release3.9: 3.9 diff --git a/pyderasn.py b/pyderasn.py index 188e2ac..b15af8d 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -189,9 +189,16 @@ use following properties: Pay attention that those values do **not** include anything related to explicit tag. If you want to know information about it, then use: -``expled`` (to know if explicit tag is set), ``expl_offset`` (it is -lesser than ``offset``), ``expl_tlen``, ``expl_llen``, ``expl_vlen`` -(that actually equals to ordinary ``tlvlen``). + +* ``expled`` -- to know if explicit tag is set +* ``expl_offset`` (it is lesser than ``offset``) +* ``expl_tlen``, +* ``expl_llen`` +* ``expl_vlen`` (that actually equals to ordinary ``tlvlen``) +* ``fulloffset`` -- it equals to ``expl_offset`` if explicit tag is set, + ``offset`` otherwise +* ``fulllen`` -- it equals to ``expl_len`` if explicit tag is set, + ``tlvlen`` otherwise When error occurs, :py:exc:`pyderasn.DecodeError` is raised. @@ -1118,6 +1125,14 @@ class Obj(object): def expl_tlvlen(self): return self.expl_tlen + self.expl_llen + self.expl_vlen + @property + def fulloffset(self): + return self.expl_offset if self.expled else self.offset + + @property + def fulllen(self): + return self.expl_tlvlen if self.expled else self.tlvlen + def pps_lenindef(self, decode_path): if self.lenindef: yield _pp( @@ -4530,7 +4545,7 @@ class Sequence(Obj): ) value.defined = (defined_by, defined_value) - value_len = value.expl_tlvlen if value.expled else value.tlvlen + value_len = value.fulllen vlen += value_len sub_offset += value_len v = v_tail @@ -4722,7 +4737,7 @@ class Set(Sequence): decode_path=sub_decode_path, ctx=ctx, ) - value_len = value.expl_tlvlen if value.expled else value.tlvlen + value_len = value.fulllen sub_offset += value_len vlen += value_len v = v_tail @@ -4999,7 +5014,7 @@ class SequenceOf(Obj): decode_path=decode_path + (str(len(_value)),), ctx=ctx, ) - value_len = value.expl_tlvlen if value.expled else value.tlvlen + value_len = value.fulllen sub_offset += value_len vlen += value_len v = v_tail