neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/42829?usp=email )
Change subject: saip.PES.rebuild_mandatory_services(): set 5G get-identity, profile-a-x25519, profile-b-p256
......................................................................
saip.PES.rebuild_mandatory_services(): set 5G get-identity, profile-a-x25519, profile-b-p256
Change-Id: Ibc29c6437c5c92e2b14938b733156536863465c1
---
M pySim/esim/saip/__init__.py
1 file changed, 51 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/29/42829/1
diff --git a/pySim/esim/saip/__init__.py b/pySim/esim/saip/__init__.py
index ec59c50..5fe8136 100644
--- a/pySim/esim/saip/__init__.py
+++ b/pySim/esim/saip/__init__.py
@@ -34,7 +34,7 @@
from pySim.utils import dec_imsi
from pySim.ts_102_221 import FileDescriptor
from pySim.filesystem import CardADF, Path
-from pySim.ts_31_102 import ADF_USIM
+from pySim.ts_31_102 import ADF_USIM, EF_UST, EF_SUCI_Calc_Info
from pySim.ts_31_103 import ADF_ISIM
from pySim.esim import compile_asn1_subdir
from pySim.esim.saip import templates
@@ -1726,7 +1726,56 @@
if 'BT' in ftype_list:
svc_set.add('ber-tlv')
# FIXME:dfLinked files (scan all files, check for non-empty Fcp.linkPath presence of DFs)
- # TODO: 5G related bits (derive from EF.UST or file presence?)
+
+ # 5G:
+ # - When SUCI is:
+ # - enabled (EF.UST 124 = true)
+ # AND
+ # - calculated in the USIM (EF.UST 125 = true),
+ # then eUICC-Mandatory-services needs 'get-identity'.
+ # - 'get-identity' implies that the eUICC must support ONE OF profile-A OR profile-B.
+ # So, when SUCI-CalcInfo for USIM in DF.SAIP contains both key types,
+ # then no profile-A or B services need to be requested explicitly.
+ # - When the SUCI-CalcInfo for USIM (DF.SAIP) contains ONLY a key of profile-A ("identifier": 1),
+ # then eUICC-Mandatory-services needs 'profile-a-x25519'.
+ # - Same: ONLY profile-B ("identifier": 2) needs 'profile-b-p256'.
+ # - (When SUCI is calculated in the UE, then the eUICC does not need to provide any of these services.)
+ suci_in_usim_enabled = False
+ try:
+ f_ust = self.get_pe_for_type("usim").files["ef-ust"]
+ ust = EF_UST().decode_bin(f_ust.body)
+ if ust[124]['activated'] and ust[125]['activated']:
+ suci_in_usim_enabled = True
+ except (KeyError, AttributeError):
+ pass
+ if suci_in_usim_enabled:
+ svc_set.add('get-identity')
+ # now check for profile-a and profile-b
+ suci_calcinfo_has_profile_a = False
+ suci_calcinfo_has_profile_b = False
+ try:
+ f_sucici = self.get_pe_for_type("df-saip").files["ef-suci-calc-info-usim"]
+ sucici = EF_SUCI_Calc_Info().decode_bin(f_sucici.body) or {}
+ for prot_scheme in sucici['prot_scheme_id_list']:
+ if not isinstance(prot_scheme, dict):
+ continue
+ ps_id = prot_scheme["identifier"]
+ if ps_id == 1:
+ suci_calcinfo_has_profile_a = True
+ elif ps_id == 2:
+ suci_calcinfo_has_profile_b = True
+ except (KeyError, AttributeError):
+ pass
+ if suci_calcinfo_has_profile_a and suci_calcinfo_has_profile_b:
+ # 'get-identity' implies that the eUICC supports one of the above. Do not require a specific one.
+ pass
+ elif suci_calcinfo_has_profile_a:
+ # The profile has only a profile-A key, so require that
+ svc_set.add('profile-a-x25519')
+ elif suci_calcinfo_has_profile_b:
+ # The profile has only a profile-B key, so require that
+ svc_set.add('profile-b-p256')
+
hdr_pe = self.get_pe_for_type('header')
# patch in the 'manual' services from the existing list:
for old_svc in hdr_pe.decoded['eUICC-Mandatory-services'].keys():
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/42829?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ibc29c6437c5c92e2b14938b733156536863465c1
Gerrit-Change-Number: 42829
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42783?usp=email )
(
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
)Change subject: ccid: ICC_MUTE instead of CMD_NOT_SUPPORTED on XfrBlock to unpowered slot
......................................................................
ccid: ICC_MUTE instead of CMD_NOT_SUPPORTED on XfrBlock to unpowered slot
The command is supported, just currently impossible.
Closes:OS#7015
Change-Id: I7f64475b023bd2b6fd1c4263850e56dd84d20b3e
---
M ccid_common/ccid_slot_fsm.c
1 file changed, 1 insertion(+), 1 deletion(-)
Approvals:
jolly: Looks good to me, but someone else must approve
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/ccid_common/ccid_slot_fsm.c b/ccid_common/ccid_slot_fsm.c
index fae2c3b..d680994 100644
--- a/ccid_common/ccid_slot_fsm.c
+++ b/ccid_common/ccid_slot_fsm.c
@@ -370,7 +370,7 @@
/* might be unpowered after failed ppss that led to reset */
if (cs->icc_powered != true)
- return -0;
+ return -CCID_ERR_ICC_MUTE;
msgb_pull(msg, 10);
--
To view, visit https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42783?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-Change-Id: I7f64475b023bd2b6fd1c4263850e56dd84d20b3e
Gerrit-Change-Number: 42783
Gerrit-PatchSet: 2
Gerrit-Owner: Hoernchen <ewild(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>
laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42780?usp=email )
(
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
)Change subject: 7816fsm: fail PPS on invalid first byte in PPS_S_WAIT_PPSX
......................................................................
7816fsm: fail PPS on invalid first byte in PPS_S_WAIT_PPSX
Change-Id: I5b74b8443a98224c0c95a664a886066495d8b64a
---
M ccid_common/iso7816_fsm.c
1 file changed, 15 insertions(+), 1 deletion(-)
Approvals:
jolly: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/ccid_common/iso7816_fsm.c b/ccid_common/iso7816_fsm.c
index 2b3b41e..c0ff1f0 100644
--- a/ccid_common/iso7816_fsm.c
+++ b/ccid_common/iso7816_fsm.c
@@ -1076,8 +1076,22 @@
msgb_put_u8(atp->rx_cmd, byte);
switch (fi->state) {
case PPS_S_WAIT_PPSX:
- if (byte == 0xff)
+ /* ISO 7816-3 §9.2: PPSS is fixed at 0xff. Any other
+ * first byte is an erroneous PPS response and §9.1
+ * requires deactivation. We must transition out of
+ * WAIT_PPSX on every byte like every other PPS substate
+ * so the unconditional msgb_put_u8 above stays
+ * bounded by the spec's 6-byte maximum. */
+ if (byte == 0xff) {
osmo_fsm_inst_state_chg(fi, PPS_S_WAIT_PPS0, 0, 0);
+ } else {
+ LOGPFSML(fi, LOGL_ERROR,
+ "Invalid PPSS=0x%02x (expected 0xff); failing PPS\n",
+ byte);
+ osmo_fsm_inst_state_chg(fi, PPS_S_DONE, 0, 0);
+ osmo_fsm_inst_dispatch(fi->proc.parent,
+ ISO7816_E_PPS_FAILED_IND, atp->tx_cmd);
+ }
break;
case PPS_S_WAIT_PPS0:
atp->pps0_recv = byte;
--
To view, visit https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/42780?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-Change-Id: I5b74b8443a98224c0c95a664a886066495d8b64a
Gerrit-Change-Number: 42780
Gerrit-PatchSet: 2
Gerrit-Owner: Hoernchen <ewild(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis(a)fe80.eu>