eSIM RSP 测试用例对比站

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

源码对照:5.2.6.2.1

重复启用 Profile 的通知 / TC_eUICC_EnableProfile_Twice_Notifications

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
147 行 / 8098 字符 / gb18030
-cas 入口
TC_eUICC_EnableProfile_Twice_Notifications/Import/TC_eUICC_EnableProfile_Twice_Notifications.js
133 行 / 10301 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js147 行 / 8098 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_EnableProfile_Twice_Notifications_01_Nominal_Notifications_generation (extracted verbatim)
2
3function TC_eUICC_EnableProfile_Twice_Notifications_01_Nominal_Notifications_generation()
4{
5	
6	if(!Card_Have_ECC_Cert)
7		return;
8	
9	initial_condition_PROFILE_OPERATIONAL1_is_Enabled();
10	var ISD_P_Test01 = curProfile_ISD_P_AID;
11	
12	initial_condition_Remove_All_Notification();
13	
14	tracenamestr = "验证当前存在一个enabled状态的profile时,激活另外一个profile,会默认产生一个disabled通知和一个enable通知";
15	curDis.TraceStart(sno++,tracenamestr);
16	
17	curLogicChannel = 0;
18	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
19	Ini_powerOn_eUICC_LPAe_not_activate();
20	
21	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
22	TS_MANAGE_CHANNEL_OPEN();
23	
24	curLogicChannel = 1;
25	
26	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
27	TS_SELECT("Select ISD",ISD_R_AID,"9000");
28	
29	curDis.TestStepStart2(stno++,"下载PROFILE_OPERATIONAL2;");
30	pkId_CI_ForVerification = pkId_CI_ECDSA_NIST;
31	pkId_CI_ForSigning = pkId_CI_ECDSA_NIST;
32
33	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL2_DATA);
34	Profile_load_procedure.ICCID = ICCID_OP_PROF2;
35	Profile_load_procedure.ES10b_GetEUICCInfo1();
36	
37	Profile_load_procedure.ES10b_GetEUICCChallenge();
38	
39	Profile_load_procedure.serverAddress = TEST_DP_ADDRESS2;
40	Profile_load_procedure.DPauthInforObj.D_key = SK_S_SM_DP2auth_ECDSA_NIST;
41	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DP2auth_ECDSA_NIST;	
42	Profile_load_procedure.ES10b_AuthenticateServer();
43	
44	Profile_load_procedure.DPbpInforObj.D_key = SK_S_SM_DP2pb_ECDSA_NIST;
45	Profile_load_procedure.DPbpInforObj.Cert = CERT_S_SM_DP2pb_ECDSA_NIST;
46	Profile_load_procedure.DPbpInforObj.registeredID = DP2pb_prime256v1_OID;
47	Profile_load_procedure.ES10b_PrepareDownload();
48	
49	Profile_load_procedure.ES10b_GetEID();
50	
51	Profile_load_procedure.serviceProviderName = SP_NAME2;
52	Profile_load_procedure.profileName = NAME_OP_PROF2;
53	Profile_load_procedure.iconType = "01";
54	Profile_load_procedure.icon = ICON_OP_PROF2;
55	Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
56	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
57	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
58	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS2;
59	Profile_load_procedure.profileClass = "02";
60	Profile_load_procedure.mccMnc = MCC_MNC2;
61	Profile_load_procedure.ES10b_LoadBoundProfilePackage();
62	
63	var ISD_P_Test02 = curProfile_ISD_P_AID;
64	
65	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotificationRequest,获取所有通知;");
66	Profile_load_procedure.ES10b_ListNotification("04F0");
67	
68	try
69	{
70		curStrHandle.CheckData("0780",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
71		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
72		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
73		var NotifiSqn1 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
74		
75		curStrHandle.CheckData("0780",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
76		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
77		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
78		var NotifiSqn2 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
79		
80		curStrHandle.CheckData(NotifiSqn2, EnCodeInteger_Ber(parseInt(NotifiSqn1,16) + 1), "<NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> follow this order in an incremental sequence");
81		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
82	}catch(e){
83		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
84	}
85	
86	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除通知;");
87	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
88	
89	for(var i=0;i<NotificationLen;i++)
90	{
91		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
92	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
93	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
94	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
95	}
96	
97	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活PROFILE_OPERATIONAL2;");
98	var enableProRequest = new EnableProfileRequest();
99	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF2);
100	enableProRequest.refreshFlag = BooleanValue_BerCode_False;
101	enableProRequest.GenHexData();
102	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
103	
104	curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
105	
106	curLogicChannel = 0;
107	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
108	Ini_powerOn_eUICC_LPAe_not_activate();
109	
110	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
111	TS_MANAGE_CHANNEL_OPEN();
112	
113	curLogicChannel = 1;
114	
115	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
116	TS_SELECT("Select ISD",ISD_R_AID,"9000");
117	
118	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotificationRequest,获取所有通知;");
119	Profile_load_procedure.ES10b_ListNotification("04F0");
120	
121	try
122	{
123		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
124		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
125		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
126		var NotifiSqn3 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
127		
128		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
129		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
130		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
131		var NotifiSqn4 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
132		
133		curStrHandle.CheckData(NotifiSqn3, EnCodeInteger_Ber(parseInt(NotifiSqn2,16) + 1), "<NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> follow this order in an incremental sequence");
134		if (NotifiSqn3 < NotifiSqn2)
135			obj.SubLevelError("NOTIF_SEQ_NO_IN2应当小于NOTIF_SEQ_NO_DI1");
136		
137		curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "<NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow this order in an incremental");		
138		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
139	}catch(e){
140		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
141	}
142	
143	
144	RecoverCard();
145
146}
147
-cas 盲生成TC_eUICC_EnableProfile_Twice_Notifications/Import/TC_eUICC_EnableProfile_Twice_Notifications.js133 行 / 10301 字符 / gb18030入口函数 @L17
1// Author: 卡思Cas智能体
2// Date: 20261004-022948
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_EnableProfile_Twice_Notifications,Test Sequence #01 Nominal: Notifications generation(本 TC 单条 Test Sequence),适用性 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;S2-C1 SW
7//   S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  branch/count
8//   S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  element fields
9//   S2-C3 Verify that <NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> fo branch/count;S7-C1 SW
10//   S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti branch/count
11//   S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti element fields
12//   S7-C3 Verify that <NOTIF_SEQ_NO_IN2> is lower than <NOTIF_SEQ_NO_D branch/count
13//   S7-C4 Verify that <NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow branch/count
14// 本函数由 CaseIR 5.2.6.2.1 编译生成(experiments/5.2.6.2.1-TC_eUICC_EnableProfile_Twice_Notifications-20261004_022948,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
15// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
16// 适用性 M:编译期门,运行时由 harness 环境前置承担。
17function TC_eUICC_EnableProfile_Twice_Notifications_01_merged() {
18    var bind = curBind;
19    // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is installed and Enabled on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
20    // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):No Notification is stored in the eUICC's Pending Notifications List: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
21
22    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
23    var s8 = bind.resetAndAtr();
24    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s8.atr_hex !== "" ? "1" : "0");
25
26    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
27    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
28    var s9 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
29    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s9.resp.length > 0 ? "1" : "0");
30    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s9.sw);
31
32    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
33    var s10 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
34    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s10.sw);
35
36    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
37    var steady11 = bind.runToSteadyState(function () {
38        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
39    });
40    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady11.final.sw);
41
42    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
43    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
44    var s12 = bind.manageChannelOpen("9000");
45    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s12.sw);
46    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s12.chan !== null ? "1" : "0");
47
48    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
49    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
50    var s13 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
51    // 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.
52    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s13.sw);
53
54    // 步骤 1:Install PROFILE_OPERATIONAL2 The default Profile downloading procedure defined in section 2.2.3.1 SHALL be used with the following exceptions: #CERT_S_SM_DP2auth_ECDSA SHALL be set in #AUTH_SMDP_MATCH_ID rather than #CERT_S_SM_DPauth_ECDSA #TEST_DP_ADDRESS2 SHALL be set in #AUTH_SMDP_MATCH_ID rather than #TEST_DP_ADDRESS1 #CERT_S_SM_DP2pb_ECDSA SHALL be set in #PREP_DOWNLOAD_NO_CC rather than #CERT_S_SM_DPpb_ECDSA(tc_step)
55    // card-state orchestration declaration (no APDU face): execution is
56    // the batch card_state prep framework's responsibility (4227 ruling B
57    // same-family scope; ensure_profile_state / prep_packager);
58    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
59
60    // 步骤 2:MTD_STORE_DATA(tc_step;REQ: RQ35_001, RQ35_002, RQ55_048_1)
61    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
62    var sdCla2 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
63    var s2 = bind.sendApdu(sdCla2, "E2", "91", "00", "BF2804810204F0", "00", "9000");
64    bind.checkData("S2-C1 SW", "9000", s2.sw);
65    // notification-list 响应面(TC_eUICC_EnableProfile_Twice_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
66    var lw2T = BindEs10xSingleRequest.parseBerTlv(s2.resp);
67    var lw2Ok0 = lw2T.length === 1 && lw2T[0].tag === "BF28";
68    var lw2_br = lw2Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw2T[0].value) : [];
69    var lw2_brtag = lw2_br.length === 1 ? lw2_br[0].tag : "";
70    var lw2_els = lw2_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw2_br[0].value) : [];
71    bind.checkData("S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  branch/count", "1", (lw2_brtag === "A0" && lw2_els.length === 2) ? "1" : "0");
72    var lw2_fok = lw2_brtag === "A0" && lw2_els.length > 0;
73    for (var lw2i = 0; lw2i < lw2_els.length; lw2i++) {
74        if (lw2_els[lw2i].tag !== "BF2F") { lw2_fok = false; continue; }
75        var lw2M = BindEs10xSingleRequest.parseBerTlv(lw2_els[lw2i].value);
76        var lw2_f = {};
77        for (var lw2j = 0; lw2j < lw2M.length; lw2j++) {
78            if (lw2_f[lw2M[lw2j].tag] === undefined) { lw2_f[lw2M[lw2j].tag] = lw2M[lw2j].value; }
79        }
80        if (lw2_f["80"] === undefined) { lw2_fok = false; }
81        if (lw2_f["81"] !== "0780") { lw2_fok = false; }  // operation
82        if (lw2_f["5A"] !== "989209013254769810F9") { lw2_fok = false; }  // iccid
83    }
84    bind.checkData("S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  element fields", "1", lw2_fok ? "1" : "0");
85    bind.checkData("S2-C3 Verify that <NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> fo branch/count", "1", (lw2_brtag === "A0") ? "1" : "0");
86
87    // 步骤 3:Remove the ProfileInstallationResult and OtherSignedNotification for Install(tc_step)
88    // card-state orchestration declaration (no APDU face): execution is
89    // the batch card_state prep framework's responsibility (4227 ruling B
90    // same-family scope; ensure_profile_state / prep_packager);
91    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
92
93    // 步骤 4:Enable PROFILE_OPERATIONAL2(tc_step)
94    // card-state orchestration declaration (no APDU face): execution is
95    // the batch card_state prep framework's responsibility (4227 ruling B
96    // same-family scope; ensure_profile_state / prep_packager);
97    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
98
99    // 步骤 5:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
100    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
101    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
102
103    // 步骤 6:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
104    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
105    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
106
107    // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ35_001, RQ35_002, RQ35_007, RQ57_135_5)
108    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
109    var sdCla7 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
110    var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF2804810204F0", "00", "9000");
111    bind.checkData("S7-C1 SW", "9000", s7.sw);
112    // notification-list 响应面(TC_eUICC_EnableProfile_Twice_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
113    var lw7T = BindEs10xSingleRequest.parseBerTlv(s7.resp);
114    var lw7Ok0 = lw7T.length === 1 && lw7T[0].tag === "BF28";
115    var lw7_br = lw7Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw7T[0].value) : [];
116    var lw7_brtag = lw7_br.length === 1 ? lw7_br[0].tag : "";
117    var lw7_els = lw7_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw7_br[0].value) : [];
118    bind.checkData("S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti branch/count", "1", (lw7_brtag === "A0" && lw7_els.length === 2) ? "1" : "0");
119    var lw7_fok = lw7_brtag === "A0" && lw7_els.length > 0;
120    for (var lw7i = 0; lw7i < lw7_els.length; lw7i++) {
121        if (lw7_els[lw7i].tag !== "BF2F") { lw7_fok = false; continue; }
122        var lw7M = BindEs10xSingleRequest.parseBerTlv(lw7_els[lw7i].value);
123        var lw7_f = {};
124        for (var lw7j = 0; lw7j < lw7M.length; lw7j++) {
125            if (lw7_f[lw7M[lw7j].tag] === undefined) { lw7_f[lw7M[lw7j].tag] = lw7M[lw7j].value; }
126        }
127        if (lw7_f["80"] === undefined) { lw7_fok = false; }
128    }
129    bind.checkData("S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti element fields", "1", lw7_fok ? "1" : "0");
130    bind.checkData("S7-C3 Verify that <NOTIF_SEQ_NO_IN2> is lower than <NOTIF_SEQ_NO_D branch/count", "1", (lw7_brtag === "A0") ? "1" : "0");
131    bind.checkData("S7-C4 Verify that <NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow branch/count", "1", (lw7_brtag === "A0") ? "1" : "0");
132}
133

