This is all quite complicated. In general, the TLV_IE.to_dict() method obviously is expected to return a dict (with key equal to the snake-case name of the class, value to the decode IE value). This single-entry dict can then be passed back to the from_dict() method to build the binary representation. However, with a TLV_IE_Collection, any TLV_IE can occur any number of times, so we need an array to represent it (dict would need unique key, which doesn't exist in multiple instances of same TLV IE). Hence, the TLV_IE_Collection.to_dict() method actually returns a list of dicts, rather than a dict itself. Each dict in the list represents one TLV_IE. When encoding such a TLV_IE_Collection back from the list-of-dicts, we so far didn't handle this special case and tried to de-serialize with a class-name-keyed dict, which doesn't work. This patch fixes a regression in the aram_store_ref_ar_do pySim-shell command which got introduced in Change-Id I3dd5204510e5c32ef1c4a999258d87cb3f1df8c8 While we're fixing it, add some additional comments to why things are how they are. Change-Id: Ibdd30cf1652c864f167b1b655b49a87941e15fd5
pySim - Read, Write and Browse Programmable SIM/USIM/ISIM/HPSIM Cards
This repository contains a number of Python programs that can be used to read, program (write) and browse all fields/parameters/files on SIM/USIM/ISIM/HPSIM cards used in 3GPP cellular networks from 2G to 5G.
Note that the access control configuration of normal production cards issue by operators will restrict significantly which files a normal user can read, and particularly write to.
The full functionality of pySim hence can only be used with on so-called programmable SIM/USIM/ISIM/HPSIM cards.
Such SIM/USIM/ISIM/HPSIM cards are special cards, which - unlike those issued by regular commercial operators - come with the kind of keys that allow you to write the files/fields that normally only an operator can program.
This is useful particularly if you are running your own cellular network, and want to configure your own SIM/USIM/ISIM/HPSIM cards for that network.
Homepage
Please visit the official homepage for usage instructions, manual and examples.
Documentation
The pySim user manual can be built from this very source code by means of sphinx (with sphinxcontrib-napoleon and sphinx-argparse). See the Makefile in the 'docs' directory.
A pre-rendered HTML user manual of the current pySim 'git master' is available from https://downloads.osmocom.org/docs/latest/pysim/ and a downloadable PDF version is published at https://downloads.osmocom.org/docs/latest/osmopysim-usermanual.pdf.
A slightly dated video presentation about pySim-shell can be found at https://media.ccc.de/v/osmodevcall-20210409-laforge-pysim-shell.
pySim-shell vs. legacy tools
While you will find a lot of online resources still describing the use of pySim-prog.py and pySim-read.py, those tools are considered legacy by now and have by far been superseded by the much more capable pySim-shell. We strongly encourage users to adopt pySim-shell, unless they have very specific requirements like batch programming of large quantities of cards, which is about the only remaining use case for the legacy tools.
Git Repository
You can clone from the official Osmocom git repository using
git clone https://gitea.osmocom.org/sim-card/pysim.git
There is a web interface at https://gitea.osmocom.org/sim-card/pysim.
Installation
Please install the following dependencies:
- pyscard
- pyserial
- pytlv
- cmd2 >= 1.5.0
- jsonpath-ng
- construct >= 2.9.51
- bidict
- gsm0338
- pyyaml >= 5.1
- termcolor
- colorlog
- packaging
- pycryptodomex
Example for Debian:
sudo apt-get install --no-install-recommends \
pcscd libpcsclite-dev \
python3 \
python3-setuptools \
python3-pycryptodome \
python3-pyscard \
python3-pip
pip3 install --user -r requirements.txt
After installing all dependencies, the pySim applications pySim-read.py, pySim-prog.py and pySim-shell.py may be started directly from the cloned repository.
Archlinux Package
Archlinux users may install the package python-pysim-git
from the Arch User Repository (AUR).
The most convenient way is the use of an AUR Helper,
e.g. yay or pacaur.
The following example shows the installation with
yay.
# Install
yay -Sy python-pysim-git
# Uninstall
sudo pacman -Rs python-pysim-git
Mailing List
There is no separate mailing list for this project. However, discussions related to pysim-prog are happening on the openbsc@lists.osmocom.org mailing list, please see https://lists.osmocom.org/mailman/listinfo/openbsc for subscription options and the list archive.
Please observe the Osmocom Mailing List Rules when posting.
Contributing
Our coding standards are described at https://osmocom.org/projects/cellular-infrastructure/wiki/Coding_standards
We are using a gerrit-based patch review process explained at https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit