源码对照: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");
}