From 64b28378bc7206a42d149ce480e1e1b14f4bef6b Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Tue, 5 Oct 2021 13:58:25 +0200 Subject: [PATCH] cards: FairwavesSIM: force SIM APDUs during programming The FairwavesSIM programming fails when the card is accessed with USIM APDUs. To keep it working temporarly switch to SIM APDUs during programming. Change-Id: I8f02625d2b620ecdf4b2afc27a8750119b707152 --- pySim/cards.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pySim/cards.py b/pySim/cards.py index c38b1850..5e2e9fef 100644 --- a/pySim/cards.py +++ b/pySim/cards.py @@ -1123,8 +1123,25 @@ class FairwavesSIM(UsimCard): data, sw = self._scc.update_binary(self._EF['OP/OPC'], content) return sw - def program(self, p): + # For some reason the card programming only works when the card + # is handled as a classic SIM, even though it is an USIM, so we + # reconfigure the class byte and the select control field on + # the fly. When the programming is done the original values are + # restored. + cla_byte_orig = self._scc.cla_byte + sel_ctrl_orig = self._scc.sel_ctrl + self._scc.cla_byte = "a0" + self._scc.sel_ctrl = "0000" + + try: + self._program(p) + finally: + # restore original cla byte and sel ctrl + self._scc.cla_byte = cla_byte_orig + self._scc.sel_ctrl = sel_ctrl_orig + + def _program(self, p): # authenticate as ADM1 if not p['pin_adm']: raise ValueError("Please provide a PIN-ADM as there is no default one")