<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>