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

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

Gerrit-MessageType: newchange
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I4fa743ef5677580f94b9df16a5051d1d178edeb0
Gerrit-Change-Number: 41770
Gerrit-PatchSet: 1
Gerrit-Owner: neels <[email protected]>

Reply via email to