VERSION | 2 +- doc/news.rst | 6 ++++++ pyderasn.py | 27 +++++++++++++++++++++------ diff --git a/VERSION b/VERSION index 2a7506bcda67c97bb110d90215545b764d6541c3385fa26fb1814b7ee5ec3099..6a1b5285d8889b376acd99a56a8fb62459e80c19242602e88db438447dd26893 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.9 +3.10 diff --git a/doc/news.rst b/doc/news.rst index 72ee1e2d60e9705ef9cabcd7756eeaa4f76bd40b25565ce744d196bd5fd1b0c4..ecd06c605683581a1718159c61aafd4dfa0c9feabb61cc990c5c763f40a51873 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 e47ccc74d6f65d5c82cd58b91b857eb6ca3e1c416d997e204c140ab2e9f87995..08e66a7071f9788f049c00c22cd57284afc0bedf7a397be838da7e6d2dfd943d 100755 --- a/pyderasn.py +++ b/pyderasn.py @@ -189,9 +189,16 @@ * ``tlvlen`` -- length of the whole object 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. @@ -1117,6 +1124,14 @@ @property 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: @@ -4530,7 +4545,7 @@ offset=offset, ) 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 @@ leavemm=True, 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 @@ leavemm=True, 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