源码对照:4.2.25.2.1
ES10c 获取 EID / TC_eUICC_ES10c.GetEID
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
64 行 / 1993 字符 / gb18030
-cas 入口
TC_eUICC_ES10c_GetEID/Import/TC_eUICC_ES10c_GetEID.js
119 行 / 7952 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js64 行 / 1993 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_GetEID_01_Nominal + TC_eUICC_ES10c_GetEID_02_Error (extracted verbatim)
2
3function TC_eUICC_ES10c_GetEID_01_Nominal()
4{
5 tracenamestr = "测试目的:获取EID正确性测试";
6 curDis.TraceStart(sno++,tracenamestr);
7
8 curLogicChannel = 0;
9 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
10 Ini_powerOn_eUICC_LPAe_not_activate();
11
12 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
13 TS_MANAGE_CHANNEL_OPEN();
14
15 curLogicChannel = 1;
16
17 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
18 TS_SELECT("Select ISD",ISD_R_AID,"9000");
19
20 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EID");
21 var getEuiccDataRequest = new GetEuiccDataRequest();
22 getEuiccDataRequest.tagList = "5A";
23 var getEuiccDataRequestHexStr = getEuiccDataRequest.GenHexData();
24 var hexData = LPAd_Transport_data_to_eUICC(getEuiccDataRequestHexStr);
25
26 var getEuiccDataResponse = new GetEuiccDataResponse();
27
28 getEuiccDataResponse.checkCardResDataFormat(hexData);
29
30 var eidValue = getEuiccDataResponse.eidValue;
31
32 curStrHandle.CheckData(EID1, eidValue, "eidValue");
33
34
35 RecoverCard();
36}
37
38function TC_eUICC_ES10c_GetEID_02_Error()
39{
40 tracenamestr = "测试目的:tagList非法,获取EID";
41 curDis.TraceStart(sno++,tracenamestr);
42
43 curLogicChannel = 0;
44 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
45 Ini_powerOn_eUICC_LPAe_not_activate();
46
47 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
48 TS_MANAGE_CHANNEL_OPEN();
49
50 curLogicChannel = 1;
51
52 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
53 TS_SELECT("Select ISD",ISD_R_AID,"9000");
54
55 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EID,命令数据为错误的tagList");
56 var getEuiccDataRequest = new GetEuiccDataRequest();
57 getEuiccDataRequest.tagList = "6B";
58 var getEuiccDataRequestHexStr = getEuiccDataRequest.GenHexData();
59 LPAd_Transport_data_to_eUICC(getEuiccDataRequestHexStr, "91", "00", "6A80");
60
61
62 RecoverCard();
63}
64
-cas 盲生成TC_eUICC_ES10c_GetEID/Import/TC_eUICC_ES10c_GetEID.js119 行 / 7952 字符 / gb18030入口函数 @L13
1// Author: 卡思Cas智能体
2// Date: 20260906-184033
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.GetEID,Test Sequence #01 Nominal + #02 Error,适用性 M。
4// Test points: S1-C1 ATR_present;S2-C1 FCP_Template;S2-C2 FCP tag 62;S2-C3 SW;S3-C1 SW
5// S4-C2 final SW;S5-C1 SW;S5-C2 CHANNEL_NUMBER extracted;S6-C1 SW;S7-C1 SW;S7-C4 eidValue
6// S7-C4 eidValue length;S7-C3 EID object 5A10;S7-C2 outer tag BF3E;S8-C1 ATR_present
7// S9-C1 FCP_Template;S9-C2 FCP tag 62;S9-C3 SW;S10-C1 SW;S11-C2 final SW;S12-C1 SW
8// S12-C2 CHANNEL_NUMBER extracted;S13-C1 SW;S14-C1 SW != 9000;S14-C2 response data absent
9// S14-C3 response data absent
10// 本函数由 CaseIR 4.2.25.2.1 编译生成(regen-421,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
11// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
12// 适用性 M:编译期门,运行时由 harness 环境前置承担。
13function TC_eUICC_ES10c_GetEID_01_Nominal_02_Error() {
14 var bind = curBind;
15 // IC1 PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
16 // IC2 PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
17
18 // 步骤 1:RESET(procedure_expansion)
19 var s1 = bind.resetAndAtr();
20 bind.checkData("S1-C1 ATR_present", "1", s1.atr_hex !== "" ? "1" : "0");
21
22 // 步骤 2:SELECT_MF(procedure_expansion)
23 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
24 var s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
25 bind.checkData("S2-C1 FCP_Template", "1", s2.resp.length > 0 ? "1" : "0");
26 bind.checkData("S2-C2 FCP tag 62", "62", s2.resp.substring(0, 2));
27 bind.checkData("S2-C3 SW", "9000", s2.sw);
28
29 // 步骤 3:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
30 var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
31 bind.checkData("S3-C1 SW", "9000", s3.sw);
32
33 // 步骤 4:TERMINAL_PROFILE(procedure_expansion)
34 var steady4 = bind.runToSteadyState(function () {
35 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
36 });
37 bind.checkData("S4-C2 final SW", "9000", steady4.final.sw);
38 // S4-C1: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
39 // S4-C1: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
40 // S4-C1: 'terminal_response' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
41 // S4-C1: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
42
43 // 步骤 5:MANAGE_CHANNEL_OPEN(procedure_expansion)
44 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
45 var s5 = bind.manageChannelOpen("9000");
46 bind.checkData("S5-C1 SW", "9000", s5.sw);
47 bind.checkData("S5-C2 CHANNEL_NUMBER extracted", "1", s5.chan !== null ? "1" : "0");
48
49 // 步骤 6:MTD_SELECT(procedure_expansion)
50 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
51 var s6 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
52 // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
53 bind.checkData("S6-C1 SW", "9000", s6.sw);
54
55 // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ33_002, RQ57_171, RQ57_172)
56 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
57 var sdCla7 = s5.chan !== null ? (s5.chan <= 3 ? 128 + s5.chan : 188 + s5.chan).toString(16).toUpperCase() : null;
58 var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF3E035C015A", "00", "9000");
59 bind.checkData("S7-C1 SW", "9000", s7.sw);
60 var eidExp7 = "89049032123451234512345678901235";
61 var eidLen7 = null, eidVal7 = "absent";
62 for (var i7 = 0; i7 + 4 <= s7.resp.length; i7 += 2) {
63 if (s7.resp.substring(i7, i7 + 2) === "5A") {
64 eidLen7 = s7.resp.substring(i7 + 2, i7 + 4);
65 eidVal7 = s7.resp.substring(i7 + 4, i7 + 4 + eidExp7.length);
66 break;
67 }
68 }
69 bind.checkData("S7-C4 eidValue", "89049032123451234512345678901235", eidVal7);
70 bind.checkData("S7-C4 eidValue length", "10", eidLen7 === null ? "absent" : eidLen7);
71 bind.checkData("S7-C3 EID object 5A10", "1", s7.resp.indexOf("5A10") >= 0 ? "1" : "0");
72 bind.checkData("S7-C2 outer tag BF3E", "BF3E", s7.resp.substring(0, 4));
73
74 // 步骤 8:RESET(procedure_expansion)
75 var s8 = bind.resetAndAtr();
76 bind.checkData("S8-C1 ATR_present", "1", s8.atr_hex !== "" ? "1" : "0");
77
78 // 步骤 9:SELECT_MF(procedure_expansion)
79 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
80 var s9 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
81 bind.checkData("S9-C1 FCP_Template", "1", s9.resp.length > 0 ? "1" : "0");
82 bind.checkData("S9-C2 FCP tag 62", "62", s9.resp.substring(0, 2));
83 bind.checkData("S9-C3 SW", "9000", s9.sw);
84
85 // 步骤 10:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
86 var s10 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
87 bind.checkData("S10-C1 SW", "9000", s10.sw);
88
89 // 步骤 11:TERMINAL_PROFILE(procedure_expansion)
90 var steady11 = bind.runToSteadyState(function () {
91 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
92 });
93 bind.checkData("S11-C2 final SW", "9000", steady11.final.sw);
94 // S11-C1: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
95 // S11-C1: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
96 // S11-C1: 'terminal_response' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
97 // S11-C1: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
98
99 // 步骤 12:MANAGE_CHANNEL_OPEN(procedure_expansion)
100 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
101 var s12 = bind.manageChannelOpen("9000");
102 bind.checkData("S12-C1 SW", "9000", s12.sw);
103 bind.checkData("S12-C2 CHANNEL_NUMBER extracted", "1", s12.chan !== null ? "1" : "0");
104
105 // 步骤 13:MTD_SELECT(procedure_expansion)
106 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
107 var s13 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
108 // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
109 bind.checkData("S13-C1 SW", "9000", s13.sw);
110
111 // 步骤 14:MTD_STORE_DATA(tc_step;REQ: RQ33_002, RQ57_172_1)
112 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
113 var sdCla14 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
114 var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF3E035C016B", "00", null);
115 bind.checkData("S14-C1 SW != 9000", "1", s14.sw !== "9000" ? "1" : "0");
116 bind.checkData("S14-C2 response data absent", "1", s14.resp === "" ? "1" : "0");
117 bind.checkData("S14-C3 response data absent", "1", s14.resp === "" ? "1" : "0");
118}
119
完整 unified diff
行级差异:新增 115 行 / 删除 60 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(182 行)
--- -man
+++ -cas
@@ -1,64 +1,119 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_GetEID_01_Nominal + TC_eUICC_ES10c_GetEID_02_Error (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20260906-184033
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.GetEID,Test Sequence #01 Nominal + #02 Error,适用性 M。
+// Test points: S1-C1 ATR_present;S2-C1 FCP_Template;S2-C2 FCP tag 62;S2-C3 SW;S3-C1 SW
+// S4-C2 final SW;S5-C1 SW;S5-C2 CHANNEL_NUMBER extracted;S6-C1 SW;S7-C1 SW;S7-C4 eidValue
+// S7-C4 eidValue length;S7-C3 EID object 5A10;S7-C2 outer tag BF3E;S8-C1 ATR_present
+// S9-C1 FCP_Template;S9-C2 FCP tag 62;S9-C3 SW;S10-C1 SW;S11-C2 final SW;S12-C1 SW
+// S12-C2 CHANNEL_NUMBER extracted;S13-C1 SW;S14-C1 SW != 9000;S14-C2 response data absent
+// S14-C3 response data absent
+// 本函数由 CaseIR 4.2.25.2.1 编译生成(regen-421,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 环境前置承担。
+function TC_eUICC_ES10c_GetEID_01_Nominal_02_Error() {
+ var bind = curBind;
+ // IC1 PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // IC2 PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
-function TC_eUICC_ES10c_GetEID_01_Nominal()
-{
- tracenamestr = "测试目的:获取EID正确性测试";
- 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命令,GET_EID");
- var getEuiccDataRequest = new GetEuiccDataRequest();
- getEuiccDataRequest.tagList = "5A";
- var getEuiccDataRequestHexStr = getEuiccDataRequest.GenHexData();
- var hexData = LPAd_Transport_data_to_eUICC(getEuiccDataRequestHexStr);
-
- var getEuiccDataResponse = new GetEuiccDataResponse();
-
- getEuiccDataResponse.checkCardResDataFormat(hexData);
-
- var eidValue = getEuiccDataResponse.eidValue;
-
- curStrHandle.CheckData(EID1, eidValue, "eidValue");
-
-
- RecoverCard();
-}
+ // 步骤 1:RESET(procedure_expansion)
+ var s1 = bind.resetAndAtr();
+ bind.checkData("S1-C1 ATR_present", "1", s1.atr_hex !== "" ? "1" : "0");
-function TC_eUICC_ES10c_GetEID_02_Error()
-{
- tracenamestr = "测试目的:tagList非法,获取EID";
- 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命令,GET_EID,命令数据为错误的tagList");
- var getEuiccDataRequest = new GetEuiccDataRequest();
- getEuiccDataRequest.tagList = "6B";
- var getEuiccDataRequestHexStr = getEuiccDataRequest.GenHexData();
- LPAd_Transport_data_to_eUICC(getEuiccDataRequestHexStr, "91", "00", "6A80");
-
-
- RecoverCard();
+ // 步骤 2:SELECT_MF(procedure_expansion)
+ // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
+ var s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("S2-C1 FCP_Template", "1", s2.resp.length > 0 ? "1" : "0");
+ bind.checkData("S2-C2 FCP tag 62", "62", s2.resp.substring(0, 2));
+ bind.checkData("S2-C3 SW", "9000", s2.sw);
+
+ // 步骤 3:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
+ var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("S3-C1 SW", "9000", s3.sw);
+
+ // 步骤 4:TERMINAL_PROFILE(procedure_expansion)
+ var steady4 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
+ });
+ bind.checkData("S4-C2 final SW", "9000", steady4.final.sw);
+ // S4-C1: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S4-C1: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S4-C1: 'terminal_response' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S4-C1: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
+
+ // 步骤 5:MANAGE_CHANNEL_OPEN(procedure_expansion)
+ // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s5 = bind.manageChannelOpen("9000");
+ bind.checkData("S5-C1 SW", "9000", s5.sw);
+ bind.checkData("S5-C2 CHANNEL_NUMBER extracted", "1", s5.chan !== null ? "1" : "0");
+
+ // 步骤 6:MTD_SELECT(procedure_expansion)
+ // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s6 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
+ // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
+ bind.checkData("S6-C1 SW", "9000", s6.sw);
+
+ // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ33_002, RQ57_171, RQ57_172)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla7 = s5.chan !== null ? (s5.chan <= 3 ? 128 + s5.chan : 188 + s5.chan).toString(16).toUpperCase() : null;
+ var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF3E035C015A", "00", "9000");
+ bind.checkData("S7-C1 SW", "9000", s7.sw);
+ var eidExp7 = "89049032123451234512345678901235";
+ var eidLen7 = null, eidVal7 = "absent";
+ for (var i7 = 0; i7 + 4 <= s7.resp.length; i7 += 2) {
+ if (s7.resp.substring(i7, i7 + 2) === "5A") {
+ eidLen7 = s7.resp.substring(i7 + 2, i7 + 4);
+ eidVal7 = s7.resp.substring(i7 + 4, i7 + 4 + eidExp7.length);
+ break;
+ }
+ }
+ bind.checkData("S7-C4 eidValue", "89049032123451234512345678901235", eidVal7);
+ bind.checkData("S7-C4 eidValue length", "10", eidLen7 === null ? "absent" : eidLen7);
+ bind.checkData("S7-C3 EID object 5A10", "1", s7.resp.indexOf("5A10") >= 0 ? "1" : "0");
+ bind.checkData("S7-C2 outer tag BF3E", "BF3E", s7.resp.substring(0, 4));
+
+ // 步骤 8:RESET(procedure_expansion)
+ var s8 = bind.resetAndAtr();
+ bind.checkData("S8-C1 ATR_present", "1", s8.atr_hex !== "" ? "1" : "0");
+
+ // 步骤 9:SELECT_MF(procedure_expansion)
+ // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
+ var s9 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("S9-C1 FCP_Template", "1", s9.resp.length > 0 ? "1" : "0");
+ bind.checkData("S9-C2 FCP tag 62", "62", s9.resp.substring(0, 2));
+ bind.checkData("S9-C3 SW", "9000", s9.sw);
+
+ // 步骤 10:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
+ var s10 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("S10-C1 SW", "9000", s10.sw);
+
+ // 步骤 11:TERMINAL_PROFILE(procedure_expansion)
+ var steady11 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
+ });
+ bind.checkData("S11-C2 final SW", "9000", steady11.final.sw);
+ // S11-C1: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S11-C1: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S11-C1: 'terminal_response' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S11-C1: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
+
+ // 步骤 12:MANAGE_CHANNEL_OPEN(procedure_expansion)
+ // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s12 = bind.manageChannelOpen("9000");
+ bind.checkData("S12-C1 SW", "9000", s12.sw);
+ bind.checkData("S12-C2 CHANNEL_NUMBER extracted", "1", s12.chan !== null ? "1" : "0");
+
+ // 步骤 13:MTD_SELECT(procedure_expansion)
+ // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s13 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
+ // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
+ bind.checkData("S13-C1 SW", "9000", s13.sw);
+
+ // 步骤 14:MTD_STORE_DATA(tc_step;REQ: RQ33_002, RQ57_172_1)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla14 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
+ var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF3E035C016B", "00", null);
+ bind.checkData("S14-C1 SW != 9000", "1", s14.sw !== "9000" ? "1" : "0");
+ bind.checkData("S14-C2 response data absent", "1", s14.resp === "" ? "1" : "0");
+ bind.checkData("S14-C3 response data absent", "1", s14.resp === "" ? "1" : "0");
}