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()
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/37453?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Iab7afd8b380bf411870206c06aecd02220732447
Gerrit-Change-Number: 37453
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange