aboutsummaryrefslogtreecommitdiffstats
path: root/pySim-read.py
AgeCommit message (Collapse)AuthorFilesLines
2023-10-16transport: do not catch exceptions in init_readerPhilipp Maier1-2/+0
We currently catch any exceptions that may occur when the card reader is initialized. Then we print the exception string or the exception type when no string is available. However, a failure during the reader initialization is usually a severe problem, so a traceback would provde a lot of helpful information to debug the issue. So lets not catch any exceptions at this level so that we get the full backtrace. Related: OS#6210 Change-Id: I4c4807576fe63cf71a7d33b243a3f8fea0b7ff23
2023-07-12ts_31_102, ts_31_103: Move legacy-only code to pySim.legacyHarald Welte1-2/+5
Change-Id: Ifebfbbc00ef0d01cafd6f058a32d243d3696e97e
2023-07-12create pySim.legacy.ts_51_011.py and move legacy code thereHarald Welte1-1/+2
Those old flat dicts indicating FID to string-name mapping have long been obsoleted by the pySim.filsystem based classes. Change-Id: I20ceea3fdb02ee70d8c8889c078b2e5a0f17c83b
2023-07-12split pySim/legacy/{cards,utils} from pySim/{cards,utils}Harald Welte1-4/+3
There are some functions / classes which are only needed by the legacy tools pySim-{read,prog}, bypassing our modern per-file transcoder classes. Let's move this code to the pySim/legacy sub-directory, rendering pySim.legacy.* module names. The long-term goal is to get rid of those and have all code use the modern pySim/filesystem classes for reading/decoding/encoding/writing any kind of data on cards. Change-Id: Ia8cf831929730c48f90679a83d69049475cc5077
2023-06-09Add ".py" suffix to sphinx-argparse generated docsHarald Welte1-2/+1
This is important to produce the right command syntax when generating command line reference in the user manual. However, we shouldn't add this kludge to the individual programs, but only to the documentation using the :prog: syntax. Change-Id: I2ec7ab00c63d5d386f187e54755c71ffc2dce429
2023-06-07Add FPLMN read and programMatan Perelman1-0/+8
Change-Id: I9ce8c1af691c28ea9ed69e7b5f03f0c02d1f029b
2022-02-11cosmetic: Switch to consistent four-spaces indent; run autopep8Harald Welte1-304/+314
We had a mixture of tab and 4space based indenting, which is a bad idea. 4space is the standard in python, so convert all our code to that. The result unfortuantely still shoed even more inconsistencies, so I've decided to run autopep8 on the entire code base. Change-Id: I4a4b1b444a2f43fab05fc5d2c8a7dd6ddecb5f07
2021-11-23pySim-read: put try/catch block around select_adf_by_aid()Philipp Maier1-2/+21
Selecting an application may fail, especially when the application does not exist on the card. Change-Id: Ia904a74d672cf9551fb4ee062dd606b350b64cef
2021-11-18pySim-read: do not select ADF.ISIM againPhilipp Maier1-4/+0
Before reading EF.IST ADF.ISIM is selected again even though it was selected before. Lets skip this step since it is unnecessary. Change-Id: I75be18e3476cb1d093bc99775eeddd0c08b81d78
2021-06-30cards: rename class "Card" to "SimCard"Philipp Maier1-2/+2
There are the classes IsimCard and UsimCard, which inheret from Card, which is the base class for a normal non ISIM/USIM simcard. Card also has methods in it that are related to simcards, so it is not just any "Card", it is a SimCard and should be called that way. Change-Id: I2077ded44bc2297b8d478c5bd1895951b494efcc
2021-05-23pySim-read: adjust meaning of HPLMN/OPLMN flags in EF_SPNRobert Falkenberg1-2/+2
The updated wording better reflects the actual meaning of a set or unset flag, especially as OPLMN is inverted. Change-Id: I65c6f0e9bc1a12a4a74c4274eebb8e612296888f
2021-05-21pySim_prog: remove unused import for dec_addr_tlvPhilipp Maier1-1/+1
The function dec_addr_tlv is imported from utils, but not used Change-Id: I2a962d544f288259f16c1dca92715953d1c24d82 Related: OS#4963
2021-05-10Add codecs for EF_SPN and GSM strings via constructRobert Falkenberg1-1/+1
This will replace the hand-crafted codec for EF_SPN by a struct definition using the construct library. Old encoders are updated and kept for API compatibility but are not used internally anymore. New data structures: * Rpad(Adapter): Right-padded bytestring (0xff, adjustable) * GsmStringAdapter(Adapter): Codec for "SMS default 7-bit coded alphabet as defined int TS 23.038" using the gsm0338 library. * GsmString(n): Convenient wrapper of both above Adjustments: * utils: update+deprecate old dec_spn(), enc_spn() * remove refs to deprecated functions Change-Id: Ia1d3a3835933bac0002b7c52511481dd8094b994
2021-05-05pySim-read: fix wrong commentPhilipp Maier1-1/+1
Change-Id: Idcbbc6e964f7932a10d55f7f28646f278c994129
2021-04-22pySim-read: Migrate over to use shared argparse from transportHarald Welte1-39/+7
Now that we have a shared argparse definition for all reader related options in the transport module, use that. Change-Id: I12ca1a484a5d6e84820d9761c9701f8a94381f66
2021-04-13Use construct for EF_AD in pySim-{shell, prog, read}.py, cards.pyRobert Falkenberg1-6/+5
Also serves as example for RFU (reserved for future use) fields which should not always be reset to zero in case they have been set on the uSIM for some reason. See pySim/ts_51_011.py, class EF_AD. * Add definitions for RFU {Flag, Bits, Byte, Bytes} * Use IntEnum for OP_MODE (convenient auto completion) * Remove obsolete definitions and imports * Update test results for all SIMs (opmode strings are shortened) Change-Id: I65e0a426f80a619fec38856a30e590f0e726b554
2021-04-04Move init_reader() from utils.py to transport/__init__.pyHarald Welte1-1/+2
This avoids a circular dependency when introducing type annotations. Change-Id: I168597ac14497fb188a15cb632f32452128bc1c6
2021-04-02fileystem: fix ADF selectionPhilipp Maier1-3/+6
When the ADF is selected, then this is done by the AID. At the moment only the first 7 bytes of the AID are used to select the ADF. sysmo-isim-sja2 tolerates this, but sysmo-usim-sjs1 does not. The Cards class already has methods to deal with this problem. The method select_adf_by_aid takes an ADF name and completes the AID from an internal list. This can be extended to support partial hexadecimal AIDs as well. Change-Id: If99b143ae5ff42a889c52e8023084692e709e1b1 Related: OS#4963
2021-02-25utils: catch exceptions during reader initalitationPhilipp Maier1-0/+2
Failed reader initializations happen frome time to time, mostly because of messed up commandline arguments. This results in ugly crashes very often. Lets control this a bit by catching the exception string and print it. Change-Id: I313017355da01bbef7c3d3f1899555aadb509319
2021-01-21pySim-read.py: Add support for reading USIM+ISIM data from third-party UICCherlesupreeth1-19/+25
Change-Id: Id8b95630e90cb5833482da2690e423e7adefb95b
2021-01-05pySim-read.py: Enable reading of UICC IARI from ISIMSupreeth Herle1-0/+8
Change-Id: Iba222421f2fcc2b9b12605608bf640f7627904d0
2021-01-05pySim-read.py: Enable reading of EF.IMPU from ISIMSupreeth Herle1-0/+8
IMS public user identity (IMPU) As per TS1.103, this EF contains one or more records, with each record able to hold a public SIP Identity (SIP URI) of the user. EF.IMPI consist of URI TLV data object values see IETF RFC 3261. The URI shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629 Reading of EF.IMPU is achieved by first selecting the ISIM application using its AID. This is followed by selecting EF.IMPU with File ID - 6f04 in ADF.ISIM Change-Id: Icf78a564aeaf4254658d3b018ff57dfc4b987e6f
2021-01-05pySim-read.py: Enable reading of EF.IMPI from ISIMSupreeth Herle1-0/+11
IMS private user identity (IMPI) As per TS1.103 version 14.2.0, this EF contains the private user identity of the user. EF.IMPI consist of NAI TLV Data object.The NAI shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629. Reading of EF.IMPI is achieved by first selecting the ISIM application using its AID. This is followed by selecting EF.IMPI with File ID - 6f02 in ADF.ISIM Change-Id: I8d8e76e3f6b9ca7a0be262fee99cd5a397edbefa
2021-01-05pySim-read.py: Enable reading of Home Network Domain Name from ISIMSupreeth Herle1-0/+11
As per TS1.103 version 14.2.0, this EF contains the home operator's network domain name. The Home Network Domain Name, i.e. FQDN shall be encoded to an octet string according to UTF-8 encoding rules as specified in IETF RFC 3629 Change-Id: Ia3c68c717d105e10d52a8e9d170480da2ad7d65a
2021-01-05pySim-read.py: Enabled reading P-CSCF address from ISIMSupreeth Herle1-1/+11
As per 3GPP TS 31.103 version 14.2.0 Release 14, this EF can found under ADF.ISIM at File Id 6f09. This EF contains one or more Proxy Call Session Control Function addresses. The first record in the EF shall be considered to be of the highest priority If ISIM service n°1 and/or service n°5 is available, this file shall be present. Change-Id: I7a701212c84d3dc5d4c8ccbcf638c97ceda33654
2021-01-05Re-purpose helper method to be used for parsing Address TLV Object in generalSupreeth Herle1-1/+1
The Address TLV object is used in EF.P-CSCF Address, EF.ePDGId and EF.ePDGIdEm. See 3GPP TS 31.102 version 13.4.0 Release 13, section 4.2.8, 4.2.102 and 4.2.104. Address TLV Object format Tag (1 Byte) - '80' Length (1 Byte) Address Type (1 Byte) - '00' (FQDN), '01' (IPv4), '02' (IPv6) Address (Address Length Bytes) Change-Id: Ifd8a240f6b5c7736e58a8151295c30ec5b32ed5f
2020-10-21pySim-read.py: Enable parsing of EF.ePDGSelection in USIMSupreeth Herle1-0/+12
As per TS 31.102, this EF can found under ADF.USIM at File Id 6ff4. Also, if service n°106 and service n°107 are available, this file shall be present. Change-Id: I98916e6f5c9791aff63c18a3b16bdfb8ae9b2d36
2020-10-19Fix invocation python2 -> python3Daniel Willmann1-1/+1
Change-Id: Ic78da9c03e99f59d142c93394051bbc2751f0205
2020-10-03Move reading of USIM service table to generic USIM classherlesupreeth1-7/+13
Change-Id: I537547f3bd01a547310358f8a8fceddcb4c79f37
2020-10-03Move reading of ePDG Id to generic USIM classherlesupreeth1-6/+6
Change-Id: I716acb994430db3d4e56fea072f8dc2cebeaba84
2020-09-20pySim-read.py: decode contents of EF.AD (Administrative data)Vadim Yanitskiy1-2/+10
Change-Id: I938667bdf99d238eefac205d6dd70db1d714d842
2020-08-28Add support for ADF_USIM/EF_EHPLMNHarald Welte1-0/+7
If the EF.EHPLMN exists, it contains the "Equivalent Home PLMN List". The odd part of that list is that it is not just a list of additional PLMN identities, but if the first digits of the IMSI are *not* listed in EF.EHPLMN, then the MCC/MNC of the IMSI prefix is suddently no longer considered the home network, but the subscriber is roaming. See TS 23.122: "If the HPLMN code derived from the IMSI is not present in the EHPLMN list, then it shall be treated as a Visited PLMN for PLMN selection purposes." Change-Id: I22d96ab4a424ec5bc1fb02f5e80165c646a748d3
2020-06-23pySim-read.py: Enable parsing of Home ePDG Identifier in USIMSupreeth Herle1-1/+12
As per TS 31.102, version 13.4.0 Release 13, this EF can found under ADF.USIM at File Id 6ff3. Also, if service n°106 and service n°107 are available, this file shall be present. Change-Id: I68114d328d1af5682a5bc1fa7642882e80b5de4d
2020-06-03ts_31_102.py: add EF_ADF_mapSebastian Viviani1-2/+2
the EF files in the USIM ADF are different to the ones int the GSM dir so added the dictionary to avoid conflicts and hardcoded values the 'DIR' one was added in ts_51_011.py, not sure if it should be there as it's not in that standard, but did it for simplicity Change-Id: I458380bf46b2986662ecdede2551c22cd9be92ba
2020-06-02Implement Generic SIM Access interface as per 3GPP TS 27.007Vadim Yanitskiy1-0/+8
According to 3GPP TS 27.007, sections 8.17 and 8.18, the modem may *optionally* provide Generic and/or Restricted SIM Access to the TE (Terminal Equipment) by means of the AT commands. This basically means that a modem can act as a card reader. Generic SIM Access allows the TE to send raw PDUs in the format as described in 3GPP TS 51.011 directly to the SIM card, while Restricted SIM Access is more limited, and thus is not really interesting to us. This change implements a new transport called ModemATCommandLink, so using it a SIM card can be read and/or programmed without the need to remove it from the modem's socket. A downside of this approach is relatively slow I/O speed compared to PC/SC readers. Tested with Quectel EC20: $ ./pySim-read.py --modem-dev /dev/ttyUSB2 Change-Id: I20bc00315e2c7c298f46283852865c1416047bc6 Signed-off-by: Vadim Yanitskiy <axilirator@gmail.com>
2020-05-12pySim-prog, pySim-read, do not echo reader idPhilipp Maier1-17/+3
pySim-prog and pySim-read currently echo back the pcsc reader id (or baudrate/socket, depending on the interface used). This makes the output unecessarly undeterministic, which becomes a problem when verifying the putput in tests. Lets not echo those variable, user supplied parameters back. Also lets move the code that does the initalization to utils, so that it can be used from pySim-prog and from pySim-read (code dup). Change-Id: I243cc332f075d007b1c111292effcc610e874eb3 Related: OS#4503
2020-04-27Enable parsing of ISIM Service table (IST)Supreeth Herle1-0/+13
As per TS 31.103, This EF indicates which ISIM services are available. If a service is not indicated as available in the ISIM, the ME shall not select this service. Parsing of IST is achieved by first selecting the ISIM application using its AID. This is followed by selecting EF.IST with File ID - 6f07 in ADF.ISIM Change-Id: I3f0a7227360b72a707dc1bcc4cc9c8a4ec7ad2b2
2020-04-27Enable parsing of USIM Service table (UST)Supreeth Herle1-0/+13
As per TS.31.102, This EF indicates which USIM services are available. If a service is not indicated as available in the USIM, the ME shall not select this service. Parsing of UST is achieved by first selecting the USIM application using its AID. This is followed by selecting EF.UST with File ID - 6f38 in ADF.USIM Change-Id: I54dbbd40bd3d22cee81f7c32e58cd946f8564257
2020-04-27Use helper method to print available service in EF.SSTSupreeth Herle1-9/+4
Change-Id: I375475e9f7210dae4e8da7258d6824dc2d54cf4c
2020-04-27pySim-read.py: Add ability to read Cards with correct CLA, P1 and P2 bytesSupreeth Herle1-1/+11
Initially the Card is read assuming a UICC SIM, but in case its not, an error 6e00 will be thrown indicating CLA not supported and Card has just Classic SIM application. Ref: https://web.archive.org/web/20090630004017/http://cheef.ru/docs/HowTo/APDU.info The above link provides the bytes to use for CLA, P1, P2 in APDU Change-Id: Ifea328eff3a381d7b82118e22d2bc0ec5f8a87e4
2020-04-16cards.py: Added method to select ADF by its full AIDSupreeth Herle1-0/+1
If AID of the desired ADF is in the list of AIDs of the Card/Card subclass object then ADF is selected or else None is returned Change-Id: Ie5f29eec14f099add1d0978e3e7d4ed3c9130854
2020-04-16Populate AIDs present on the UICCSupreeth Herle1-0/+3
Change-Id: I4d0d8f5f1e8cb252be55a2995b730927cfa7004d
2020-04-16Add ability to parse SIM Service Table (EF.SST)Supreeth Herle1-1/+15
As per TS.51.011, This EF indicates which services in the SIM are allocated, and whether, if allocated, the service is activated .If a service is not indicated as available in the SIM, the ME shall not select this service. Change-Id: Id28a35727adbaaa9df19b1adc621a0c51ad0e51b
2020-04-01Use the generic method read_binary of card class to read ADSupreeth Herle1-1/+1
Change-Id: Ie7f62913caed95f482445962954857bb69b58078
2020-04-01Move parsing of MSISDN to generic Card classSupreeth Herle1-6/+4
Change-Id: I5b726bc0dc8c8e5eb42f209b1fe0f35a46ac91be
2020-04-01Use the generic method read_binary of card class to read ACCSupreeth Herle1-1/+1
Change-Id: I92a02c74d64b3120055163548fc128ed6e0650a4
2020-04-01Move parsing of HPLMNAcT to generic Card classSupreeth Herle1-2/+2
Change-Id: I46c863c118dcbef89455c34289ed25e5a342f35b
2020-04-01Move parsing of OPLMNwAcT to generic Card classSupreeth Herle1-2/+2
Change-Id: I8050bd103a7085b2631ddc4e567d15e05f9428f2
2020-04-01Move parsing of PLMNwAcT to generic Card classSupreeth Herle1-2/+2
Change-Id: I14d7c2dc51fac6d5cf4a708a77ad23d252ba6094
2020-04-01Use the generic method read_binary of card class to read PLMNselSupreeth Herle1-1/+1
Change-Id: I0a683c479cd41ccc6a93c23434c73793cb5dc186