dexter has uploaded this change for review. ( 
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, 169 insertions(+), 25 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/66/38166/1

diff --git a/docs/legacy.rst b/docs/legacy.rst
index 0961d17..e8b457e 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,180 @@
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 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 relevent 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,
+    KI, OPc, etc.). Since the secret is used to derive the key material, it 
should be kept private. It should also be
+    stored safely, in case cards have to be re-generated or the current card 
batch has to be extended later. Also the
+    secret should contain enough randomness to avoid conflicts.
+
+    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:
+
+ * supersim
+ * magicsim
+ * fakemagicsim
+ * grcardsim
+ * sysmosim-gr1
+ * sysmoSIM-GR2
+ * sysmoUSIM-SJS1
+ * Fairwaves-SIM
+ * OpenCells-SIM
+ * Wavemobile-SIM
+ * sysmoISIM-SJA2
+ * sysmoISIM-SJA5
+ * gialersim
+
+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: newchange
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I1d1a65154cea7fa77428b412fcf8c7b4cba629b1
Gerrit-Change-Number: 38166
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <[email protected]>

Reply via email to