eSIM RSP 测试用例对比站

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

源码对照:4.2.13.2.7

ES10b 获取 eUICCInfo2(RSP V2.4 及以上) / TC_eUICC_ES10b.GetEUICCInfo2_RSP_V2.4_or_Higher

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
68 行 / 2287 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_GetEUICCInfo2_RSP_V2_4_or_Higher/Import/TC_eUICC_ES10b_GetEUICCInfo2_RSP_V2_4_or_Higher.js
87 行 / 7967 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js68 行 / 2287 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo2_RSP_V24_or_Higher_01_Nominal_GetEUICCInfo2_RSP_V24_or_Higher (extracted verbatim)
2
3function TC_eUICC_ES10b_GetEUICCInfo2_RSP_V24_or_Higher_01_Nominal_GetEUICCInfo2_RSP_V24_or_Higher()
4{
5	tracenamestr = "测试目的:获取EUICCInfo2–RSP V2.4及以上";
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命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
20	var euiccInfo2 = new EUICCInfo2();
21	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
22	
23	euiccInfo2.checkCardResDataFormat(hexData);
24	
25	try
26	{
27		curStrHandle.CheckData("8101008204XXXXXXXX8302XXXX", euiccInfo2.extCardResource, "extCardResource");
28		
29		var uiccCapabilityObj = new UICCCapability();
30		uiccCapabilityObj.check_1(euiccInfo2.uiccCapability);
31	
32		if(typeof(IUT_TS102241_VERSION) != "undefined")
33		{
34			curStrHandle.CheckData(IUT_TS102241_VERSION, euiccInfo2.ts102241Version,"ts102241Version");
35		
36			var UT_TS102241_VERSION = parseInt(euiccInfo2.ts102241Version,16);
37			if (UT_TS102241_VERSION < 0x90000)
38				obj.SubLevelError("eUICC支持的ts102241版本太低");
39		}
40		else
41		{
42			curStrHandle.CheckData("undefined", euiccInfo2.ts102241Version,"ts102241Version");
43		}
44		
45		if(typeof(IUT_GLOBALPLATFORM_VERSION) != "undefined")
46		{
47			curStrHandle.CheckData(IUT_GLOBALPLATFORM_VERSION, euiccInfo2.globalplatformVersion,"globalplatformVersion");
48		
49			var UT_GLOBALPLATFORM_VERSION = parseInt(euiccInfo2.globalplatformVersion,16);
50			if (UT_GLOBALPLATFORM_VERSION < 0x020300)
51				obj.SubLevelError("eUICC支持的GP版本太低");
52		}
53		else
54		{
55			curStrHandle.CheckData("undefined", euiccInfo2.globalplatformVersion,"globalplatformVersion");
56		}
57		
58		var rspCapabilityObj = new RspCapability();
59		rspCapabilityObj.check(euiccInfo2.rspCapability);		
60		
61	}catch(e){
62		obj.SubLevel("EUICCInfo2数据内容检查不通过", level_of_SubLevel.error);
63	}
64	
65	RecoverCard();
66	
67}
68
-cas 盲生成TC_eUICC_ES10b_GetEUICCInfo2_RSP_V2_4_or_Higher/Import/TC_eUICC_ES10b_GetEUICCInfo2_RSP_V2_4_or_Higher.js87 行 / 7967 字符 / gb18030入口函数 @L20
1// Author: 卡思Cas智能体
2// Date: 20260929-115827
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo2_RSP_V2.4_or_Higher,Test Sequence #01 Nominal – RSP Version 2.4 or Higher,适用性 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;S1-C1 SW;S1-C2 R_EUICC_INFO2 outer tag
7//   S1-C2 R_EUICC_INFO2 required members present
8//   S1-C3 EXT_CARD_RESOURCE installed-application field is '00' oracle
9//   S1-C4 ts102241Version >= 0x090000;S1-C5 globalplatformVersion >= 0x020300
10//   S1-C6 crlSupport conditional on O_E_CRL oracle
11//   S1-C7 testProfileSupport conditional on O_E_TEST_PROF oracle;S1-C8 rpmSupport bit is 0
12//   S1-C9 additionalProfile bit is 1
13//   S1-C10 serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA oracle
14//   S1-C11 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle
15//   S1-C12 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle
16//   S1-C14 treProperties value in {isDiscrete}/{isIntegrated}/{isIntegrated,usesRemoteMemory}
17// 本函数由 CaseIR 4.2.13.2.7 编译生成(blindgen-R2-421327,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_GetEUICCInfo2_RSP_V2_4_or_Higher_01_merged() {
21    var bind = curBind;
22
23    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
24    var s2 = bind.resetAndAtr();
25    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s2.atr_hex !== "" ? "1" : "0");
26
27    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
28    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
29    var s3 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
30    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s3.resp.length > 0 ? "1" : "0");
31    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s3.sw);
32
33    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
34    var s4 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
35    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s4.sw);
36
37    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
38    var steady5 = bind.runToSteadyState(function () {
39        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
40    });
41    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady5.final.sw);
42
43    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
44    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
45    var s6 = bind.manageChannelOpen("9000");
46    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s6.sw);
47    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s6.chan !== null ? "1" : "0");
48
49    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
50    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
51    var s7 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "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("ICH-IC2-K2-C4 SW", "9000", s7.sw);
54
55    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_001, RQ43_002, RQ43_005, RQ43_006, RQ43_007, RQ43_008, RQ43_009, RQ43_010, RQ43_011, RQ43_012, RQ43_013, RQ57_057_1, RQ57_060, RQ57_061, RQ57_063, RQ57_064, RQ57_066)
56    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
57    var sdCla1 = s6.chan !== null ? (s6.chan <= 3 ? 128 + s6.chan : 188 + s6.chan).toString(16).toUpperCase() : null;
58    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2200", "00", "9000");
59    bind.checkData("S1-C1 SW", "9000", s1.sw);
60    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
61    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87", "8B", "8D"]});
62    bind.checkData("S1-C2 R_EUICC_INFO2 outer tag", "BF22", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
63    bind.checkData("S1-C2 R_EUICC_INFO2 required members present", "1", gw1.ok ? "1" : "0");
64    // S1-C3: EXT_CARD_RESOURCE installed-application field is '00'——语料真空诚实面(ts102226_extcardresource_layout 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
65    bind.checkData("S1-C3 EXT_CARD_RESOURCE installed-application field is '00' oracle", "ts102226_extcardresource_layout", "oracle_absent_corpus_vacuum");
66    bind.checkData("S1-C4 ts102241Version >= 0x090000", "1", ((gw1.fields["86"] || "") !== "" && (gw1.fields["86"] || "") >= "090000") ? "1" : "0");
67    bind.checkData("S1-C5 globalplatformVersion >= 0x020300", "1", ((gw1.fields["87"] || "") !== "" && (gw1.fields["87"] || "") >= "020300") ? "1" : "0");
68    // S1-C6: crlSupport conditional on O_E_CRL——语料真空诚实面(iut_capability_o_e_crl 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
69    bind.checkData("S1-C6 crlSupport conditional on O_E_CRL oracle", "iut_capability_o_e_crl", "oracle_absent_corpus_vacuum");
70    // S1-C7: testProfileSupport conditional on O_E_TEST_PROF——语料真空诚实面(iut_capability_o_e_test_prof 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
71    bind.checkData("S1-C7 testProfileSupport conditional on O_E_TEST_PROF oracle", "iut_capability_o_e_test_prof", "oracle_absent_corpus_vacuum");
72    bind.checkData("S1-C8 rpmSupport bit is 0", "1", ((gw1.fields["88"] || "").length >= 4 && (parseInt((gw1.fields["88"] || "").substring(2, 4), 16) & 0x20) === 0) ? "1" : "0");
73    bind.checkData("S1-C9 additionalProfile bit is 1", "1", ((gw1.fields["88"] || "").length >= 4 && (parseInt((gw1.fields["88"] || "").substring(2, 4), 16) & 0x80) !== 0) ? "1" : "0");
74    // S1-C10: serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA——语料真空诚实面(iut_capability_o_e_services_specific_data 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
75    bind.checkData("S1-C10 serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA oracle", "iut_capability_o_e_services_specific_data", "oracle_absent_corpus_vacuum");
76    // S1-C11: IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits——语料真空诚实面(iut_uicc_capability_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
77    bind.checkData("S1-C11 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle", "iut_uicc_capability_constant", "oracle_absent_corpus_vacuum");
78    // S1-C12: IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits——语料真空诚实面(iut_uicc_capability_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
79    bind.checkData("S1-C12 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle", "iut_uicc_capability_constant", "oracle_absent_corpus_vacuum");
80    var tre1 = gw1.fields["8D"] || "";
81    var tre1Set = ["0080", "0040", "0060"];
82    var tre1Ok = tre1 === "";
83    for (var tre1I = 0; !tre1Ok && tre1I < tre1Set.length; tre1I++) { if (tre1Set[tre1I] === tre1) { tre1Ok = true; } }
84    bind.checkData("S1-C14 treProperties value in {isDiscrete}/{isIntegrated}/{isIntegrated,usesRemoteMemory}", "1", tre1Ok ? "1" : "0");
85    // S1-C13: kind 'field' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
86}
87

