<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/23172">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">commands.py: rename select_file() to select_path()<br><br>In reality, the function is not a simple avstraction around the SELECT<br>command, but it iterates over a list/path and selects at each element.<br><br>Change-Id: I63e01155de4ae47aeed8500708c0eb6580c7b8d1<br>---<br>M pySim/cards.py<br>M pySim/commands.py<br>2 files changed, 37 insertions(+), 37 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/72/23172/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim/cards.py b/pySim/cards.py</span><br><span>index 2d93713..36bd91e 100644</span><br><span>--- a/pySim/cards.py</span><br><span>+++ b/pySim/cards.py</span><br><span>@@ -44,7 +44,7 @@</span><br><span>           return</span><br><span> </span><br><span>   def file_exists(self, fid):</span><br><span style="color: hsl(0, 100%, 40%);">-             res_arr = self._scc.try_select_file(fid)</span><br><span style="color: hsl(120, 100%, 40%);">+              res_arr = self._scc.try_select_path(fid)</span><br><span>             for res in res_arr:</span><br><span>                  if res[1] != '9000':</span><br><span>                                 return False</span><br><span>@@ -477,7 +477,7 @@</span><br><span>           """</span><br><span>           f = self._files['name']</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00', '7f4d', f[0]])</span><br><span style="color: hsl(120, 100%, 40%);">+             r = self._scc.select_path(['3f00', '7f4d', f[0]])</span><br><span>            rec_len = int(r[-1][28:30], 16)</span><br><span>              tlen = int(r[-1][4:8],16)</span><br><span>            rec_cnt = (tlen / rec_len) - 1</span><br><span>@@ -489,7 +489,7 @@</span><br><span> </span><br><span>     def program(self, p):</span><br><span>                # Go to dir</span><br><span style="color: hsl(0, 100%, 40%);">-             self._scc.select_file(['3f00', '7f4d'])</span><br><span style="color: hsl(120, 100%, 40%);">+               self._scc.select_path(['3f00', '7f4d'])</span><br><span> </span><br><span>          # Home PLMN in PLMN_Sel format</span><br><span>               hplmn = enc_plmn(p['mcc'], p['mnc'])</span><br><span>@@ -533,7 +533,7 @@</span><br><span>                   # FIXME</span><br><span> </span><br><span>          # Write PLMN_Sel forcefully as well</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00', '7f20', '6f30'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f20', '6f30'])</span><br><span>          tl = int(r[-1][4:8], 16)</span><br><span> </span><br><span>                 hplmn = enc_plmn(p['mcc'], p['mnc'])</span><br><span>@@ -607,7 +607,7 @@</span><br><span>           and entry size</span><br><span>               """</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-          r = self._scc.select_file(['3f00', '000c'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '000c'])</span><br><span>          rec_len = int(r[-1][28:30], 16)</span><br><span>              tlen = int(r[-1][4:8],16)</span><br><span>            rec_cnt = (tlen / rec_len) - 1</span><br><span>@@ -619,7 +619,7 @@</span><br><span> </span><br><span>     def program(self, p):</span><br><span>                # Home PLMN</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00', '7f20', '6f30'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f20', '6f30'])</span><br><span>          tl = int(r[-1][4:8], 16)</span><br><span> </span><br><span>                 hplmn = enc_plmn(p['mcc'], p['mnc'])</span><br><span>@@ -674,11 +674,11 @@</span><br><span>                 self._scc.verify_chv(5, pin)</span><br><span> </span><br><span>             # EF.ICCID</span><br><span style="color: hsl(0, 100%, 40%);">-              r = self._scc.select_file(['3f00', '2fe2'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '2fe2'])</span><br><span>          data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))</span><br><span> </span><br><span>                # EF.IMSI</span><br><span style="color: hsl(0, 100%, 40%);">-               r = self._scc.select_file(['3f00', '7f20', '6f07'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f20', '6f07'])</span><br><span>          data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))</span><br><span> </span><br><span>          # EF.ACC</span><br><span>@@ -687,7 +687,7 @@</span><br><span> </span><br><span>           # EF.SMSP</span><br><span>            if p.get('smsp'):</span><br><span style="color: hsl(0, 100%, 40%);">-                       r = self._scc.select_file(['3f00', '7f10', '6f42'])</span><br><span style="color: hsl(120, 100%, 40%);">+                   r = self._scc.select_path(['3f00', '7f10', '6f42'])</span><br><span>                  data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 80))</span><br><span> </span><br><span>               # Set the Ki using proprietary command</span><br><span>@@ -695,13 +695,13 @@</span><br><span>               data, sw = self._scc._tp.send_apdu(pdu)</span><br><span> </span><br><span>          # EF.HPLMN</span><br><span style="color: hsl(0, 100%, 40%);">-              r = self._scc.select_file(['3f00', '7f20', '6f30'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f20', '6f30'])</span><br><span>          size = int(r[-1][4:8], 16)</span><br><span>           hplmn = enc_plmn(p['mcc'], p['mnc'])</span><br><span>                 self._scc.update_binary('6f30', hplmn + 'ff' * (size-3))</span><br><span> </span><br><span>                 # EF.SPN (Service Provider Name)</span><br><span style="color: hsl(0, 100%, 40%);">-                r = self._scc.select_file(['3f00', '7f20', '6f30'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f20', '6f30'])</span><br><span>          size = int(r[-1][4:8], 16)</span><br><span>           # FIXME</span><br><span> </span><br><span>@@ -772,7 +772,7 @@</span><br><span>    def program(self, p):</span><br><span> </span><br><span>            # select MF</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00'])</span><br><span> </span><br><span>              # authenticate as SUPER ADM using default key</span><br><span>                self._scc.verify_chv(0x0b, h2b("3838383838383838"))</span><br><span>@@ -798,7 +798,7 @@</span><br><span>          data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))</span><br><span> </span><br><span>                # select DF_GSM</span><br><span style="color: hsl(0, 100%, 40%);">-         r = self._scc.select_file(['7f20'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['7f20'])</span><br><span> </span><br><span>              # write EF.IMSI</span><br><span>              data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))</span><br><span>@@ -808,7 +808,7 @@</span><br><span>                        data, sw = self._scc.update_binary('6f78', lpad(p['acc'], 4))</span><br><span> </span><br><span>            # get size and write EF.HPLMN</span><br><span style="color: hsl(0, 100%, 40%);">-           r = self._scc.select_file(['6f30'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['6f30'])</span><br><span>          size = int(r[-1][4:8], 16)</span><br><span>           hplmn = enc_plmn(p['mcc'], p['mnc'])</span><br><span>                 self._scc.update_binary('6f30', hplmn + 'ff' * (size-3))</span><br><span>@@ -820,7 +820,7 @@</span><br><span>               data, sw = self._scc.update_binary('0001', p['ki'], 3)</span><br><span> </span><br><span>           # select DF_TELECOM</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00', '7f10'])</span><br><span> </span><br><span>              # write EF.SMSP</span><br><span>              if p.get('smsp'):</span><br><span>@@ -862,13 +862,13 @@</span><br><span>            self.verify_adm(h2b(p['pin_adm']))</span><br><span> </span><br><span>               # select MF</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00'])</span><br><span> </span><br><span>              # write EF.ICCID</span><br><span>             data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))</span><br><span> </span><br><span>                # select DF_GSM</span><br><span style="color: hsl(0, 100%, 40%);">-         r = self._scc.select_file(['7f20'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['7f20'])</span><br><span> </span><br><span>              # set Ki in proprietary file</span><br><span>                 data, sw = self._scc.update_binary('00FF', p['ki'])</span><br><span>@@ -921,7 +921,7 @@</span><br><span> </span><br><span>                # EF.SMSP</span><br><span>            if p.get('smsp'):</span><br><span style="color: hsl(0, 100%, 40%);">-                       r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+                   r = self._scc.select_path(['3f00', '7f10'])</span><br><span>                  data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True)</span><br><span> </span><br><span>              # EF.MSISDN</span><br><span>@@ -932,7 +932,7 @@</span><br><span>                    msisdn = enc_msisdn(p['msisdn'])</span><br><span>                     data = 'ff' * 20 + msisdn + 'ff' * 2</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                        r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+                   r = self._scc.select_path(['3f00', '7f10'])</span><br><span>                  data, sw = self._scc.update_record('6F40', 1, data, force_len=True)</span><br><span> </span><br><span> </span><br><span>@@ -1106,12 +1106,12 @@</span><br><span>                self._scc.verify_chv(0x0A, h2b(p['pin_adm']))</span><br><span> </span><br><span>            # select MF</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self._scc.select_file(['3f00'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['3f00'])</span><br><span> </span><br><span>              # write EF.ICCID</span><br><span>             data, sw = self._scc.update_binary('2fe2', enc_iccid(p['iccid']))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           r = self._scc.select_file(['7ff0'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['7ff0'])</span><br><span> </span><br><span>              # set Ki in proprietary file</span><br><span>                 data, sw = self._scc.update_binary('FF02', p['ki'])</span><br><span>@@ -1120,7 +1120,7 @@</span><br><span>          data, sw = self._scc.update_binary('FF01', p['opc'])</span><br><span> </span><br><span>             # select DF_GSM</span><br><span style="color: hsl(0, 100%, 40%);">-         r = self._scc.select_file(['7f20'])</span><br><span style="color: hsl(120, 100%, 40%);">+           r = self._scc.select_path(['7f20'])</span><br><span> </span><br><span>              # write EF.IMSI</span><br><span>              data, sw = self._scc.update_binary('6f07', enc_imsi(p['imsi']))</span><br><span>@@ -1269,7 +1269,7 @@</span><br><span>                      print("Warning: Programming of the ICCID is not implemented for this type of card.")</span><br><span> </span><br><span>           # select DF_GSM</span><br><span style="color: hsl(0, 100%, 40%);">-         self._scc.select_file(['7f20'])</span><br><span style="color: hsl(120, 100%, 40%);">+               self._scc.select_path(['7f20'])</span><br><span> </span><br><span>          # write EF.IMSI</span><br><span>              if p.get('imsi'):</span><br><span>@@ -1307,7 +1307,7 @@</span><br><span> </span><br><span>                # EF.SMSP</span><br><span>            if p.get('smsp'):</span><br><span style="color: hsl(0, 100%, 40%);">-                       r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+                   r = self._scc.select_path(['3f00', '7f10'])</span><br><span>                  data, sw = self._scc.update_record('6f42', 1, lpad(p['smsp'], 104), force_len=True)</span><br><span> </span><br><span>              # EF.MSISDN</span><br><span>@@ -1318,7 +1318,7 @@</span><br><span>                  msisdn = enc_msisdn(p['msisdn'])</span><br><span>                     content = 'ff' * 20 + msisdn + 'ff' * 2</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                     r = self._scc.select_file(['3f00', '7f10'])</span><br><span style="color: hsl(120, 100%, 40%);">+                   r = self._scc.select_path(['3f00', '7f10'])</span><br><span>                  data, sw = self._scc.update_record('6F40', 1, content, force_len=True)</span><br><span> </span><br><span>           # EF.ACC</span><br><span>@@ -1332,8 +1332,8 @@</span><br><span> </span><br><span>                 # update EF-SIM_AUTH_KEY (and EF-USIM_AUTH_KEY_2G, which is</span><br><span>          # hard linked to EF-USIM_AUTH_KEY)</span><br><span style="color: hsl(0, 100%, 40%);">-              self._scc.select_file(['3f00'])</span><br><span style="color: hsl(0, 100%, 40%);">-         self._scc.select_file(['a515'])</span><br><span style="color: hsl(120, 100%, 40%);">+               self._scc.select_path(['3f00'])</span><br><span style="color: hsl(120, 100%, 40%);">+               self._scc.select_path(['a515'])</span><br><span>              if p.get('ki'):</span><br><span>                      self._scc.update_binary('6f20', p['ki'], 1)</span><br><span>          if p.get('opc'):</span><br><span>diff --git a/pySim/commands.py b/pySim/commands.py</span><br><span>index 327de57..d6159ea 100644</span><br><span>--- a/pySim/commands.py</span><br><span>+++ b/pySim/commands.py</span><br><span>@@ -99,7 +99,7 @@</span><br><span>        def sel_ctrl(self, value):</span><br><span>           self._sel_ctrl = value</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      def try_select_file(self, dir_list):</span><br><span style="color: hsl(120, 100%, 40%);">+  def try_select_path(self, dir_list):</span><br><span>                 rv = []</span><br><span>              if type(dir_list) is not list:</span><br><span>                       dir_list = [dir_list]</span><br><span>@@ -110,7 +110,7 @@</span><br><span>                          return rv</span><br><span>            return rv</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   def select_file(self, dir_list):</span><br><span style="color: hsl(120, 100%, 40%);">+      def select_path(self, dir_list):</span><br><span>             rv = []</span><br><span>              if type(dir_list) is not list:</span><br><span>                       dir_list = [dir_list]</span><br><span>@@ -124,7 +124,7 @@</span><br><span>          return self._tp.send_apdu_checksw(self.cla_byte + "a4" + "0404" + aidlen + aid)</span><br><span> </span><br><span>      def read_binary(self, ef, length=None, offset=0):</span><br><span style="color: hsl(0, 100%, 40%);">-               r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             if len(r[-1]) == 0:</span><br><span>                  return (None, None)</span><br><span>          if length is None:</span><br><span>@@ -142,7 +142,7 @@</span><br><span>             return total_data, sw</span><br><span> </span><br><span>    def update_binary(self, ef, data, offset=0, verify=False):</span><br><span style="color: hsl(0, 100%, 40%);">-              self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+          self.select_path(ef)</span><br><span>                 pdu = self.cla_byte + 'd6%04x%02x' % (offset, len(data) // 2) + data</span><br><span>                 res = self._tp.send_apdu_checksw(pdu)</span><br><span>                if verify:</span><br><span>@@ -155,13 +155,13 @@</span><br><span>                   raise ValueError('Binary verification failed (expected %s, got %s)' % (data.lower(), res[0].lower()))</span><br><span> </span><br><span>    def read_record(self, ef, rec_no):</span><br><span style="color: hsl(0, 100%, 40%);">-              r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             rec_length = self.__record_len(r)</span><br><span>            pdu = self.cla_byte + 'b2%02x04%02x' % (rec_no, rec_length)</span><br><span>          return self._tp.send_apdu(pdu)</span><br><span> </span><br><span>   def update_record(self, ef, rec_no, data, force_len=False, verify=False):</span><br><span style="color: hsl(0, 100%, 40%);">-               r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             if not force_len:</span><br><span>                    rec_length = self.__record_len(r)</span><br><span>                    if (len(data) // 2 != rec_length):</span><br><span>@@ -180,21 +180,21 @@</span><br><span>                   raise ValueError('Record verification failed (expected %s, got %s)' % (data.lower(), res[0].lower()))</span><br><span> </span><br><span>    def record_size(self, ef):</span><br><span style="color: hsl(0, 100%, 40%);">-              r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             return self.__record_len(r)</span><br><span> </span><br><span>      def record_count(self, ef):</span><br><span style="color: hsl(0, 100%, 40%);">-             r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             return self.__len(r) // self.__record_len(r)</span><br><span> </span><br><span>     def binary_size(self, ef):</span><br><span style="color: hsl(0, 100%, 40%);">-              r = self.select_file(ef)</span><br><span style="color: hsl(120, 100%, 40%);">+              r = self.select_path(ef)</span><br><span>             return self.__len(r)</span><br><span> </span><br><span>     def run_gsm(self, rand):</span><br><span>             if len(rand) != 32:</span><br><span>                  raise ValueError('Invalid rand')</span><br><span style="color: hsl(0, 100%, 40%);">-                self.select_file(['3f00', '7f20'])</span><br><span style="color: hsl(120, 100%, 40%);">+            self.select_path(['3f00', '7f20'])</span><br><span>           return self._tp.send_apdu(self.cla_byte + '88000010' + rand)</span><br><span> </span><br><span>     def reset_card(self):</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/23172">change 23172</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/pysim/+/23172"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I63e01155de4ae47aeed8500708c0eb6580c7b8d1 </div>
<div style="display:none"> Gerrit-Change-Number: 23172 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>