AgeCommit message (Collapse)AuthorFilesLines
10 daysrename card_data to card_key_provider.Harald Welte2-14/+14
"data" is an awfully generic term. Anything stored on a card is data. This specific code deals with resolving key/pin material from an external source. Change-Id: I4c8e1be3e766f7c0565c07b39d48abf8adc375af
10 daysAdd type annotations and more documentation to card_data.pyHarald Welte1-28/+32
Change-Id: Ia09b3ecaa582d62a97c3adac2650686dc19d5ec1
10 daysfilesystem.py: Fix type annotation of read_binary_dec()Harald Welte1-1/+1
Change-Id: I781fc0c564a318a6f9b2ec8dccf9f8865bff0e48
10 dayscosmetic: fix typo in commentHarald Welte1-1/+1
Change-Id: Iac8b310a470b3ad8dee5f61342fd5acedbbd6e5d
10 daysdocs: Update copyright statementHarald Welte1-2/+2
* list supreeth for his many contributions * update copyright years Change-Id: I431e54000e6d260d8173424496d11904599171d8
10 daysjenkins.sh: Build documentation as part of build verificationHarald Welte1-1/+6
Change-Id: Iea7547c81fcd3e4268da23c18ad56d841aaf7535
11 daysfilesystem: Fix interpret_sw() fall-throughHarald Welte1-5/+3
if an application-specific interpret_sw() fails, fall back to the profile interpret_sw(). Change-Id: I326c6002c75e2f906848784b7831ea169134dbe4
11 days51.011: Define some more files within DF_TELECOMHarald Welte1-3/+39
Add some more minimal definitions for various DF_TELECOM files Change-Id: I155729b4d62969cde2af00fc9fb9901299fe5c25
11 daysfix various file definitionsHarald Welte3-8/+15
As we can notice during 'export': Some files had been defined as LinFixed but are Transparent - and vice versa. Let's fix those an bring our definitions in sync with the specs. Change-Id: I365ece7b82a1c79b3af87a79ff964d7989362789
11 dayspySim-shell: Remove UsimCommandsHarald Welte1-19/+1
Those are a leftover of a very early attempt at pySim-shell, it has long been superseded by all of the filesystem.py infrastructure. Change-Id: I6b84ce205f46a1efd19087d332920982f17ca9cc
11 daysFix various mistakes around the CardADF <-> CardApplication dualismHarald Welte2-17/+26
When the CardFile hierarchy talks about 'application' it means CardADF. When the RuntimeState and CardProfile talk about 'application' they mean a CardApplication. Let's clarify this in the file names, and make CardADF have an optional reference to the CardApplication, so that application specific status word interpretation really works. Change-Id: Ibc80a41d79dca547f14d5d84f447742e6b46d7ca
11 daysfilesystem: fix various issues found by mypyHarald Welte2-26/+30
Change-Id: Ib4de80451614712bdf5377a3a5b86156008e2c42
11 daysfilesystem: Avoid GPL header showing up in sphinx autodocHarald Welte1-15/+15
Change-Id: I1d963ae3d1511ef40d1ebcb36b0f67c40cbd6309
11 daysUse sphinx for generating documentationHarald Welte7-0/+258
This adds sphinx based documentation generation. For now, this manily renders some introduction and the autodoc-genreated class/method reference from the source code for our libraries. Actual user-level documentation for pySim-{prog,shell,read} remains to be added separately Change-Id: I52603e93c2c129a9e79687da6c534fa56a40a649
11 daysAdd more documentation to the classes/methodsHarald Welte9-187/+637
* add type annotations in-line with PEP484 * convert existing documentation to follow the "Google Python Style Guide" format understood by the sphinx.ext.napoleon' extension * add much more documentation all over the code base Change-Id: I6ac88e0662cf3c56ae32d86d50b18a8b4150571a
11 daysts_31_102: Fix decode_select_response() for DF.5GSHarald Welte1-3/+0
In Change-Id I848a766e6d00be497c7db905475e0681cce197ac we added a CardDF instance for DF_5GS. That DF should not have provided a decode_select_response() method, and instead fall back to that of the base class, which calls the method of the parent directory (ADF_USIM). The difference is illustrated below pySIM-shell (MF/ADF.USIM/EF.IMSI)> select DF.5GS "622e8202782183025fc0a509800171830400018d088a01058c056611111111c60f90017083010183018183010a83010b" vs. (with this patch): pySIM-shell (MF/ADF.USIM)> select DF.5GS { "file_descriptor": { "shareable": true, "file_type": "df", "structure": "no_info_given" }, "file_identifier": "5FC0", "proprietary_info": { "uicc_characteristics": "71", "available_memory": 101640 }, "life_cycle_status_int": "operational_activated", "security_attrib_compact": "6611111111", "pin_status_template_do": "90017083010183018183010A83010B" } Change-Id: I80612711bbc8c47285a828a0759b20beea6619f1
12 dayspySim-shell: fix and improve file system exporterPhilipp Maier1-10/+20
The file system exporter function export() selects the exported EF from inside a try block. It also selects the parent DF again when leaving the try block. If an exception ocurrs during select this is fine, but if it happens during read it leaves the EF selected which makes messes up the recursive filesystem walk. There are also minor inconsistancies with the exception strings and the path displayed in the execption strings Related: OS#4963 Change-Id: Ie9b1712b37e5b39e9016497185510a2a45c4ca6c
12 dayspySim-shell: prevent inconsitancy when walking through the FS treePhilipp Maier1-0/+7
When using the method walk() to walk through the filesystem tree, then the action() callback must not change the currently selected file. Unfortunately this can easily happen and result in unpredictable behavior. Lets add a check + an exeception for this to make debugging easier. Change-Id: I6778faa87bdf5552da74659206bf7a6fc0348d0c Related: OS#4963
12 dayspySim-shell: complete CHV/PIN management toolsPhilipp Maier3-13/+108
At the moment we only have a basic version of a verify_chv commnad, but in order to handle any CHV/PIN related situation we also need commands to enable, disable, change and unblock CHV. - fix verify_chv commnad: more distinct parameter names, better help strings, correct pin code encoding and add external source lookup - Add unblock_chv, change_chv, enable_chv and disable_chv commands - add/fix related functions in commands.py Change-Id: Ic89446e6bd2021095e579fb6b20458df48ba6413 Related: OS#4963
12 dayspySim-shell: be more specific when finding no ADM-PINPhilipp Maier1-1/+4
When no ADM pin is found in the external data source, then print an error message that tells the user that this is the case. Change-Id: If8f88b43f283fbe459be1b30db35d984022840ac Related: OS#4963
12 dayscommands: conserve write cyclesPhilipp Maier3-5/+28
When a record or a binary file is written the card goes throth a full flash/eeprom write cycle at this location, even when the data does not change. This can be optimized by reading before writing in order to compere if the data we are about to write is actually different. Change-Id: Ifd1b80d3ede15a7caa29077a37ac7cf58c9053f1 Related: OS#4963
12 dayspySim-shell: automatic ADM pin from CSV-FilePhilipp Maier2-2/+146
It can be hard to manage ADM pins when working with different cards at the same time. To make this easier, add an automatic way to determine the ADM pin for each card from a CSV file. - add a CardData clas model that can be extended to to get the data from various different sources. For now use CSV-Files. Also add a way how multiple CardData classes can be registered so that one global get function can query all registered CardData classes at once. - automatically check for CSV-File in home directory and use it as default CardData source unless the user specifies a CSV file via commandline argument. - extend the verify_adm command so that it automatically queries the ADM pin if no argument is given. Also do not try to authenticate if no ADM pin could be determined. Change-Id: I51835ccb16bcbce35e7f3765e8927a4451509e77 Related: OS#4963
12 daysfileystem: fix ADF selectionPhilipp Maier3-21/+26
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
12 daysts_31_102: do not add empty ShellCommands class.Philipp Maier1-7/+0
The class ShellCommands defined in ADF_USIM overloads useful CommandSet classes defined in the superclass, making their commands inaccessible. Also ts_31_102 does not have such a class definition in the ADF_ISIM class, so lets remove this class. Change-Id: I0e67c570fc4f17641d990a9cd239632ecf622de3 Related: OS#4963
12 daysfilesystem: allow selection of arbitrary filesPhilipp Maier1-11/+51
Some cards may have additional propritary EF files which pySim-shell does not support. If the user knows the exact FID the file can still be selected and it is possible to read the file type and memory model from the select response. This info can be used to create a new file object at runtime that will work like any other EF/DF. Change-Id: Iafff97443130f8bb8c5bc68f51d2fe1d93fff07c Related: OS#4963
12 daysAdd decoder/encoder for EF.SUCI_Calc_InfoMerlin Chlosta2-1/+171
Change-Id: I848a766e6d00be497c7db905475e0681cce197ac
14 daysts_102_221: use keywords to avoid conflicts with positional argsPhilipp Maier1-1/+1
The Change I83d718ff9c3ff6aef47930f38d7f50424f9b880f removes the keyword arguments from the CardProfile class constructor. This requires us to use the keywords during instantiation since we can not rely on the position anymore. Change-Id: Ia62597c59287848662dbbedcc38ba90f183c4aca
2021-03-30pySim-shell: use -a / -A commandline option to authenticatePhilipp Maier1-0/+10
pySim-shell defines, just like the other pySim programs commandline arguments that take an ADM pin to authenticate at the card as admin. The arguments are defined, but not used. Add the missing authentication part. Change-Id: I6bed14eb8f4124e28d593cf0816dbe58e7271322 Related: OS#4963
2021-03-30filesystem: avoid outputting empty lines when there is no dataPhilipp Maier1-4/+8
The do_update_... functions do always print the returned data. However, there may be no data. If this is the case than an empty line is printed. This may cause ugly log output, especially when working with scripts. Change-Id: Ia9715d46ec957544cfbeea98d2fe15eb74f5b884 Related: OS#4963
2021-03-27pySim-shell: add command to show file descriptionPhilipp Maier1-0/+8
All all files (CardFile) have a human readable description but there is no command to display that description yet Change-Id: If716cf3c6b09d53dca652b588671487d5343cf58 Related: OS#4963
2021-03-27pySim/filesystem: fix mutable default list/dict argumentsVadim Yanitskiy1-8/+8
Having lists and dictionaries as default argument values is a bad idea, because the same instance of list/dict will be used by all objects instantiated using such constructor: def appendItem(itemName, itemList=[]): itemList.append(itemName) return itemList print(appendItem('notebook')) print(appendItem('pencil')) print(appendItem('eraser')) Output: ['notebook'] ['notebook', 'pencil'] ['notebook', 'pencil', 'eraser'] Change-Id: I83d718ff9c3ff6aef47930f38d7f50424f9b880f
2021-03-26pySim-shell: add filesystem exporterPhilipp Maier1-0/+58
add a new command "export" that can either export indidividual files or a whole directory tree. The command will generate a script that contains update_binary and update_record commands along with the file contents. This script can later be used to restore multiple files at once. Change-Id: I82f3ce92cd91a5ed3c4884d62f6b22e9589c8a49 Related: OS#4963
2021-03-26pySim-shell: output currently selected file using select commandPhilipp Maier1-0/+6
When the select command is entered with no parameters it fails with an exception. Lets just output the currently selected file and exit instead. Change-Id: I541bd5ed14f240cd1c2bd63647c830f669d26130 Related: OS#4963
2021-03-26pySim-shell: add option to execute script on startupPhilipp Maier1-3/+7
Add a commondline option so that the user can supply pySim-shell with a script file name. This script then runs automatically on startup. (to avoid ending up at the shell prompt a quit command at the end can be used to exit after script execution) Change-Id: I69f5224087023650340fbfee74668e1850345f54 Related: OS#4963
2021-03-26pySim-shell: add ADF.ISIM / ADF.USIM dynamicallyPhilipp Maier3-5/+29
currently ADF.ISIM and ADF.USIM are always added regardless if there is a matching application on the card or not. Lets check what applications are actually installed and add ADF.ISIM and ADF.USIM dynamically. Change-Id: I42ee23375f98e6322708c1c4db6d65e1425feecd Related: OS#4963
2021-03-26filesystem: fix typo in method call app()->append()Philipp Maier1-1/+1
In the method add_application() the method name should be append() instead of add(). Change-Id: Ic8ad62567968e09786eac86f219b56a3d3200511 Related: OS#4963
2021-03-23pysim-shell: select MF on startup to make commands accessiblePhilipp Maier1-0/+1
On the cration of the PysimApp object only the basic commands in pySim-shell.py are registered, since the MF is only created but not selected, the file specific commands of the MF are not available. To make them available, select the MF once on startup before entering the cmdloop. Change-Id: Ib63191f44e7c8ae07b0128a9affba40b44957adc Related: OS#4963
2021-03-23utils: fix sw_match()Philipp Maier1-2/+3
The SW_match function takes a given status word and compares it against a pattern that may contain wildcards (x or ?). This works by creating a masked version of the SW using a pattern first (each hex digit is replaced by a wildcard charafter if the pattern has a wildcard in the same position). Once this is done, the resulting masked version is compared at the pattern. However, the current implementation can not work, since it compares the input SW against the pattern to decide wihich chrafters should be masked. The input SW never contains wildcard charafters. Change-Id: I805ad32160fcfcb8628bf919b64f7eee0fe03c7e Related: OS#4963
2021-03-23cards: remove unnecessary execptions.Philipp Maier1-10/+2
The _scc.veryif_adm() method already does status word checking internally and also raises an execption should the authentication be unsuccessful, so we do not have to put an additional status word check + execition when we use the method from cards. Change-Id: I785d27e4d49a9cda1a771b56ce5ac9c1f1d1e79a Related: OS#4963
2021-03-23commands: better exception string for authentication failuresPhilipp Maier1-1/+4
At the moment we use the send_apdu_checksw() method to send the APDU for ADM authentication. This method only checks if the command returns with sw = 9000. If not it raises an exception that the sw is not as expected. The user may think that this is a problem with thr reader, pcscd or pySim in the first place and may try multiple times until the card is permanently locked. A better execption string that also displays the tries which are left may be helpful. Change-Id: Icf428831094f8c1045eefaa8cb2b92e6a36b0c13 Related: OS#4963
2021-03-22filesystem: be more strict in method add_file()Philipp Maier1-1/+3
The file identifier of a file is strictly defined as a two digit hexadecimal number. Do not allow adding child files that violate this constraint. Change-Id: I096907285b742e611d221b03ba067ea2522e7e52 Related: OS#4963
2021-03-19filesystem: drop __main__ from filesystem.pyPhilipp Maier1-18/+0
The __main__ function in filesystem.py seems to be some experimental testcode from the very beginning of pySim-shell. Lets drop it. Change-Id: I34f459469dfc45711ad0928c83184d7f99e0f5e3 Related: OS#4963
2021-03-19filesystem: add comment to inform about checks in add_file()Philipp Maier1-0/+4
The method add_file of class CardDF does some constraint checking to the basic file parameters (e.g. fid). Since one might also expect those checks in the superclass CardFile lets leave a comment to make the code better understandable. Change-Id: Iebae28909fe6aade3bd4024112a222819572d735 Related: OS#4963
2021-03-19filesystem: fix exception string (fid != name)Philipp Maier1-1/+1
It is better to use the term "fid" instead of "name" when a reserved FID is detected. Change-Id: I054f3b3a156f0164c62610cfde1aec2145c20925 Related: OS#4963
2021-03-18pySim-shell: add functionality to walk through the fs recursivelyPhilipp Maier1-1/+25
We might add functionality that may require to walk through the entire filesystem tree to perform an action to all files at once. Lets add a generic walker that gets a function pointer that can carray out a file specific action then. Also add another command that just displays the whole filesystem tree. Change-Id: If93d24dfb80c83eda39303c936910fa1fa7f48f8 Related: OS#4963
2021-03-18pySim-shell: add "dir" command.Philipp Maier2-1/+52
pysim-shell does not have a convinient way to list the files available in one directory. Tab completion currently is the only way to obtain a list of the available files. Lets add a dir command to print a file list. Change-Id: Ic06a60e0a0ec54d9bb26e151453ceb49d69e3df7 Related: OS#4963
2021-03-18filesystem: fix flag model used with get_selectable_names()Philipp Maier1-8/+6
The flags NAMES, FIDS and APPS do not properly distinguish between applications and normal files. With APPS it is only possible to exclude or include the selectable applications in a list with NAMES or FIDS, but it is not possible to get only the application names or identifiers. - remove the APPS flag - rename NAMES to FNAMES and make it only normal file related - add ANAMES and relate it only to application (ADF) names - add AIDS and relate it only to application identifiers Change-Id: Id07e0dcbab10cd78c1b78d37319b7b0e5e83b64d Related: OS#4963
2021-03-18filesystem: allow dumping multiple records of a filePhilipp Maier1-3/+10
At the moment we can only request pySim-shell to dump a specific record of a file. However, it may be useful to dump multiple records of a record oriented file at once. Change-Id: Id62db2cba4e3dfb6a7b3e6be8b892c16d11a8e3e Related: OS#4963
2021-03-12Check in requirements.txt to simplify installing dependenciesVadim Yanitskiy2-0/+8
Change-Id: I88db5e8a661fb3ddc72b7d423a878c0143353d3e
2021-03-12README.md: add notes about the new 'cmd2' dependencyVadim Yanitskiy1-1/+2
Change-Id: I314317ab547bc32497839fe70e7a6f6b66bcc8ef