laforge has uploaded this change for review.
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()
To view, visit change 37453. To unsubscribe, or for help writing mail filters, visit settings.