From 51cad0d23434f631c95aff25939081390e4758d0 Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Mon, 8 Nov 2021 15:45:10 +0100 Subject: [PATCH] filesystem: define class byte and select control bytes in profile The class byte and the select control bytes are different for SIM cards and UICC cards. Lets define those parameters in the card profile, so that we always get the correct parameters depending on which profile we use. Change-Id: I2d175e28bd748a4871b1373273b3a9be9ae8c4d0 Related: OS#5274 --- pySim/filesystem.py | 9 +++++++++ pySim/ts_102_221.py | 2 +- pySim/ts_51_011.py | 3 +-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pySim/filesystem.py b/pySim/filesystem.py index 6010c302..24872c02 100644 --- a/pySim/filesystem.py +++ b/pySim/filesystem.py @@ -1065,6 +1065,11 @@ class RuntimeState(object): self.card = card self.selected_file = self.mf # type: CardDF self.profile = profile + + # make sure the class and selection control bytes, which are specified + # by the card profile are used + self.card.set_apdu_parameter(cla=self.profile.cla, sel_ctrl=self.profile.sel_ctrl) + # add application ADFs + MF-files from profile apps = self._match_applications() for a in apps: @@ -1450,6 +1455,8 @@ class CardProfile(object): applications : List of CardApplications present on card sw : List of status word definitions shell_cmdsets : List of cmd2 shell command sets of profile-specific commands + cla : class byte that should be used with cards of this profile + sel_ctrl : selection control bytes class byte that should be used with cards of this profile """ self.name = name self.desc = kw.get("desc", None) @@ -1457,6 +1464,8 @@ class CardProfile(object): self.sw = kw.get("sw", []) self.applications = kw.get("applications", []) self.shell_cmdsets = kw.get("shell_cmdsets", []) + self.cla = kw.get("cla", "00") + self.sel_ctrl = kw.get("sel_ctrl", "0004") def __str__(self): return self.name diff --git a/pySim/ts_102_221.py b/pySim/ts_102_221.py index 3c99c4d9..61e236e2 100644 --- a/pySim/ts_102_221.py +++ b/pySim/ts_102_221.py @@ -683,7 +683,7 @@ class CardProfileUICC(CardProfile): }, } - super().__init__('UICC', desc='ETSI TS 102 221', files_in_mf=files, sw=sw) + super().__init__('UICC', desc='ETSI TS 102 221', cla="00", sel_ctrl="0004", files_in_mf=files, sw=sw) def decode_select_response(self, data_hex:str) -> Any: return decode_select_response(data_hex) diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py index a00cf0d1..c146a79e 100644 --- a/pySim/ts_51_011.py +++ b/pySim/ts_51_011.py @@ -976,7 +976,6 @@ def _decode_select_response(resp_hex): class CardProfileSIM(CardProfile): def __init__(self): - super().__init__('SIM', desc='GSM SIM Card', files_in_mf=[DF_TELECOM(), DF_GSM()]) - + super().__init__('SIM', desc='GSM SIM Card', cla="a0", sel_ctrl="0000", files_in_mf=[DF_TELECOM(), DF_GSM()]) def decode_select_response(self, data_hex:str) -> Any: return _decode_select_response(data_hex)