Age | Commit message (Collapse) | Author | Files | Lines |
|
Change-Id: I50f0f8d9ad30994c4d9693157dfa1a0c52753178
|
|
Change-Id: Ib40f59e3dd026aaeca8c51f7d0de3db78d12fb3e
|
|
Change-Id: I2e8b202ac5cddf7c8533115d53dd0d64da6ca9b9
|
|
Our hand-written JSON so far is using snake_case identifiers,
while the JSON generated by the pySim.tlv classes use the class
names as keys, which LooksQuiteDifferent.
So let's auto-convert the CamelCase into something that reflects
our existing notion.
Change-Id: Id55929ef03dc48cb668e6ba7e99b6b291680a42f
|
|
Before:
{
"FcpTemplate": [
{
"FileDescriptor": {
"shareable": true,
"file_type": "df",
"structure": "no_info_given"
}
},
{
"FileIdentifier": "3f00"
},
{
"ProprietaryInformation": [
{
"UiccCharacteristics": "71"
},
{
"AvailableMemory": 123052
}
]
},
{
"LifeCycleStatusInteger": "operational_activated"
},
{
"SecurityAttribReferenced": {
"ef_arr_file_id": "2f06",
"ef_arr_record_nr": 2
}
},
{
"PinStatusTemplate_DO": [
{
"PS_DO": "40"
},
{
"KeyReference": 1
},
{
"KeyReference": 129
}
]
},
{
"TotalFileSize": 187809
}
]
}
After:
{
"FcpTemplate": {
"FileDescriptor": {
"shareable": true,
"file_type": "df",
"structure": "no_info_given"
},
"FileIdentifier": "3f00",
"ProprietaryInformation": {
"UiccCharacteristics": "71",
"AvailableMemory": 123052
},
"LifeCycleStatusInteger": "operational_activated",
"SecurityAttribReferenced": {
"ef_arr_file_id": "2f06",
"ef_arr_record_nr": 2
},
"PinStatusTemplate_DO": {
"PS_DO": "40",
"KeyReference": 129
},
"TotalFileSize": 187809
}
}
Change-Id: Ia5ad8f1d3b0d47ebdb1856b0feaba120bad3eef9
|
|
Thanks to Vadim for pointing this out
Change-Id: I6e7d3725f28410d66580e88f2271d2b240d1f98e
|
|
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
|
|
EF.DIR can not only contain the AID + Label of TS 102 221, but can
also contain any of the DOs specified in ISO7816-4. Let's imoplement
this based on the modern pySim.tlv parser
Change-Id: I875eb49e1f0370428c2eae69af84f5483bd5b1fc
Closes: OS#5410
|
|
As we've seen in recent patches, this has been a source of bugs, so
let's be tolerant and deal with both.
Change-Id: I0a5ec2a860104ffe4524c647105a42505ac394d6
|
|
In Change-Id I6d7c1bf49a8eaf3d8e50fb12888bf3d5b46b6c55 we fixed the
filesystem code to assume the self._tlv memper is a reference to a
class, and not an instance (as this is what the majority of the code
did).
However, it seems thre wer two instances where we actually had _tlv
reference an instance. Change that to class so it's the same all over
the code base.
Change-Id: Ie4878ad6a92feafe47e375c4f5f3f198921e1e95
|
|
We cannot call a method of a class without instantiating it
Change-Id: I6d7c1bf49a8eaf3d8e50fb12888bf3d5b46b6c55
|
|
So far, we only returned an array of service numbers like
[ 2, 4, 5, 9 ] which is not very friendly to the human reader.
In EF.SST we already had more verbose decoding including a description
of each service. Let's add the same principle to EF.UST, EST and IST
The same output above now looks like this:
{
"1": {
"description": "Local Phone Book",
"activated": false
},
"2": {
"description": "Fixed Dialling Numbers (FDN)",
"activated": true
},
"3": {
"description": "Extension 2",
"activated": false
},
"4": {
"description": "Service Dialling Numbers (SDN)",
"activated": true
},
"5": {
"description": "Extension3",
"activated": true
},
"6": {
"description": "Barred Dialling Numbers (BDN)",
"activated": false
},
"7": {
"description": "Extension4",
"activated": false
},
"9": {
"description": "Incoming Call Information (ICI and ICT)",
"activated": true
}
}
Change-Id: I34f64d1043698dc385619b2fdda23cb541675f76
|
|
Change-Id: I869b0268383f6babd9b51d0ddfce448a1d2dda1e
|
|
Change-Id: I291a429e9fe9f1a3fd95dcba3020b0e982154c97
|
|
ISO 7816-4 Section 5.4.3.2 "Expanded Format" permits for nesting
of security conditions using boolean operators OR, AND, NOT.
Let's implement decoding and encoding of these.
An example decoded looks like:
pySIM-shell (MF/EF.ARR)> read_record_decoded 1
[
[
{
"access_mode": [
"activate_file_or_record",
"deactivate_file_or_record",
"update_erase"
]
},
{
"or": [
{
"control_reference_template": "ADM1"
},
{
"control_reference_template": "ADM2"
}
]
}
],
[
{
"access_mode": [
"read_search_compare"
]
},
{
"always": null
}
]
]
Prior to this patch, pySim would raise "ValueError: Unknown Tag 0xa0 in bytearray"
Change-Id: Icb09cf3a90303a86fc77406b8b0806b5c926f1be
Closes: OS#5411
|
|
Thanks to Vadim for pointing this out.
Change-Id: I7ee1309331902bafab3c9fc6bc33ca713f8c7832
|
|
The TLV decoder class must be in self._tlv, not self.tlv
Change-Id: Ide6f6c823d5a16e375c324ba9bfa92e02c3b3c89
|
|
so let's use the DF.GSM/EF.PNN decoder
Change-Id: If2ce52fccfca3d8bb2c9801b9812912922600377
|
|
Change-Id: I124d59626f40538da30f729beca0e40bf6b2b915
Closes: OS#5270
|
|
There is no $base in this script, and the current form renders:
make: *** /docs: No such file or directory. Stop.
Build step 'Execute shell' marked build as failure
Change-Id: Ifcf27f7497daeb285dfb364bff20d0c861c77dcb
Related: OS#5271
|
|
The tests with physical cards should not prevent upload of the manuals
Change-Id: I8aecb4ce211cbcc3890886ef24b04d01c510b6da
|
|
At least on Debian 10 and unstable, I'm getting this error for pylint:
************* Module pySim.utils
pySim/utils.py:570:1: E0611: No name 'strxor' in module 'Crypto.Util.strxor' (no-name-in-module)
despite it clearly existing:
>>> import Crypto.Util.strxor
>>> Crypto.Util.strxor.strxor
<built-in function strxor>
So let's suppress the related pylint error.
Change-Id: Iea89e758782a569be953d19892028f083a92c2f1
|
|
5.1 was the version introducing pyyaml.FullLoader which we're using,
see https://pyyaml.org/wiki/PyYAML#history
Change-Id: I0f2fa08ceeac2759218e85ad5bdce3ef951d0b74
|
|
Add file specific command `update_imsi_plmn` to EF_IMSI to replace
the mcc and mnc part of the imsi for use in bulk_script(s)
Change-Id: I9662ff074acf9dc974ae4c78edac44db286e98fc
|
|
Change-Id: I21e5a7ad4f623ed30681dce1ff819679b8714c5b
|
|
pySIM-shell (MF/EF.PL)> read_binary_decoded
[
"en",
null,
null,
null,
null
]
Change-Id: I4e879ef34acee461adb8137a6315d064370b1b10
|
|
Change-Id: Id136909884d3c0eaa2416c6c488a6c4b7ed48119
|
|
All the files have '.' as separator in their names so far, let's avoid
any inconsistencies
Change-Id: Icabb892408a40ea37c7ebeb7db545b383aa01d99
|
|
decoded output will look like this:
[
{
"call_code": "911",
"service_category": {
"police": false,
"ambulance": false,
"fire_brigade": false,
"marine_guard": false,
"mountain_rescue": false,
"manual_ecall": false,
"automatic_ecall": false
},
"alpha_id": "911"
},
{
"call_code": "112",
"service_category": {
"police": false,
"ambulance": false,
"fire_brigade": false,
"marine_guard": false,
"mountain_rescue": false,
"manual_ecall": false,
"automatic_ecall": false
},
"alpha_id": "112"
},
null,
null,
null
]
Change-Id: If8b4972af4f5be1707446d335cfc6e729c973abb
|
|
when encoding the AcT value bit 11 is correctly set
when NG-RAN is present in the string representation,
however the decoding of bit 11 was missing.
Adds tests for the decoder as well.
Change-Id: I910df28c4c59ec94cce9603377786325f6d8c1a3
|
|
When probing applications on a card by running select_adf_by_aid()
SwMatchError exceptions indicating the non exsistance of that
application on the card should be ignored.
Change-Id: I3aa7deaf46bdf352a201c3089b3714405a06f281
|
|
Change-Id: I3430c32aea59af97360b9e766bfe95a146f09fe0
|
|
When printing applications found by probing for a specific AID, then the
wrong variable is used to print the AID.
Change-Id: I3d5ec28e46fe00c0d793a1d9ef0a0e0900649a4d
|
|
A profile can cover lots of different applications. Those applications
may not exist on all card models. To exclude applications that are not
installed on the particular card EF.DIR is evaluated. However, there may
be applications that are not registered in EF.DIR but supported by the
profile. To cover those as well, lets try to select the applications we
do not see in EF.DIR. If selecting works we know that the application
exists on the card and we can include them in the RuntimeState.
Change-Id: I3fa77a68664fe50d690a18adfb1ae1a88a189827
|
|
* serial is according to pypi: "A framework for serializing/deserializing
JSON/YAML/XML into python class instances and vice versa"
Change-Id: I154276fbadd70f6be94ba7d99e61f7e9eedbeb33
|
|
This fixes an issue where a KeyError may be raised when 'A5'
is not present in `fcp`
Change-Id: I5bb6131bd76c7bae2a70034c429cae2b380d164f
|
|
There is no need for us to expand a partial AID to the full AID before
selecting that ADF. The UICC specifications permit AID selection by
prefix only. So we could pass the prefix to the card, and the card would
do the prefix matching. In order to avoid problems with cards that fail
to do the prefix matching themselves we will still do the AID
completion, but in case we cannot complete the AID (AID not listed in
EF.DIR), we will try with the AID prefix anyway.
From the API user point of view, this allows us to select applications
not listed in EF.DIR
Change-Id: I0747b4e46ca7e30bd96d76053765080367ac1317
|
|
Selecting an application may fail, especially when the application does
not exist on the card.
Change-Id: Ia904a74d672cf9551fb4ee062dd606b350b64cef
|
|
There is no need to be case sensitive when the xSIM application name is
given as AID.
Change-Id: I9944d9180bf1ba35f44f0be2b05bdb725b5b8da9
|
|
the return type of decode_select_response is 'Any', lets be more
specific and use 'object'
Change-Id: Ic5c7ace234bc94ab1381d87e091369ade8011cab
|
|
The method decode_select_response does not access any property of the
object. This means the method can be static.
Change-Id: Idd7aaebcf1ab0099cd40a88b8938604e84d8a88b
|
|
The select response of an UICC will always return the number of records
of a file. However, older SIM will not include the number of records in
the select response. In those cases, simply guess the number of records
by reading until the first invalid record is hit.
Change-Id: Ib480797d881b9ec607ec6a86b73d452449f8cf87
Related: OS#5274
|
|
At the moment the non checking send_apdu() method is used when records
are read. Lets use read_record_checksw so that we get an exception in
case there is a problem to read the specified record.
Change-Id: I9fc411e1b12e8d9fd89b9964209808c0706011bd
|
|
The method decode_select_response just calls the function
_decode_select_response. But the function _decode_select_response
is not called from any other location, so we can move it into the
profile class.
Change-Id: Icf0143f64ca7d1c1ebf60ba06585f7afc1ac0d11
|
|
UICC and old SIM cards can be difficult to tell apart without prior
knowledge of the card. The ATR won't tell if the card is UICC or not.
The only remaining option is to try out if the card is able to handle
UICC APDUs. The same is true for 2G SIM cards. It is not guranteed that
every UICC card will have 2G functionality.
Lets add functionality to match a profile to the currently plugged card
by actively probing it.
Lets also add another profile to distinguish between UICC-only cards and
UICC cards that include SIM functionality.
Change-Id: If090d32551145f75c644657b90085a3ef5bfa691
Related: OS#5274
|
|
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
|
|
The function select_adf_by_aid first searches for the complete AID in
the set of AIDs that were read from EF.DIR. Lets put this task into a
separate helper method
Change-Id: I88447d47bc96d0d4ff5cea694b46e854232cdf86
|
|
This introduces support for talking to the ARA-M application on a card,
as specified in the GlobalPlatform "Secure Element Access Control"
specification v1.1.
Change-Id: Ia9107a4629c3d68320f32bbd4dd26e1f430717da
|
|
There is no status word definition given in the SIM profile. Lets add
one to be complete
Change-Id: I01f2643a93e4a9b2ce2f95134aa5d773179d9b1c
|
|
The table that holds the status word descriptions is initialized as an
empty list '[]'. This is not correct since the interpret_sw method
processes this data as dictionary, so lets initialize the sw member with
an empty dict '{}' when not status word description is given.
Change-Id: I3cae83f0f6ab274546991ecd14425f094b2816b2
Related: OS#5274
|