pySim-shell: Improved argument validation for verify_adm argument

Let's make sure we don't even bother to ask the card to verify
anything as ADM1 pin which is not either a sequence of decimal digits
or an even number of hex digits (even number of bytes).

Change-Id: I4a193a3cf63462fad73d145ab1481070ddf767ca
diff --git a/pySim/utils.py b/pySim/utils.py
index 7459a3f..92bf70f 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -1467,3 +1467,14 @@
 def all_subclasses(cls) -> set:
     """Recursively get all subclasses of a specified class"""
     return set(cls.__subclasses__()).union([s for c in cls.__subclasses__() for s in all_subclasses(c)])
+
+def is_hexstr_or_decimal(instr: str) -> str:
+    """Method that can be used as 'type' in argparse.add_argument() to validate the value consists of
+    [hexa]decimal digits only."""
+    if instr.isdecimal():
+        return instr
+    if not all(c in string.hexdigits for c in instr):
+        raise ValueError('Input must be [hexa]decimal')
+    if len(instr) & 1:
+        raise ValueError('Input has un-even number of hex digits')
+    return instr