完整 unified diff

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

展开 diff(154 行)
--- -man
+++ -cas
@@ -1,68 +1,87 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo2_RSP_V24_or_Higher_01_Nominal_GetEUICCInfo2_RSP_V24_or_Higher (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20260929-115827
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo2_RSP_V2.4_or_Higher,Test Sequence #01 Nominal – RSP Version 2.4 or Higher,适用性 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;S1-C1 SW;S1-C2 R_EUICC_INFO2 outer tag
+//   S1-C2 R_EUICC_INFO2 required members present
+//   S1-C3 EXT_CARD_RESOURCE installed-application field is '00' oracle
+//   S1-C4 ts102241Version >= 0x090000;S1-C5 globalplatformVersion >= 0x020300
+//   S1-C6 crlSupport conditional on O_E_CRL oracle
+//   S1-C7 testProfileSupport conditional on O_E_TEST_PROF oracle;S1-C8 rpmSupport bit is 0
+//   S1-C9 additionalProfile bit is 1
+//   S1-C10 serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA oracle
+//   S1-C11 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle
+//   S1-C12 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle
+//   S1-C14 treProperties value in {isDiscrete}/{isIntegrated}/{isIntegrated,usesRemoteMemory}
+// 本函数由 CaseIR 4.2.13.2.7 编译生成(blindgen-R2-421327,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_GetEUICCInfo2_RSP_V2_4_or_Higher_01_merged() {
+    var bind = curBind;
 
-function TC_eUICC_ES10b_GetEUICCInfo2_RSP_V24_or_Higher_01_Nominal_GetEUICCInfo2_RSP_V24_or_Higher()
-{
-	tracenamestr = "测试目的:获取EUICCInfo2–RSP V2.4及以上";
-	curDis.TraceStart(sno++,tracenamestr);
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s2 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s2.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命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
-	var euiccInfo2 = new EUICCInfo2();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
-	
-	euiccInfo2.checkCardResDataFormat(hexData);
-	
-	try
-	{
-		curStrHandle.CheckData("8101008204XXXXXXXX8302XXXX", euiccInfo2.extCardResource, "extCardResource");
-		
-		var uiccCapabilityObj = new UICCCapability();
-		uiccCapabilityObj.check_1(euiccInfo2.uiccCapability);
-	
-		if(typeof(IUT_TS102241_VERSION) != "undefined")
-		{
-			curStrHandle.CheckData(IUT_TS102241_VERSION, euiccInfo2.ts102241Version,"ts102241Version");
-		
-			var UT_TS102241_VERSION = parseInt(euiccInfo2.ts102241Version,16);
-			if (UT_TS102241_VERSION < 0x90000)
-				obj.SubLevelError("eUICC支持的ts102241版本太低");
-		}
-		else
-		{
-			curStrHandle.CheckData("undefined", euiccInfo2.ts102241Version,"ts102241Version");
-		}
-		
-		if(typeof(IUT_GLOBALPLATFORM_VERSION) != "undefined")
-		{
-			curStrHandle.CheckData(IUT_GLOBALPLATFORM_VERSION, euiccInfo2.globalplatformVersion,"globalplatformVersion");
-		
-			var UT_GLOBALPLATFORM_VERSION = parseInt(euiccInfo2.globalplatformVersion,16);
-			if (UT_GLOBALPLATFORM_VERSION < 0x020300)
-				obj.SubLevelError("eUICC支持的GP版本太低");
-		}
-		else
-		{
-			curStrHandle.CheckData("undefined", euiccInfo2.globalplatformVersion,"globalplatformVersion");
-		}
-		
-		var rspCapabilityObj = new RspCapability();
-		rspCapabilityObj.check(euiccInfo2.rspCapability);		
-		
-	}catch(e){
-		obj.SubLevel("EUICCInfo2数据内容检查不通过", 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 s3 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s3.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s3.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s4 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s4.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady5 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady5.final.sw);
+
+    // 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 s6 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s6.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s6.chan !== null ? "1" : "0");
+
+    // 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 s7 = 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", s7.sw);
+
+    // 步骤 1:MTD_STORE_DATA(tc_step;REQ: RQ43_001, RQ43_002, RQ43_005, RQ43_006, RQ43_007, RQ43_008, RQ43_009, RQ43_010, RQ43_011, RQ43_012, RQ43_013, RQ57_057_1, RQ57_060, RQ57_061, RQ57_063, RQ57_064, RQ57_066)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla1 = s6.chan !== null ? (s6.chan <= 3 ? 128 + s6.chan : 188 + s6.chan).toString(16).toUpperCase() : null;
+    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2200", "00", "9000");
+    bind.checkData("S1-C1 SW", "9000", s1.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87", "8B", "8D"]});
+    bind.checkData("S1-C2 R_EUICC_INFO2 outer tag", "BF22", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
+    bind.checkData("S1-C2 R_EUICC_INFO2 required members present", "1", gw1.ok ? "1" : "0");
+    // S1-C3: EXT_CARD_RESOURCE installed-application field is '00'——语料真空诚实面(ts102226_extcardresource_layout 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C3 EXT_CARD_RESOURCE installed-application field is '00' oracle", "ts102226_extcardresource_layout", "oracle_absent_corpus_vacuum");
+    bind.checkData("S1-C4 ts102241Version >= 0x090000", "1", ((gw1.fields["86"] || "") !== "" && (gw1.fields["86"] || "") >= "090000") ? "1" : "0");
+    bind.checkData("S1-C5 globalplatformVersion >= 0x020300", "1", ((gw1.fields["87"] || "") !== "" && (gw1.fields["87"] || "") >= "020300") ? "1" : "0");
+    // S1-C6: crlSupport conditional on O_E_CRL——语料真空诚实面(iut_capability_o_e_crl 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C6 crlSupport conditional on O_E_CRL oracle", "iut_capability_o_e_crl", "oracle_absent_corpus_vacuum");
+    // S1-C7: testProfileSupport conditional on O_E_TEST_PROF——语料真空诚实面(iut_capability_o_e_test_prof 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C7 testProfileSupport conditional on O_E_TEST_PROF oracle", "iut_capability_o_e_test_prof", "oracle_absent_corpus_vacuum");
+    bind.checkData("S1-C8 rpmSupport bit is 0", "1", ((gw1.fields["88"] || "").length >= 4 && (parseInt((gw1.fields["88"] || "").substring(2, 4), 16) & 0x20) === 0) ? "1" : "0");
+    bind.checkData("S1-C9 additionalProfile bit is 1", "1", ((gw1.fields["88"] || "").length >= 4 && (parseInt((gw1.fields["88"] || "").substring(2, 4), 16) & 0x80) !== 0) ? "1" : "0");
+    // S1-C10: serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA——语料真空诚实面(iut_capability_o_e_services_specific_data 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C10 serviceSpecificDataSupport conditional on O_E_SERVICES_SPECIFIC_DATA oracle", "iut_capability_o_e_services_specific_data", "oracle_absent_corpus_vacuum");
+    // S1-C11: IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits——语料真空诚实面(iut_uicc_capability_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C11 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle", "iut_uicc_capability_constant", "oracle_absent_corpus_vacuum");
+    // S1-C12: IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits——语料真空诚实面(iut_uicc_capability_constant 不在输入包,fail-closed 登记,禁凭记忆补造断言字节)。
+    bind.checkData("S1-C12 IUT_UICC_CAPABILITY javacard/akaMilenage/akaTuak bits oracle", "iut_uicc_capability_constant", "oracle_absent_corpus_vacuum");
+    var tre1 = gw1.fields["8D"] || "";
+    var tre1Set = ["0080", "0040", "0060"];
+    var tre1Ok = tre1 === "";
+    for (var tre1I = 0; !tre1Ok && tre1I < tre1Set.length; tre1I++) { if (tre1Set[tre1I] === tre1) { tre1Ok = true; } }
+    bind.checkData("S1-C14 treProperties value in {isDiscrete}/{isIntegrated}/{isIntegrated,usesRemoteMemory}", "1", tre1Ok ? "1" : "0");
+    // S1-C13: kind 'field' pattern '' has no static generation face (corpus vacuum; see CaseIR unresolved).
 }