neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/41770?usp=email )
Change subject: saip/param_source: try to not repeat random values ......................................................................
saip/param_source: try to not repeat random values
Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0 --- M pySim/esim/saip/param_source.py 1 file changed, 23 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/70/41770/1
diff --git a/pySim/esim/saip/param_source.py b/pySim/esim/saip/param_source.py index f5d2a35..1e5c92e 100644 --- a/pySim/esim/saip/param_source.py +++ b/pySim/esim/saip/param_source.py @@ -100,6 +100,7 @@ 'return a different sequence of random decimal digits each' is_abstract = False name = 'random decimal digits' + used_keys = set()
def __init__(self, num_digits, first_value, last_value): """ @@ -118,7 +119,16 @@ self.val_first_last = (first_value, last_value)
def get_next(self, csv_row:dict=None): - val = self.random_impl.randint(*self.val_first_last) + # try to generate random digits that are always different from previously produced random bytes + attempts = 10 + while True: + val = self.random_impl.randint(*self.val_first_last) + if val in RandomDigitSource.used_keys: + attempts -= 1 + if attempts: + continue + RandomDigitSource.used_keys.add(val) + break return self.val_to_digit(val)
def val_to_digit(self, val:int): @@ -144,6 +154,7 @@ 'return a different sequence of random hexadecimal digits each' is_abstract = False name = 'random hexadecimal digits' + used_keys = set()
def __init__(self, num_digits): 'see from_str()' @@ -156,7 +167,17 @@ self.num_digits = num_digits
def get_next(self, csv_row:dict=None): - val = self.random_impl.randbytes(self.num_digits // 2) + # try to generate random bytes that are always different from previously produced random bytes + attempts = 10 + while True: + val = self.random_impl.randbytes(self.num_digits // 2) + if val in RandomHexDigitSource.used_keys: + attempts -= 1 + if attempts: + continue + RandomHexDigitSource.used_keys.add(val) + break + return b2h(val)
@classmethod