Introducing libosmosim

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Harald Welte laforge at gnumonks.org
Mon Sep 10 21:33:50 UTC 2012


Hi!

I've been hacking away a bit on a new library 'libosmosim' whihc is
scheduled to become part of libosmocore.  In fact, as the automake
integration has been cleaned up, I'll probably merge it master any day
now.

The idea of this library is to
* understand the EF/DF hierarchy if GSM SIM, ETSI UICC and 3GPP USIM
* provide encoding and decoding routines for at least the most important
  EFs
* decode the binary data into a generic data structure which can be used
  by some form of a GUI application
* be able to re-encode from the generic parsed structure into the
  binary form, possibly after modification from the UI
* be able to transact APDUs via T0 and T1 on PC/SC and other reader
  interfaces, e.g.  the OsmocomBB SIM interface

So the primary purpose of this is to be able to have a tool for
meaningful (human-readable/writable) modification of all files on a
programmable SIM card, such as the sysmoSIM-GR1 (and other cards where
you have the ADM PIN that gives you write permission).

Other useful purposes on the horizon of the library could be:
* implementation of a generic SIM/UICC/USIM simulator based on
  user-created input, or based on 'ripped' SIM cards (well, you have to
  provide the key in some way).

The current status is still quite experimental, but you can already see
the major parts:

* mapping of APDU and TPDU (only T=0 so far) on to 'struct msgb

struct osim_file_ops
	encode and decode callbacks for a given file

struct osim_file_desc
	node in the hierarchical description of filesystem tree

struct osim_decoded_data
	the runtime representation of a decoded file:

struct osim_decoded_element
	one decoded element in a decoded file

struct osim_card_sw
	status + bitmask + human readable description

struct osim_card_profile
	full description profile of card, including filesystem
	hierarchy, status words and card-specific commands

struc osim_reader_hdl
	represents a card reader (currently a slot in a reader,
	not sure really how to represent multi-slot readers like
	sim-banks yet).  primarily consist of osim_reader_ops

struc osim_card_hdl
	representing a card inside a reader

struc osim_chan_hdl
	currently just a dummy. intended for logical channel support

most of the existing code is in src/sim/*.c, while some
not-yet-cleaned-up example code is in utils/osmo-sim-test.c.  There are
gaps everywhere all over the place, and I think it will take quite some
time to fill those gaps.

Current roadmap:

* properly integrate all parts, so with a single call you can read in
  the tree of all EFs of a card into their in-memory representation

* verify that the APIs for encoding/decoding functions work the way
  they are before writing 'all' the EF decode/encode routines

* add more decoded element types, such as location area codes and the
  like

So if you survived this mail until this point, I think you are a prime
candidate for contributing some code.  Let me know if you're interested
in helping out.

Regards,
	Harald
-- 
- Harald Welte <laforge at gnumonks.org>           http://laforge.gnumonks.org/
============================================================================
"Privacy in residential applications is a desirable marketing option."
                                                  (ETSI EN 300 175-7 Ch. A6)




More information about the OpenBSC mailing list