laforge has submitted this change. ( 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(-)
Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified
diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py index e5173d7..2f69522 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):