Depending on the card profile the sysmoUSIM-SJA2 may come with an USIM
application or with an USIM and an ISIM application installed. If the
ISIM application is not present the related application must not get
selected and the related files must not accessed. At the moment the
presence of the ISIM application is detected by checking the ATR,
however the ATR only identifies a certain OS version or type, not an
application. Lets look at the EF.DIR first and dtermine the presence of
the applications by looking for the related AID.
Modern SIM cards may come with multiple applications installed (e.g. an
additional ISIM application along with a regular USIM application). In
some debug cases it may be helpful to be able to list those
applications. Lets add some functionality for that.
sysmoUSIM-SJS1 features enableing/disableing its USIM application to
switch beween classic SIM and USIM mode. If the usim mode gets disabled
by excidant the testsuite would fail. Lets make sure that USIM mode is
always enabled before the testsuite is executed.
The commandline option -S states that the SQN parameters are reset to
default. Actually only the SQN counters are reset. Lets also reset the
related configuration parameters as well.
The run-tests script that runs the two testsuites for the two different
supported card models returns 0, even when the tests fail. This tricks
jenkins into thinking everything were ok. Lets make sure the script is
stopped immediately and returns with 1 when the tests fail.
Adding support for the new SJA2 simcard type requires comprensive
refactoring of sysmo-usim-tool. We resolve the commonalities of
both simcard models in a class based approach so that code duplication
is reduced to a minium.
- Refactor sysmo-usim-tool into a class based model
- Add support for SJA2 simcard models
- Add tests for SJA2 simcard models
At the moment we can only print single line hexdumps. This works fine
for short data. However, if data becomes longer we should be able to
display it over multiple lines.
The module sysmo-usimsjs1.py contains a lot of functions that could also
be methods of a class. Lets refactor those functions into class. This is
also an intermediate step towords support for different card models in
To find out which algorithm ID corresponds to which string and vice
versa we currently use tables and dictionaries. However, this way can be
generalized and other parts of the program can profit from that
ef_mlngc currently has no encoding method at the moment. Instead it
reads and writes the parameters directly using offsets. This is a bit
complicated, lets rather read and write the file in a single go and
encode/decode the contents using class methods (like we already do with
the other files)
The length of the ADM1 key is currently not checked. The key is 8
digits long for all sysmo-usim-sjs1 cards. Lets make sure that the
length is checked before trying to authenticate.
The file EF.AD contains the length of the MNC, this allows to phone to
distinguish where MCC/MNC end and where the MSIN number of the IMSI
begins. All cards are shipped with an MNC length of 2, which is fine for
the most situations, but when a MNC with 3 digits is needed the MNC
length value has to be updated. Otherwise the phone will recognize the
third digit of the MNC as part of the MSIN.
when programming the 3G authentication (EF_AUTH), the parameter for 2G
- make sure that parameter algo_3g_str is used to select the 3g
authentication algorithem, do not use algo_2g_str here.
Updated the test-data to the ADM1 key of the test card we currently have
in use. Developers must change this ADM1 key to match theur own
All tests need a physical card to be inserted in a reader. This card may
have a different IMSI and/or ICCID id set than the one that is expected
by the tests. Since sysmo-usim-tool.sjs1.py unconditionally displays
IMSI and ICCID we find those parameters in every .out file.
In order to run the unit-tests without changing the .out files very often
or having to manually prepare a test card we should write the expected
IMSI and ICCID before each testsuite is executed.
- Add a script to the testsuite that prepares the testcard, run this
script from run-tests before the actual tests are executed.
the resetting of the SEQ/SQN parameters is currently not tested, we
currently only read out the parameters. Lets test resetting as well.
At the moment we only read the milenage parameters but we do not write
them. Lets extend the unit test so that we test writing as well.
We unconditionally display the IMSI but we still lack support for
writing it. Lets support writing the IMSI as well in order to be more
- Add support for writing the IMSI
The test 04_algo.sh suggests that an algorithm should also be
identified by its number (this is the old way). Since we upgraded
the commandline interface to accept the names of the algorithms the
support for the old way that used numbers had been removed. However,
we should stay compatible with the old method to keep legacy scripts
of customers working.
- Check if the given parameter that references tha algorithem is
a number. If yes, us it, otherwise lookup the number by the
given string name.
When working in an environment with multiple card terminals, then it
might be helpful to make sure that only the intended target simcard
(sysmo-usim-sjs1) is accessed.
- Add atr parameter to the ICC, SIM and USIM classes. When no atr
is given, then ICC will pick any card as it was before
- Make sure to pass the ATR when the sim object is created
When using the -T option the user has to supply two authentication
alogorithms. One for 2G and one for 3G. The authentication algorithms
used to be symbolized by integer numbeers. This was later changed so
that the user could use the clear names of the algorithms. Unfortunately
the usage text was not changed.
- Update usage description
Collapse two functions of if-cascades into a data structure matching algo
numbers with string names. Use dicts produced from the initial tuple defining
the relation, to re-implement the functions.
When printing out algos, also print out the numbers set on the USIM.
This prepares for printing a list of available algos by commandline switch.
The idea of the testsuite is to test all functions of the utility
against one known SIM card that is inserted at the time the test
We could insert this card into a reader attached to a
permanently-running machine and then use that as a jenkins build