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)