laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/37535?usp=email )
Change subject: pySim.apdu: Get rid of HexAdapter ......................................................................
pySim.apdu: Get rid of HexAdapter
In the past, we always wrapped a HexAdapter around bytes-like data in order to make sure it's printed as hex-digits. However, now that we are doing JSON output it's much easier to let the pySim.utils.JsonEncoder take care of this in a generic way.
We should do a similar migrtaion all over pySim (pySim-shell, filesystem, etc.) - but for now only do it in the low-hanging fruit of pySim-trace aka pySim.apdu
Change-Id: I0cde40b2db08b4db9c10c1ece9ca6fdd42aa9154 --- M pySim/apdu/__init__.py M pySim/apdu/ts_102_221.py M pySim/apdu/ts_31_102.py 3 files changed, 41 insertions(+), 23 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/35/37535/1
diff --git a/pySim/apdu/__init__.py b/pySim/apdu/__init__.py index fbe7e6b..469b2fa 100644 --- a/pySim/apdu/__init__.py +++ b/pySim/apdu/__init__.py @@ -150,8 +150,8 @@ # fall-back constructs if the derived class provides no override _construct_p1 = Byte _construct_p2 = Byte - _construct = HexAdapter(GreedyBytes) - _construct_rsp = HexAdapter(GreedyBytes) + _construct = GreedyBytes + _construct_rsp = GreedyBytes _tlv = None _tlv_rsp = None
diff --git a/pySim/apdu/ts_102_221.py b/pySim/apdu/ts_102_221.py index eaac868..491c0d3 100644 --- a/pySim/apdu/ts_102_221.py +++ b/pySim/apdu/ts_102_221.py @@ -99,7 +99,7 @@ logger.warning('SELECT UNKNOWN FID %s', file_hex) elif mode == 'df_name': # Select by AID (can be sub-string!) - aid = self.cmd_dict['body'] + aid = b2h(self.cmd_dict['body']) sels = lchan.rs.mf.get_app_selectables(['AIDS']) adf = self._find_aid_substr(sels, aid) if adf: @@ -115,7 +115,7 @@ self.file = lchan.selected_file if 'body' in self.rsp_dict: # not every SELECT is asking for the FCP in response... - return lchan.selected_file.decode_select_response(self.rsp_dict['body']) + return lchan.selected_file.decode_select_response(b2h(self.rsp_dict['body'])) return None
@@ -128,7 +128,7 @@
def process_on_lchan(self, lchan): if self.cmd_dict['p2'] == 'response_like_select': - return lchan.selected_file.decode_select_response(self.rsp_dict['body']) + return lchan.selected_file.decode_select_response(b2h(self.rsp_dict['body']))
def _decode_binary_p1p2(p1, p2) -> Dict: ret = {} diff --git a/pySim/apdu/ts_31_102.py b/pySim/apdu/ts_31_102.py index c335773..58f91a2 100644 --- a/pySim/apdu/ts_31_102.py +++ b/pySim/apdu/ts_31_102.py @@ -42,28 +42,28 @@ BitsInteger(4), 'authentication_context'/Enum(BitsInteger(3), gsm=0, umts=1, vgcs_vbs=2, gba=4)) - _cs_cmd_gsm_3g = Struct('_rand_len'/Int8ub, 'rand'/HexAdapter(Bytes(this._rand_len)), - '_autn_len'/COptional(Int8ub), 'autn'/If(this._autn_len, HexAdapter(Bytes(this._autn_len)))) - _cs_cmd_vgcs = Struct('_vsid_len'/Int8ub, 'vservice_id'/HexAdapter(Bytes(this._vsid_len)), - '_vkid_len'/Int8ub, 'vk_id'/HexAdapter(Bytes(this._vkid_len)), - '_vstk_rand_len'/Int8ub, 'vstk_rand'/HexAdapter(Bytes(this._vstk_rand_len))) - _cmd_gba_bs = Struct('_rand_len'/Int8ub, 'rand'/HexAdapter(Bytes(this._rand_len)), - '_autn_len'/Int8ub, 'autn'/HexAdapter(Bytes(this._autn_len))) - _cmd_gba_naf = Struct('_naf_id_len'/Int8ub, 'naf_id'/HexAdapter(Bytes(this._naf_id_len)), - '_impi_len'/Int8ub, 'impi'/HexAdapter(Bytes(this._impi_len))) + _cs_cmd_gsm_3g = Struct('_rand_len'/Int8ub, 'rand'/Bytes(this._rand_len), + '_autn_len'/COptional(Int8ub), 'autn'/If(this._autn_len, Bytes(this._autn_len))) + _cs_cmd_vgcs = Struct('_vsid_len'/Int8ub, 'vservice_id'/Bytes(this._vsid_len), + '_vkid_len'/Int8ub, 'vk_id'/Bytes(this._vkid_len), + '_vstk_rand_len'/Int8ub, 'vstk_rand'/Bytes(this._vstk_rand_len)) + _cmd_gba_bs = Struct('_rand_len'/Int8ub, 'rand'/Bytes(this._rand_len), + '_autn_len'/Int8ub, 'autn'/Bytes(this._autn_len)) + _cmd_gba_naf = Struct('_naf_id_len'/Int8ub, 'naf_id'/Bytes(this._naf_id_len), + '_impi_len'/Int8ub, 'impi'/Bytes(this._impi_len)) _cs_cmd_gba = Struct('tag'/Int8ub, 'body'/Switch(this.tag, { 0xDD: 'bootstrap'/_cmd_gba_bs, 0xDE: 'naf_derivation'/_cmd_gba_naf })) - _cs_rsp_gsm = Struct('_len_sres'/Int8ub, 'sres'/HexAdapter(Bytes(this._len_sres)), - '_len_kc'/Int8ub, 'kc'/HexAdapter(Bytes(this._len_kc))) - _rsp_3g_ok = Struct('_len_res'/Int8ub, 'res'/HexAdapter(Bytes(this._len_res)), - '_len_ck'/Int8ub, 'ck'/HexAdapter(Bytes(this._len_ck)), - '_len_ik'/Int8ub, 'ik'/HexAdapter(Bytes(this._len_ik)), - '_len_kc'/COptional(Int8ub), 'kc'/If(this._len_kc, HexAdapter(Bytes(this._len_kc)))) - _rsp_3g_sync = Struct('_len_auts'/Int8ub, 'auts'/HexAdapter(Bytes(this._len_auts))) + _cs_rsp_gsm = Struct('_len_sres'/Int8ub, 'sres'/Bytes(this._len_sres), + '_len_kc'/Int8ub, 'kc'/Bytes(this._len_kc)) + _rsp_3g_ok = Struct('_len_res'/Int8ub, 'res'/Bytes(this._len_res), + '_len_ck'/Int8ub, 'ck'/Bytes(this._len_ck), + '_len_ik'/Int8ub, 'ik'/Bytes(this._len_ik), + '_len_kc'/COptional(Int8ub), 'kc'/If(this._len_kc, Bytes(this._len_kc))) + _rsp_3g_sync = Struct('_len_auts'/Int8ub, 'auts'/Bytes(this._len_auts)) _cs_rsp_3g = Struct('tag'/Int8ub, 'body'/Switch(this.tag, { 0xDB: 'success'/_rsp_3g_ok, 0xDC: 'sync_fail'/_rsp_3g_sync})) - _cs_rsp_vgcs = Struct(Const(b'\xDB'), '_vstk_len'/Int8ub, 'vstk'/HexAdapter(Bytes(this._vstk_len))) - _cs_rsp_gba_naf = Struct(Const(b'\xDB'), '_ks_ext_naf_len'/Int8ub, 'ks_ext_naf'/HexAdapter(Bytes(this._ks_ext_naf_len))) + _cs_rsp_vgcs = Struct(Const(b'\xDB'), '_vstk_len'/Int8ub, 'vstk'/Bytes(this._vstk_len)) + _cs_rsp_gba_naf = Struct(Const(b'\xDB'), '_ks_ext_naf_len'/Int8ub, 'ks_ext_naf'/Bytes(this._ks_ext_naf_len)) def _decode_cmd(self) -> Dict: r = {} r['p1'] = parse_construct(self._construct_p1, self.p1.to_bytes(1, 'big'))