源码对照:4.2.24.2.2
ES10c eUICC 存储复位异常用例 / TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
111 行 / 3762 字符 / gb18030
-cas 入口
TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases/Import/TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases.js
154 行 / 11407 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js111 行 / 3762 字符 / gb18030入口函数 @L78
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_eUICCMemoryReset_01_Error_eUICC_Memory_Reset_while_proactive_session_is_ongoing + TC_eUICC_ES10c_eUICCMemoryReset_02_Error_Nothing_to_delete (extracted verbatim)
2
3function TC_eUICC_ES10c_eUICCMemoryReset_01_Error_eUICC_Memory_Reset_while_proactive_session_is_ongoing()
4{
5 initial_condition_Start();
6
7 initial_condition_Install_PROFILE_OPERATIONAL1();
8 initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
9 initial_condition_Install_PROFILE_OPERATIONAL2();
10
11 tracenamestr = "测试目的:eUICC支持catBusy,主动式会话进行中时,执行eUICCMemoryReset";
12 curDis.TraceStart(sno++,tracenamestr);
13
14 curLogicChannel = 0;
15 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
16 Ini_powerOn_eUICC_LPAe_not_activate();
17
18 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
19 TS_MANAGE_CHANNEL_OPEN();
20
21 curLogicChannel = 1;
22
23 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
24 TS_SELECT("Select ISD",ISD_R_AID,"9000");
25
26 curLogicChannel = 0;
27 var sSendType = SendTypeByOTA.SMS;
28 KIC = MNO_SCP80_ENC_KEY;
29 KID = MNO_SCP80_AUTH_KEY;
30 KIK = MNO_SCP80_DATA_ENC_KEY;
31 curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
32 sAPDU = "80F28002024F0000";
33 SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
34 HaveReEntry91XX = true;
35 var ss = obj.GetState();
36 ReEntry91XXLength = ss.substr(2,2);
37
38 curLogicChannel = 1;
39 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,Reset All Operational Profiles");
40 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
41 euiMemoryResetRequest.resetOptions = "0780";
42 euiMemoryResetRequest.GenHexData();
43 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "9000/91XX");
44
45 curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
46
47
48 curDis.TestStepStart2(stno++,"SCP80,发送Fetch命令,检查por");
49 curLogicChannel = 0;
50 CardSendMessageToServer(sSendType,1,"0161XX","00");
51
52 curDis.TestStepStart2(stno++,"SCP80,发送Terminal Response");
53 TerminalResponse("00","9000");
54 HaveReEntry91XX = false;
55
56 curLogicChannel = 1;
57
58 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
59
60 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
61 var resObj = new ProfileInfoListResponse();
62 resObj.checkCardResDataFormat(respData);
63
64 var num = resObj.profileInfoListOk.arrOfElement.length;
65
66 curStrHandle.CheckData("2", num.toString(), "ProfileInfo Num");
67
68 if (num == 2)
69 {
70 check_PROFILE_INFO1(resObj.profileInfoListOk.arrOfElement[0]);
71 check_PROFILE_INFO2(resObj.profileInfoListOk.arrOfElement[1]);
72 }
73
74
75 RecoverCard();
76}
77
78function TC_eUICC_ES10c_eUICCMemoryReset_02_Error_Nothing_to_delete()
79{
80 initial_condition_Start();
81
82 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
83
84
85 tracenamestr = "测试目的:eUICC上没有下载profile,重置所有Operational Profile";
86 curDis.TraceStart(sno++,tracenamestr);
87
88 curLogicChannel = 0;
89 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
90 Ini_powerOn_eUICC_LPAe_not_activate();
91
92 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
93 TS_MANAGE_CHANNEL_OPEN();
94
95 curLogicChannel = 1;
96
97 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
98 TS_SELECT("Select ISD",ISD_R_AID,"9000");
99
100 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,Reset All Operational Profiles;");
101 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
102 euiMemoryResetRequest.resetOptions = "0780";
103 euiMemoryResetRequest.GenHexData();
104 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
105
106 curStrHandle.CheckData("BF3403800101", respData, "EuiccMemoryResetResponse");
107
108
109 RecoverCard();
110}
111
-cas 盲生成TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases/Import/TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases.js154 行 / 11407 字符 / gb18030入口函数 @L14
1// Author: 卡思Cas智能体
2// Date: 20261004-143902
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,Test Sequence #01-#02 (Error: catBusy supported / Error: Nothing to delete),适用性 M/C038 (序列#01) / M (序列#02)。
4// Test points: IC1-IC1-K1-C1 ATR_present;IC1-IC1-K2-C2 FCP_Template;IC1-IC1-K2-C4 SW
5// IC1-IC1-K3-C4 SW;IC1-IC1-K4-C4 final SW;IC2-IC2-K1-C4 SW;IC2-IC2-K1-C3 CHANNEL_NUMBER extracted
6// IC2-IC2-K2-C4 SW;S3-C1 SW1 91;S5-C1 SW in 9000/91XX;S5-C2 resetResult catBusy;S7-C1 SW;S8-C1 SW
7// S8-C2 contains PROFILE_INFO1;S8-C2 contains PROFILE_INFO2;IC9-IC1-K1-C1 ATR_present
8// IC9-IC1-K2-C2 FCP_Template;IC9-IC1-K2-C4 SW;IC9-IC1-K3-C4 SW;IC9-IC1-K4-C4 final SW
9// IC10-IC2-K1-C4 SW;IC10-IC2-K1-C3 CHANNEL_NUMBER extracted;IC10-IC2-K2-C4 SW;S11-C1 SW
10// S11-C2 resetResult nothingToDelete
11// 本函数由 CaseIR 4.2.24.2.2 编译生成(fullwave-blindgen-live-70-W1-laneA5,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
12// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
13// 适用性 M/C038 (序列#01) / M (序列#02):编译期门,运行时由 harness 环境前置承担。
14function TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases_01_02_merged() {
15 var bind = curBind;
16 // S1-IC 卡态编排:PROFILE_OPERATIONAL1 已安装且 Enabled;PROFILE_OPERATIONAL2 已安装且 Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
17 // S2-IC 卡态编排:eUICC 上未装载任何 Profile: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
18
19 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
20 var s12 = bind.resetAndAtr();
21 bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s12.atr_hex !== "" ? "1" : "0");
22
23 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
24 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
25 var s13 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
26 bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s13.resp.length > 0 ? "1" : "0");
27 bind.checkData("IC1-IC1-K2-C4 SW", "9000", s13.sw);
28
29 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
30 var s14 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
31 bind.checkData("IC1-IC1-K3-C4 SW", "9000", s14.sw);
32
33 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
34 var steady15 = bind.runToSteadyState(function () {
35 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
36 });
37 bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady15.final.sw);
38
39 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
40 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
41 var s16 = bind.manageChannelOpen("9000");
42 bind.checkData("IC2-IC2-K1-C4 SW", "9000", s16.sw);
43 bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s16.chan !== null ? "1" : "0");
44
45 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
46 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
47 var s17 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
48 // 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.
49 bind.checkData("IC2-IC2-K2-C4 SW", "9000", s17.sw);
50
51 // 步骤 3:IC3: MTD_SEND_SMS_PP(tc_step)
52 // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
53 // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
54 // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
55 var s3 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
56 bind.checkData("S3-C1 SW1 91", "91", s3.sw.substring(0, 2));
57
58 // 步骤 4:IC4: Do not send FETCH command(序列#01:保持 proactive session 挂起)(tc_step)
59 // FETCH header literals follow the golden wire evidence 8012 (same
60 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
61 // gives mechanism only). Le = pending length from the last 91XX
62 // (chain rule, binding-internal state).
63 var s4 = bind.fetchPending("80", "12", "00", "00", null);
64 // S4:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
65 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
66 var s4tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
67
68 // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ57_165_1)
69 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
70 var sdCla5 = s16.chan !== null ? (s16.chan <= 3 ? 128 + s16.chan : 188 + s16.chan).toString(16).toUpperCase() : null;
71 var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF340482020780", "00", "9000/91XX");
72 bind.checkData("S5-C1 SW in 9000/91XX", "1", (s5.sw === "9000" || (s5.sw.substring(0, 2) === "91")) ? "1" : "0");
73 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
74 var pw5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
75 var r2w5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF34", required: ["02"]});
76 bind.checkData("S5-C2 resetResult catBusy", "05", (r2w5.ok && r2w5.fields["02"] === "05") ? "05" : (r2w5.fields["02"] || "absent"));
77
78 // 步骤 6:FETCH 'XX'(序列#01 步2:取回挂起的 proactive 命令)(tc_step)
79 // FETCH header literals follow the golden wire evidence 8012 (same
80 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
81 // gives mechanism only). Le = pending length from the last 91XX
82 // (chain rule, binding-internal state).
83 var s6 = bind.fetchPending("80", "12", "00", "00", null);
84 // S6-C1: binding:fetch_sms_por_runtime_parse(MTD_CHECK_SMS_POR;H-annexC1) (check_attestation)
85
86 // 步骤 7:TERMINAL RESPONSE(序列#01 步3)(tc_step)
87 // TERMINAL RESPONSE data is dynamically built by the binding from the
88 // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
89 // Header literals follow the golden wire evidence 8014.
90 var s7 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
91 bind.checkData("S7-C1 SW", "9000", s7.sw);
92
93 // 步骤 8:MTD_STORE_DATA(tc_step;REQ: RQ57_165)
94 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
95 var sdCla8 = s16.chan !== null ? (s16.chan <= 3 ? 128 + s16.chan : 188 + s16.chan).toString(16).toUpperCase() : null;
96 var s8 = bind.sendApdu(sdCla8, "E2", "91", "00", "BF2D00", "00", "9000");
97 bind.checkData("S8-C1 SW", "9000", s8.sw);
98 var r2p8 = BindEs10xProcProfile.walkChoiceList(s8.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
99 var r2has8_0 = false;
100 for (var r2i8_0 = 0; r2i8_0 < r2p8.elements.length; r2i8_0++) {
101 var f = r2p8.elements[r2i8_0].fields;
102 if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has8_0 = true; break; }
103 }
104 bind.checkData("S8-C2 contains PROFILE_INFO1", "1", (r2p8.branch_tag === "A0" && r2has8_0) ? "1" : "0");
105 var r2has8_1 = false;
106 for (var r2i8_1 = 0; r2i8_1 < r2p8.elements.length; r2i8_1++) {
107 var f = r2p8.elements[r2i8_1].fields;
108 if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has8_1 = true; break; }
109 }
110 bind.checkData("S8-C2 contains PROFILE_INFO2", "1", (r2p8.branch_tag === "A0" && r2has8_1) ? "1" : "0");
111
112 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
113 var s18 = bind.resetAndAtr();
114 bind.checkData("IC9-IC1-K1-C1 ATR_present", "1", s18.atr_hex !== "" ? "1" : "0");
115
116 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
117 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
118 var s19 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
119 bind.checkData("IC9-IC1-K2-C2 FCP_Template", "1", s19.resp.length > 0 ? "1" : "0");
120 bind.checkData("IC9-IC1-K2-C4 SW", "9000", s19.sw);
121
122 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
123 var s20 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
124 bind.checkData("IC9-IC1-K3-C4 SW", "9000", s20.sw);
125
126 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
127 var steady21 = bind.runToSteadyState(function () {
128 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
129 });
130 bind.checkData("IC9-IC1-K4-C4 final SW", "9000", steady21.final.sw);
131
132 // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
133 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
134 var s22 = bind.manageChannelOpen("9000");
135 bind.checkData("IC10-IC2-K1-C4 SW", "9000", s22.sw);
136 bind.checkData("IC10-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s22.chan !== null ? "1" : "0");
137
138 // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
139 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
140 var s23 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
141 // 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.
142 bind.checkData("IC10-IC2-K2-C4 SW", "9000", s23.sw);
143
144 // 步骤 11:MTD_STORE_DATA(tc_step;REQ: RQ57_163)
145 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
146 var sdCla11 = s22.chan !== null ? (s22.chan <= 3 ? 128 + s22.chan : 188 + s22.chan).toString(16).toUpperCase() : null;
147 var s11 = bind.sendApdu(sdCla11, "E2", "91", "00", "BF340482020780", "00", "9000");
148 bind.checkData("S11-C1 SW", "9000", s11.sw);
149 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
150 var pw11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
151 var r2w11 = BindGecaProc.parseGecaResponse(s11.resp, {outer: "BF34", required: ["02"]});
152 bind.checkData("S11-C2 resetResult nothingToDelete", "01", (r2w11.ok && r2w11.fields["02"] === "01") ? "01" : (r2w11.fields["02"] || "absent"));
153}
154
完整 unified diff
行级差异:新增 149 行 / 删除 106 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(263 行)
--- -man
+++ -cas
@@ -1,111 +1,154 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_eUICCMemoryReset_01_Error_eUICC_Memory_Reset_while_proactive_session_is_ongoing + TC_eUICC_ES10c_eUICCMemoryReset_02_Error_Nothing_to_delete (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20261004-143902
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,Test Sequence #01-#02 (Error: catBusy supported / Error: Nothing to delete),适用性 M/C038 (序列#01) / M (序列#02)。
+// Test points: IC1-IC1-K1-C1 ATR_present;IC1-IC1-K2-C2 FCP_Template;IC1-IC1-K2-C4 SW
+// IC1-IC1-K3-C4 SW;IC1-IC1-K4-C4 final SW;IC2-IC2-K1-C4 SW;IC2-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC2-IC2-K2-C4 SW;S3-C1 SW1 91;S5-C1 SW in 9000/91XX;S5-C2 resetResult catBusy;S7-C1 SW;S8-C1 SW
+// S8-C2 contains PROFILE_INFO1;S8-C2 contains PROFILE_INFO2;IC9-IC1-K1-C1 ATR_present
+// IC9-IC1-K2-C2 FCP_Template;IC9-IC1-K2-C4 SW;IC9-IC1-K3-C4 SW;IC9-IC1-K4-C4 final SW
+// IC10-IC2-K1-C4 SW;IC10-IC2-K1-C3 CHANNEL_NUMBER extracted;IC10-IC2-K2-C4 SW;S11-C1 SW
+// S11-C2 resetResult nothingToDelete
+// 本函数由 CaseIR 4.2.24.2.2 编译生成(fullwave-blindgen-live-70-W1-laneA5,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/C038 (序列#01) / M (序列#02):编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_ES10c_eUICCMemoryReset_ErrorCases_01_02_merged() {
+ var bind = curBind;
+ // S1-IC 卡态编排:PROFILE_OPERATIONAL1 已安装且 Enabled;PROFILE_OPERATIONAL2 已安装且 Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // S2-IC 卡态编排:eUICC 上未装载任何 Profile: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
-function TC_eUICC_ES10c_eUICCMemoryReset_01_Error_eUICC_Memory_Reset_while_proactive_session_is_ongoing()
-{
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
- initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
- initial_condition_Install_PROFILE_OPERATIONAL2();
-
- tracenamestr = "测试目的:eUICC支持catBusy,主动式会话进行中时,执行eUICCMemoryReset";
- 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");
-
- curLogicChannel = 0;
- var sSendType = SendTypeByOTA.SMS;
- KIC = MNO_SCP80_ENC_KEY;
- KID = MNO_SCP80_AUTH_KEY;
- KIK = MNO_SCP80_DATA_ENC_KEY;
- curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
- sAPDU = "80F28002024F0000";
- SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
- HaveReEntry91XX = true;
- var ss = obj.GetState();
- ReEntry91XXLength = ss.substr(2,2);
-
- curLogicChannel = 1;
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,Reset All Operational Profiles");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "9000/91XX");
-
- curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
-
-
- curDis.TestStepStart2(stno++,"SCP80,发送Fetch命令,检查por");
- curLogicChannel = 0;
- CardSendMessageToServer(sSendType,1,"0161XX","00");
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s12 = bind.resetAndAtr();
+ bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s12.atr_hex !== "" ? "1" : "0");
- curDis.TestStepStart2(stno++,"SCP80,发送Terminal Response");
- TerminalResponse("00","9000");
- HaveReEntry91XX = false;
-
- curLogicChannel = 1;
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- var resObj = new ProfileInfoListResponse();
- resObj.checkCardResDataFormat(respData);
-
- var num = resObj.profileInfoListOk.arrOfElement.length;
-
- curStrHandle.CheckData("2", num.toString(), "ProfileInfo Num");
-
- if (num == 2)
- {
- check_PROFILE_INFO1(resObj.profileInfoListOk.arrOfElement[0]);
- check_PROFILE_INFO2(resObj.profileInfoListOk.arrOfElement[1]);
- }
-
-
- RecoverCard();
-}
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
+ // 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 s13 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s13.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC1-IC1-K2-C4 SW", "9000", s13.sw);
-function TC_eUICC_ES10c_eUICCMemoryReset_02_Error_Nothing_to_delete()
-{
- initial_condition_Start();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
-
- tracenamestr = "测试目的:eUICC上没有下载profile,重置所有Operational 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命令,Reset All Operational Profiles;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
-
- curStrHandle.CheckData("BF3403800101", respData, "EuiccMemoryResetResponse");
-
-
- RecoverCard();
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s14 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC1-IC1-K3-C4 SW", "9000", s14.sw);
+
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady15 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady15.final.sw);
+
+ // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
+ // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s16 = bind.manageChannelOpen("9000");
+ bind.checkData("IC2-IC2-K1-C4 SW", "9000", s16.sw);
+ bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s16.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
+ // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s17 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "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("IC2-IC2-K2-C4 SW", "9000", s17.sw);
+
+ // 步骤 3:IC3: MTD_SEND_SMS_PP(tc_step)
+ // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
+ // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
+ // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
+ var s3 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
+ bind.checkData("S3-C1 SW1 91", "91", s3.sw.substring(0, 2));
+
+ // 步骤 4:IC4: Do not send FETCH command(序列#01:保持 proactive session 挂起)(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 s4 = bind.fetchPending("80", "12", "00", "00", null);
+ // S4:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s4tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+
+ // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ57_165_1)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla5 = s16.chan !== null ? (s16.chan <= 3 ? 128 + s16.chan : 188 + s16.chan).toString(16).toUpperCase() : null;
+ var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF340482020780", "00", "9000/91XX");
+ bind.checkData("S5-C1 SW in 9000/91XX", "1", (s5.sw === "9000" || (s5.sw.substring(0, 2) === "91")) ? "1" : "0");
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S5-C2 resetResult catBusy", "05", (r2w5.ok && r2w5.fields["02"] === "05") ? "05" : (r2w5.fields["02"] || "absent"));
+
+ // 步骤 6:FETCH 'XX'(序列#01 步2:取回挂起的 proactive 命令)(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 s6 = bind.fetchPending("80", "12", "00", "00", null);
+ // S6-C1: binding:fetch_sms_por_runtime_parse(MTD_CHECK_SMS_POR;H-annexC1) (check_attestation)
+
+ // 步骤 7:TERMINAL RESPONSE(序列#01 步3)(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 s7 = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+ bind.checkData("S7-C1 SW", "9000", s7.sw);
+
+ // 步骤 8:MTD_STORE_DATA(tc_step;REQ: RQ57_165)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla8 = s16.chan !== null ? (s16.chan <= 3 ? 128 + s16.chan : 188 + s16.chan).toString(16).toUpperCase() : null;
+ var s8 = bind.sendApdu(sdCla8, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S8-C1 SW", "9000", s8.sw);
+ var r2p8 = BindEs10xProcProfile.walkChoiceList(s8.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ var r2has8_0 = false;
+ for (var r2i8_0 = 0; r2i8_0 < r2p8.elements.length; r2i8_0++) {
+ var f = r2p8.elements[r2i8_0].fields;
+ if (f["5A"] === "989209012143658709F5" && f["9F70"] === "01") { r2has8_0 = true; break; }
+ }
+ bind.checkData("S8-C2 contains PROFILE_INFO1", "1", (r2p8.branch_tag === "A0" && r2has8_0) ? "1" : "0");
+ var r2has8_1 = false;
+ for (var r2i8_1 = 0; r2i8_1 < r2p8.elements.length; r2i8_1++) {
+ var f = r2p8.elements[r2i8_1].fields;
+ if (f["5A"] === "989209013254769810F9" && f["9F70"] === "00") { r2has8_1 = true; break; }
+ }
+ bind.checkData("S8-C2 contains PROFILE_INFO2", "1", (r2p8.branch_tag === "A0" && r2has8_1) ? "1" : "0");
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s18 = bind.resetAndAtr();
+ bind.checkData("IC9-IC1-K1-C1 ATR_present", "1", s18.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
+ // 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 s19 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC9-IC1-K2-C2 FCP_Template", "1", s19.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC9-IC1-K2-C4 SW", "9000", s19.sw);
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s20 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC9-IC1-K3-C4 SW", "9000", s20.sw);
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady21 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC9-IC1-K4-C4 final SW", "9000", steady21.final.sw);
+
+ // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
+ // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s22 = bind.manageChannelOpen("9000");
+ bind.checkData("IC10-IC2-K1-C4 SW", "9000", s22.sw);
+ bind.checkData("IC10-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s22.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
+ // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s23 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "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("IC10-IC2-K2-C4 SW", "9000", s23.sw);
+
+ // 步骤 11:MTD_STORE_DATA(tc_step;REQ: RQ57_163)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla11 = s22.chan !== null ? (s22.chan <= 3 ? 128 + s22.chan : 188 + s22.chan).toString(16).toUpperCase() : null;
+ var s11 = bind.sendApdu(sdCla11, "E2", "91", "00", "BF340482020780", "00", "9000");
+ bind.checkData("S11-C1 SW", "9000", s11.sw);
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset_ErrorCases,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w11 = BindGecaProc.parseGecaResponse(s11.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S11-C2 resetResult nothingToDelete", "01", (r2w11.ok && r2w11.fields["02"] === "01") ? "01" : (r2w11.fields["02"] || "absent"));
}