laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/37453?usp=email )
Change subject: WIP: New SGP.31 specific add_initial_eim command for eUICC ......................................................................
WIP: New SGP.31 specific add_initial_eim command for eUICC
Change-Id: Iab7afd8b380bf411870206c06aecd02220732447 --- M pySim/euicc.py 1 file changed, 44 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/53/37453/1
diff --git a/pySim/euicc.py b/pySim/euicc.py index ddfe939..9fcf3d7 100644 --- a/pySim/euicc.py +++ b/pySim/euicc.py @@ -31,7 +31,7 @@ from pySim.tlv import * from pySim.construct import * from pySim.commands import SimCardCommands -from pySim.utils import Hexstr, SwHexstr, SwMatchstr +from pySim.utils import Hexstr, SwHexstr, SwMatchstr, is_hexstr import pySim.global_platform
def compute_eid_checksum(eid) -> str: @@ -309,6 +309,19 @@ class GetEimConfigurationData(BER_TLV_IE, tag=0xbf55, nested=[EimConfigurationDataSeq]): pass
+# SGP.32 5.9.4 ES10b: AddInitialEim +class AddInitialEimReq(BER_TLV_IE, tag=0xbf57, nested=[EimConfigurationDataSeq]): + pass + +class AddInitialEimOk(BER_TLV_IE, tag=0x80): + _construct = GreedyBytes # TODO: decode +class AddInitialEimError(BER_TLV_IE, tag=0x81): + _construct = Enum(Int8ub, insufficientMemory=1, unsignedEimConfigDisallowed=2, + ciPKUnknown=3, invalidAssociationToken=5, counterValueOutOfRange=6, + undefinedError=127) +class AddInitialEimResponse(BER_TLV_IE, tag=0xbf57, nested=[AddInitialEimOk, AddInitialEimError]): + pass + class CardApplicationISDR(pySim.global_platform.CardApplicationSD): def __init__(self): super().__init__(name='ADF.ISD-R', aid=AID_ISD_R, @@ -529,6 +542,27 @@ d = gec.to_dict() self._cmd.poutput_json(flatten_dict_lists(d['get_eim_configuration_data']))
+ add_initial_eim_parser = argparse.ArgumentParser() + add_initial_eim_parser.add_argument('--eim-id', help='eIM Identifier', required=True) + add_initial_eim_parser.add_argument('--eim-id-type', help='eIM ID Type', choices=['oid','fqdn','proprietary']) + add_initial_eim_parser.add_argument('--eim-fqdn', help='eIM FQDN') + add_initial_eim_parser.add_argument('--counter-value', type=int, help='initial CounterValue for the eIM') + add_initial_eim_parser.add_argument('--association-token', type=int) + aie_pubkey_grp = add_initial_eim_parser.add_mutually_exclusive_group() + aie_pubkey_grp.add_argument('--pubkey-subject', type=is_hexstr) + aie_pubkey_grp.add_argument('--pubkey-cert', type=is_hexstr) + aie_pubkey_tls_grp = add_initial_eim_parser.add_mutually_exclusive_group() + aie_pubkey_tls_grp.add_argument('--pubkey-tls-subject', type=is_hexstr) + aie_pubkey_tls_grp.add_argument('--pubkey-tls-cert', type=is_hexstr) + + @cmd2.with_argparser(add_initial_eim_parser) + def do_add_initial_eim(self, opts): + """Perform an ES10b AddInitialEim function on an IoT eUICC (SGP.32 3.5.2).""" + aiec = AddInitialEim(FIXME) + aier = CardApplicationISDR.store_data_tlv(self._cmd.lchan.scc, aiec, AddInitialEimResp) + d = aier.to_dict() + self._cmd.poutput_json(flatten_dict_lists(d['add_initial_eim_response'])) + class CardApplicationECASD(pySim.global_platform.CardApplicationSD): def decode_select_response(self, data_hex: Hexstr) -> object: t = FciTemplate()