eSIM RSP 测试用例对比站

人工切片(-man) ↔ Cas 盲生成(-cas)· 真机真卡执行证据对照

源码对照:4.2.21.2.2

ES10c 启用 Profile 异常用例(Case 3) / TC_eUICC_ES10c.EnableProfile_ErrorCases_Case3

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
59 行 / 2411 字符 / gb18030
-cas 入口
TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3/Import/TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3.js
340 行 / 27858 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js59 行 / 2411 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_Error_Enable_Profile_by_an_unknown_ISD_P_AID (extracted verbatim)
2
3function TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_Error_Enable_Profile_by_an_unknown_ISD_P_AID()
4{
5	if(!Card_Have_ECC_Cert)
6		return;
7	
8	TestOfMEPMode = 0;	
9
10	initial_condition_PROFILE_OPERATIONAL1_is_Disabled();
11	var ISD_P_Test01 = curProfile_ISD_P_AID;
12	
13	tracenamestr = "测试目的:通过未知的ISD-P AID激活profile";
14	curDis.TraceStart(sno++,tracenamestr);
15	
16	curLogicChannel = 0;
17	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
18	Ini_powerOn_eUICC_LPAe_not_activate();
19	
20	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
21	TS_MANAGE_CHANNEL_OPEN();
22	
23	curLogicChannel = 1;
24	
25	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
26	TS_SELECT("Select ISD",ISD_R_AID,"9000");
27	
28	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,refreshFlag为FF(true);");
29	var enableProRequest = new EnableProfileRequest();
30	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.isdpAid,ISD_P_AIDX);
31	enableProRequest.refreshFlag = BooleanValue_BerCode_True;
32	enableProRequest.GenHexData();
33	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData,"90","00","6A82");
34	curStrHandle.CheckData("", respData, "EnableProfileResponse");
35	
36  curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ProfileInfoListRequest,获取profile状态;");
37	var proInfoListRequest = new ProfileInfoListRequest();
38	proInfoListRequest.searchCriteria = new ChoiceObj(tagOfsearchCriteria_ProfileInfo.isdpAid,ISD_P_Test01);
39	proInfoListRequest.tagList = "5A4F9F70";
40	proInfoListRequest.GenHexData();
41	var respData = LPAd_Transport_data_to_eUICC(proInfoListRequest.hexData);
42	
43
44	var proInfoListResponse = new  ProfileInfoListResponse();
45	proInfoListResponse.checkCardResDataFormat(respData);
46	
47	try
48	{
49		curStrHandle.CheckData(ICCID_OP_PROF1, proInfoListResponse.profileInfoListOk.arrOfElement[0].iccid, "ICCID");
50		curStrHandle.CheckData(ISD_P_Test01, proInfoListResponse.profileInfoListOk.arrOfElement[0].isdpAid, "ISD-P AID");
51		curStrHandle.CheckData(Profile_DISABLED, proInfoListResponse.profileInfoListOk.arrOfElement[0].profileState, "profile State");
52	}catch(e){
53		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
54	}
55	
56	RecoverCard();
57	
58}
59
-cas 盲生成TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3/Import/TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3.js340 行 / 27858 字符 / gb18030入口函数 @L32
1// Author: 卡思Cas智能体
2// Date: 20261005-152741
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.EnableProfile_ErrorCases_Case3,Test Sequence #01 unknown ISD-P AID; #02 unknown ICCID; #03 enable when Enabled (ISD-P AID); #04 enable when Enabled (ICCID); #05 PPR1 loaded (ISD-P AID); #06 PPR1 loaded (ICCID); #07 catBusy refreshFlag not set; #08 catBusy refreshFlag set,适用性 M。
4// Test points: S1-C1 SW;S2-C1 SW;S2-C2 contains PROFILE_INFO1_DISABLED
5//   S2-C3 contains iccid 989209012143658709F5;S3-C1 SW;S4-C1 SW
6//   S4-C2 contains PROFILE_INFO1_DISABLED;S4-C3 contains iccid 989209012143658709F5;S5-C1 SW
7//   S6-C1 SW;S6-C2 contains PROFILE_INFO1;S6-C3 contains iccid 989209012143658709F5;S7-C1 SW
8//   S8-C1 SW;S8-C2 contains PROFILE_INFO1;S8-C3 contains iccid 989209012143658709F5;S9-C1 SW
9//   S10-C1 SW;S10-C2 contains PROFILE_INFO1_DISABLED;S10-C2 contains PROFILE_INFO4_ENABLED
10//   S10-C3 contains entries1 iccid 989209012143658709F5
11//   S10-C3 contains entries2 iccid 989209015476981032F9;S11-C1 SW;S12-C1 SW
12//   S12-C2 contains PROFILE_INFO1_DISABLED;S12-C2 contains PROFILE_INFO4_ENABLED
13//   S12-C3 contains entries1 iccid 989209012143658709F5
14//   S12-C3 contains entries2 iccid 989209015476981032F9;S13-C1 SW;S14-C1 proactive command envelope
15//   S15-C1 SW;S16-C1 SW;S16-C2 contains PROFILE_INFO1;S16-C2 contains PROFILE_INFO2
16//   S16-C3 contains entries1 iccid 989209012143658709F5
17//   S16-C3 contains entries2 iccid 989209013254769810F9;S17-C1 SW;S18-C1 proactive command envelope
18//   S19-C1 SW;S20-C1 SW;S20-C2 contains PROFILE_INFO1;S20-C2 contains PROFILE_INFO2
19//   S20-C3 contains entries1 iccid 989209012143658709F5
20//   S20-C3 contains entries2 iccid 989209013254769810F9
21// 本函数由 CaseIR 4.2.21.2.2 编译生成(fullwave-blindgen-live-70-W1-A3,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
22// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
23// 适用性 M:编译期门,运行时由 harness 环境前置承担。
24// PRECONDITION (declared, NOT compiled): initial_conditions 缺语料过程体(Annex C.2 absent from input package, corpus vacuum): IC 序列属测试工具/卡态编排责任,本脚本不虚构初始化步骤;语义影响见 CaseIR open_items。
25// GIC1 The PROFILE_OPERATIONAL1 has been installed on the eUICC.(Seq#5/#6 以各自 IC 'No Profile is installed' 覆盖本条): declared unexpanded (no fabricated bytes; provenance = expansion_source).
26// Seq01-IC PROFILE_OPERATIONAL1 is Disabled; PROFILE_OPERATIONAL1 corresponds to <ISD_P_AID1>; the Operational Profile identified by <ISD_P_AIDX> is not loaded. IC1=PROC_EUICC_INITIALIZATION_SEQUENCE; IC2=PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR.: declared unexpanded (no fabricated bytes; provenance = expansion_source).
27// Seq02-IC PROFILE_OPERATIONAL1 is Disabled; the Operational Profile identified by ICCID #ICCID_OP_PROFX is not loaded. IC1/IC2 同上。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
28// Seq03/04-IC PROFILE_OPERATIONAL1 is Enabled on the eUICC(Seq03 另记 PROFILE_OPERATIONAL1 corresponds to <ISD_P_AID1>)。IC1/IC2 同上。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
29// Seq05/06-IC No Profile is installed on the eUICC(覆盖 GIC);IC3 Install PROFILE_OPERATIONAL4(对应 <ISD_P_AID4>,Seq05 注记);IC4 Install PROFILE_OPERATIONAL1(对应 <ISD_P_AID1>);IC5 Enable PROFILE_OPERATIONAL4。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
30// Seq07/08-IC PROFILE_OPERATIONAL1 Enabled; PROFILE_OPERATIONAL2 installed and Disabled(Seq07 另记 PROFILE_OPERATIONAL2 corresponds to <ISD_P_AID2>);IC3: S_Device → eUICC MTD_SEND_SMS_PP([GET_MNO_SD]) → SW=0x91XX(开启 proactive session);IC4: Do not send FETCH command(会话保持挂起)。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
31// PREFLIGHT_CONTEXT AUTHORIZED_DISCOVERY: declared unexpanded (no fabricated bytes; provenance = expansion_source).
32function TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_02_03_04_05_06_07_08_merged() {
33    var bind = curBind;
34    var profileAidSession = BindEs10xProcProfileDynamic.beginSession(bind, "TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_02_03_04_05_06_07_08_merged");
35    // runtime-bound payload: ISD_P_AID1 stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/288-288/G_annexB_dynamic:L51"}
36    var cardCtxLoad1 = BindCardContext.load(bind, profileAidSession, "ISD_P_AID1", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
37    // runtime-bound payload: ISD_P_AID2 stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/412-412/G_annexB_dynamic:L52"}
38    var cardCtxLoad2 = BindCardContext.load(bind, profileAidSession, "ISD_P_AID2", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
39    // runtime-bound payload: ISD_P_AIDX stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/289-289/G_annexB_dynamic:L55"}
40    var cardCtxLoad3 = BindCardContext.load(bind, profileAidSession, "ISD_P_AIDX", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
41
42    // 步骤 1:MTD_STORE_DATA(tc_step)
43    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
44    var s1 = bind.sendApdu("81", "E2", "91", "00", "BF2D035C014F", "00", "9000");
45
46    // 步骤 2:Seq#01 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
47    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
48    // runtime-bound payload: ISD_P_AIDX stays in execution domain
49    var s2 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AIDX", "BF31154F10", "0101FF", profileAidSession), null, "6A82");
50    bind.checkData("S1-C1 SW", "6A82", s2.sw);
51    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AIDX", s2.cmd, profileAidSession);
52    // S1-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
53    // S1-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
54
55    // 步骤 3:Seq#01 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
56    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
57    // runtime-bound payload: ISD_P_AID1 stays in execution domain
58    var s3 = bind.sendApdu(null, "E2", "91", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF2D14A0124F10", "", profileAidSession), "00", "9000");
59    bind.checkData("S2-C1 SW", "9000", s3.sw);
60    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s3.cmd, profileAidSession);
61    var r2p3 = BindEs10xProcProfile.walkChoiceList(s3.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
62    var r2has3_0 = false;
63    for (var r2i3_0 = 0; r2i3_0 < r2p3.elements.length; r2i3_0++) {
64        var f = r2p3.elements[r2i3_0].fields;
65        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has3_0 = true; break; }
66    }
67    bind.checkData("S2-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p3.branch_tag === "A0" && r2has3_0) ? "1" : "0");
68    var r2has3_0 = false;
69    for (var r2i3_0 = 0; r2i3_0 < r2p3.elements.length; r2i3_0++) {
70        var f = r2p3.elements[r2i3_0].fields;
71        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has3_0 = true; break; }
72    }
73    bind.checkData("S2-C3 contains iccid 989209012143658709F5", "1", (r2p3.branch_tag === "A0" && r2has3_0) ? "1" : "0");
74
75    // 步骤 4:Seq#02 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
76    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
77    var s4 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A9892090143658709FFFF0101FF", null, "6A82");
78    bind.checkData("S3-C1 SW", "6A82", s4.sw);
79    // S3-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
80    // S3-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
81
82    // 步骤 5:Seq#02 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
83    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
84    var s5 = bind.sendApdu(null, "E2", "91", "00", "BF2D0EA00C5A0A989209012143658709F5", "00", "9000");
85    bind.checkData("S4-C1 SW", "9000", s5.sw);
86    var r2p5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
87    var r2has5_0 = false;
88    for (var r2i5_0 = 0; r2i5_0 < r2p5.elements.length; r2i5_0++) {
89        var f = r2p5.elements[r2i5_0].fields;
90        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has5_0 = true; break; }
91    }
92    bind.checkData("S4-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p5.branch_tag === "A0" && r2has5_0) ? "1" : "0");
93    var r2has5_0 = false;
94    for (var r2i5_0 = 0; r2i5_0 < r2p5.elements.length; r2i5_0++) {
95        var f = r2p5.elements[r2i5_0].fields;
96        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has5_0 = true; break; }
97    }
98    bind.checkData("S4-C3 contains iccid 989209012143658709F5", "1", (r2p5.branch_tag === "A0" && r2has5_0) ? "1" : "0");
99
100    // 步骤 6:Seq#03 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
101    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
102    // runtime-bound payload: ISD_P_AID1 stays in execution domain
103    var s6 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF31154F10", "0101FF", profileAidSession), null, "6985");
104    bind.checkData("S5-C1 SW", "6985", s6.sw);
105    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s6.cmd, profileAidSession);
106    // S5-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
107    // S5-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
108
109    // 步骤 7:Seq#03 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
110    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
111    // runtime-bound payload: ISD_P_AID1 stays in execution domain
112    var s7 = bind.sendApdu(null, "E2", "91", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF2D14A0124F10", "", profileAidSession), "00", "9000");
113    bind.checkData("S6-C1 SW", "9000", s7.sw);
114    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s7.cmd, profileAidSession);
115    var r2p7 = BindEs10xProcProfile.walkChoiceList(s7.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
116    var r2has7_0 = false;
117    for (var r2i7_0 = 0; r2i7_0 < r2p7.elements.length; r2i7_0++) {
118        var f = r2p7.elements[r2i7_0].fields;
119        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has7_0 = true; break; }
120    }
121    bind.checkData("S6-C2 contains PROFILE_INFO1", "1", (r2p7.branch_tag === "A0" && r2has7_0) ? "1" : "0");
122    var r2has7_0 = false;
123    for (var r2i7_0 = 0; r2i7_0 < r2p7.elements.length; r2i7_0++) {
124        var f = r2p7.elements[r2i7_0].fields;
125        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has7_0 = true; break; }
126    }
127    bind.checkData("S6-C3 contains iccid 989209012143658709F5", "1", (r2p7.branch_tag === "A0" && r2has7_0) ? "1" : "0");
128
129    // 步骤 8:Seq#04 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
130    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
131    var s8 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209012143658709F50101FF", null, "6985");
132    bind.checkData("S7-C1 SW", "6985", s8.sw);
133    // S7-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
134    // S7-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
135
136    // 步骤 9:Seq#04 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
137    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
138    var s9 = bind.sendApdu(null, "E2", "91", "00", "BF2D0EA00C5A0A989209012143658709F5", "00", "9000");
139    bind.checkData("S8-C1 SW", "9000", s9.sw);
140    var r2p9 = BindEs10xProcProfile.walkChoiceList(s9.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
141    var r2has9_0 = false;
142    for (var r2i9_0 = 0; r2i9_0 < r2p9.elements.length; r2i9_0++) {
143        var f = r2p9.elements[r2i9_0].fields;
144        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has9_0 = true; break; }
145    }
146    bind.checkData("S8-C2 contains PROFILE_INFO1", "1", (r2p9.branch_tag === "A0" && r2has9_0) ? "1" : "0");
147    var r2has9_0 = false;
148    for (var r2i9_0 = 0; r2i9_0 < r2p9.elements.length; r2i9_0++) {
149        var f = r2p9.elements[r2i9_0].fields;
150        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has9_0 = true; break; }
151    }
152    bind.checkData("S8-C3 contains iccid 989209012143658709F5", "1", (r2p9.branch_tag === "A0" && r2has9_0) ? "1" : "0");
153
154    // 步骤 10:Seq#05 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ29_002, RQ29_022, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
155    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
156    // runtime-bound payload: ISD_P_AID1 stays in execution domain
157    var s10 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF31154F10", "0101FF", profileAidSession), null, "6985");
158    bind.checkData("S9-C1 SW", "6985", s10.sw);
159    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s10.cmd, profileAidSession);
160    // S9-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
161    // S9-C3: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
162    // S9-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
163    // S9-C3: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
164
165    // 步骤 11:Seq#05 Step2] MTD_STORE_DATA(tc_step;REQ: RQ29_002, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
166    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
167    var s11 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
168    bind.checkData("S10-C1 SW", "9000", s11.sw);
169    var r2p11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
170    var r2has11_0 = false;
171    for (var r2i11_0 = 0; r2i11_0 < r2p11.elements.length; r2i11_0++) {
172        var f = r2p11.elements[r2i11_0].fields;
173        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has11_0 = true; break; }
174    }
175    bind.checkData("S10-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p11.branch_tag === "A0" && r2has11_0) ? "1" : "0");
176    var r2has11_1 = false;
177    for (var r2i11_1 = 0; r2i11_1 < r2p11.elements.length; r2i11_1++) {
178        var f = r2p11.elements[r2i11_1].fields;
179        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has11_1 = true; break; }
180    }
181    bind.checkData("S10-C2 contains PROFILE_INFO4_ENABLED", "1", (r2p11.branch_tag === "A0" && r2has11_1) ? "1" : "0");
182    var r2has11_0 = false;
183    for (var r2i11_0 = 0; r2i11_0 < r2p11.elements.length; r2i11_0++) {
184        var f = r2p11.elements[r2i11_0].fields;
185        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has11_0 = true; break; }
186    }
187    bind.checkData("S10-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p11.branch_tag === "A0" && r2has11_0) ? "1" : "0");
188    var r2has11_1 = false;
189    for (var r2i11_1 = 0; r2i11_1 < r2p11.elements.length; r2i11_1++) {
190        var f = r2p11.elements[r2i11_1].fields;
191        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has11_1 = true; break; }
192    }
193    bind.checkData("S10-C3 contains entries2 iccid 989209015476981032F9", "1", (r2p11.branch_tag === "A0" && r2has11_1) ? "1" : "0");
194
195    // 步骤 12:Seq#06 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ29_002, RQ29_022, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
196    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
197    var s12 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209012143658709F50101FF", null, "6985");
198    bind.checkData("S11-C1 SW", "6985", s12.sw);
199    // S11-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
200    // S11-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
201
202    // 步骤 13:Seq#06 Step2] MTD_STORE_DATA(tc_step;REQ: RQ29_002, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
203    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
204    var s13 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
205    bind.checkData("S12-C1 SW", "9000", s13.sw);
206    var r2p13 = BindEs10xProcProfile.walkChoiceList(s13.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
207    var r2has13_0 = false;
208    for (var r2i13_0 = 0; r2i13_0 < r2p13.elements.length; r2i13_0++) {
209        var f = r2p13.elements[r2i13_0].fields;
210        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has13_0 = true; break; }
211    }
212    bind.checkData("S12-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p13.branch_tag === "A0" && r2has13_0) ? "1" : "0");
213    var r2has13_1 = false;
214    for (var r2i13_1 = 0; r2i13_1 < r2p13.elements.length; r2i13_1++) {
215        var f = r2p13.elements[r2i13_1].fields;
216        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has13_1 = true; break; }
217    }
218    bind.checkData("S12-C2 contains PROFILE_INFO4_ENABLED", "1", (r2p13.branch_tag === "A0" && r2has13_1) ? "1" : "0");
219    var r2has13_0 = false;
220    for (var r2i13_0 = 0; r2i13_0 < r2p13.elements.length; r2i13_0++) {
221        var f = r2p13.elements[r2i13_0].fields;
222        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has13_0 = true; break; }
223    }
224    bind.checkData("S12-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p13.branch_tag === "A0" && r2has13_0) ? "1" : "0");
225    var r2has13_1 = false;
226    for (var r2i13_1 = 0; r2i13_1 < r2p13.elements.length; r2i13_1++) {
227        var f = r2p13.elements[r2i13_1].fields;
228        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has13_1 = true; break; }
229    }
230    bind.checkData("S12-C3 contains entries2 iccid 989209015476981032F9", "1", (r2p13.branch_tag === "A0" && r2has13_1) ? "1" : "0");
231
232    // 步骤 14:Seq#07 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ57_127_1, RQ57_140_1)
233    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
234    // runtime-bound payload: ISD_P_AID2 stays in execution domain
235    var s14 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID2", "BF31154F10", "010100", profileAidSession), null, "9300");
236    bind.checkData("S13-C1 SW", "9300", s14.sw);
237    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID2", s14.cmd, profileAidSession);
238    // S13-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
239    // S13-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
240
241    // 步骤 15:Seq#07 Step2] FETCH 'XX'(tc_step)
242    // FETCH header literals follow the golden wire evidence 8012 (same
243    // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
244    // gives mechanism only). Le = pending length from the last 91XX
245    // (chain rule, binding-internal state).
246    var s15 = bind.fetchPending("80", "12", "00", "00", null);
247    bind.checkData("S14-C1 proactive command envelope", "1", (s15.resp.length >= 4 && s15.resp.substring(0, 2) === "D0") ? "1" : "0");
248    // S14-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
249
250    // 步骤 16:Seq#07 Step3] TERMINAL RESPONSE(tc_step)
251    // TERMINAL RESPONSE data is dynamically built by the binding from the
252    // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
253    // Header literals follow the golden wire evidence 8014.
254    var s16 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
255    bind.checkData("S15-C1 SW", "9000", s16.sw);
256
257    // 步骤 17:Seq#07 Step4] MTD_STORE_DATA(tc_step)
258    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
259    var s17 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
260    bind.checkData("S16-C1 SW", "9000", s17.sw);
261    var r2p17 = BindEs10xProcProfile.walkChoiceList(s17.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
262    var r2has17_0 = false;
263    for (var r2i17_0 = 0; r2i17_0 < r2p17.elements.length; r2i17_0++) {
264        var f = r2p17.elements[r2i17_0].fields;
265        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has17_0 = true; break; }
266    }
267    bind.checkData("S16-C2 contains PROFILE_INFO1", "1", (r2p17.branch_tag === "A0" && r2has17_0) ? "1" : "0");
268    var r2has17_1 = false;
269    for (var r2i17_1 = 0; r2i17_1 < r2p17.elements.length; r2i17_1++) {
270        var f = r2p17.elements[r2i17_1].fields;
271        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has17_1 = true; break; }
272    }
273    bind.checkData("S16-C2 contains PROFILE_INFO2", "1", (r2p17.branch_tag === "A0" && r2has17_1) ? "1" : "0");
274    var r2has17_0 = false;
275    for (var r2i17_0 = 0; r2i17_0 < r2p17.elements.length; r2i17_0++) {
276        var f = r2p17.elements[r2i17_0].fields;
277        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has17_0 = true; break; }
278    }
279    bind.checkData("S16-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p17.branch_tag === "A0" && r2has17_0) ? "1" : "0");
280    var r2has17_1 = false;
281    for (var r2i17_1 = 0; r2i17_1 < r2p17.elements.length; r2i17_1++) {
282        var f = r2p17.elements[r2i17_1].fields;
283        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has17_1 = true; break; }
284    }
285    bind.checkData("S16-C3 contains entries2 iccid 989209013254769810F9", "1", (r2p17.branch_tag === "A0" && r2has17_1) ? "1" : "0");
286
287    // 步骤 18:Seq#08 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ57_133_1, RQ57_140_1)
288    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
289    var s18 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209013254769810F90101FF", null, "9300");
290    bind.checkData("S17-C1 SW", "9300", s18.sw);
291    // S17-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
292    // S17-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
293
294    // 步骤 19:Seq#08 Step2] FETCH 'XX'(tc_step)
295    // FETCH header literals follow the golden wire evidence 8012 (same
296    // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
297    // gives mechanism only). Le = pending length from the last 91XX
298    // (chain rule, binding-internal state).
299    var s19 = bind.fetchPending("80", "12", "00", "00", null);
300    bind.checkData("S18-C1 proactive command envelope", "1", (s19.resp.length >= 4 && s19.resp.substring(0, 2) === "D0") ? "1" : "0");
301    // S18-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
302
303    // 步骤 20:Seq#08 Step3] TERMINAL RESPONSE(tc_step)
304    // TERMINAL RESPONSE data is dynamically built by the binding from the
305    // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
306    // Header literals follow the golden wire evidence 8014.
307    var s20 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
308    bind.checkData("S19-C1 SW", "9000", s20.sw);
309
310    // 步骤 21:Seq#08 Step4] MTD_STORE_DATA(tc_step)
311    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
312    var s21 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
313    bind.checkData("S20-C1 SW", "9000", s21.sw);
314    var r2p21 = BindEs10xProcProfile.walkChoiceList(s21.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
315    var r2has21_0 = false;
316    for (var r2i21_0 = 0; r2i21_0 < r2p21.elements.length; r2i21_0++) {
317        var f = r2p21.elements[r2i21_0].fields;
318        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has21_0 = true; break; }
319    }
320    bind.checkData("S20-C2 contains PROFILE_INFO1", "1", (r2p21.branch_tag === "A0" && r2has21_0) ? "1" : "0");
321    var r2has21_1 = false;
322    for (var r2i21_1 = 0; r2i21_1 < r2p21.elements.length; r2i21_1++) {
323        var f = r2p21.elements[r2i21_1].fields;
324        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has21_1 = true; break; }
325    }
326    bind.checkData("S20-C2 contains PROFILE_INFO2", "1", (r2p21.branch_tag === "A0" && r2has21_1) ? "1" : "0");
327    var r2has21_0 = false;
328    for (var r2i21_0 = 0; r2i21_0 < r2p21.elements.length; r2i21_0++) {
329        var f = r2p21.elements[r2i21_0].fields;
330        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has21_0 = true; break; }
331    }
332    bind.checkData("S20-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p21.branch_tag === "A0" && r2has21_0) ? "1" : "0");
333    var r2has21_1 = false;
334    for (var r2i21_1 = 0; r2i21_1 < r2p21.elements.length; r2i21_1++) {
335        var f = r2p21.elements[r2i21_1].fields;
336        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has21_1 = true; break; }
337    }
338    bind.checkData("S20-C3 contains entries2 iccid 989209013254769810F9", "1", (r2p21.branch_tag === "A0" && r2has21_1) ? "1" : "0");
339}
340

