Hoernchen has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/43568?usp=email )
Change subject: sysmocom_sjs1: CardModel for the sysmoUSIM-SJS1 ......................................................................
sysmocom_sjs1: CardModel for the sysmoUSIM-SJS1
SJS1 model lifted off the the legacy SysmoUSIMSJS1.program(), ADM is ADM1 with CHV 0x0a, already used by the generic UiccCardBase default.
Change-Id: I32b011c68de5f990e709718b313b6f28a31ca78b --- M pySim/app.py A pySim/sysmocom_sjs1.py M tests/unittests/test_files.py 3 files changed, 63 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/68/43568/1
diff --git a/pySim/app.py b/pySim/app.py index 4e88788..cb7aa25 100644 --- a/pySim/app.py +++ b/pySim/app.py @@ -34,6 +34,7 @@ # CardModel is created, which will add the ATR-based matching and # calling of SysmocomSJA2.add_files. See CardModel.apply_matching_models import pySim.sysmocom_sja2 +import pySim.sysmocom_sjs1
# we need to import these modules so that the various sub-classes of # CardProfile are created, which will be used in init_card() to iterate diff --git a/pySim/sysmocom_sjs1.py b/pySim/sysmocom_sjs1.py new file mode 100644 index 0000000..8f8c044 --- /dev/null +++ b/pySim/sysmocom_sjs1.py @@ -0,0 +1,61 @@ +# coding=utf-8 +"""Utilities / Functions related to sysmocom sysmoUSIM-SJS1 cards + +(C) 2026 by sysmocom - s.f.m.c. GmbH +All Rights Reserved + +Author: Eric Wild ewild@sysmocom.de + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see http://www.gnu.org/licenses/. +""" + +from construct import Struct, Bytes, Flag +from osmocom.utils import * +from osmocom.construct import * + +from pySim.filesystem import * +from pySim.runtime import RuntimeState + + +class EF_Ki(TransparentEF): + _test_de_encode = [ + ('000102030405060708090a0b0c0d0e0f', + {'key': h2b('000102030405060708090a0b0c0d0e0f')}), + ] + + def __init__(self, fid='00ff', name='EF.Ki'): + super().__init__(fid, name=name, desc='K/Ki authentication key', size=(16, 16)) + self._construct = Struct('key'/Bytes(16)) + + +class EF_OPc(TransparentEF): + _test_de_encode = [ + ('016ca53d7a0a804561646816d7b0c702fb', + {'use_opc_instead_of_op': True, 'op_opc': h2b('6ca53d7a0a804561646816d7b0c702fb')}), + ] + + def __init__(self, fid='00f7', name='EF.OPc'): + super().__init__(fid, name=name, desc='OP/OPc for milenage', size=(17, 17)) + self._construct = Struct('use_opc_instead_of_op'/Flag, 'op_opc'/Bytes(16)) + + +class SysmoUSIMSJS1(CardModel): + _atrs = ["3b9f96801fc78031a073be21136743200718000001a5"] + + @classmethod + def add_files(cls, rs: RuntimeState): + """Add sysmoUSIM-SJS1 specific files to given RuntimeState.""" + # the key material lives in DF.GSM shared with ADF.USIM + if '7f20' in rs.mf.children: + rs.mf.children['7f20'].add_files([EF_Ki(), EF_OPc()]) diff --git a/tests/unittests/test_files.py b/tests/unittests/test_files.py index e7c50dc..e8a7bc0 100755 --- a/tests/unittests/test_files.py +++ b/tests/unittests/test_files.py @@ -27,6 +27,7 @@ import pySim.ts_31_103 import pySim.ts_51_011 import pySim.sysmocom_sja2 +import pySim.sysmocom_sjs1 import pySim.gsm_r import pySim.cdma_ruim