源码对照:4.2.8.2.1
ES10a 获取 eUICC 已配置地址 / TC_eUICC_ES10a.GetEuiccConfiguredAddresses
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
112 行 / 4984 字符 / gb18030
-cas 入口
TC_eUICC_ES10a_GetEuiccConfiguredAddresses/Import/TC_eUICC_ES10a_GetEuiccConfiguredAddresses.js
61 行 / 4330 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js112 行 / 4984 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10a_GetEuiccConfiguredAddresses_01_Nominal_Only_Root_SM_DS_Address + TC_eUICC_ES10a_GetEuiccConfiguredAddresses_02_Nominal_Root_SM_DS_and_Default_SM_DP_Addresses (extracted verbatim)
2
3function TC_eUICC_ES10a_GetEuiccConfiguredAddresses_01_Nominal_Only_Root_SM_DS_Address()
4{
5
6 tracenamestr = "测试目的:仅获取Root SM-DS地址";
7 curDis.TraceStart(sno++,tracenamestr);
8
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命令,执行EuiccMemoryResetRequest,Reset default SM-DP+ address;");
21 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
22 euiMemoryResetRequest.resetOptions = "0520";
23 euiMemoryResetRequest.GenHexData();
24 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
25 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
26
27
28 var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
29 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
30 var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
31
32
33 var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
34 euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
35 try
36 {
37 if (typeof(euiccConfiguredAddressesResponse.defaultDpAddress) != "undefined")
38 obj.SubLevelError("卡片应当没有defaultDpAddress返回,");
39 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
40
41
42 }catch(e){
43 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
44 }
45 RecoverCard();
46}
47
48function TC_eUICC_ES10a_GetEuiccConfiguredAddresses_02_Nominal_Root_SM_DS_and_Default_SM_DP_Addresses()
49{
50
51 tracenamestr = "测试目的:获取Root SM-DS和默认SM-DP+地址";
52 curDis.TraceStart(sno++,tracenamestr);
53
54 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
55 Ini_powerOn_eUICC_LPAe_not_activate();
56
57 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
58 TS_MANAGE_CHANNEL_OPEN();
59
60 curLogicChannel = 1;
61
62 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
63 TS_SELECT("Select ISD",ISD_R_AID,"9000");
64
65 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行SetDefaultDpAddressRequest,设置DefaultDpAddressRequest为TEST_DP_ADDRESS1;");
66 var setDefaultDpAddressRequest = new SetDefaultDpAddressRequest();
67 setDefaultDpAddressRequest.defaultDpAddress = TEST_DP_ADDRESS1;
68 setDefaultDpAddressRequest.GenHexData();
69 var respData = LPAd_Transport_data_to_eUICC(setDefaultDpAddressRequest.hexData);
70 curStrHandle.CheckData("BF3F03800100", respData,"SetDefaultDpAddress Response");
71
72 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
73 var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
74 var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
75 euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
76
77 try
78 {
79 curStrHandle.CheckData(setDefaultDpAddressRequest.defaultDpAddress, euiccConfiguredAddressesResponse.defaultDpAddress,"default Dp Address");
80 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
81
82
83 }catch(e){
84 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
85 }
86
87 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行SetDefaultDpAddressRequest,defaultDpAddress为空,清空卡内的default SM-DP+ address;");
88 var setDefaultDpAddressRequest = new SetDefaultDpAddressRequest();
89 setDefaultDpAddressRequest.defaultDpAddress = "";
90 setDefaultDpAddressRequest.GenHexData();
91 var respData = LPAd_Transport_data_to_eUICC(setDefaultDpAddressRequest.hexData);
92 curStrHandle.CheckData("BF3F03800100", respData,"SetDefaultDpAddress Response");
93
94 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
95 var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
96 var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
97 euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
98
99 try
100 {
101 if (typeof(euiccConfiguredAddressesResponse.defaultDpAddress) != "undefined")
102 obj.SubLevelError("卡片应当没有defaultDpAddress返回,");
103 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
104
105
106 }catch(e){
107 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
108 }
109
110 RecoverCard();
111}
112
-cas 盲生成TC_eUICC_ES10a_GetEuiccConfiguredAddresses/Import/TC_eUICC_ES10a_GetEuiccConfiguredAddresses.js61 行 / 4330 字符 / gb18030入口函数 @L11
1// Author: 卡思Cas智能体
2// Date: 20260909-232158
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10a.GetEuiccConfiguredAddresses,Test Sequence #01 Nominal:,适用性 M。
4// Test points: S1-C1 ATR_present;S2-C2 outer tag 62;S2-C1 SW;S3-C1 SW;S4-C1 final SW;S5-C1 SW
5// S5-C2 CHANNEL_NUMBER extracted;S6-C1 SW;S7-C1 SW;S7-C2 outer tag BF3C
6// S7-C3 response prefix BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D
7// S7-C4 response prefix BF3C1A;S7-C5 request data
8// 本函数由 CaseIR 4.2.8.2.1 编译生成(blindgen-42821-20260909_223223,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
9// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
10// 适用性 M:编译期门,运行时由 harness 环境前置承担。
11function TC_eUICC_ES10a_GetEuiccConfiguredAddresses_01_Nominal() {
12 var bind = curBind;
13 // IC1 (seq#01) PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
14 // IC2 (seq#01) PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
15 // IC1 (seq#02) PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
16 // IC2 (seq#02) 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 var s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
24 bind.checkData("S2-C2 outer tag 62", "62", s2.resp.substring(0, 2));
25 bind.checkData("S2-C1 SW", "9000", s2.sw);
26
27 // 步骤 3:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
28 var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", "00", "9000");
29 bind.checkData("S3-C1 SW", "9000", s3.sw);
30
31 // 步骤 4:TERMINAL_PROFILE(procedure_expansion)
32 var steady4 = bind.runToSteadyState(function () {
33 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
34 });
35 bind.checkData("S4-C1 final SW", "9000", steady4.final.sw);
36 // S4-C2: pattern clause 'TPidentifiesproactive_terminal_support' has no static generation face (unmapped).
37 // S4-C2: binding:tp_verbatim_emission_enables_proactive_session(TS102223-6.2;R2-job-c6c8b75) (check_attestation)
38
39 // 步骤 5:MANAGE_CHANNEL_OPEN(procedure_expansion)
40 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
41 var s5 = bind.manageChannelOpen("9000");
42 bind.checkData("S5-C1 SW", "9000", s5.sw);
43 bind.checkData("S5-C2 CHANNEL_NUMBER extracted", "1", s5.chan !== null ? "1" : "0");
44
45 // 步骤 6:MTD_SELECT(procedure_expansion)
46 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
47 var s6 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "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("S6-C1 SW", "9000", s6.sw);
50
51 // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ57_017, RQ57_018, RQ57_019, RQ33_021_1)
52 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
53 var sdCla7 = s5.chan !== null ? (s5.chan <= 3 ? 128 + s5.chan : 188 + s5.chan).toString(16).toUpperCase() : null;
54 var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF3C00", "00", "9000");
55 bind.checkData("S7-C1 SW", "9000", s7.sw);
56 bind.checkData("S7-C2 outer tag BF3C", "BF3C", s7.resp.substring(0, 4));
57 bind.checkData("S7-C3 response prefix BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D", "BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D", s7.resp.substring(0, 58));
58 bind.checkData("S7-C4 response prefix BF3C1A", "BF3C1A", s7.resp.substring(0, 6));
59 bind.checkData("S7-C5 request data", "BF3C00", s7.cmd.substring(10, 16));
60}
61
完整 unified diff
行级差异:新增 54 行 / 删除 105 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(169 行)
--- -man
+++ -cas
@@ -1,112 +1,61 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10a_GetEuiccConfiguredAddresses_01_Nominal_Only_Root_SM_DS_Address + TC_eUICC_ES10a_GetEuiccConfiguredAddresses_02_Nominal_Root_SM_DS_and_Default_SM_DP_Addresses (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20260909-232158
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10a.GetEuiccConfiguredAddresses,Test Sequence #01 Nominal:,适用性 M。
+// Test points: S1-C1 ATR_present;S2-C2 outer tag 62;S2-C1 SW;S3-C1 SW;S4-C1 final SW;S5-C1 SW
+// S5-C2 CHANNEL_NUMBER extracted;S6-C1 SW;S7-C1 SW;S7-C2 outer tag BF3C
+// S7-C3 response prefix BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D
+// S7-C4 response prefix BF3C1A;S7-C5 request data
+// 本函数由 CaseIR 4.2.8.2.1 编译生成(blindgen-42821-20260909_223223,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_ES10a_GetEuiccConfiguredAddresses_01_Nominal() {
+ var bind = curBind;
+ // IC1 (seq#01) PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // IC2 (seq#01) PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // IC1 (seq#02) PROC_EUICC_INITIALIZATION_SEQUENCE: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // IC2 (seq#02) PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
-function TC_eUICC_ES10a_GetEuiccConfiguredAddresses_01_Nominal_Only_Root_SM_DS_Address()
-{
-
- tracenamestr = "测试目的:仅获取Root SM-DS地址";
- curDis.TraceStart(sno++,tracenamestr);
+ // 步骤 1:RESET(procedure_expansion)
+ var s1 = bind.resetAndAtr();
+ bind.checkData("S1-C1 ATR_present", "1", s1.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命令,执行EuiccMemoryResetRequest,Reset default SM-DP+ address;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0520";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
-
- var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
- var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
-
+ // 步骤 2:SELECT_MF(procedure_expansion)
+ var s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("S2-C2 outer tag 62", "62", s2.resp.substring(0, 2));
+ bind.checkData("S2-C1 SW", "9000", s2.sw);
- var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
- euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
- try
- {
- if (typeof(euiccConfiguredAddressesResponse.defaultDpAddress) != "undefined")
- obj.SubLevelError("卡片应当没有defaultDpAddress返回,");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
-
-
- }catch(e){
- obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
- }
- RecoverCard();
-}
+ // 步骤 3:TERMINAL_CAPABILITY_LPAd(procedure_expansion)
+ var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", "00", "9000");
+ bind.checkData("S3-C1 SW", "9000", s3.sw);
-function TC_eUICC_ES10a_GetEuiccConfiguredAddresses_02_Nominal_Root_SM_DS_and_Default_SM_DP_Addresses()
-{
-
- tracenamestr = "测试目的:获取Root SM-DS和默认SM-DP+地址";
- curDis.TraceStart(sno++,tracenamestr);
+ // 步骤 4:TERMINAL_PROFILE(procedure_expansion)
+ var steady4 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("S4-C1 final SW", "9000", steady4.final.sw);
+ // S4-C2: pattern clause 'TPidentifiesproactive_terminal_support' has no static generation face (unmapped).
+ // S4-C2: binding:tp_verbatim_emission_enables_proactive_session(TS102223-6.2;R2-job-c6c8b75) (check_attestation)
- 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命令,执行SetDefaultDpAddressRequest,设置DefaultDpAddressRequest为TEST_DP_ADDRESS1;");
- var setDefaultDpAddressRequest = new SetDefaultDpAddressRequest();
- setDefaultDpAddressRequest.defaultDpAddress = TEST_DP_ADDRESS1;
- setDefaultDpAddressRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(setDefaultDpAddressRequest.hexData);
- curStrHandle.CheckData("BF3F03800100", respData,"SetDefaultDpAddress Response");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
- var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
- var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
- euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
-
- try
- {
- curStrHandle.CheckData(setDefaultDpAddressRequest.defaultDpAddress, euiccConfiguredAddressesResponse.defaultDpAddress,"default Dp Address");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
-
-
- }catch(e){
- obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行SetDefaultDpAddressRequest,defaultDpAddress为空,清空卡内的default SM-DP+ address;");
- var setDefaultDpAddressRequest = new SetDefaultDpAddressRequest();
- setDefaultDpAddressRequest.defaultDpAddress = "";
- setDefaultDpAddressRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(setDefaultDpAddressRequest.hexData);
- curStrHandle.CheckData("BF3F03800100", respData,"SetDefaultDpAddress Response");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccConfiguredAddressesRequest,获取卡片的defaultDpAddress和rootDsAddress;");
- var respData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
- var euiccConfiguredAddressesResponse = new EuiccConfiguredAddressesResponse();
- euiccConfiguredAddressesResponse.checkCardResDataFormat(respData);
-
- try
- {
- if (typeof(euiccConfiguredAddressesResponse.defaultDpAddress) != "undefined")
- obj.SubLevelError("卡片应当没有defaultDpAddress返回,");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, euiccConfiguredAddressesResponse.rootDsAddress,"root Ds Address");
-
-
- }catch(e){
- obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
- }
-
- RecoverCard();
+ // 步骤 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: RQ57_017, RQ57_018, RQ57_019, RQ33_021_1)
+ // <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", "BF3C00", "00", "9000");
+ bind.checkData("S7-C1 SW", "9000", s7.sw);
+ bind.checkData("S7-C2 outer tag BF3C", "BF3C", s7.resp.substring(0, 4));
+ bind.checkData("S7-C3 response prefix BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D", "BF3C1A811874657374726F6F74736D64732E6578616D706C652E636F6D", s7.resp.substring(0, 58));
+ bind.checkData("S7-C4 response prefix BF3C1A", "BF3C1A", s7.resp.substring(0, 6));
+ bind.checkData("S7-C5 request data", "BF3C00", s7.cmd.substring(10, 16));
}