pySim.esim.es8p: Support non-operational ProfileMetadata

If no profileClass is given, ProfileMetadata defaults to operational.
Let's add the capability to also generate metadata for test or provisioning profiles.

Change-Id: Id55537ed03e2690c1fc9545bb3c49cfc76d8e331
This commit is contained in:
Harald Welte
2025-11-18 01:05:59 +01:00
committed by laforge
parent 784cebded4
commit 52df66cd56

View File

@@ -76,10 +76,11 @@ def gen_replace_session_keys(ppk_enc: bytes, ppk_cmac: bytes, initial_mcv: bytes
class ProfileMetadata: class ProfileMetadata:
"""Representation of Profile metadata. Right now only the mandatory bits are """Representation of Profile metadata. Right now only the mandatory bits are
supported, but in general this should follow the StoreMetadataRequest of SGP.22 5.5.3""" supported, but in general this should follow the StoreMetadataRequest of SGP.22 5.5.3"""
def __init__(self, iccid_bin: bytes, spn: str, profile_name: str): def __init__(self, iccid_bin: bytes, spn: str, profile_name: str, profile_class = 'operational'):
self.iccid_bin = iccid_bin self.iccid_bin = iccid_bin
self.spn = spn self.spn = spn
self.profile_name = profile_name self.profile_name = profile_name
self.profile_class = profile_class
self.icon = None self.icon = None
self.icon_type = None self.icon_type = None
self.notifications = [] self.notifications = []
@@ -105,6 +106,14 @@ class ProfileMetadata:
'serviceProviderName': self.spn, 'serviceProviderName': self.spn,
'profileName': self.profile_name, 'profileName': self.profile_name,
} }
if self.profile_class == 'test':
smr['profileClass'] = 0
elif self.profile_class == 'provisioning':
smr['profileClass'] = 1
elif self.profile_class == 'operational':
smr['profileClass'] = 2
else:
raise ValueError('Unsupported Profile Class %s' % self.profile_class)
if self.icon: if self.icon:
smr['icon'] = self.icon smr['icon'] = self.icon
smr['iconType'] = self.icon_type smr['iconType'] = self.icon_type