From 4507000dc1068ad1103650104c172d1cb3579e51 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sat, 1 Mar 2025 21:20:17 +0100 Subject: [PATCH] personalization: indicate default ParamSource per ConfigurableParameter Add default_source class members pointing to ParamSource classes to all ConfigurableParameter subclasses. This is useful to automatically set up a default ParamSource for a given ConfigurableParameter subclass, during user interaction to produce a batch personalization. For example, if the user selects a Pin1 parameter, a calling program can implicitly set this to a RandomDigitSource, which will magically make it work the way that most users need. BTW, default_source and default_value can be combined to configure a matching ParamSource instance: my_source = MyParam.default_source.from_str( MyParam.default_value ) Change-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32 --- pySim/esim/saip/personalization.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pySim/esim/saip/personalization.py b/pySim/esim/saip/personalization.py index b5f768df..c935ca7c 100644 --- a/pySim/esim/saip/personalization.py +++ b/pySim/esim/saip/personalization.py @@ -143,6 +143,7 @@ class ConfigurableParameter: max_len = None allow_len = None # a list of specific lengths default_value = None + default_source = None # a param_source.ParamSource subclass def __init__(self, input_value=None): self.input_value = input_value # the raw input value as given by caller @@ -346,6 +347,7 @@ class BinaryParam(ConfigurableParameter): allow_types = (str, io.BytesIO, bytes, bytearray) allow_chars = '0123456789abcdefABCDEF' strip_chars = ' \t\r\n' + default_source = param_source.RandomHexDigitSource @classmethod def validate_val(cls, val): @@ -373,6 +375,7 @@ class Iccid(DecimalParam): min_len = 18 max_len = 20 default_value = '0' * 18 + default_source = param_source.IncDigitSource @classmethod def validate_val(cls, val): @@ -406,6 +409,7 @@ class Imsi(DecimalParam): min_len = 6 max_len = 15 default_value = '00101' + ('0' * 10) + default_source = param_source.IncDigitSource @classmethod def apply_val(cls, pes: ProfileElementSequence, val): @@ -617,6 +621,7 @@ class Puk(DecimalHexParam): rpad = 16 keyReference = None default_value = '0' * allow_len + default_source = param_source.RandomDigitSource @classmethod def apply_val(cls, pes: ProfileElementSequence, val): @@ -654,6 +659,7 @@ class Pin(DecimalHexParam): min_len = 4 max_len = 8 default_value = '0' * max_len + default_source = param_source.RandomDigitSource keyReference = None @staticmethod @@ -771,6 +777,7 @@ class AlgorithmID(DecimalParam, AlgoConfig): algo_config_key = 'algorithmID' allow_len = 1 default_value = 1 # Milenage + default_source = param_source.ConstantSource @classmethod def validate_val(cls, val): @@ -801,6 +808,7 @@ class MilenageRotationConstants(BinaryParam, AlgoConfig): algo_config_key = 'rotationConstants' allow_len = 5 # length in bytes (from BinaryParam) default_value = '0a 0b 0c 0d 0e' + default_source = param_source.ConstantSource @classmethod def validate_val(cls, val): @@ -833,6 +841,7 @@ class TuakNumberOfKeccak(IntegerParam, AlgoConfig): min_val = 1 max_val = 255 default_value = '1' + default_source = param_source.ConstantSource class BatchPersonalization: