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