完整 unified diff

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

展开 diff(278 行)
--- -man
+++ -cas
@@ -1,147 +1,133 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_EnableProfile_Twice_Notifications_01_Nominal_Notifications_generation (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20261004-022948
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_EnableProfile_Twice_Notifications,Test Sequence #01 Nominal: Notifications generation(本 TC 单条 Test Sequence),适用性 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;S2-C1 SW
+//   S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  branch/count
+//   S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  element fields
+//   S2-C3 Verify that <NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> fo branch/count;S7-C1 SW
+//   S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti branch/count
+//   S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti element fields
+//   S7-C3 Verify that <NOTIF_SEQ_NO_IN2> is lower than <NOTIF_SEQ_NO_D branch/count
+//   S7-C4 Verify that <NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow branch/count
+// 本函数由 CaseIR 5.2.6.2.1 编译生成(experiments/5.2.6.2.1-TC_eUICC_EnableProfile_Twice_Notifications-20261004_022948,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_EnableProfile_Twice_Notifications_01_merged() {
+    var bind = curBind;
+    // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is installed and Enabled on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+    // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):No Notification is stored in the eUICC's Pending Notifications List: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
 
-function TC_eUICC_EnableProfile_Twice_Notifications_01_Nominal_Notifications_generation()
-{
-	
-	if(!Card_Have_ECC_Cert)
-		return;
-	
-	initial_condition_PROFILE_OPERATIONAL1_is_Enabled();
-	var ISD_P_Test01 = curProfile_ISD_P_AID;
-	
-	initial_condition_Remove_All_Notification();
-	
-	tracenamestr = "验证当前存在一个enabled状态的profile时,激活另外一个profile,会默认产生一个disabled通知和一个enable通知";
-	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++,"下载PROFILE_OPERATIONAL2;");
-	pkId_CI_ForVerification = pkId_CI_ECDSA_NIST;
-	pkId_CI_ForSigning = pkId_CI_ECDSA_NIST;
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s8 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s8.atr_hex !== "" ? "1" : "0");
 
