eSIM RSP 测试用例对比站

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

源码对照:4.2.13.2.8

ES10b 获取 eUICCInfo(SVN) / TC_eUICC_ES10b.GetEUICCInfo_SVN

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
80 行 / 3141 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_GetEUICCInfo_SVN/Import/TC_eUICC_ES10b_GetEUICCInfo_SVN.js
145 行 / 11911 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js80 行 / 3141 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo_SVN_01_Nominal_SVNValue + TC_eUICC_ES10b_GetEUICCInfo_SVN_02_Nominal_ES10b_SVN (extracted verbatim)
2
3function TC_eUICC_ES10b_GetEUICCInfo_SVN_01_Nominal_SVNValue()
4{
5	tracenamestr = "测试目的:验证eUICC返回的SVN字段";
6	curDis.TraceStart(sno++,tracenamestr);
7
8	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
9	Ini_powerOn_eUICC_LPAe_not_activate();
10	
11	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
12	TS_MANAGE_CHANNEL_OPEN();
13	
14	curLogicChannel = 1;
15	
16	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
17	TS_SELECT("Select ISD",ISD_R_AID,"9000");
18	
19	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request,获取EUICCInfo1;");
20	var euiccInfo1 = new EUICCInfo1();
21	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo1RequestHexStr);
22	
23	euiccInfo1.checkCardResDataFormat(hexData);
24	
25	try
26	{
27		curStrHandle.CheckData(O_RSP_VERSION, euiccInfo1.svn, "svn");
28	}catch(e){
29		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
30	}
31	
32	RecoverCard();
33	
34}
35
36function TC_eUICC_ES10b_GetEUICCInfo_SVN_02_Nominal_ES10b_SVN()
37{
38	tracenamestr = "测试目的:ES10b接口调用过程中SVN值的一致";
39	curDis.TraceStart(sno++,tracenamestr);
40
41	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
42	Ini_powerOn_eUICC_LPAe_not_activate();
43	
44	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
45	TS_MANAGE_CHANNEL_OPEN();
46	
47	curLogicChannel = 1;
48	
49	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
50	var sres = TS_SELECT("Select ISD",ISD_R_AID,"9000");
51	var ResponseDataPar = new check_ISDRResponseData(sres);
52	
53	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
54	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
55	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
56	Profile_load_procedure.ES10b_GetEUICCInfo1();
57	var euiccInfo1 = new EUICCInfo1();
58	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo1RequestHexStr);
59	euiccInfo1.checkCardResDataFormat(hexData);
60	curStrHandle.CheckData(ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,euiccInfo1.svn,"svn");
61
62	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");	
63	var euiccInfo2 = new EUICCInfo2();
64	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
65	euiccInfo2.checkCardResDataFormat(hexData);
66	curStrHandle.CheckData(ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,euiccInfo2.svn,"svn");
67			
68	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
69	Profile_load_procedure.ES10b_GetEUICCChallenge();
70
71	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
72	Profile_load_procedure.ES10b_AuthenticateServer();
73	var euiccInfo2_hexData_1 = Profile_load_procedure.authServerResponse.authenticateResponseOk.euiccSigned1.euiccInfo2.hexData;
74	
75	euiccInfo2.checkCardResDataFormat(hexData);
76	curStrHandle.CheckData(euiccInfo2_hexData_1, euiccInfo2.hexData,"检查EUICCInfo2数据应与authServerResponse中返回的数据一致");
77	
78	RecoverCard();
79}
80
-cas 盲生成TC_eUICC_ES10b_GetEUICCInfo_SVN/Import/TC_eUICC_ES10b_GetEUICCInfo_SVN.js145 行 / 11911 字符 / gb18030入口函数 @L20
1// Author: 卡思Cas智能体
2// Date: 20260929-120334
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo_SVN,Test Sequence #01 Nominal – SVN as per declared IUT setting; #02 Nominal – SVN value consistent across ES10b calls,适用性 M。
4// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
5//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
6//   ICH-IC2-K2-C4 SW;S0-C1 SW;S0-C2 R_EUICC_INFO1 outer tag
7//   S0-C2 R_EUICC_INFO1 required members present;S0-C3 svn equal to #RSP_SVN_H
8//   S0-C4 svn one of SGP.23 §1.2 versions;S0-C5 RQ43_004 svn present;S1-C1 SW
9//   S1-C2 CHANNEL_NUMBER extracted;S2-C1 SW;S2-C2 outer tag 6F;S2-C3 tag 84 value
10//   S2-C4 svn extracted from SELECT response;S3-C1 SW;S3-C2 R_EUICC_INFO1 outer tag
11//   S3-C2 R_EUICC_INFO1 required members present;S3-C3 svn consistency with step 3
12//   S3-C4 RQ43_004 svn present;S3-C5 svn VersionType value is 3 bytes (major/minor/revision)
13//   S4-C1 SW;S4-C2 R_EUICC_INFO2 outer tag;S4-C2 R_EUICC_INFO2 required members present
14//   S4-C3 svn consistency with step 3;S4-C4 RQ43_004 svn present;S5-C1 SW
15//   S5-C2 R_CHALLENGE outer tag;S5-C2 euiccChallenge tag;S5-C2 euiccChallenge length
16//   S5-C3 EUICC_CHALLENGE extracted
17// 本函数由 CaseIR 4.2.13.2.8 编译生成(q3-w0-expand-20260929,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
18// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
19// 适用性 M:编译期门,运行时由 harness 环境前置承担。
20function TC_eUICC_ES10b_GetEUICCInfo_SVN_01_02_merged() {
21    var bind = curBind;
22    // S7 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
23
24    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
25    var s7 = bind.resetAndAtr();
26    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s7.atr_hex !== "" ? "1" : "0");
27
28    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
29    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
30    var s8 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
31    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s8.resp.length > 0 ? "1" : "0");
32    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s8.sw);
33
34    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
35    var s9 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
36    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s9.sw);
37
38    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
39    var steady10 = bind.runToSteadyState(function () {
40        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
41    });
42    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady10.final.sw);
43
44    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
45    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
46    var s11 = bind.manageChannelOpen("9000");
47    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s11.sw);
48    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s11.chan !== null ? "1" : "0");
49
50    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
51    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
52    var s12 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
53    // 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.
54    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s12.sw);
55
56    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
57    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
58    var sdCla1 = s11.chan !== null ? (s11.chan <= 3 ? 128 + s11.chan : 188 + s11.chan).toString(16).toUpperCase() : null;
59    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2000", "00", "9000");
60    bind.checkData("S0-C1 SW", "9000", s1.sw);
61    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
62    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
63    bind.checkData("S0-C2 R_EUICC_INFO1 outer tag", "BF20", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
64    bind.checkData("S0-C2 R_EUICC_INFO1 required members present", "1", gw1.ok ? "1" : "0");
65    // S0-C3: #RSP_SVN_H 实断言——期望 = 声明 #IUT_RSP_VERSION(2.5)按 VersionType 三字节机械编码(020500);值来自声明面,绝不取响应实测或记忆字节。
66    var svnRaw1 = gw1.fields["82"] || "";
67    if (svnRaw1.length === 10 && svnRaw1.substring(0, 2) === "04") { svnRaw1 = svnRaw1.substring(4); }
68    bind.checkData("S0-C3 svn equal to #RSP_SVN_H", "020500", svnRaw1 === "" ? "svn_absent" : svnRaw1.toUpperCase());
69    // S0-C4: svn 的 major/minor 属 SGP.23 v1.16 §1.2 冻结版本集(规范派生机械常量,非声明值;ES3/JScript 安全手写成员循环)。
70    var svnMM1 = gw1.fields["82"] || "";
71    if (svnMM1.length === 10 && svnMM1.substring(0, 2) === "04") { svnMM1 = svnMM1.substring(4); }
72    svnMM1 = svnMM1.length === 6 ? svnMM1.substring(0, 4) : "";
73    var svnMMSet1 = ["0202", "0203", "0204", "0205", "0206"];
74    var svnMMOk1 = false;
75    for (var svnMMi1 = 0; !svnMMOk1 && svnMMi1 < svnMMSet1.length; svnMMi1++) { if (svnMMSet1[svnMMi1] === svnMM1.toUpperCase()) { svnMMOk1 = true; } }
76    bind.checkData("S0-C4 svn one of SGP.23 §1.2 versions", "1", svnMMOk1 ? "1" : "0");
77    bind.checkData("S0-C5 RQ43_004 svn present", "1", gw1.fields["82"] !== undefined ? "1" : "0");
78
79    // 步骤 2:MANAGE_CHANNEL_OPEN(tc_step)
80    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
81    var s2 = bind.manageChannelOpen("9000");
82    bind.checkData("S1-C1 SW", "9000", s2.sw);
83    bind.checkData("S1-C2 CHANNEL_NUMBER extracted", "1", s2.chan !== null ? "1" : "0");
84
85    // 步骤 3:MTD_SELECT(tc_step;REQ: RQ57_003)
86    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
87    var s3 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
88    var fci3 = CasBind.parseSelectResponse(s3.resp, { outer: "6F", required: ["84"] });
89    bind.checkData("S2-C1 SW", "9000", s3.sw);
90    bind.checkData("S2-C2 outer tag 6F", "present", fci3.tags["6F"] ? "present" : "absent");
91    bind.checkData("S2-C3 tag 84 value", "A0000005591010FFFFFFFF8900000100", (fci3.inner_tags && fci3.inner_tags["84"]) ? fci3.inner_tags["84"].value : "absent");
92    // S2-C4: kind 'field_compare' pattern has no static generation face (corpus vacuum; see CaseIR unresolved).
93    // S2-C4: svn 提取(6F FCI 一级成员 E0 ISDRProprietaryApplicationTemplate → 82 svn,SGP.22 §5.7.1 锚;E0 一级挂载 = 421 S6-C3 R4 结构重裁定):
94    var svn3 = "";
95    var svnFci3 = CasBind.parseSelectResponse(s3.resp, { outer: "6F", required: [] });
96    var svnE03 = (svnFci3.inner_tags && svnFci3.inner_tags["E0"]) ? svnFci3.inner_tags["E0"].value : "";
97    var svnW3 = BindEs10xSingleRequest.parseBerTlv(svnE03);
98    for (var svnJ3 = 0; svnJ3 < svnW3.length; svnJ3++) {
99        if (svnW3[svnJ3].tag === "82") { svn3 = svnW3[svnJ3].value; break; }
100    }
101    bind.checkData("S2-C4 svn extracted from SELECT response", "1", svn3 !== "" ? "1" : "0");
102
103    // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
104    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
105    var sdCla4 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
106    var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2000", "00", "9000");
107    bind.checkData("S3-C1 SW", "9000", s4.sw);
108    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
109    var gw4 = BindGecaProc.parseGecaResponse(s4.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
110    bind.checkData("S3-C2 R_EUICC_INFO1 outer tag", "BF20", gw4.outer_tag === null ? "absent" : gw4.outer_tag);
111    bind.checkData("S3-C2 R_EUICC_INFO1 required members present", "1", gw4.ok ? "1" : "0");
112    // S3-C3: svn 跨步一致性实断言(期望 = 步3 SELECT 响应运行时提取值)。
113    bind.checkData("S3-C3 svn consistency with step 3", svn3 !== "" ? svn3 : "svn_step3_absent", gw4.fields["82"] || "absent");
114    bind.checkData("S3-C4 RQ43_004 svn present", "1", gw4.fields["82"] !== undefined ? "1" : "0");
115    var svnVt4 = gw4.fields["82"] || "";
116    if (svnVt4.length === 10 && svnVt4.substring(0, 2) === "04") { svnVt4 = svnVt4.substring(4); }
117    bind.checkData("S3-C5 svn VersionType value is 3 bytes (major/minor/revision)", "1", (svnVt4.length === 6 && /^[0-9A-Fa-f]{6}$/.test(svnVt4)) ? "1" : "0");
118
119    // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
120    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
121    var sdCla5 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
122    var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2200", "00", "9000");
123    bind.checkData("S4-C1 SW", "9000", s5.sw);
124    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
125    var gw5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
126    bind.checkData("S4-C2 R_EUICC_INFO2 outer tag", "BF22", gw5.outer_tag === null ? "absent" : gw5.outer_tag);
127    bind.checkData("S4-C2 R_EUICC_INFO2 required members present", "1", gw5.ok ? "1" : "0");
128    // S4-C3: svn 跨步一致性实断言(期望 = 步3 SELECT 响应运行时提取值)。
129    bind.checkData("S4-C3 svn consistency with step 3", svn3 !== "" ? svn3 : "svn_step3_absent", gw5.fields["82"] || "absent");
130    bind.checkData("S4-C4 RQ43_004 svn present", "1", gw5.fields["82"] !== undefined ? "1" : "0");
131
132    // 步骤 6:MTD_STORE_DATA(tc_step)
133    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
134    var sdCla6 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
135    var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2E00", "00", "9000");
136    bind.checkData("S5-C1 SW", "9000", s6.sw);
137    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
138    var gw6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"], optional: []});
139    bind.checkData("S5-C2 R_CHALLENGE outer tag", "BF2E", gw6.outer_tag === null ? "absent" : gw6.outer_tag);
140    var gwch6 = null; for (var gwci6 = 0; gwci6 < gw6.children.length; gwci6++) { if (gw6.children[gwci6].tag === "80") { gwch6 = gw6.children[gwci6]; } }
141    bind.checkData("S5-C2 euiccChallenge tag", "80", gwch6 === null ? "absent" : gwch6.tag);
142    bind.checkData("S5-C2 euiccChallenge length", "10", gwch6 === null ? "absent" : (gwch6.len < 16 ? ("0" + gwch6.len.toString(16).toUpperCase()) : gwch6.len.toString(16).toUpperCase()));
143    bind.checkData("S5-C3 EUICC_CHALLENGE extracted", "1", gw6.fields["80"] !== undefined ? "1" : "0");
144}
145

完整 unified diff

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

展开 diff(220 行)
--- -man
+++ -cas
@@ -1,80 +1,145 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo_SVN_01_Nominal_SVNValue + TC_eUICC_ES10b_GetEUICCInfo_SVN_02_Nominal_ES10b_SVN (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20260929-120334
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo_SVN,Test Sequence #01 Nominal – SVN as per declared IUT setting; #02 Nominal – SVN value consistent across ES10b calls,适用性 M。
+// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
+//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
+//   ICH-IC2-K2-C4 SW;S0-C1 SW;S0-C2 R_EUICC_INFO1 outer tag
+//   S0-C2 R_EUICC_INFO1 required members present;S0-C3 svn equal to #RSP_SVN_H
+//   S0-C4 svn one of SGP.23 §1.2 versions;S0-C5 RQ43_004 svn present;S1-C1 SW
+//   S1-C2 CHANNEL_NUMBER extracted;S2-C1 SW;S2-C2 outer tag 6F;S2-C3 tag 84 value
+//   S2-C4 svn extracted from SELECT response;S3-C1 SW;S3-C2 R_EUICC_INFO1 outer tag
+//   S3-C2 R_EUICC_INFO1 required members present;S3-C3 svn consistency with step 3
+//   S3-C4 RQ43_004 svn present;S3-C5 svn VersionType value is 3 bytes (major/minor/revision)
+//   S4-C1 SW;S4-C2 R_EUICC_INFO2 outer tag;S4-C2 R_EUICC_INFO2 required members present
+//   S4-C3 svn consistency with step 3;S4-C4 RQ43_004 svn present;S5-C1 SW
+//   S5-C2 R_CHALLENGE outer tag;S5-C2 euiccChallenge tag;S5-C2 euiccChallenge length
+//   S5-C3 EUICC_CHALLENGE extracted
+// 本函数由 CaseIR 4.2.13.2.8 编译生成(q3-w0-expand-20260929,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_ES10b_GetEUICCInfo_SVN_01_02_merged() {
+    var bind = curBind;
+    // S7 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
 
-function TC_eUICC_ES10b_GetEUICCInfo_SVN_01_Nominal_SVNValue()
-{
-	tracenamestr = "测试目的:验证eUICC返回的SVN字段";
-	curDis.TraceStart(sno++,tracenamestr);
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s7 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s7.atr_hex !== "" ? "1" : "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命令,执行GetEuiccInfo1Request,获取EUICCInfo1;");
-	var euiccInfo1 = new EUICCInfo1();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo1RequestHexStr);
-	
-	euiccInfo1.checkCardResDataFormat(hexData);
-	
-	try
-	{
-		curStrHandle.CheckData(O_RSP_VERSION, euiccInfo1.svn, "svn");
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
-	
-	RecoverCard();
-	
-}
+    // IC head inline (initial_conditions → 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 s8 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s8.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s8.sw);
 
-function TC_eUICC_ES10b_GetEUICCInfo_SVN_02_Nominal_ES10b_SVN()
-{
-	tracenamestr = "测试目的:ES10b接口调用过程中SVN值的一致";
-	curDis.TraceStart(sno++,tracenamestr);
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s9 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s9.sw);
 
-	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;");
-	var sres = TS_SELECT("Select ISD",ISD_R_AID,"9000");
-	var ResponseDataPar = new check_ISDRResponseData(sres);
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
-	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
-	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
-	Profile_load_procedure.ES10b_GetEUICCInfo1();
-	var euiccInfo1 = new EUICCInfo1();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo1RequestHexStr);
-	euiccInfo1.checkCardResDataFormat(hexData);
-	curStrHandle.CheckData(ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,euiccInfo1.svn,"svn");
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady10 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady10.final.sw);
 
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");	
-	var euiccInfo2 = new EUICCInfo2();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
-	euiccInfo2.checkCardResDataFormat(hexData);
-	curStrHandle.CheckData(ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,euiccInfo2.svn,"svn");
-			
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
-	Profile_load_procedure.ES10b_GetEUICCChallenge();
+    // IC head inline (initial_conditions → 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 s11 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s11.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s11.chan !== null ? "1" : "0");
 
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	var euiccInfo2_hexData_1 = Profile_load_procedure.authServerResponse.authenticateResponseOk.euiccSigned1.euiccInfo2.hexData;
-	
-	euiccInfo2.checkCardResDataFormat(hexData);
-	curStrHandle.CheckData(euiccInfo2_hexData_1, euiccInfo2.hexData,"检查EUICCInfo2数据应与authServerResponse中返回的数据一致");
-	
-	RecoverCard();
+    // IC head inline (initial_conditions → 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 s12 = 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("ICH-IC2-K2-C4 SW", "9000", s12.sw);
+
+    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla1 = s11.chan !== null ? (s11.chan <= 3 ? 128 + s11.chan : 188 + s11.chan).toString(16).toUpperCase() : null;
+    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S0-C1 SW", "9000", s1.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S0-C2 R_EUICC_INFO1 outer tag", "BF20", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
+    bind.checkData("S0-C2 R_EUICC_INFO1 required members present", "1", gw1.ok ? "1" : "0");
+    // S0-C3: #RSP_SVN_H 实断言——期望 = 声明 #IUT_RSP_VERSION(2.5)按 VersionType 三字节机械编码(020500);值来自声明面,绝不取响应实测或记忆字节。
+    var svnRaw1 = gw1.fields["82"] || "";
+    if (svnRaw1.length === 10 && svnRaw1.substring(0, 2) === "04") { svnRaw1 = svnRaw1.substring(4); }
+    bind.checkData("S0-C3 svn equal to #RSP_SVN_H", "020500", svnRaw1 === "" ? "svn_absent" : svnRaw1.toUpperCase());
+    // S0-C4: svn 的 major/minor 属 SGP.23 v1.16 §1.2 冻结版本集(规范派生机械常量,非声明值;ES3/JScript 安全手写成员循环)。
+    var svnMM1 = gw1.fields["82"] || "";
+    if (svnMM1.length === 10 && svnMM1.substring(0, 2) === "04") { svnMM1 = svnMM1.substring(4); }
+    svnMM1 = svnMM1.length === 6 ? svnMM1.substring(0, 4) : "";
+    var svnMMSet1 = ["0202", "0203", "0204", "0205", "0206"];
+    var svnMMOk1 = false;
+    for (var svnMMi1 = 0; !svnMMOk1 && svnMMi1 < svnMMSet1.length; svnMMi1++) { if (svnMMSet1[svnMMi1] === svnMM1.toUpperCase()) { svnMMOk1 = true; } }
+    bind.checkData("S0-C4 svn one of SGP.23 §1.2 versions", "1", svnMMOk1 ? "1" : "0");
+    bind.checkData("S0-C5 RQ43_004 svn present", "1", gw1.fields["82"] !== undefined ? "1" : "0");
+
+    // 步骤 2:MANAGE_CHANNEL_OPEN(tc_step)
+    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s2 = bind.manageChannelOpen("9000");
+    bind.checkData("S1-C1 SW", "9000", s2.sw);
+    bind.checkData("S1-C2 CHANNEL_NUMBER extracted", "1", s2.chan !== null ? "1" : "0");
+
+    // 步骤 3:MTD_SELECT(tc_step;REQ: RQ57_003)
+    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s3 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
+    var fci3 = CasBind.parseSelectResponse(s3.resp, { outer: "6F", required: ["84"] });
+    bind.checkData("S2-C1 SW", "9000", s3.sw);
+    bind.checkData("S2-C2 outer tag 6F", "present", fci3.tags["6F"] ? "present" : "absent");
+    bind.checkData("S2-C3 tag 84 value", "A0000005591010FFFFFFFF8900000100", (fci3.inner_tags && fci3.inner_tags["84"]) ? fci3.inner_tags["84"].value : "absent");
+    // S2-C4: kind 'field_compare' pattern has no static generation face (corpus vacuum; see CaseIR unresolved).
+    // S2-C4: svn 提取(6F FCI 一级成员 E0 ISDRProprietaryApplicationTemplate → 82 svn,SGP.22 §5.7.1 锚;E0 一级挂载 = 421 S6-C3 R4 结构重裁定):
+    var svn3 = "";
+    var svnFci3 = CasBind.parseSelectResponse(s3.resp, { outer: "6F", required: [] });
+    var svnE03 = (svnFci3.inner_tags && svnFci3.inner_tags["E0"]) ? svnFci3.inner_tags["E0"].value : "";
+    var svnW3 = BindEs10xSingleRequest.parseBerTlv(svnE03);
+    for (var svnJ3 = 0; svnJ3 < svnW3.length; svnJ3++) {
+        if (svnW3[svnJ3].tag === "82") { svn3 = svnW3[svnJ3].value; break; }
+    }
+    bind.checkData("S2-C4 svn extracted from SELECT response", "1", svn3 !== "" ? "1" : "0");
+
+    // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla4 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
+    var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S3-C1 SW", "9000", s4.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw4 = BindGecaProc.parseGecaResponse(s4.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S3-C2 R_EUICC_INFO1 outer tag", "BF20", gw4.outer_tag === null ? "absent" : gw4.outer_tag);
+    bind.checkData("S3-C2 R_EUICC_INFO1 required members present", "1", gw4.ok ? "1" : "0");
+    // S3-C3: svn 跨步一致性实断言(期望 = 步3 SELECT 响应运行时提取值)。
+    bind.checkData("S3-C3 svn consistency with step 3", svn3 !== "" ? svn3 : "svn_step3_absent", gw4.fields["82"] || "absent");
+    bind.checkData("S3-C4 RQ43_004 svn present", "1", gw4.fields["82"] !== undefined ? "1" : "0");
+    var svnVt4 = gw4.fields["82"] || "";
+    if (svnVt4.length === 10 && svnVt4.substring(0, 2) === "04") { svnVt4 = svnVt4.substring(4); }
+    bind.checkData("S3-C5 svn VersionType value is 3 bytes (major/minor/revision)", "1", (svnVt4.length === 6 && /^[0-9A-Fa-f]{6}$/.test(svnVt4)) ? "1" : "0");
+
+    // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ43_004)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla5 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
+    var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2200", "00", "9000");
+    bind.checkData("S4-C1 SW", "9000", s5.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
+    bind.checkData("S4-C2 R_EUICC_INFO2 outer tag", "BF22", gw5.outer_tag === null ? "absent" : gw5.outer_tag);
+    bind.checkData("S4-C2 R_EUICC_INFO2 required members present", "1", gw5.ok ? "1" : "0");
+    // S4-C3: svn 跨步一致性实断言(期望 = 步3 SELECT 响应运行时提取值)。
+    bind.checkData("S4-C3 svn consistency with step 3", svn3 !== "" ? svn3 : "svn_step3_absent", gw5.fields["82"] || "absent");
+    bind.checkData("S4-C4 RQ43_004 svn present", "1", gw5.fields["82"] !== undefined ? "1" : "0");
+
+    // 步骤 6: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 sdCla6 = s2.chan !== null ? (s2.chan <= 3 ? 128 + s2.chan : 188 + s2.chan).toString(16).toUpperCase() : null;
+    var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S5-C1 SW", "9000", s6.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S5-C2 R_CHALLENGE outer tag", "BF2E", gw6.outer_tag === null ? "absent" : gw6.outer_tag);
+    var gwch6 = null; for (var gwci6 = 0; gwci6 < gw6.children.length; gwci6++) { if (gw6.children[gwci6].tag === "80") { gwch6 = gw6.children[gwci6]; } }
+    bind.checkData("S5-C2 euiccChallenge tag", "80", gwch6 === null ? "absent" : gwch6.tag);
+    bind.checkData("S5-C2 euiccChallenge length", "10", gwch6 === null ? "absent" : (gwch6.len < 16 ? ("0" + gwch6.len.toString(16).toUpperCase()) : gwch6.len.toString(16).toUpperCase()));
+    bind.checkData("S5-C3 EUICC_CHALLENGE extracted", "1", gw6.fields["80"] !== undefined ? "1" : "0");
 }