源码对照:5.2.8.2.1
启用/停用/删除通知 / TC_eUICC_Enable_Disable_Delete_Notifications
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
191 行 / 11351 字符 / gb18030
-cas 入口
TC_eUICC_Enable_Disable_Delete_Notifications/Import/TC_eUICC_Enable_Disable_Delete_Notifications.js
178 行 / 12737 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js191 行 / 11351 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications (extracted verbatim)
2
3function TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications()
4{
5
6 tracenamestr = "验证当执行本地Profile管理操作(即激活、禁用和删除Profile)时,eUICC会生成所有在notificationConfigurationInfo中已配置的通知。";
7 curDis.TraceStart(sno++,tracenamestr);
8
9 curDis.TestStepStart("eUICC卡片初始化;");
10 Ini_powerOn_eUICC_LPAe_not_activate();
11
12 curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
13 TS_MANAGE_CHANNEL_OPEN();
14
15 curLogicChannel = 1;
16
17 curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
18 TS_SELECT("Select ISD",ISD_R_AID,"9000");
19
20 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
21 var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
22 Profile_load_procedure.ICCID = ICCID_OP_PROF1;
23 Profile_load_procedure.ES10b_GetEUICCInfo1();
24
25 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
26 Profile_load_procedure.ES10b_GetEUICCChallenge();
27
28 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
29 Profile_load_procedure.ES10b_AuthenticateServer();
30
31 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
32 Profile_load_procedure.ES10b_PrepareDownload();
33
34 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
35 Profile_load_procedure.ES10b_GetEID();
36
37 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
38 Profile_load_procedure.serviceProviderName = SP_NAME1; //SP Name 1
39 Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
40 Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
41 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
42 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
43 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS1;
44 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1] = new NotificationConfigurationInformation();
45 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].profileManagementOperation = "04F0";
46 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].notificationAddress = TEST_DP_ADDRESS2;
47 Profile_load_procedure.ES10b_LoadBoundProfilePackage();
48
49 var ISD_P_Test01 = curProfile_ISD_P_AID;
50
51 initial_condition_Remove_All_Notification();
52
53 tracenamestr = "profile中的notificationConfigurationInfo全部配置时,执行Enable, Disable and Delete Profile操作,检查通知";
54 curDis.TraceStart(sno++,tracenamestr);
55
56 curLogicChannel = 0;
57 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
58 Ini_powerOn_eUICC_LPAe_not_activate();
59
60 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
61 TS_MANAGE_CHANNEL_OPEN();
62
63 curLogicChannel = 1;
64
65 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
66 TS_SELECT("Select ISD",ISD_R_AID,"9000");
67
68 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活profile1;");
69 var enableProRequest = new EnableProfileRequest();
70 enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
71 enableProRequest.refreshFlag = BooleanValue_BerCode_False;
72 enableProRequest.GenHexData();
73 var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
74
75 curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
76
77 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
78 Profile_load_procedure.ES10b_ListNotification("04F0");
79
80 try
81 {
82 curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
83 curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
84 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
85 var NotifiSqn1 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
86
87 curStrHandle.CheckData("0640",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
88 curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
89 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
90 var NotifiSqn2 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
91
92 curStrHandle.CheckData(NotifiSqn2, EnCodeInteger_Ber(parseInt(NotifiSqn1,16) + 1), "<NOTIF_SEQ_NO_EN> and <NOTIF_SEQ_NO_EN2> follow this order in an incremental");
93
94 Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
95 }catch(e){
96 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
97 }
98
99
100 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
101 var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
102
103 for(var i=0;i<NotificationLen;i++)
104 {
105 var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
106 Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
107 var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
108 curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
109 }
110
111 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行DisableProfileRequest,失效profile1;");
112 var disableProRequest = new DisableProfileRequest();
113 disableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
114 disableProRequest.refreshFlag = BooleanValue_BerCode_False;
115 disableProRequest.GenHexData();
116 var respData = LPAd_Transport_data_to_eUICC(disableProRequest.hexData);
117
118 curStrHandle.CheckData("BF3203800100", respData, "DisableProfileResponse");
119
120 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
121 Profile_load_procedure.ES10b_ListNotification("04F0");
122
123 try
124 {
125 curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
126 curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
127 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
128 var NotifiSqn3 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
129
130 curStrHandle.CheckData("0520",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
131 curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
132 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
133 var NotifiSqn4 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
134
135 curStrHandle.CheckData(NotifiSqn3, EnCodeInteger_Ber(parseInt(NotifiSqn2,16) + 1), "通知计数器加1");
136 if (NotifiSqn3 < NotifiSqn2)
137 obj.SubLevelError("通知计数器的值应该越来越大");
138 curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "通知计数器加1");
139
140 Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
141 }catch(e){
142 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
143 }
144
145 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行RemoveNotificationFromList,删除所有的通知;");
146 var NotificationLen = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement.length;
147
148 for(var i=0;i<NotificationLen;i++)
149 {
150 var parameter = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[i].seqNumber;
151 Profile_load_procedure.ES10b_RemoveNotificationFromList(parameter);
152 var deleteNotificationStatus=Profile_load_procedure.notificationSentResponse.deleteNotificationStatus;
153 curStrHandle.CheckData("00", deleteNotificationStatus, "deleteNotificationStatus");
154 }
155
156 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行DeleteProfileRequest;");
157 var deleProfileRequest = new DeleteProfileRequest();
158 deleProfileRequest.iccid = ICCID_OP_PROF1;
159 deleProfileRequest.GenHexData();
160 var respData = LPAd_Transport_data_to_eUICC(deleProfileRequest.hexData);
161
162 curStrHandle.CheckData("BF3303800100", respData, "DeleteProfileResponse");
163
164 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
165 Profile_load_procedure.ES10b_ListNotification("04F0");
166
167 try
168 {
169 curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].profileManagementOperation,"profileManagementOperation");
170 curStrHandle.CheckData(TEST_DP_ADDRESS1,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].notificationAddress,"notificationAddress");
171 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].iccid, "ICCID");
172 var NotifiSqn5 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
173
174 curStrHandle.CheckData("0410",Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].profileManagementOperation,"profileManagementOperation");
175 curStrHandle.CheckData(TEST_DP_ADDRESS2,Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].notificationAddress,"notificationAddress");
176 curStrHandle.CheckData(ICCID_OP_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
177 var NotifiSqn6 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
178
179 curStrHandle.CheckData(NotifiSqn5, EnCodeInteger_Ber(parseInt(NotifiSqn4,16) + 1), "通知计数器加1");
180 if (NotifiSqn5 < NotifiSqn4)
181 obj.SubLevelError("通知计数器的值应该越来越大");
182 curStrHandle.CheckData(NotifiSqn6, EnCodeInteger_Ber(parseInt(NotifiSqn5,16) + 1), "通知计数器加1");
183
184 Update_Max_seqNumber_Of_Notification(Profile_load_procedure.listNotificationResponse);
185 }catch(e){
186 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
187 }
188
189 RecoverCard();
190}
191
-cas 盲生成TC_eUICC_Enable_Disable_Delete_Notifications/Import/TC_eUICC_Enable_Disable_Delete_Notifications.js178 行 / 12737 字符 / gb18030入口函数 @L16
1// Author: 卡思Cas智能体
2// Date: 20261004-022948
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_Enable_Disable_Delete_Notifications,Test Sequence #01 Nominal: Multiple Enable, Disable and Delete Notifications(本 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;S4-C1 SW
7// S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count
8// S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields;S9-C1 SW
9// S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count
10// S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields;S12-C1 SW
11// S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count
12// S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields
13// 本函数由 CaseIR 5.2.8.2.1 编译生成(5.2.8.2.1-TC_eUICC_Enable_Disable_Delete_Notifications-20261004_022948,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
14// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
15// 适用性 M:编译期门,运行时由 harness 环境前置承担。
16function TC_eUICC_Enable_Disable_Delete_Notifications_01_merged() {
17 var bind = curBind;
18 // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 with #METADATA_EN_DI_DE_NOTIFS is loaded on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
19 // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
20 // GEN-IC-3 卡态声明(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 s13 = bind.resetAndAtr();
24 bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s13.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 s14 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
29 bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s14.resp.length > 0 ? "1" : "0");
30 bind.checkData("ICH-IC1-K2-C4 SW", "9000", s14.sw);
31
32 // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
33 var s15 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
34 bind.checkData("ICH-IC1-K3-C4 SW", "9000", s15.sw);
35
36 // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
37 var steady16 = bind.runToSteadyState(function () {
38 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
39 });
40 bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady16.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 s17 = bind.manageChannelOpen("9000");
45 bind.checkData("ICH-IC2-K1-C4 SW", "9000", s17.sw);
46 bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s17.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 s18 = 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", s18.sw);
53
54 // 步骤 1:Enable PROFILE_OPERATIONAL1(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:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
61 // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
62 // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
63
64 // 步骤 3:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
65 // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
66 // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
67
68 // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_135_6)
69 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
70 var sdCla4 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
71 var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2804810204F0", "00", "9000");
72 bind.checkData("S4-C1 SW", "9000", s4.sw);
73 // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
74 var lw4T = BindEs10xSingleRequest.parseBerTlv(s4.resp);
75 var lw4Ok0 = lw4T.length === 1 && lw4T[0].tag === "BF28";
76 var lw4_br = lw4Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw4T[0].value) : [];
77 var lw4_brtag = lw4_br.length === 1 ? lw4_br[0].tag : "";
78 var lw4_els = lw4_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw4_br[0].value) : [];
79 bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count", "1", (lw4_brtag === "A0" && lw4_els.length === 2) ? "1" : "0");
80 var lw4_fok = lw4_brtag === "A0" && lw4_els.length > 0;
81 for (var lw4i = 0; lw4i < lw4_els.length; lw4i++) {
82 if (lw4_els[lw4i].tag !== "BF2F") { lw4_fok = false; continue; }
83 var lw4M = BindEs10xSingleRequest.parseBerTlv(lw4_els[lw4i].value);
84 var lw4_f = {};
85 for (var lw4j = 0; lw4j < lw4M.length; lw4j++) {
86 if (lw4_f[lw4M[lw4j].tag] === undefined) { lw4_f[lw4M[lw4j].tag] = lw4M[lw4j].value; }
87 }
88 if (lw4_f["80"] === undefined) { lw4_fok = false; }
89 if (lw4_f["81"] !== "0640") { lw4_fok = false; } // operation
90 if (lw4_f["5A"] !== "989209012143658709F5") { lw4_fok = false; } // iccid
91 }
92 bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields", "1", lw4_fok ? "1" : "0");
93
94 // 步骤 5:Remove all the pending notifications(tc_step)
95 // card-state orchestration declaration (no APDU face): execution is
96 // the batch card_state prep framework's responsibility (4227 ruling B
97 // same-family scope; ensure_profile_state / prep_packager);
98 // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
99
100 // 步骤 6:Disable PROFILE_OPERATIONAL1(tc_step)
101 // card-state orchestration declaration (no APDU face): execution is
102 // the batch card_state prep framework's responsibility (4227 ruling B
103 // same-family scope; ensure_profile_state / prep_packager);
104 // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
105
106 // 步骤 7:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
107 // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
108 // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
109
110 // 步骤 8:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
111 // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
112 // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
113
114 // 步骤 9:MTD_STORE_DATA(tc_step;REQ: RQ57_142_17)
115 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
116 var sdCla9 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
117 var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2804810204F0", "00", "9000");
118 bind.checkData("S9-C1 SW", "9000", s9.sw);
119 // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
120 var lw9T = BindEs10xSingleRequest.parseBerTlv(s9.resp);
121 var lw9Ok0 = lw9T.length === 1 && lw9T[0].tag === "BF28";
122 var lw9_br = lw9Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw9T[0].value) : [];
123 var lw9_brtag = lw9_br.length === 1 ? lw9_br[0].tag : "";
124 var lw9_els = lw9_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw9_br[0].value) : [];
125 bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count", "1", (lw9_brtag === "A0" && lw9_els.length === 2) ? "1" : "0");
126 var lw9_fok = lw9_brtag === "A0" && lw9_els.length > 0;
127 for (var lw9i = 0; lw9i < lw9_els.length; lw9i++) {
128 if (lw9_els[lw9i].tag !== "BF2F") { lw9_fok = false; continue; }
129 var lw9M = BindEs10xSingleRequest.parseBerTlv(lw9_els[lw9i].value);
130 var lw9_f = {};
131 for (var lw9j = 0; lw9j < lw9M.length; lw9j++) {
132 if (lw9_f[lw9M[lw9j].tag] === undefined) { lw9_f[lw9M[lw9j].tag] = lw9M[lw9j].value; }
133 }
134 if (lw9_f["80"] === undefined) { lw9_fok = false; }
135 if (lw9_f["81"] !== "0520") { lw9_fok = false; } // operation
136 if (lw9_f["5A"] !== "989209012143658709F5") { lw9_fok = false; } // iccid
137 }
138 bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields", "1", lw9_fok ? "1" : "0");
139
140 // 步骤 10:Remove all the pending notifications(tc_step)
141 // card-state orchestration declaration (no APDU face): execution is
142 // the batch card_state prep framework's responsibility (4227 ruling B
143 // same-family scope; ensure_profile_state / prep_packager);
144 // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
145
146 // 步骤 11:Delete PROFILE_OPERATIONAL1(tc_step)
147 // card-state orchestration declaration (no APDU face): execution is
148 // the batch card_state prep framework's responsibility (4227 ruling B
149 // same-family scope; ensure_profile_state / prep_packager);
150 // no fabricated bytes emitted here; see CaseIR unresolved/open_items.
151
152 // 步骤 12:MTD_STORE_DATA(tc_step;REQ: RQ57_158_1)
153 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
154 var sdCla12 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
155 var s12 = bind.sendApdu(sdCla12, "E2", "91", "00", "BF2804810204F0", "00", "9000");
156 bind.checkData("S12-C1 SW", "9000", s12.sw);
157 // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
158 var lw12T = BindEs10xSingleRequest.parseBerTlv(s12.resp);
159 var lw12Ok0 = lw12T.length === 1 && lw12T[0].tag === "BF28";
160 var lw12_br = lw12Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw12T[0].value) : [];
161 var lw12_brtag = lw12_br.length === 1 ? lw12_br[0].tag : "";
162 var lw12_els = lw12_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw12_br[0].value) : [];
163 bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count", "1", (lw12_brtag === "A0" && lw12_els.length === 2) ? "1" : "0");
164 var lw12_fok = lw12_brtag === "A0" && lw12_els.length > 0;
165 for (var lw12i = 0; lw12i < lw12_els.length; lw12i++) {
166 if (lw12_els[lw12i].tag !== "BF2F") { lw12_fok = false; continue; }
167 var lw12M = BindEs10xSingleRequest.parseBerTlv(lw12_els[lw12i].value);
168 var lw12_f = {};
169 for (var lw12j = 0; lw12j < lw12M.length; lw12j++) {
170 if (lw12_f[lw12M[lw12j].tag] === undefined) { lw12_f[lw12M[lw12j].tag] = lw12M[lw12j].value; }
171 }
172 if (lw12_f["80"] === undefined) { lw12_fok = false; }
173 if (lw12_f["81"] !== "0410") { lw12_fok = false; } // operation
174 if (lw12_f["5A"] !== "989209012143658709F5") { lw12_fok = false; } // iccid
175 }
176 bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields", "1", lw12_fok ? "1" : "0");
177}
178
完整 unified diff
行级差异:新增 172 行 / 删除 185 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(366 行)
--- -man
+++ -cas
@@ -1,191 +1,178 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20261004-022948
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_Enable_Disable_Delete_Notifications,Test Sequence #01 Nominal: Multiple Enable, Disable and Delete Notifications(本 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;S4-C1 SW
+// S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count
+// S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields;S9-C1 SW
+// S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count
+// S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields;S12-C1 SW
+// S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count
+// S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields
+// 本函数由 CaseIR 5.2.8.2.1 编译生成(5.2.8.2.1-TC_eUICC_Enable_Disable_Delete_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_Enable_Disable_Delete_Notifications_01_merged() {
+ var bind = curBind;
+ // GEN-IC-1 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 with #METADATA_EN_DI_DE_NOTIFS is loaded on the eUICC: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // GEN-IC-2 卡态声明(E 段 General Initial Conditions,编排责任):The PROFILE_OPERATIONAL1 is Disabled: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // GEN-IC-3 卡态声明(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_Enable_Disable_Delete_Notifications_01_Nominal_Multiple_Enable_Disable_and_Delete_Notifications()
-{
-
- tracenamestr = "验证当执行本地Profile管理操作(即激活、禁用和删除Profile)时,eUICC会生成所有在notificationConfigurationInfo中已配置的通知。";
- curDis.TraceStart(sno++,tracenamestr);
+ // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s13 = bind.resetAndAtr();
+ bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s13.atr_hex !== "" ? "1" : "0");
- curDis.TestStepStart("eUICC卡片初始化;");
- Ini_powerOn_eUICC_LPAe_not_activate();
-
- curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
- TS_MANAGE_CHANNEL_OPEN();
-
- curLogicChannel = 1;
-
- curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
- TS_SELECT("Select ISD",ISD_R_AID,"9000");
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
- var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
- Profile_load_procedure.ICCID = ICCID_OP_PROF1;
- Profile_load_procedure.ES10b_GetEUICCInfo1();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
- Profile_load_procedure.ES10b_GetEUICCChallenge();
+ // 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 s14 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s14.resp.length > 0 ? "1" : "0");
+ bind.checkData("ICH-IC1-K2-C4 SW", "9000", s14.sw);
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
- Profile_load_procedure.ES10b_AuthenticateServer();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
- Profile_load_procedure.ES10b_PrepareDownload();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
- Profile_load_procedure.ES10b_GetEID();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
- Profile_load_procedure.serviceProviderName = SP_NAME1; //SP Name 1
- Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
- 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_ADDRESS1;
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1] = new NotificationConfigurationInformation();
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].profileManagementOperation = "04F0";
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[1].notificationAddress = TEST_DP_ADDRESS2;
- Profile_load_procedure.ES10b_LoadBoundProfilePackage();
-
- var ISD_P_Test01 = curProfile_ISD_P_AID;
-
- initial_condition_Remove_All_Notification();
-
- tracenamestr = "profile中的notificationConfigurationInfo全部配置时,执行Enable, Disable and Delete Profile操作,检查通知";
- 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++,"读卡器向卡片发送 StoreData命令,执行EnableProfileRequest,激活profile1;");
- var enableProRequest = new EnableProfileRequest();
- enableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
- enableProRequest.refreshFlag = BooleanValue_BerCode_False;
- enableProRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(enableProRequest.hexData);
-
- curStrHandle.CheckData("BF3103800100", respData, "EnableProfileResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
- Profile_load_procedure.ES10b_ListNotification("04F0");
-
- try
- {
- curStrHandle.CheckData("0640",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 NotifiSqn1 = 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_PROF1, 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_EN> 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);
- }
+ // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s15 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("ICH-IC1-K3-C4 SW", "9000", s15.sw);
-
- 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命令,执行DisableProfileRequest,失效profile1;");
- var disableProRequest = new DisableProfileRequest();
- disableProRequest.profileIdentifier = new ChoiceObj(tagOfProfileIdentifier.iccid,ICCID_OP_PROF1);
- disableProRequest.refreshFlag = BooleanValue_BerCode_False;
- disableProRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(disableProRequest.hexData);
-
- curStrHandle.CheckData("BF3203800100", respData, "DisableProfileResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
- 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("0520",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_PROF1, 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), "通知计数器加1");
- if (NotifiSqn3 < NotifiSqn2)
- obj.SubLevelError("通知计数器的值应该越来越大");
- curStrHandle.CheckData(NotifiSqn4, EnCodeInteger_Ber(parseInt(NotifiSqn3,16) + 1), "通知计数器加1");
-
- 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.TestStepStart("读卡器向卡片发送 StoreData命令,执行DeleteProfileRequest;");
- var deleProfileRequest = new DeleteProfileRequest();
- deleProfileRequest.iccid = ICCID_OP_PROF1;
- deleProfileRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(deleProfileRequest.hexData);
-
- curStrHandle.CheckData("BF3303800100", respData, "DeleteProfileResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行ListNotification,获取所有通知;");
- Profile_load_procedure.ES10b_ListNotification("04F0");
-
- try
- {
- curStrHandle.CheckData("0410",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 NotifiSqn5 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[0].seqNumber;
-
- curStrHandle.CheckData("0410",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_PROF1, Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].iccid, "ICCID");
- var NotifiSqn6 = Profile_load_procedure.listNotificationResponse.notificationMetadataList.arrOfElement[1].seqNumber;
-
- curStrHandle.CheckData(NotifiSqn5, EnCodeInteger_Ber(parseInt(NotifiSqn4,16) + 1), "通知计数器加1");
- if (NotifiSqn5 < NotifiSqn4)
- obj.SubLevelError("通知计数器的值应该越来越大");
- curStrHandle.CheckData(NotifiSqn6, EnCodeInteger_Ber(parseInt(NotifiSqn5,16) + 1), "通知计数器加1");
-
- 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 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady16 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady16.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 s17 = bind.manageChannelOpen("9000");
+ bind.checkData("ICH-IC2-K1-C4 SW", "9000", s17.sw);
+ bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s17.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 s18 = 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", s18.sw);
+
+ // 步骤 1:Enable PROFILE_OPERATIONAL1(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:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
+ // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+ // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+ // 步骤 3:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
+ // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+ // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+ // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_135_6)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla4 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+ var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S4-C1 SW", "9000", s4.sw);
+ // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var lw4T = BindEs10xSingleRequest.parseBerTlv(s4.resp);
+ var lw4Ok0 = lw4T.length === 1 && lw4T[0].tag === "BF28";
+ var lw4_br = lw4Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw4T[0].value) : [];
+ var lw4_brtag = lw4_br.length === 1 ? lw4_br[0].tag : "";
+ var lw4_els = lw4_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw4_br[0].value) : [];
+ bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti branch/count", "1", (lw4_brtag === "A0" && lw4_els.length === 2) ? "1" : "0");
+ var lw4_fok = lw4_brtag === "A0" && lw4_els.length > 0;
+ for (var lw4i = 0; lw4i < lw4_els.length; lw4i++) {
+ if (lw4_els[lw4i].tag !== "BF2F") { lw4_fok = false; continue; }
+ var lw4M = BindEs10xSingleRequest.parseBerTlv(lw4_els[lw4i].value);
+ var lw4_f = {};
+ for (var lw4j = 0; lw4j < lw4M.length; lw4j++) {
+ if (lw4_f[lw4M[lw4j].tag] === undefined) { lw4_f[lw4M[lw4j].tag] = lw4M[lw4j].value; }
+ }
+ if (lw4_f["80"] === undefined) { lw4_fok = false; }
+ if (lw4_f["81"] !== "0640") { lw4_fok = false; } // operation
+ if (lw4_f["5A"] !== "989209012143658709F5") { lw4_fok = false; } // iccid
+ }
+ bind.checkData("S4-C2 响应 = #R_LIST_NOTIF_EN1_EN1:ListNotificationResponse ::= noti element fields", "1", lw4_fok ? "1" : "0");
+
+ // 步骤 5:Remove all the pending notifications(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.
+
+ // 步骤 6:Disable PROFILE_OPERATIONAL1(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.
+
+ // 步骤 7:PROC_EUICC_INITIALIZATION_SEQUENCE(procedure_expansion)
+ // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+ // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+ // 步骤 8:PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR(procedure_expansion)
+ // E 表验证性 PROC(K 过程体缺席):oracle 缺席诚实面——期望=声明面
+ // spec 引用、实际=proc_expansion_absent(如实计错,不伪造通过)。
+
+ // 步骤 9:MTD_STORE_DATA(tc_step;REQ: RQ57_142_17)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla9 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+ var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S9-C1 SW", "9000", s9.sw);
+ // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var lw9T = BindEs10xSingleRequest.parseBerTlv(s9.resp);
+ var lw9Ok0 = lw9T.length === 1 && lw9T[0].tag === "BF28";
+ var lw9_br = lw9Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw9T[0].value) : [];
+ var lw9_brtag = lw9_br.length === 1 ? lw9_br[0].tag : "";
+ var lw9_els = lw9_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw9_br[0].value) : [];
+ bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti branch/count", "1", (lw9_brtag === "A0" && lw9_els.length === 2) ? "1" : "0");
+ var lw9_fok = lw9_brtag === "A0" && lw9_els.length > 0;
+ for (var lw9i = 0; lw9i < lw9_els.length; lw9i++) {
+ if (lw9_els[lw9i].tag !== "BF2F") { lw9_fok = false; continue; }
+ var lw9M = BindEs10xSingleRequest.parseBerTlv(lw9_els[lw9i].value);
+ var lw9_f = {};
+ for (var lw9j = 0; lw9j < lw9M.length; lw9j++) {
+ if (lw9_f[lw9M[lw9j].tag] === undefined) { lw9_f[lw9M[lw9j].tag] = lw9M[lw9j].value; }
+ }
+ if (lw9_f["80"] === undefined) { lw9_fok = false; }
+ if (lw9_f["81"] !== "0520") { lw9_fok = false; } // operation
+ if (lw9_f["5A"] !== "989209012143658709F5") { lw9_fok = false; } // iccid
+ }
+ bind.checkData("S9-C2 响应 = #R_LIST_NOTIF_DI1_DI1:ListNotificationResponse ::= noti element fields", "1", lw9_fok ? "1" : "0");
+
+ // 步骤 10:Remove all the pending notifications(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.
+
+ // 步骤 11:Delete PROFILE_OPERATIONAL1(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.
+
+ // 步骤 12:MTD_STORE_DATA(tc_step;REQ: RQ57_158_1)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla12 = s17.chan !== null ? (s17.chan <= 3 ? 128 + s17.chan : 188 + s17.chan).toString(16).toUpperCase() : null;
+ var s12 = bind.sendApdu(sdCla12, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S12-C1 SW", "9000", s12.sw);
+ // notification-list 响应面(TC_eUICC_Enable_Disable_Delete_Notifications,SGP.22 §5.7.9 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var lw12T = BindEs10xSingleRequest.parseBerTlv(s12.resp);
+ var lw12Ok0 = lw12T.length === 1 && lw12T[0].tag === "BF28";
+ var lw12_br = lw12Ok0 ? BindEs10xSingleRequest.parseBerTlv(lw12T[0].value) : [];
+ var lw12_brtag = lw12_br.length === 1 ? lw12_br[0].tag : "";
+ var lw12_els = lw12_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(lw12_br[0].value) : [];
+ bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti branch/count", "1", (lw12_brtag === "A0" && lw12_els.length === 2) ? "1" : "0");
+ var lw12_fok = lw12_brtag === "A0" && lw12_els.length > 0;
+ for (var lw12i = 0; lw12i < lw12_els.length; lw12i++) {
+ if (lw12_els[lw12i].tag !== "BF2F") { lw12_fok = false; continue; }
+ var lw12M = BindEs10xSingleRequest.parseBerTlv(lw12_els[lw12i].value);
+ var lw12_f = {};
+ for (var lw12j = 0; lw12j < lw12M.length; lw12j++) {
+ if (lw12_f[lw12M[lw12j].tag] === undefined) { lw12_f[lw12M[lw12j].tag] = lw12M[lw12j].value; }
+ }
+ if (lw12_f["80"] === undefined) { lw12_fok = false; }
+ if (lw12_f["81"] !== "0410") { lw12_fok = false; } // operation
+ if (lw12_f["5A"] !== "989209012143658709F5") { lw12_fok = false; } // iccid
+ }
+ bind.checkData("S12-C2 响应 = #R_LIST_NOTIF_DE1_DE1:ListNotificationResponse ::= noti element fields", "1", lw12_fok ? "1" : "0");
}