-	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL2_DATA);
-	Profile_load_procedure.ICCID = ICCID_OP_PROF2;
-	Profile_load_procedure.ES10b_GetEUICCInfo1();
-	
-	Profile_load_procedure.ES10b_GetEUICCChallenge();
-	
-	Profile_load_procedure.serverAddress = TEST_DP_ADDRESS2;
-	Profile_load_procedure.DPauthInforObj.D_key = SK_S_SM_DP2auth_ECDSA_NIST;
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DP2auth_ECDSA_NIST;	
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	Profile_load_procedure.DPbpInforObj.D_key = SK_S_SM_DP2pb_ECDSA_NIST;
-	Profile_load_procedure.DPbpInforObj.Cert = CERT_S_SM_DP2pb_ECDSA_NIST;
-	Profile_load_procedure.DPbpInforObj.registeredID = DP2pb_prime256v1_OID;
-	Profile_load_procedure.ES10b_PrepareDownload();
-	
-	Profile_load_procedure.ES10b_GetEID();
-	
-	Profile_load_procedure.serviceProviderName = SP_NAME2;
-	Profile_load_procedure.profileName = NAME_OP_PROF2;
-	Profile_load_procedure.iconType = "01";
-	Profile_load_procedure.icon = ICON_OP_PROF2;
-	Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
-	Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS2;
-	Profile_load_procedure.profileClass = "02";
-	Profile_load_procedure.mccMnc = MCC_MNC2;
-	Profile_load_procedure.ES10b_LoadBoundProfilePackage();
-	
-	var ISD_P_Test02 = curProfile_ISD_P_AID;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotificationRequest,获取所有通知;");
-	Profile_load_procedure.ES10b_ListNotification("04F0");
-	
-	try
-	{
-		curStrHandle.CheckData("0780",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
-		var NotifiSqn1 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-		
-		curStrHandle.CheckData("0780",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
-		var NotifiSqn2 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-		
-		curStrHandle.CheckData(NotifiSqn2, EnCodeInteger_Ber(parseInt(NotifiSqn1,16) + 1), "<NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> follow this order in an incremental sequence");
-		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
-	}catch(e){
-		obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
-	}
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除通知;");
-	var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
-	
-	for(var i=0;i<NotificationLen;i++)
-	{
-		var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
-	    Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
-	    var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
-	    curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
-	}
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活PROFILE_OPERATIONAL2;");
-	var enableProRequest = new EnableProfileRequest();
-	enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF2);
-	enableProRequest.refreshFlag = BooleanValue_BerCode_False;
-	enableProRequest.GenHexData();
-	var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
-	
-	curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
-	
-	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命令,执行ListNotificationRequest,获取所有通知;");
-	Profile_load_procedure.ES10b_ListNotification("04F0");
-	
-	try
-	{
-		curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
-		var NotifiSqn3 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-		
-		curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
-		curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
-		curStrHandle.CheckData(ICCID_OP_PROF2, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
-		var NotifiSqn4 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-		
-		curStrHandle.CheckData(NotifiSqn3, EnCodeInteger_Ber(parseInt(NotifiSqn2,16) + 1), "<NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> follow this order in an incremental sequence");
-		if (NotifiSqn3 < NotifiSqn2)
-			obj.SubLevelError("NOTIF_SEQ_NO_IN2应当小于NOTIF_SEQ_NO_DI1");
-		
-		curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "<NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow this order in an incremental");		
-		Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
-	}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 s9 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s9.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s9.sw);
 
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s10 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s10.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady11 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady11.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 s12 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s12.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s12.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 s13 = 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", s13.sw);
+
+    // 步骤 1:Install PROFILE_OPERATIONAL2 The default Profile downloading procedure defined in section 2.2.3.1 SHALL be used with the following exceptions: #CERT_S_SM_DP2auth_ECDSA SHALL be set in #AUTH_SMDP_MATCH_ID rather than #CERT_S_SM_DPauth_ECDSA #TEST_DP_ADDRESS2 SHALL be set in #AUTH_SMDP_MATCH_ID rather than #TEST_DP_ADDRESS1 #CERT_S_SM_DP2pb_ECDSA SHALL be set in #PREP_DOWNLOAD_NO_CC rather than #CERT_S_SM_DPpb_ECDSA(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 2:MTD_STORE_DATA(tc_step;REQ: RQ35_001, RQ35_002, RQ55_048_1)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla2 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
+    var s2 = bind.sendApdu(sdCla2, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+    bind.checkData("S2-C1 SW", "9000", s2.sw);
+    // notification-list 响应面(TC_eUICC_EnableProfile_Twice_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+    var lw2T = BindEs10xSingleRequest.parseBerTlv(s2.resp);
+    var lw2Ok0 = lw2T.length === 1 && lw2T[0].tag === "BF28";
+    var lw2_br = lw2Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw2T[0].value) : [];
+    var lw2_brtag = lw2_br.length === 1 ? lw2_br[0].tag : "";
+    var lw2_els = lw2_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw2_br[0].value) : [];
+    bind.checkData("S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  branch/count", "1", (lw2_brtag === "A0" && lw2_els.length === 2) ? "1" : "0");
+    var lw2_fok = lw2_brtag === "A0" && lw2_els.length > 0;
+    for (var lw2i = 0; lw2i < lw2_els.length; lw2i++) {
+        if (lw2_els[lw2i].tag !== "BF2F") { lw2_fok = false; continue; }
+        var lw2M = BindEs10xSingleRequest.parseBerTlv(lw2_els[lw2i].value);
+        var lw2_f = {};
+        for (var lw2j = 0; lw2j < lw2M.length; lw2j++) {
+            if (lw2_f[lw2M[lw2j].tag] === undefined) { lw2_f[lw2M[lw2j].tag] = lw2M[lw2j].value; }
+        }
+        if (lw2_f["80"] === undefined) { lw2_fok = false; }
+        if (lw2_f["81"] !== "0780") { lw2_fok = false; }  // operation
+        if (lw2_f["5A"] !== "989209013254769810F9") { lw2_fok = false; }  // iccid
+    }
+    bind.checkData("S2-C2 响应 = #R_LIST_NOTIF_IN2_PIR_IN2:ListNotificationResponse ::=  element fields", "1", lw2_fok ? "1" : "0");
+    bind.checkData("S2-C3 Verify that <NOTIF_SEQ_NO_IN2_PIR> and <NOTIF_SEQ_NO_IN2> fo branch/count", "1", (lw2_brtag === "A0") ? "1" : "0");
+
+    // 步骤 3:Remove the ProfileInstallationResult and OtherSignedNotification for Install(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 4:Enable PROFILE_OPERATIONAL2(tc_step)
+    // card-state orchestration declaration (no APDU face): execution is
+    // the batch card_state prep framework's responsibility (4227 ruling B
+    // same-family scope; ensure_profile_state / prep_packager);
+    // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
+
+    // 步骤 5:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 6:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
+    // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+    // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+    // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ35_001, RQ35_002, RQ35_007, RQ57_135_5)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla7 = s12.chan !== null ? (s12.chan <= 3 ? 128 + s12.chan : 188 + s12.chan).toString(16).toUpperCase() : null;
+    var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+    bind.checkData("S7-C1 SW", "9000", s7.sw);
+    // notification-list 响应面(TC_eUICC_EnableProfile_Twice_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+    var lw7T = BindEs10xSingleRequest.parseBerTlv(s7.resp);
+    var lw7Ok0 = lw7T.length === 1 && lw7T[0].tag === "BF28";
+    var lw7_br = lw7Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw7T[0].value) : [];
+    var lw7_brtag = lw7_br.length === 1 ? lw7_br[0].tag : "";
+    var lw7_els = lw7_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw7_br[0].value) : [];
+    bind.checkData("S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti branch/count", "1", (lw7_brtag === "A0" && lw7_els.length === 2) ? "1" : "0");
+    var lw7_fok = lw7_brtag === "A0" && lw7_els.length > 0;
+    for (var lw7i = 0; lw7i < lw7_els.length; lw7i++) {
+        if (lw7_els[lw7i].tag !== "BF2F") { lw7_fok = false; continue; }
+        var lw7M = BindEs10xSingleRequest.parseBerTlv(lw7_els[lw7i].value);
+        var lw7_f = {};
+        for (var lw7j = 0; lw7j < lw7M.length; lw7j++) {
+            if (lw7_f[lw7M[lw7j].tag] === undefined) { lw7_f[lw7M[lw7j].tag] = lw7M[lw7j].value; }
+        }
+        if (lw7_f["80"] === undefined) { lw7_fok = false; }
+    }
+    bind.checkData("S7-C2 响应 = #R_LIST_NOTIF_DI1_EN2:ListNotificationResponse ::= noti element fields", "1", lw7_fok ? "1" : "0");
+    bind.checkData("S7-C3 Verify that <NOTIF_SEQ_NO_IN2> is lower than <NOTIF_SEQ_NO_D branch/count", "1", (lw7_brtag === "A0") ? "1" : "0");
+    bind.checkData("S7-C4 Verify that <NOTIF_SEQ_NO_DI1> and <NOTIF_SEQ_NO_EN2> follow branch/count", "1", (lw7_brtag === "A0") ? "1" : "0");
 }