From 0e9f93fdd613ec53b9123335bc6f1ed71b8a06b6 Mon Sep 17 00:00:00 2001 From: Sebastian Viviani Date: Fri, 17 Apr 2020 16:42:09 +0100 Subject: commands.py: fix read_binary for lengths > 256 fixed commit with commented changes Change-Id: Ie9c61caa1412606254b44a3a24f26ad44950e73a --- pySim/commands.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pySim/commands.py b/pySim/commands.py index e077289..7288b19 100644 --- a/pySim/commands.py +++ b/pySim/commands.py @@ -119,8 +119,17 @@ class SimCardCommands(object): return (None, None) if length is None: length = self.__len(r) - offset - pdu = self.cla_byte + 'b0%04x%02x' % (offset, (min(256, length) & 0xff)) - return self._tp.send_apdu(pdu) + total_data = '' + while offset < length: + chunk_len = min(255, length-offset) + pdu = self.cla_byte + 'b0%04x%02x' % (offset, chunk_len) + data,sw = self._tp.send_apdu(pdu) + if sw == '9000': + total_data += data + offset += chunk_len + else: + raise ValueError('Failed to read (offset %d)' % (offset)) + return total_data, sw def update_binary(self, ef, data, offset=0, verify=False): self.select_file(ef) -- cgit v1.2.3