From e6124b0abad0a8ff786cc1950e3e0223a7af411c Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 25 Jan 2024 09:08:26 +0100 Subject: [PATCH] add contrib/eidtool.py: Tool for checking + computing EID checksum Change-Id: If6c560a2de51718948fb99b816e080f2aff4d0ed --- contrib/eidtool.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100755 contrib/eidtool.py diff --git a/contrib/eidtool.py b/contrib/eidtool.py new file mode 100755 index 00000000..cd5992bf --- /dev/null +++ b/contrib/eidtool.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + +# Command line tool to compute or verify EID (eUICC ID) values +# +# (C) 2024 by Harald Welte +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import sys +import argparse + +from pySim.euicc import compute_eid_checksum, verify_eid_checksum + + +option_parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, + description="""pySim EID Tool +This utility program can be used to compute or verify the checksum of an EID +(eUICC Identifier). See GSMA SGP.29 for the algorithm details. + +Example (verification): + $ eidtool.py --verify 89882119900000000000000000001654 + EID checksum verified successfully + +Example (generation, passing first 30 digits): + $ eidtool.py --compute 898821199000000000000000000016 + 89882119900000000000000000001654 + +Example (generation, passing all 32 digits): + $ eidtool.py --compute 89882119900000000000000000001600 + 89882119900000000000000000001654 + +Example (generation, specifying base 30 digits and number to add): + $ eidtool.py --compute 898821199000000000000000000000 --add 16 + 89882119900000000000000000001654 +""") +group = option_parser.add_mutually_exclusive_group(required=True) +group.add_argument('--verify', help='Verify given EID csum') +group.add_argument('--compute', help='Generate EID csum') +option_parser.add_argument('--add', type=int, help='Add value to EID base before computing') + + +if __name__ == '__main__': + opts = option_parser.parse_args() + + if opts.verify: + res = verify_eid_checksum(opts.verify) + if res: + print("EID checksum verified successfully") + sys.exit(0) + else: + print("EID checksum invalid") + sys.exit(1) + elif opts.compute: + eid = opts.compute + if opts.add: + if len(eid) != 30: + print("EID base must be 30 digits when using --add") + sys.exit(2) + eid = str(int(eid) + int(opts.add)) + res = compute_eid_checksum(eid) + print(res) +