laforge has uploaded this change for review. (
https://gerrit.osmocom.org/c/pysim/+/37422?usp=email )
Change subject: pySim.esim.saip: Move initialization of PE header to base class
......................................................................
pySim.esim.saip: Move initialization of PE header to base class
Let's avoid the copy+paste in the subclass constructors and initialize the profile
element header in the base class constructor.
Change-Id: I6e69ae1f0d33d963247fc506db33b3840c10c19a
---
M pySim/esim/saip/__init__.py
1 file changed, 36 insertions(+), 47 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/22/37422/1
diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py
index a71c3c8..9c1f77d 100644
--- a/pySim/esim/saip/__init__.py
+++ b/pySim/esim/saip/__init__.py
@@ -197,8 +197,15 @@
'securityDomain': 'sd-Header',
}
- def __init__(self, decoded = None):
- self.decoded = decoded
+ def __init__(self, decoded = None, mandated: bool = True):
+ if decoded:
+ self.decoded = decoded
+ else:
+ self.decoded = OrderedDict()
+ if self.header_name:
+ self.decoded[self.header_name] = { 'identification': None}
+ if mandated:
+ self.decoded[self.header_name] = { 'mandated': None}
def _fixup_sqnInit_dec(self) -> None:
"""asn1tools has a bug when working with SEQUENCE OF that have
DEFAULT values. Let's work around
@@ -305,13 +312,10 @@
type = 'mf'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults
- self.decoded = OrderedDict()
- self.decoded['mf-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.MF)
for fname in ['mf', 'ef-iccid', 'ef-dir',
'ef-arr']:
self.decoded[fname] = []
@@ -321,13 +325,10 @@
type = 'pukCodes'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults
- self.decoded = OrderedDict()
- self.decoded['puk-Header'] = { 'mandated': None,
'identification': None}
self.decoded['pukCodes'] = []
self.add_puk(0x01, b'11111111')
self.add_puk(0x81, b'22222222')
@@ -354,13 +355,10 @@
type = 'pinCodes'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults
- self.decoded = OrderedDict()
- self.decoded['pin-Header'] = { 'mandated': None,
'identification': None}
self.decoded['pinCodes'] = ('pinconfig', [])
self.add_pin(0x01, b'0000\xff\xff\xff\xff', unblock_ref=1, pin_attrib=6)
self.add_pin(0x10, b'11111111', pin_attrib=3)
@@ -393,13 +391,10 @@
type = 'telecom'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['telecom-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.DF_TELECOM_v2)
for fname in ['df-telecom', 'ef-arr']:
self.decoded[fname] = []
@@ -467,12 +462,10 @@
pass
def __init__(self, decoded: Optional[dict] = None):
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['sd-Header'] = { 'mandated': None,
'identification': None }
self.decoded['instance'] = {
'applicationLoadPackageAID': h2b('A0000001515350'),
'classAID': h2b('A000000251535041'),
@@ -543,8 +536,10 @@
class ProfileElementSSD(ProfileElementSD):
"""Class representing a securityDomain ProfileElement for a
SSD."""
- def __init__(self):
- super().__init__()
+ def __init__(self, decoded: Optional[dict] = None):
+ super().__init__(decoded)
+ if decoded:
+ return
# defaults [overriding ProfileElementSD) taken from SAIP v2.3.1 Section 11.2.12
self.decoded['instance']['instanceAID'] =
h2b('A00000055910100102736456616C7565')
self.decoded['instance']['applicationPrivileges'] =
h2b('808000')
@@ -560,14 +555,11 @@
inst_aid: Optional[bytes] = None, sd_aid: Optional[bytes] = None,
adf_aid: Optional[bytes] = None,
tar_list: Optional[List[bytes]] = [], msl: Optional[int] = 0x06):
- super().__init__()
+ super().__init__(decoded)
ADM1_ACCESS = h2b('02000100')
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['rfm-header'] = { 'mandated': None,
'identification': None}
self.decoded['instanceAID'] = inst_aid
self.decoded['securityDomainAID'] = sd_aid
self.decoded['tarList'] = tar_list
@@ -585,13 +577,10 @@
type = 'usim'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['usim-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.ADF_USIM_by_default_v2)
for fname in ['adf-usim', 'ef-imsi', 'ef-arr',
'ef-ust', 'ef-spn', 'ef-est', 'ef-acc',
'ef-ecc']:
self.decoded[fname] = []
@@ -609,26 +598,20 @@
type = 'opt-usim'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['optusim-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.ADF_USIMopt_not_by_default_v2)
class ProfileElementISIM(ProfileElement):
type = 'isim'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['isim-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.ADF_ISIM_by_default)
for fname in ['adf-isim', 'ef-impi', 'ef-impu',
'ef-domain', 'ef-ist', 'ef-arr']:
self.decoded[fname] = []
@@ -641,13 +624,10 @@
type = 'opt-isim'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['optisim-header'] = { 'mandated': None,
'identification': None}
self.decoded['templateID'] = str(oid.ADF_ISIMopt_not_by_default_v2)
@@ -655,13 +635,10 @@
type = 'akaParameter'
def __init__(self, decoded: Optional[dict] = None):
- super().__init__()
+ super().__init__(decoded)
if decoded:
- self.decoded = decoded
return
# provide some reasonable defaults for a MNO-SD
- self.decoded = OrderedDict()
- self.decoded['aka-header'] = { 'mandated': None,
'identification': None}
self.set_milenage(b'\x00'*16, b'\x00'*16)
def set_milenage(self, k: bytes, opc: bytes):
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/37422?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I6e69ae1f0d33d963247fc506db33b3840c10c19a
Gerrit-Change-Number: 37422
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange