From 4fd3fa445cd0fe4448b3f47969f22476015c126a Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 28 Jul 2024 20:54:29 +0200 Subject: [PATCH] pySim.esim.saip: Add subclasses for gsm-access, phonebook, 5gs, saip Those are all optional ProfileElements related to the USIM NAA. Change-Id: I621cc3d2440babdc11b4b038f16acf418bbc88ad --- pySim/esim/saip/__init__.py | 56 ++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py index 9185e364..81fef84c 100644 --- a/pySim/esim/saip/__init__.py +++ b/pySim/esim/saip/__init__.py @@ -296,13 +296,13 @@ class ProfileElement: 'opt-usim': ProfileElementOptUSIM, 'isim': ProfileElementISIM, 'opt-isim': ProfileElementOptISIM, - # TODO: phonebook - # TODO: gsm-access + 'phonebook': ProfileElementPhonebook, + 'gsm-access': ProfileElementGsmAccess, # TODO: csim # TODO: opt-csim # TODO: eap - # TODO: df-5gs - # TODO: df-saip + 'df-5gs': ProfileElementDf5GS, + 'df-saip': ProfileElementDfSAIP, } if pe_type in class4petype: return class4petype[pe_type] @@ -517,6 +517,54 @@ class ProfileElementTelecom(FsProfileElement): for fname in ['df-telecom', 'ef-arr']: self.decoded[fname] = [] +class ProfileElementPhonebook(FsProfileElement): + type = 'phonebook' + + def __init__(self, decoded: Optional[dict] = None): + super().__init__(decoded) + if decoded: + return + # provide some reasonable defaults + self.decoded['templateID'] = str(oid.DF_PHONEBOOK_ADF_USIM) + for fname in ['df-phonebook']: + self.decoded[fname] = [] + +class ProfileElementGsmAccess(FsProfileElement): + type = 'gsm-access' + + def __init__(self, decoded: Optional[dict] = None): + super().__init__(decoded) + if decoded: + return + # provide some reasonable defaults + self.decoded['templateID'] = str(oid.DF_GSM_ACCESS_ADF_USIM) + for fname in ['df-gsm-access']: + self.decoded[fname] = [] + +class ProfileElementDf5GS(FsProfileElement): + type = 'df-5gs' + + def __init__(self, decoded: Optional[dict] = None): + super().__init__(decoded) + if decoded: + return + # provide some reasonable defaults + self.decoded['templateID'] = str(oid.DF_5GS_v3) + for fname in ['df-5gs']: + self.decoded[fname] = [] + +class ProfileElementDfSAIP(FsProfileElement): + type = 'df-saip' + + def __init__(self, decoded: Optional[dict] = None): + super().__init__(decoded) + if decoded: + return + # provide some reasonable defaults + self.decoded['templateID'] = str(oid.DF_SAIP) + for fname in ['df-saip']: + self.decoded[fname] = [] + class SecurityDomainKeyComponent: """Representation of a key-component of a key for a security domain."""