完整 unified diff

行级差异:新增 338 行 / 删除 57 行(以 -man 为基准,unified 上下文 3 行)。

展开 diff(400 行)
--- -man
+++ -cas
@@ -1,59 +1,340 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_Error_Enable_Profile_by_an_unknown_ISD_P_AID (extracted verbatim)
-
-function TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_Error_Enable_Profile_by_an_unknown_ISD_P_AID()
-{
-	if(!Card_Have_ECC_Cert)
-		return;
-	
-	TestOfMEPMode = 0;	
-
-	initial_condition_PROFILE_OPERATIONAL1_is_Disabled();
-	var ISD_P_Test01 = curProfile_ISD_P_AID;
-	
-	tracenamestr = "测试目的:通过未知的ISD-P AID激活profile";
-	curDis.TraceStart(sno++,tracenamestr);
-	
-	curLogicChannel = 0;
-	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
-	Ini_powerOn_eUICC_LPAe_not_activate();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
-	TS_MANAGE_CHANNEL_OPEN();
-	
-	curLogicChannel = 1;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
-	TS_SELECT("Select ISD",ISD_R_AID,"9000");
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,refreshFlag为FF(true);");
-	var enableProRequest = new EnableProfileRequest();
-	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.isdpAid,ISD_P_AIDX);
-	enableProRequest.refreshFlag = BooleanValue_BerCode_True;
-	enableProRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData,"90","00","6A82");
-	curStrHandle.CheckData("", respData, "EnableProfileResponse");
-	
-  curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ProfileInfoListRequest,获取profile状态;");
-	var proInfoListRequest = new ProfileInfoListRequest();
-	proInfoListRequest.searchCriteria = new ChoiceObj(tagOfsearchCriteria_ProfileInfo.isdpAid,ISD_P_Test01);
-	proInfoListRequest.tagList = "5A4F9F70";
-	proInfoListRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(proInfoListRequest.hexData);
-	
-
-	var proInfoListResponse = new  ProfileInfoListResponse();
-	proInfoListResponse.checkCardResDataFormat(respData);
-	
-	try
-	{
-		curStrHandle.CheckData(ICCID_OP_PROF1, proInfoListResponse.profileInfoListOk.arrOfElement[0].iccid, "ICCID");
-		curStrHandle.CheckData(ISD_P_Test01, proInfoListResponse.profileInfoListOk.arrOfElement[0].isdpAid, "ISD-P AID");
-		curStrHandle.CheckData(Profile_DISABLED, proInfoListResponse.profileInfoListOk.arrOfElement[0].profileState, "profile State");
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
-	
-	RecoverCard();
-	
+// Author: 卡思Cas智能体
+// Date: 20261005-152741
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.EnableProfile_ErrorCases_Case3,Test Sequence #01 unknown ISD-P AID; #02 unknown ICCID; #03 enable when Enabled (ISD-P AID); #04 enable when Enabled (ICCID); #05 PPR1 loaded (ISD-P AID); #06 PPR1 loaded (ICCID); #07 catBusy refreshFlag not set; #08 catBusy refreshFlag set,适用性 M。
+// Test points: S1-C1 SW;S2-C1 SW;S2-C2 contains PROFILE_INFO1_DISABLED
+//   S2-C3 contains iccid 989209012143658709F5;S3-C1 SW;S4-C1 SW
+//   S4-C2 contains PROFILE_INFO1_DISABLED;S4-C3 contains iccid 989209012143658709F5;S5-C1 SW
+//   S6-C1 SW;S6-C2 contains PROFILE_INFO1;S6-C3 contains iccid 989209012143658709F5;S7-C1 SW
+//   S8-C1 SW;S8-C2 contains PROFILE_INFO1;S8-C3 contains iccid 989209012143658709F5;S9-C1 SW
+//   S10-C1 SW;S10-C2 contains PROFILE_INFO1_DISABLED;S10-C2 contains PROFILE_INFO4_ENABLED
+//   S10-C3 contains entries1 iccid 989209012143658709F5
+//   S10-C3 contains entries2 iccid 989209015476981032F9;S11-C1 SW;S12-C1 SW
+//   S12-C2 contains PROFILE_INFO1_DISABLED;S12-C2 contains PROFILE_INFO4_ENABLED
+//   S12-C3 contains entries1 iccid 989209012143658709F5
+//   S12-C3 contains entries2 iccid 989209015476981032F9;S13-C1 SW;S14-C1 proactive command envelope
+//   S15-C1 SW;S16-C1 SW;S16-C2 contains PROFILE_INFO1;S16-C2 contains PROFILE_INFO2
+//   S16-C3 contains entries1 iccid 989209012143658709F5
+//   S16-C3 contains entries2 iccid 989209013254769810F9;S17-C1 SW;S18-C1 proactive command envelope
+//   S19-C1 SW;S20-C1 SW;S20-C2 contains PROFILE_INFO1;S20-C2 contains PROFILE_INFO2
+//   S20-C3 contains entries1 iccid 989209012143658709F5
+//   S20-C3 contains entries2 iccid 989209013254769810F9
+// 本函数由 CaseIR 4.2.21.2.2 编译生成(fullwave-blindgen-live-70-W1-A3,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
+// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
+// 适用性 M:编译期门,运行时由 harness 环境前置承担。
+// PRECONDITION (declared, NOT compiled): initial_conditions 缺语料过程体(Annex C.2 absent from input package, corpus vacuum): IC 序列属测试工具/卡态编排责任,本脚本不虚构初始化步骤;语义影响见 CaseIR open_items。
+// GIC1 The PROFILE_OPERATIONAL1 has been installed on the eUICC.(Seq#5/#6 以各自 IC 'No Profile is installed' 覆盖本条): declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// Seq01-IC PROFILE_OPERATIONAL1 is Disabled; PROFILE_OPERATIONAL1 corresponds to <ISD_P_AID1>; the Operational Profile identified by <ISD_P_AIDX> is not loaded. IC1=PROC_EUICC_INITIALIZATION_SEQUENCE; IC2=PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR.: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// Seq02-IC PROFILE_OPERATIONAL1 is Disabled; the Operational Profile identified by ICCID #ICCID_OP_PROFX is not loaded. IC1/IC2 同上。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// Seq03/04-IC PROFILE_OPERATIONAL1 is Enabled on the eUICC(Seq03 另记 PROFILE_OPERATIONAL1 corresponds to <ISD_P_AID1>)。IC1/IC2 同上。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// Seq05/06-IC No Profile is installed on the eUICC(覆盖 GIC);IC3 Install PROFILE_OPERATIONAL4(对应 <ISD_P_AID4>,Seq05 注记);IC4 Install PROFILE_OPERATIONAL1(对应 <ISD_P_AID1>);IC5 Enable PROFILE_OPERATIONAL4。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// Seq07/08-IC PROFILE_OPERATIONAL1 Enabled; PROFILE_OPERATIONAL2 installed and Disabled(Seq07 另记 PROFILE_OPERATIONAL2 corresponds to <ISD_P_AID2>);IC3: S_Device → eUICC MTD_SEND_SMS_PP([GET_MNO_SD]) → SW=0x91XX(开启 proactive session);IC4: Do not send FETCH command(会话保持挂起)。: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+// PREFLIGHT_CONTEXT AUTHORIZED_DISCOVERY: declared unexpanded (no fabricated bytes; provenance = expansion_source).
+function TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_02_03_04_05_06_07_08_merged() {
+    var bind = curBind;
+    var profileAidSession = BindEs10xProcProfileDynamic.beginSession(bind, "TC_eUICC_ES10c_EnableProfile_ErrorCases_Case3_01_02_03_04_05_06_07_08_merged");
+    // runtime-bound payload: ISD_P_AID1 stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/288-288/G_annexB_dynamic:L51"}
+    var cardCtxLoad1 = BindCardContext.load(bind, profileAidSession, "ISD_P_AID1", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
+    // runtime-bound payload: ISD_P_AID2 stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/412-412/G_annexB_dynamic:L52"}
+    var cardCtxLoad2 = BindCardContext.load(bind, profileAidSession, "ISD_P_AID2", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
+    // runtime-bound payload: ISD_P_AIDX stays in execution domain; context_lineage: {"context_id": "46a4c53f1e252492", "authority_reference": "E_tc_4221/289-289/G_annexB_dynamic:L55"}
+    var cardCtxLoad3 = BindCardContext.load(bind, profileAidSession, "ISD_P_AIDX", {"tag":"4F","bytes":16,"range":{"minHex":"A0000005591010FFFFFFFF8900001000","maxHex":"A0000005591010FFFFFFFF8900FFFF00","lastByte":"00"}}, {token: CARD_CONTEXT_TOKEN, domainId: CARD_CONTEXT_DOMAIN});
+
+    // 步骤 1:MTD_STORE_DATA(tc_step)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s1 = bind.sendApdu("81", "E2", "91", "00", "BF2D035C014F", "00", "9000");
+
+    // 步骤 2:Seq#01 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AIDX stays in execution domain
+    var s2 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AIDX", "BF31154F10", "0101FF", profileAidSession), null, "6A82");
+    bind.checkData("S1-C1 SW", "6A82", s2.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AIDX", s2.cmd, profileAidSession);
+    // S1-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S1-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 3:Seq#01 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AID1 stays in execution domain
+    var s3 = bind.sendApdu(null, "E2", "91", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF2D14A0124F10", "", profileAidSession), "00", "9000");
+    bind.checkData("S2-C1 SW", "9000", s3.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s3.cmd, profileAidSession);
+    var r2p3 = BindEs10xProcProfile.walkChoiceList(s3.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has3_0 = false;
+    for (var r2i3_0 = 0; r2i3_0 < r2p3.elements.length; r2i3_0++) {
+        var f = r2p3.elements[r2i3_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has3_0 = true; break; }
+    }
+    bind.checkData("S2-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p3.branch_tag === "A0" && r2has3_0) ? "1" : "0");
+    var r2has3_0 = false;
+    for (var r2i3_0 = 0; r2i3_0 < r2p3.elements.length; r2i3_0++) {
+        var f = r2p3.elements[r2i3_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has3_0 = true; break; }
+    }
+    bind.checkData("S2-C3 contains iccid 989209012143658709F5", "1", (r2p3.branch_tag === "A0" && r2has3_0) ? "1" : "0");
+
+    // 步骤 4:Seq#02 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s4 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A9892090143658709FFFF0101FF", null, "6A82");
+    bind.checkData("S3-C1 SW", "6A82", s4.sw);
+    // S3-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S3-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 5:Seq#02 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_139)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s5 = bind.sendApdu(null, "E2", "91", "00", "BF2D0EA00C5A0A989209012143658709F5", "00", "9000");
+    bind.checkData("S4-C1 SW", "9000", s5.sw);
+    var r2p5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has5_0 = false;
+    for (var r2i5_0 = 0; r2i5_0 < r2p5.elements.length; r2i5_0++) {
+        var f = r2p5.elements[r2i5_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has5_0 = true; break; }
+    }
+    bind.checkData("S4-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p5.branch_tag === "A0" && r2has5_0) ? "1" : "0");
+    var r2has5_0 = false;
+    for (var r2i5_0 = 0; r2i5_0 < r2p5.elements.length; r2i5_0++) {
+        var f = r2p5.elements[r2i5_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has5_0 = true; break; }
+    }
+    bind.checkData("S4-C3 contains iccid 989209012143658709F5", "1", (r2p5.branch_tag === "A0" && r2has5_0) ? "1" : "0");
+
+    // 步骤 6:Seq#03 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AID1 stays in execution domain
+    var s6 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF31154F10", "0101FF", profileAidSession), null, "6985");
+    bind.checkData("S5-C1 SW", "6985", s6.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s6.cmd, profileAidSession);
+    // S5-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S5-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 7:Seq#03 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AID1 stays in execution domain
+    var s7 = bind.sendApdu(null, "E2", "91", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF2D14A0124F10", "", profileAidSession), "00", "9000");
+    bind.checkData("S6-C1 SW", "9000", s7.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s7.cmd, profileAidSession);
+    var r2p7 = BindEs10xProcProfile.walkChoiceList(s7.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has7_0 = false;
+    for (var r2i7_0 = 0; r2i7_0 < r2p7.elements.length; r2i7_0++) {
+        var f = r2p7.elements[r2i7_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has7_0 = true; break; }
+    }
+    bind.checkData("S6-C2 contains PROFILE_INFO1", "1", (r2p7.branch_tag === "A0" && r2has7_0) ? "1" : "0");
+    var r2has7_0 = false;
+    for (var r2i7_0 = 0; r2i7_0 < r2p7.elements.length; r2i7_0++) {
+        var f = r2p7.elements[r2i7_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has7_0 = true; break; }
+    }
+    bind.checkData("S6-C3 contains iccid 989209012143658709F5", "1", (r2p7.branch_tag === "A0" && r2has7_0) ? "1" : "0");
+
+    // 步骤 8:Seq#04 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s8 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209012143658709F50101FF", null, "6985");
+    bind.checkData("S7-C1 SW", "6985", s8.sw);
+    // S7-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S7-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 9:Seq#04 Step2] MTD_STORE_DATA(tc_step;REQ: RQ32_011, RQ32_012, RQ32_016_1, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s9 = bind.sendApdu(null, "E2", "91", "00", "BF2D0EA00C5A0A989209012143658709F5", "00", "9000");
+    bind.checkData("S8-C1 SW", "9000", s9.sw);
+    var r2p9 = BindEs10xProcProfile.walkChoiceList(s9.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has9_0 = false;
+    for (var r2i9_0 = 0; r2i9_0 < r2p9.elements.length; r2i9_0++) {
+        var f = r2p9.elements[r2i9_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has9_0 = true; break; }
+    }
+    bind.checkData("S8-C2 contains PROFILE_INFO1", "1", (r2p9.branch_tag === "A0" && r2has9_0) ? "1" : "0");
+    var r2has9_0 = false;
+    for (var r2i9_0 = 0; r2i9_0 < r2p9.elements.length; r2i9_0++) {
+        var f = r2p9.elements[r2i9_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has9_0 = true; break; }
+    }
+    bind.checkData("S8-C3 contains iccid 989209012143658709F5", "1", (r2p9.branch_tag === "A0" && r2has9_0) ? "1" : "0");
+
+    // 步骤 10:Seq#05 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ29_002, RQ29_022, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AID1 stays in execution domain
+    var s10 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID1", "BF31154F10", "0101FF", profileAidSession), null, "6985");
+    bind.checkData("S9-C1 SW", "6985", s10.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID1", s10.cmd, profileAidSession);
+    // S9-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S9-C3: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S9-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+    // S9-C3: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 11:Seq#05 Step2] MTD_STORE_DATA(tc_step;REQ: RQ29_002, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s11 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
+    bind.checkData("S10-C1 SW", "9000", s11.sw);
+    var r2p11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has11_0 = false;
+    for (var r2i11_0 = 0; r2i11_0 < r2p11.elements.length; r2i11_0++) {
+        var f = r2p11.elements[r2i11_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has11_0 = true; break; }
+    }
+    bind.checkData("S10-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p11.branch_tag === "A0" && r2has11_0) ? "1" : "0");
+    var r2has11_1 = false;
+    for (var r2i11_1 = 0; r2i11_1 < r2p11.elements.length; r2i11_1++) {
+        var f = r2p11.elements[r2i11_1].fields;
+        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has11_1 = true; break; }
+    }
+    bind.checkData("S10-C2 contains PROFILE_INFO4_ENABLED", "1", (r2p11.branch_tag === "A0" && r2has11_1) ? "1" : "0");
+    var r2has11_0 = false;
+    for (var r2i11_0 = 0; r2i11_0 < r2p11.elements.length; r2i11_0++) {
+        var f = r2p11.elements[r2i11_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has11_0 = true; break; }
+    }
+    bind.checkData("S10-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p11.branch_tag === "A0" && r2has11_0) ? "1" : "0");
+    var r2has11_1 = false;
+    for (var r2i11_1 = 0; r2i11_1 < r2p11.elements.length; r2i11_1++) {
+        var f = r2p11.elements[r2i11_1].fields;
+        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has11_1 = true; break; }
+    }
+    bind.checkData("S10-C3 contains entries2 iccid 989209015476981032F9", "1", (r2p11.branch_tag === "A0" && r2has11_1) ? "1" : "0");
+
+    // 步骤 12:Seq#06 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ29_002, RQ29_022, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s12 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209012143658709F50101FF", null, "6985");
+    bind.checkData("S11-C1 SW", "6985", s12.sw);
+    // S11-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S11-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 13:Seq#06 Step2] MTD_STORE_DATA(tc_step;REQ: RQ29_002, RQ32_011, RQ32_012, RQ32_014, RQ32_016_1, RQ57_127, RQ57_128, RQ57_129, RQ57_130, RQ57_135_2, RQ57_138, RQ57_140)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s13 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
+    bind.checkData("S12-C1 SW", "9000", s13.sw);
+    var r2p13 = BindEs10xProcProfile.walkChoiceList(s13.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has13_0 = false;
+    for (var r2i13_0 = 0; r2i13_0 < r2p13.elements.length; r2i13_0++) {
+        var f = r2p13.elements[r2i13_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has13_0 = true; break; }
+    }
+    bind.checkData("S12-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p13.branch_tag === "A0" && r2has13_0) ? "1" : "0");
+    var r2has13_1 = false;
+    for (var r2i13_1 = 0; r2i13_1 < r2p13.elements.length; r2i13_1++) {
+        var f = r2p13.elements[r2i13_1].fields;
+        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has13_1 = true; break; }
+    }
+    bind.checkData("S12-C2 contains PROFILE_INFO4_ENABLED", "1", (r2p13.branch_tag === "A0" && r2has13_1) ? "1" : "0");
+    var r2has13_0 = false;
+    for (var r2i13_0 = 0; r2i13_0 < r2p13.elements.length; r2i13_0++) {
+        var f = r2p13.elements[r2i13_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has13_0 = true; break; }
+    }
+    bind.checkData("S12-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p13.branch_tag === "A0" && r2has13_0) ? "1" : "0");
+    var r2has13_1 = false;
+    for (var r2i13_1 = 0; r2i13_1 < r2p13.elements.length; r2i13_1++) {
+        var f = r2p13.elements[r2i13_1].fields;
+        if (f["5A"] === "989209015476981032F9" && f["9F70"] === "01") { r2has13_1 = true; break; }
+    }
+    bind.checkData("S12-C3 contains entries2 iccid 989209015476981032F9", "1", (r2p13.branch_tag === "A0" && r2has13_1) ? "1" : "0");
+
+    // 步骤 14:Seq#07 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ57_127_1, RQ57_140_1)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    // runtime-bound payload: ISD_P_AID2 stays in execution domain
+    var s14 = bind.sendApdu(null, "E2", "90", "00", BindEs10xProcProfileDynamic.bindProfileAidTemplate(bind, "ISD_P_AID2", "BF31154F10", "010100", profileAidSession), null, "9300");
+    bind.checkData("S13-C1 SW", "9300", s14.sw);
+    BindEs10xProcProfileDynamic.assertBoundPayload(bind, "ISD_P_AID2", s14.cmd, profileAidSession);
+    // S13-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S13-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 15:Seq#07 Step2] FETCH 'XX'(tc_step)
+    // FETCH header literals follow the golden wire evidence 8012 (same
+    // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+    // gives mechanism only). Le = pending length from the last 91XX
+    // (chain rule, binding-internal state).
+    var s15 = bind.fetchPending("80", "12", "00", "00", null);
+    bind.checkData("S14-C1 proactive command envelope", "1", (s15.resp.length >= 4 && s15.resp.substring(0, 2) === "D0") ? "1" : "0");
+    // S14-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
+
+    // 步骤 16:Seq#07 Step3] TERMINAL RESPONSE(tc_step)
+    // TERMINAL RESPONSE data is dynamically built by the binding from the
+    // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
+    // Header literals follow the golden wire evidence 8014.
+    var s16 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+    bind.checkData("S15-C1 SW", "9000", s16.sw);
+
+    // 步骤 17:Seq#07 Step4] MTD_STORE_DATA(tc_step)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s17 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
+    bind.checkData("S16-C1 SW", "9000", s17.sw);
+    var r2p17 = BindEs10xProcProfile.walkChoiceList(s17.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has17_0 = false;
+    for (var r2i17_0 = 0; r2i17_0 < r2p17.elements.length; r2i17_0++) {
+        var f = r2p17.elements[r2i17_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has17_0 = true; break; }
+    }
+    bind.checkData("S16-C2 contains PROFILE_INFO1", "1", (r2p17.branch_tag === "A0" && r2has17_0) ? "1" : "0");
+    var r2has17_1 = false;
+    for (var r2i17_1 = 0; r2i17_1 < r2p17.elements.length; r2i17_1++) {
+        var f = r2p17.elements[r2i17_1].fields;
+        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has17_1 = true; break; }
+    }
+    bind.checkData("S16-C2 contains PROFILE_INFO2", "1", (r2p17.branch_tag === "A0" && r2has17_1) ? "1" : "0");
+    var r2has17_0 = false;
+    for (var r2i17_0 = 0; r2i17_0 < r2p17.elements.length; r2i17_0++) {
+        var f = r2p17.elements[r2i17_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has17_0 = true; break; }
+    }
+    bind.checkData("S16-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p17.branch_tag === "A0" && r2has17_0) ? "1" : "0");
+    var r2has17_1 = false;
+    for (var r2i17_1 = 0; r2i17_1 < r2p17.elements.length; r2i17_1++) {
+        var f = r2p17.elements[r2i17_1].fields;
+        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has17_1 = true; break; }
+    }
+    bind.checkData("S16-C3 contains entries2 iccid 989209013254769810F9", "1", (r2p17.branch_tag === "A0" && r2has17_1) ? "1" : "0");
+
+    // 步骤 18:Seq#08 Step1] MTD_STORE_DATA_Case3(tc_step;REQ: RQ57_133_1, RQ57_140_1)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s18 = bind.sendApdu(null, "E2", "90", "00", "BF310F5A0A989209013254769810F90101FF", null, "9300");
+    bind.checkData("S17-C1 SW", "9300", s18.sw);
+    // S17-C2: kind 'requirement' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S17-C2: binding:requirement_satisfied_by_same_step_error_sw_assertion (check_attestation)
+
+    // 步骤 19:Seq#08 Step2] FETCH 'XX'(tc_step)
+    // FETCH header literals follow the golden wire evidence 8012 (same
+    // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+    // gives mechanism only). Le = pending length from the last 91XX
+    // (chain rule, binding-internal state).
+    var s19 = bind.fetchPending("80", "12", "00", "00", null);
+    bind.checkData("S18-C1 proactive command envelope", "1", (s19.resp.length >= 4 && s19.resp.substring(0, 2) === "D0") ? "1" : "0");
+    // S18-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
+
+    // 步骤 20:Seq#08 Step3] TERMINAL RESPONSE(tc_step)
+    // TERMINAL RESPONSE data is dynamically built by the binding from the
+    // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
+    // Header literals follow the golden wire evidence 8014.
+    var s20 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+    bind.checkData("S19-C1 SW", "9000", s20.sw);
+
+    // 步骤 21:Seq#08 Step4] MTD_STORE_DATA(tc_step)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var s21 = bind.sendApdu(null, "E2", "91", "00", "BF2D00", "00", "9000");
+    bind.checkData("S20-C1 SW", "9000", s21.sw);
+    var r2p21 = BindEs10xProcProfile.walkChoiceList(s21.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+    var r2has21_0 = false;
+    for (var r2i21_0 = 0; r2i21_0 < r2p21.elements.length; r2i21_0++) {
+        var f = r2p21.elements[r2i21_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has21_0 = true; break; }
+    }
+    bind.checkData("S20-C2 contains PROFILE_INFO1", "1", (r2p21.branch_tag === "A0" && r2has21_0) ? "1" : "0");
+    var r2has21_1 = false;
+    for (var r2i21_1 = 0; r2i21_1 < r2p21.elements.length; r2i21_1++) {
+        var f = r2p21.elements[r2i21_1].fields;
+        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has21_1 = true; break; }
+    }
+    bind.checkData("S20-C2 contains PROFILE_INFO2", "1", (r2p21.branch_tag === "A0" && r2has21_1) ? "1" : "0");
+    var r2has21_0 = false;
+    for (var r2i21_0 = 0; r2i21_0 < r2p21.elements.length; r2i21_0++) {
+        var f = r2p21.elements[r2i21_0].fields;
+        if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has21_0 = true; break; }
+    }
+    bind.checkData("S20-C3 contains entries1 iccid 989209012143658709F5", "1", (r2p21.branch_tag === "A0" && r2has21_0) ? "1" : "0");
+    var r2has21_1 = false;
+    for (var r2i21_1 = 0; r2i21_1 < r2p21.elements.length; r2i21_1++) {
+        var f = r2p21.elements[r2i21_1].fields;
+        if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has21_1 = true; break; }
+    }
+    bind.checkData("S20-C3 contains entries2 iccid 989209013254769810F9", "1", (r2p21.branch_tag === "A0" && r2has21_1) ? "1" : "0");
 }