global_platform 'put_key': constrain ranges of KVN + KID in argparse

The earlier we catch errors in user input, the better.

Change-Id: Icee656f1373a993b6883ffaab441fe178c0fe8cb
This commit is contained in:
Harald Welte 2024-02-03 13:27:47 +01:00
parent a2f1654051
commit 762a72b308
2 changed files with 16 additions and 3 deletions

View File

@ -501,9 +501,9 @@ class ADF_SD(CardADF):
return data return data
put_key_parser = argparse.ArgumentParser() put_key_parser = argparse.ArgumentParser()
put_key_parser.add_argument('--old-key-version-nr', type=auto_int, default=0, help='Old Key Version Number') put_key_parser.add_argument('--old-key-version-nr', type=auto_uint8, default=0, help='Old Key Version Number')
put_key_parser.add_argument('--key-version-nr', type=auto_int, required=True, help='Key Version Number') put_key_parser.add_argument('--key-version-nr', type=auto_uint8, required=True, help='Key Version Number')
put_key_parser.add_argument('--key-id', type=auto_int, required=True, help='Key Identifier (base)') put_key_parser.add_argument('--key-id', type=auto_uint7, required=True, help='Key Identifier (base)')
put_key_parser.add_argument('--key-type', choices=KeyType.ksymapping.values(), action='append', required=True, help='Key Type') put_key_parser.add_argument('--key-type', choices=KeyType.ksymapping.values(), action='append', required=True, help='Key Type')
put_key_parser.add_argument('--key-data', type=is_hexstr, action='append', required=True, help='Key Data Block') put_key_parser.add_argument('--key-data', type=is_hexstr, action='append', required=True, help='Key Data Block')
put_key_parser.add_argument('--key-check', type=is_hexstr, action='append', help='Key Check Value') put_key_parser.add_argument('--key-check', type=is_hexstr, action='append', help='Key Check Value')

View File

@ -7,6 +7,7 @@ import json
import abc import abc
import string import string
import datetime import datetime
import argparse
from io import BytesIO from io import BytesIO
from typing import Optional, List, Dict, Any, Tuple, NewType from typing import Optional, List, Dict, Any, Tuple, NewType
@ -913,6 +914,18 @@ def auto_int(x):
"""Helper function for argparse to accept hexadecimal integers.""" """Helper function for argparse to accept hexadecimal integers."""
return int(x, 0) return int(x, 0)
def _auto_uint(x, max_val: int):
"""Helper function for argparse to accept hexadecimal or decimal integers."""
ret = int(x, 0)
if ret < 0 or ret > max_val:
raise argparse.ArgumentTypeError('Number exceeds permited value range (0, %u)' % max_val)
return ret
def auto_uint7(x):
return _auto_uint(x, 127)
def auto_uint8(x):
return _auto_uint(x, 255)
def expand_hex(hexstring, length): def expand_hex(hexstring, length):
"""Expand a given hexstring to a specified length by replacing "." or ".." """Expand a given hexstring to a specified length by replacing "." or ".."