bertlv_parse_one: Also return remainder after end of TLV
Change-Id: I10ebd87f72ee934561118b768108e5dc76277660
diff --git a/pySim-shell.py b/pySim-shell.py
index bbfe7e9..0069661 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -265,7 +265,7 @@
tags = self._cmd.rs.retrieve_tags()
for t in tags:
result = self._cmd.rs.retrieve_data(t)
- (tag, l, val) = bertlv_parse_one(h2b(result[0]))
+ (tag, l, val, remainer) = bertlv_parse_one(h2b(result[0]))
self._cmd.poutput("set_data 0x%02x %s" % (t, b2h(val)))
else:
raise RuntimeError('Unsupported structure "%s" of file "%s"' % (structure, filename))
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 780da26..8cdb23e 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -1260,7 +1260,7 @@
if not isinstance(self.selected_file, BerTlvEF):
raise TypeError("Only works with BER-TLV EF")
data, sw = self.card._scc.retrieve_data(self.selected_file.fid, 0x5c)
- tag, length, value = bertlv_parse_one(h2b(data))
+ tag, length, value, remainder = bertlv_parse_one(h2b(data))
return list(value)
def set_data(self, tag:int, data_hex:str):
diff --git a/pySim/utils.py b/pySim/utils.py
index 1191983..3d96580 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -155,7 +155,7 @@
else:
raise ValueError("Length > 32bits not supported")
-def bertlv_parse_one(binary:bytes) -> (dict, int, bytes):
+def bertlv_parse_one(binary:bytes) -> (dict, int, bytes, bytes):
"""Parse a single TLV IE at the start of the given binary data.
Args:
binary : binary input data of BER-TLV length field
@@ -164,7 +164,9 @@
"""
(tagdict, remainder) = bertlv_parse_tag(binary)
(length, remainder) = bertlv_parse_len(remainder)
- return (tagdict, length, remainder)
+ value = remainder[:length]
+ remainder = remainder[length:]
+ return (tagdict, length, value, remainder)