Attention is currently required from: dexter, laforge.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/pysim/+/38117?usp=email
to look at the new patch set (#4).
The following approvals got outdated and were removed:
Verified-1 by Jenkins Builder
Change subject: ts_51_011: replace encoding of EF.MSISDN with construct model
......................................................................
ts_51_011: replace encoding of EF.MSISDN with construct model
The encoding of EF.MSISDN is currently done with enc_msisdn and
dec_msisdn from utils.py. Let's replace this with a construct
based model, similar to the one we already use with EF.ADN
Related: OS#5714
Change-Id: I647f5c63f7f87902a86c0c5d8e92fdc7f4350a5a
---
M pySim/ts_51_011.py
1 file changed, 17 insertions(+), 12 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/17/38117/4
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38117?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I647f5c63f7f87902a86c0c5d8e92fdc7f4350a5a
Gerrit-Change-Number: 38117
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Attention is currently required from: dexter.
laforge has posted comments on this change by dexter. ( https://gerrit.osmocom.org/c/pysim/+/38118?usp=email )
Change subject: utils: support alpha identifier in enc/dec_msisdn
......................................................................
Patch Set 2: Code-Review+1
(1 comment)
Patchset:
PS2:
let's please stop doing any work on new features for legacy pysim-{prog,read}. The time is invested much better by working on new tools based on the pySim.filesystem / pySim-shell architecture.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38118?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I19ec8ba14551ec282fc0cc12ae2f6d528bdfc527
Gerrit-Change-Number: 38118
Gerrit-PatchSet: 2
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Gerrit-Comment-Date: Tue, 17 Sep 2024 15:48:59 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/38166?usp=email )
Change subject: pySim-prog: rework documentation
......................................................................
pySim-prog: rework documentation
The documentation for the classic pySim-prog application is a bit
sparse. Let's rework it so that it includes the most important
information that is required to operate pySim-prog. Let's also add
a section about how the batch mode and CSV files are used.
Related: SYS#4120
Change-Id: I1d1a65154cea7fa77428b412fcf8c7b4cba629b1
---
M docs/legacy.rst
1 file changed, 171 insertions(+), 25 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/docs/legacy.rst b/docs/legacy.rst
index 0961d17..4da9825 100644
--- a/docs/legacy.rst
+++ b/docs/legacy.rst
@@ -1,20 +1,20 @@
-Legacy tools
+Legacy tools
============
*legacy tools* are the classic ``pySim-prog`` and ``pySim-read`` programs that
existed long before ``pySim-shell``.
-These days, you should primarily use ``pySim-shell`` instead of these
+These days, it is highly recommended to use ``pySim-shell`` instead of these
legacy tools.
pySim-prog
----------
-``pySim-prog`` was the first part of the pySim software suite. It started as
-a tool to write ICCID, IMSI, MSISDN and Ki to very simplistic SIM cards, and
-was later extended to a variety of other cards. As the number of features supported
-became no longer bearable to express with command-line arguments, `pySim-shell` was
-created.
+``pySim-prog`` was the first part of the pySim software suite. It started as a
+tool to write ICCID, IMSI, MSISDN and Ki to very simplistic SIM cards, and was
+later extended to a variety of other cards. As the number of features supported
+became no longer bearable to express with command-line arguments, `pySim-shell`
+was created.
Basic use cases can still use `pySim-prog`.
@@ -22,36 +22,182 @@
~~~~~~~~~~~~~~~~~~~~~~~~~
Two modes are possible:
- - one where you specify every parameter manually :
+ - one where the user specifies every parameter manually:
-``./pySim-prog.py -n 26C3 -c 49 -x 262 -y 42 -i <IMSI> -s <ICCID>``
+ This is the most common way to use ``pySim-prog``. The user will specify all relevant parameters directly via the
+ commandline. A typical commandline would look like this:
+
+ ``pySim-prog.py -p <pcsc_reader> --ki <ki_value> --opc <opc_value> --mcc <mcc_value> --mnc <mnc_value>
+ --country <country_code> --imsi <imsi_value> --iccid <iccid_value> --pin-adm <adm_pin>``
+
+ Please note, that this already lengthy commandline still only contains the most common card parameters. For a full
+ list of all possible parameters, use the ``--help`` option of ``pySim-prog``. It is also important to mention
+ that not all parameters are supported by all card types. In particular, very simple programmable SIM cards will only
+ support a very basic set of parameters, such as MCC, MNC, IMSI and KI values.
+
+ - one where the parameters are generated from a minimal set:
+
+ It is also possible to leave the generation of certain parameters to ``pySim-prog``. This is in particular helpful
+ when a large number of cards should be initialized with randomly generated key material.
+
+ ``pySim-prog.py -p <pcsc_reader> --mcc <mcc_value> --mnc <mnc_value> --secret <random_secret> --num <card_number> --pin-adm <adm_pin>``
+
+ The parameter ``--secret`` specifies a random seed that is used to generate the card individual parameters. (IMSI).
+ The secret should contain enough randomness to avoid conflicts. It is also recommended to store the secret safely,
+ in case cards have to be re-generated or the current card batch has to be extended later. For security reasons, the
+ key material, which is also card individual, will not be derived from the random seed. Instead a new random set of
+ Ki and OPc will be generated during each programming cycle. This means fresh keys are generated, even when the
+ ``--num`` remains unchanged.
+
+ The parameter ``--num`` specifies a card individual number. This number will be manged into the random seed so that
+ it serves as an identifier for a particular set of randomly generated parameters.
+
+ In the example above the parameters ``--mcc``, and ``--mnc`` are specified as well, since they identify the GSM
+ network where the cards should operate in, it is absolutely required to keep them static. ``pySim-prog`` will use
+ those parameters to generate a valid IMSI that thas the specified MCC/MNC at the beginning and a random tail.
+
+Specifying the card type:
+
+``pySim-prog`` usually autodetects the card type. In case auto detection does not work, it is possible to specify
+the parameter ``--type``. The following card types are supported:
+
+ * Fairwaves-SIM
+ * fakemagicsim
+ * gialersim
+ * grcardsim
+ * magicsim
+ * OpenCells-SIM
+ * supersim
+ * sysmoISIM-SJA2
+ * sysmoISIM-SJA5
+ * sysmosim-gr1
+ * sysmoSIM-GR2
+ * sysmoUSIM-SJS1
+ * Wavemobile-SIM
+
+Specifying the card reader:
+
+It is most common to use ``pySim-prog`` together whith a PCSC reader. The PCSC reader number is specified via the
+``--pcsc-device`` or ``-p`` option. However, other reader types (such as serial readers and modems) are supported. Use
+the ``--help`` option of ``pySim-prog`` for more information.
- - one where they are generated from some minimal set :
+Card programming using CSV files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-``./pySim-prog.py -n 26C3 -c 49 -x 262 -y 42 -z <random_string_of_choice> -j <card_num>``
+To simplify the card programming process, ``pySim-prog`` also allows to read
+the card parameters from a CSV file. When a CSV file is used as input, the
+user does not have to craft an individual commandline for each card. Instead
+all card related parameters are automatically drawn from the CSV file.
- With <random_string_of_choice> and <card_num>, the soft will generate
- 'predictable' IMSI and ICCID, so make sure you choose them so as not to
- conflict with anyone. (for eg. your name as <random_string_of_choice> and
- 0 1 2 ... for <card num>).
+A CSV files may hold rows for multiple (hundreds or even thousands) of
+cards. ``pySim-prog`` is able to identify the rows either by ICCID
+(recommended as ICCIDs are normally not changed) or IMSI.
- You also need to enter some parameters to select the device :
- -t TYPE : type of card (supersim, magicsim, fakemagicsim or try 'auto')
- -d DEV : Serial port device (default /dev/ttyUSB0)
- -b BAUD : Baudrate (default 9600)
+The CSV file format is a flexible format with mandatory and optional columns,
+here the same rules as for the commandline parameters apply. The column names
+match the command line options. The CSV file may also contain columns that are
+unknown to pySim-prog, such as inventory numbers, nicknames or parameters that
+are unrelated to the card programming process. ``pySim-prog`` will silently
+ignore all unknown columns.
+
+A CSV file may contain the following columns:
+
+* name
+* iccid (typically used as key)
+* mcc
+* mnc
+* imsi (may be used as key, but not recommended)
+* smsp
+* ki
+* opc
+* acc
+* pin_adm, adm1 or pin_adm_hex (must be present)
+* msisdn
+* epdgid
+* epdgSelection
+* pcscf
+* ims_hdomain
+* impi
+* impu
+* opmode
+* fplmn
+
+Due to historical reasons, and to maintain the compatibility between multiple different CSV file formats, the ADM pin
+may be stored in three different columns. Only one of the three columns must be available.
+
+* adm1: This column contains the ADM pin in numeric ASCII digit format. This format is the most common.
+* pin_adm: Same as adm1, only the column name is different
+* pin_adm_hex: If the ADM pin consists of raw HEX digits, rather then of numerical ASCII digits, then the ADM pin
+ can also be provided as HEX string using this column.
+
+The following example shows a typical minimal example
+::
+
+ "imsi","iccid","acc","ki","opc","adm1"
+ "999700000053010","8988211000000530108","0001","51ACE8BD6313C230F0BFE1A458928DF0","E5A00E8DE427E21B206526B5D1B902DF","65942330"
+ "999700000053011","8988211000000530116","0002","746AAFD7F13CFED3AE626B770E53E860","38F7CE8322D2A7417E0BBD1D7B1190EC","13445792"
+ "999700123053012","8988211000000530124","0004","D0DA4B7B150026ADC966DC637B26429C","144FD3AEAC208DFFF4E2140859BAE8EC","53540383"
+ "999700000053013","8988211000000530132","0008","52E59240ABAC6F53FF5778715C5CE70E","D9C988550DC70B95F40342298EB84C5E","26151368"
+ "999700000053014","8988211000000530140","0010","3B4B83CB9C5F3A0B41EBD17E7D96F324","D61DCC160E3B91F284979552CC5B4D9F","64088605"
+ "999700000053015","8988211000000530157","0020","D673DAB320D81039B025263610C2BBB3","4BCE1458936B338067989A06E5327139","94108841"
+ "999700000053016","8988211000000530165","0040","89DE5ACB76E06D14B0F5D5CD3594E2B1","411C4B8273FD7607E1885E59F0831906","55184287"
+ "999700000053017","8988211000000530173","0080","977852F7CEE83233F02E69E211626DE1","2EC35D48DBF2A99C07D4361F19EF338F","70284674"
+
+::
+
+The following commandline will instruct ``pySim-prog`` to use the provided CSV file as parameter source and the
+ICCID (read from the card before programming) as a key to identify the card. To use the IMSI as a key, the parameter
+``--read-imsi`` can be used instead of ``--read-iccid``. However, this option is only recommended to be used in very
+specific corner cases.
+
+``pySim-prog.py -p <pcsc_reader> --read-csv <path_to_csv_file> --source csv --read-iccid``
+
+It is also possible to pick a row from the CSV file by manually providing an ICCID (option ``--iccid``) or an IMSI
+(option ``--imsi``) that is then used as a key to find the matching row in the CSV file.
+
+``pySim-prog.py -p <pcsc_reader> --read-csv <path_to_csv_file> --source csv --iccid <iccid_value>``
+
+
+Writing CSV files
+~~~~~~~~~~~~~~~~~
+``pySim-prog`` is also able to generate CSV files that contain a subset of the parameters it has generated or received
+from some other source (commandline, CSV-File). The generated file will be header-less and contain the following
+columns:
+
+* name
+* iccid
+* mcc
+* mnc
+* imsi
+* smsp
+* ki
+* opc
+
+A commandline that makes use of the CSV write feature would look like this:
+
+``pySim-prog.py -p <pcsc_reader> --read-csv <path_to_input_csv_file> --read-iccid --source csv --write-csv <path_to_output_csv_file>``
+
+
+Batch programming
+~~~~~~~~~~~~~~~~~
+
+In case larger card batches need to be programmed, it is possible to use the ``--batch`` parameter to run ``pySim-prog`` in batch mode.
+
+The batch mode will prompt the user to insert a card. Once a card is detected in the reader, the programming is carried out. The user may then remove the card again and the process starts over. This allows for a quick and efficient card programming without permanent commandline interaction.
pySim-read
----------
-``pySim-read`` allows you to read some data from a SIM card. It will only some files
-of the card, and will only read files accessible to a normal user (without any special authentication)
+``pySim-read`` allows to read some of the most important data items from a SIM
+card. This means it will only read some files of the card, and will only read
+files accessible to a normal user (without any special authentication)
-These days, you should use the ``export`` command of ``pySim-shell``
-instead. It performs a much more comprehensive export of all of the
-[standard] files that can be found on the card. To get a human-readable
-decode instead of the raw hex export, you can use ``export --json``.
+These days, it is recommended to use the ``export`` command of ``pySim-shell``
+instead. It performs a much more comprehensive export of all of the [standard]
+files that can be found on the card. To get a human-readable decode instead of
+the raw hex export, you can use ``export --json``.
Specifically, pySim-read will dump the following:
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38166?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I1d1a65154cea7fa77428b412fcf8c7b4cba629b1
Gerrit-Change-Number: 38166
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/38163?usp=email )
Change subject: pySim-prog: treat --imsi and --iccid equally
......................................................................
pySim-prog: treat --imsi and --iccid equally
When using a CSV file, we can either read the IMSI or ICCID from the
CSV file before programming. However, should also be possible to
supply both manually to identify the CSV file entry using the --imsi
or --iccid option. This currently only works for the IMSI, but not
for the ICCID.
Related: SYS#4120
Change-Id: Id3083c7794a7bd59501997f22afdc23bad3069e6
---
M pySim-prog.py
1 file changed, 3 insertions(+), 3 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/pySim-prog.py b/pySim-prog.py
index e238b66..cd7ac74 100755
--- a/pySim-prog.py
+++ b/pySim-prog.py
@@ -732,12 +732,12 @@
if opts.source == 'cmdline':
cp = gen_parameters(opts)
elif opts.source == 'csv':
- imsi = None
- iccid = None
if opts.read_iccid:
(res, _) = scc.read_binary(['3f00', '2fe2'], length=10)
iccid = dec_iccid(res)
- elif opts.read_imsi:
+ else:
+ iccid = opts.iccid
+ if opts.read_imsi:
(res, _) = scc.read_binary(EF['IMSI'])
imsi = swap_nibbles(res)[3:]
else:
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/38163?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id3083c7794a7bd59501997f22afdc23bad3069e6
Gerrit-Change-Number: 38163
Gerrit-PatchSet: 4
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>