From 3b7e2ae2c1bdeca35f535467120b947b12e982dd Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 6 Jul 2024 13:47:09 +0200 Subject: [PATCH] pySim.saip: Add ProfileElementRFM class Change-Id: I547e02c12345932deafa4b914fcaeaa183b69798 --- pySim/esim/saip/__init__.py | 28 ++++++++++++++++++++++++++++ tests/test_esim_saip.py | 7 +++++++ 2 files changed, 35 insertions(+) diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py index e87e5c0c..e5173d77 100644 --- a/pySim/esim/saip/__init__.py +++ b/pySim/esim/saip/__init__.py @@ -553,6 +553,34 @@ class ProfileElementSSD(ProfileElementSD): 'uiccToolkitApplicationSpecificParametersField': h2b('01000001000000020112036C756500'), } +class ProfileElementRFM(ProfileElement): + type = 'rfm' + + def __init__(self, decoded: Optional[dict] = None, + 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__() + 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 + self.decoded['minimumSecurityLevel'] = bytes([msl]) + self.decoded['uiccAccessDomain'] = ADM1_ACCESS + self.decoded['uiccAdminAccessDomain'] = ADM1_ACCESS + if adf_aid: + self.decoded['adfRFMAccess'] = { + 'adfAID': adf_aid, + 'adfAccessDomain': ADM1_ACCESS, + 'adfAdminAccessDomain': ADM1_ACCESS, + } + class ProfileElementUSIM(ProfileElement): type = 'usim' diff --git a/tests/test_esim_saip.py b/tests/test_esim_saip.py index 5a1284e2..e87a0737 100755 --- a/tests/test_esim_saip.py +++ b/tests/test_esim_saip.py @@ -74,6 +74,13 @@ class SaipTest(unittest.TestCase): pes.append(inst) pes.to_der() + # RFM requires some constructor arguments + cls = ProfileElementRFM + with self.subTest(cls.__name__): + pes = ProfileElementSequence() + inst = cls(inst_aid=b'\x01\x02', sd_aid=b'\x03\x04', tar_list=[b'\x01\x02\x03']) + pes.append(inst) + pes.to_der() if __name__ == "__main__":