utils: add is_hex function to check hex strings
since we have added pySim-shell.py that has a lot of locations where the
user can enter hexadecimal data there is an increased need for input
validation. Lets add a central is_hex function that verifies hex
strings.
Change-Id: Ia29a13c9215357dd2adf141f2ef222c823f8456d
Related: OS#4963
diff --git a/pySim/utils.py b/pySim/utils.py
index d75a000..f452e1d 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -577,6 +577,28 @@
return s
+def is_hex(string, minlen=2, maxlen=None) -> bool:
+ """
+ Check if a string is a valid hexstring
+ """
+
+ # Filter obviously bad strings
+ if not string:
+ return False
+ if len(string) < minlen or minlen < 2:
+ return False
+ if len(string) % 2:
+ return False
+ if maxlen and len(string) > maxlen:
+ return False
+
+ # Try actual encoding to be sure
+ try:
+ try_encode = h2b(string)
+ return True
+ except:
+ return False
+
def sanitize_pin_adm(pin_adm, pin_adm_hex = None):
"""
The ADM pin can be supplied either in its hexadecimal form or as