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