laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/pysim/+/40200?usp=email )

 (

12 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: personalization: indicate default ParamSource per 
ConfigurableParameter
......................................................................

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
Jenkins: skip-card-test
---
M pySim/esim/saip/personalization.py
1 file changed, 16 insertions(+), 4 deletions(-)

Approvals:
  dexter: Looks good to me, approved
  Jenkins Builder: Verified




diff --git a/pySim/esim/saip/personalization.py 
b/pySim/esim/saip/personalization.py
index 2b99632..7331444 100644
--- a/pySim/esim/saip/personalization.py
+++ b/pySim/esim/saip/personalization.py
@@ -23,6 +23,7 @@
 from osmocom.utils import hexstr
 from pySim.utils import enc_iccid, dec_iccid, enc_imsi, dec_imsi, h2b, b2h, 
rpad, sanitize_iccid
 from pySim.esim.saip import ProfileElement, ProfileElementSequence
+from pySim.esim.saip import param_source
 from pySim.ts_51_011 import EF_SMSP

 def unrpad(s: hexstr, c='f') -> hexstr:
@@ -121,6 +122,7 @@
     max_len = None
     allow_len = None # a list of specific lengths
     example_input = 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
@@ -330,6 +332,7 @@
     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):
@@ -356,6 +359,7 @@
     min_len = 18
     max_len = 20
     example_input = '998877665544332211'
+    default_source = param_source.IncDigitSource

     @classmethod
     def validate_val(cls, val):
@@ -388,6 +392,7 @@
     min_len = 6
     max_len = 15
     example_input = '00101' + ('0' * 10)
+    default_source = param_source.IncDigitSource

     @classmethod
     def apply_val(cls, pes: ProfileElementSequence, val):
@@ -423,6 +428,7 @@
     max_len = 21 # '+' and 20 digits
     min_len = 1
     example_input = '+49301234567'
+    default_source = param_source.ConstantSource

     @staticmethod
     def str_to_tuple(addr_str):
@@ -624,7 +630,8 @@
     allow_len = 8
     rpad = 16
     keyReference = None
-    example_input = '0' * allow_len
+    example_input = f'0*{allow_len}'
+    default_source = param_source.RandomDigitSource

     @classmethod
     def apply_val(cls, pes: ProfileElementSequence, val):
@@ -659,7 +666,8 @@
     rpad = 16
     min_len = 4
     max_len = 8
-    example_input = '0' * max_len
+    example_input = f'0*{max_len}'
+    default_source = param_source.RandomDigitSource
     keyReference = None

     @staticmethod
@@ -698,7 +706,7 @@

 class Pin1(Pin):
     name = 'PIN1'
-    example_input = '0' * 4  # PIN are usually 4 digits
+    example_input = '0*4'  # PIN are usually 4 digits
     keyReference = 0x01

 class Pin2(Pin1):
@@ -772,6 +780,7 @@
     algo_config_key = 'algorithmID'
     allow_len = 1
     example_input = 1  # Milenage
+    default_source = param_source.ConstantSource

     @classmethod
     def validate_val(cls, val):
@@ -787,7 +796,7 @@
     name = 'K'
     algo_config_key = 'key'
     allow_len = (128 // 8, 256 // 8) # length in bytes (from BinaryParam); 
TUAK also allows 256 bit
-    example_input = '00' * allow_len[0]
+    example_input = f'00*{allow_len[0]}'

 class Opc(K):
     name = 'OPc'
@@ -801,6 +810,7 @@
     algo_config_key = 'rotationConstants'
     allow_len = 5 # length in bytes (from BinaryParam)
     example_input = '40 00 20 40 60'
+    default_source = param_source.ConstantSource

     @classmethod
     def validate_val(cls, val):
@@ -831,6 +841,7 @@
                      ' 00000000000000000000000000000002'
                      ' 00000000000000000000000000000004'
                      ' 00000000000000000000000000000008')
+    default_source = param_source.ConstantSource

 class TuakNumberOfKeccak(IntegerParam, AlgoConfig):
     """Number of iterations of Keccak-f[1600] permutation as recomended by 
Section 7.2 of 3GPP TS 35.231"""
@@ -839,3 +850,4 @@
     min_val = 1
     max_val = 255
     example_input = '1'
+    default_source = param_source.ConstantSource

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/40200?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32
Gerrit-Change-Number: 40200
Gerrit-PatchSet: 14
Gerrit-Owner: neels <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>

Reply via email to