源码对照:4.2.24.2.1
ES10c eUICC 存储复位 / TC_eUICC_ES10c.eUICCMemoryReset
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
588 行 / 23852 字符 / gb18030
-cas 入口
TC_eUICC_ES10c_eUICCMemoryReset/Import/TC_eUICC_ES10c_eUICCMemoryReset.js
791 行 / 59167 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js588 行 / 23852 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_eUICCMemoryReset_01_Nominal_Reset_All_Operational_Profiles_without_Enabled_Profile + TC_eUICC_ES10c_eUICCMemoryReset_02_Nominal_Reset_All_Operational_Profiles_with_Enabled_Profile + TC_eUICC_ES10c_eUICCMemoryReset_03_Nominal_Reset_the_Default_SMDP_Address_only + TC_eUICC_ES10c_eUICCMemoryReset_04_Nominal_Reset_All_Operational_Profiles_and_the_Default_SMDP_Address + TC_eUICC_ES10c_eUICCMemoryReset_05_Nominal_eUICCMemoryReset_when_this_Operational_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported + TC_eUICC_ES10c_eUICCMemoryReset_06_Nominal_eUICCMemoryReset_when_this_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported (extracted verbatim)
2
3function TC_eUICC_ES10c_eUICCMemoryReset_01_Nominal_Reset_All_Operational_Profiles_without_Enabled_Profile()
4{
5 initial_condition_Start();
6
7 initial_condition_Install_PROFILE_OPERATIONAL1();
8
9 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
10
11 initial_condition_Install_PROFILE_OPERATIONAL3();
12
13 initial_condition_set_Profile_Nickname("读卡器向卡片发送 StoreData命令,执行SetNickname,profileNickname为NICKNAME3;", ICCID_OP_PROF3, NICKNAME3);
14
15 initial_condition_Remove_All_Notification();
16
17 tracenamestr = "测试目的:没有处于激活状态的profile,重置所有的Operational Profile";
18 curDis.TraceStart(sno++,tracenamestr);
19
20 curLogicChannel = 0;
21 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
22 Ini_powerOn_eUICC_LPAe_not_activate();
23
24 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
25 TS_MANAGE_CHANNEL_OPEN();
26
27 curLogicChannel = 1;
28
29 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
30 TS_SELECT("Select ISD",ISD_R_AID,"9000");
31
32 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GET_EUICC_INFO2,获取卡片的剩余不可变空间大小;");
33 var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
34
35 var euiccInfo2 = new EUICCInfo2();
36 euiccInfo2.checkCardResDataFormat(hexData);
37 var FREE_MEM_OP_PROF_INSTALLED = 0;
38 try
39 {
40 var extCardResourceObj = new ExtendedCardResource();
41 extCardResourceObj.SetHexData(euiccInfo2.extCardResource);
42 FREE_MEM_OP_PROF_INSTALLED = parseInt(extCardResourceObj.FreeNonVolatileMemory, 16);
43 }catch(e){
44 obj.SubLevel(display_rsp_card_data_format_check_fail, level_of_SubLevel.error);
45 }
46
47 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
48 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
49 euiMemoryResetRequest.resetOptions = "0780";
50 euiMemoryResetRequest.GenHexData();
51 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
52 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
53
54 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
55 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
56 curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
57
58
59 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,LIST_NOTIF_ALL;");
60 var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
61 var listNotificationResponse = new ListNotificationResponse();
62 listNotificationResponse.checkCardResDataFormat(resdata);
63
64 Max_seqNumber_Of_Notification ++;
65 var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
66 curStrHandle.CheckData("1", arr1.length.toString(), "Number of Notification");
67
68 if (arr1.length >= 1)
69 {
70 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
71 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
72 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
73 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
74 }
75
76
77 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GET_EUICC_INFO2,获取卡片的剩余不可变空间大小,剩余不可变空间应变大;");
78 var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
79 var euiccInfo2 = new EUICCInfo2();
80 euiccInfo2.checkCardResDataFormat(hexData);
81
82 var FREE_MEMORY_NO_PROFILE = 0;
83 try
84 {
85
86 var extCardResourceObj = new ExtendedCardResource();
87 extCardResourceObj.SetHexData(euiccInfo2.extCardResource);
88 FREE_MEMORY_NO_PROFILE = parseInt(extCardResourceObj.FreeNonVolatileMemory, 16);
89 }catch(e){
90 obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
91 }
92
93 if (FREE_MEMORY_NO_PROFILE > FREE_MEM_OP_PROF_INSTALLED)
94 obj.SubLevel("删除后的卡片剩余不可变空间变大了", 1);
95 else
96 obj.SubLevel("删除后的卡片剩余不可变空间没有变大", 0);
97
98 obj.SubLevel("euiccInfo2.extCardResource.FreeNonVolatileMemory"+euiccInfo2.extCardResource.FreeNonVolatileMemory,1);
99
100 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应没有改变;");
101 var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
102 var resObj = new EuiccConfiguredAddressesResponse();
103 resObj.checkCardResDataFormat(hexData);
104
105 curStrHandle.CheckData(TEST_DP_ADDRESS1, resObj.defaultDpAddress, "defaultDpAddress");
106 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
107
108 RecoverCard();
109}
110
111function TC_eUICC_ES10c_eUICCMemoryReset_02_Nominal_Reset_All_Operational_Profiles_with_Enabled_Profile()
112{
113 initial_condition_Start();
114
115 initial_condition_Install_PROFILE_OPERATIONAL1();
116
117 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
118
119 initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
120
121 initial_condition_Remove_All_Notification();
122
123
124 tracenamestr = "测试目的:有处于激活状态的profile,重置所有的Operational Profile";
125 curDis.TraceStart(sno++,tracenamestr);
126
127 curLogicChannel = 0;
128 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
129 Ini_powerOn_eUICC_LPAe_not_activate();
130
131 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
132 TS_MANAGE_CHANNEL_OPEN();
133
134 curLogicChannel = 1;
135
136 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
137 TS_SELECT("Select ISD",ISD_R_AID,"9000");
138
139 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
140 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
141 euiMemoryResetRequest.resetOptions = "0780";
142 euiMemoryResetRequest.GenHexData();
143 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
144
145 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
146
147 curLogicChannel = 0;
148 curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
149
150 FetchStr = Fetch("","9000","");
151
152 var CmdDetails = GetValueByTag("01",1);
153 var CmdQualifier = CmdDetails.substr(4,2);
154 CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
155
156
157 curLogicChannel = 0;
158 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
159 Ini_powerOn_eUICC_LPAe_not_activate();
160
161 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
162 TS_MANAGE_CHANNEL_OPEN();
163
164 curLogicChannel = 1;
165
166 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
167 TS_SELECT("Select ISD",ISD_R_AID,"9000");
168
169 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,LIST_NOTIF_ALL;");
170
171 var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
172
173 var listNotificationResponse = new ListNotificationResponse();
174
175 listNotificationResponse.checkCardResDataFormat(resdata);
176
177 Max_seqNumber_Of_Notification ++;
178 var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
179 curStrHandle.CheckData("1/2", arr1.length.toString(), "Number of Notification");
180
181 if (arr1.length == 1)
182 {
183 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
184 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
185 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
186 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
187 }
188 else if (arr1.length == 2)
189 {
190 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
191 curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
192 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
193 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
194
195 Max_seqNumber_Of_Notification ++;
196 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
197 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
198 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
199 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
200 }
201
202 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
203
204 var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
205 curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
206
207
208 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
209
210 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
211 curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
212
213
214 RecoverCard();
215}
216
217function TC_eUICC_ES10c_eUICCMemoryReset_03_Nominal_Reset_the_Default_SMDP_Address_only()
218{
219 initial_condition_Start();
220
221 initial_condition_Install_PROFILE_OPERATIONAL1();
222
223 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
224
225 initial_condition_Install_PROFILE_OPERATIONAL3();
226
227 initial_condition_set_Profile_Nickname("读卡器向卡片发送 StoreData命令,执行SetNickname,profileNickname为NICKNAME3;", ICCID_OP_PROF3, NICKNAME3);
228
229 tracenamestr = "测试目的:重置缺省SM-DP+地址";
230 curDis.TraceStart(sno++,tracenamestr);
231
232 curLogicChannel = 0;
233 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
234 Ini_powerOn_eUICC_LPAe_not_activate();
235
236 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
237 TS_MANAGE_CHANNEL_OPEN();
238
239 curLogicChannel = 1;
240
241 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
242 TS_SELECT("Select ISD",ISD_R_AID,"9000");
243
244 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,Reset the Default SM-DP+ Address only;");
245 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
246 euiMemoryResetRequest.resetOptions = "0520";
247 euiMemoryResetRequest.GenHexData();
248 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
249
250 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
251
252 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
253
254 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
255 var resObj = new ProfileInfoListResponse();
256 resObj.checkCardResDataFormat(respData);
257
258 var num = resObj.profileInfoListOk.arrOfElement.length;
259
260 curStrHandle.CheckData("2", num.toString(), "ProfileInfo Num");
261
262 if (num == 2)
263 {
264 check_PROFILE_INFO1_DISABLED(resObj.profileInfoListOk.arrOfElement[0]);
265 check_PROFILE_INFO3(resObj.profileInfoListOk.arrOfElement[1]);
266 }
267
268 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应不存在;");
269
270 var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
271 var resObj = new EuiccConfiguredAddressesResponse();
272 resObj.checkCardResDataFormat(hexData);
273
274 curStrHandle.CheckData("不存在", resObj.defaultDpAddress, "defaultDpAddress");
275 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
276
277 RecoverCard();
278}
279
280function TC_eUICC_ES10c_eUICCMemoryReset_04_Nominal_Reset_All_Operational_Profiles_and_the_Default_SMDP_Address()
281{
282 initial_condition_Start();
283
284 initial_condition_Install_PROFILE_OPERATIONAL1();
285
286 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
287
288 initial_condition_Install_PROFILE_OPERATIONAL3();
289
290 tracenamestr = "测试目的:重置所有的Operational Profile和缺省SM-DP+地址";
291 curDis.TraceStart(sno++,tracenamestr);
292
293 curLogicChannel = 0;
294 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
295 Ini_powerOn_eUICC_LPAe_not_activate();
296
297 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
298 TS_MANAGE_CHANNEL_OPEN();
299
300 curLogicChannel = 1;
301
302 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
303 TS_SELECT("Select ISD",ISD_R_AID,"9000");
304
305 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,Reset All Operational Profiles and the Default SM-DP+ Address;");
306 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
307 euiMemoryResetRequest.resetOptions = "05A0";
308 euiMemoryResetRequest.GenHexData();
309 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
310
311 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
312
313 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
314
315 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
316 curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
317
318
319 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应不存在;");
320
321 var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
322 var resObj = new EuiccConfiguredAddressesResponse();
323 resObj.checkCardResDataFormat(hexData);
324
325 curStrHandle.CheckData("不存在", resObj.defaultDpAddress, "defaultDpAddress");
326 curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
327
328 RecoverCard();
329}
330
331function TC_eUICC_ES10c_eUICCMemoryReset_05_Nominal_eUICCMemoryReset_when_this_Operational_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported()
332{
333
334 //测试入口条件
335 if(!check_Applicability_of_tests_RSP_SGP23_test("C033"))
336 return;
337
338 initial_condition_Start();
339
340 initial_condition_Install_PROFILE_OPERATIONAL1();
341
342 initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
343
344 initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
345
346 initial_condition_Remove_All_Notification();
347
348
349 tracenamestr = "测试目的:eUICC不支持catBusy,有一个处于激活状态的Operational Profile,主动式会话进行中时,执行eUICCMemoryReset";
350 curDis.TraceStart(sno++,tracenamestr);
351
352 curLogicChannel = 0;
353 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
354 Ini_powerOn_eUICC_LPAe_not_activate();
355
356 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
357 TS_MANAGE_CHANNEL_OPEN();
358
359 curLogicChannel = 1;
360
361 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
362 TS_SELECT("Select ISD",ISD_R_AID,"9000");
363
364 curLogicChannel = 0;
365 var sSendType = SendTypeByOTA.SMS;
366 KIC = MNO_SCP80_ENC_KEY;
367 KID = MNO_SCP80_AUTH_KEY;
368 KIK = MNO_SCP80_DATA_ENC_KEY;
369 curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
370 sAPDU = "80F28002024F0000";
371 SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
372 HaveReEntry91XX = true;
373 var ss = obj.GetState();
374 ReEntry91XXLength = ss.substr(2,2);
375
376 curLogicChannel = 1;
377
378 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
379 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
380 euiMemoryResetRequest.resetOptions = "0780";
381 euiMemoryResetRequest.GenHexData();
382 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
383
384 curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
385
386 curLogicChannel = 0;
387 curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
388
389 FetchStr = Fetch("","9000","");
390
391 var CmdDetails = GetValueByTag("01",1);
392 var CmdQualifier = CmdDetails.substr(4,2);
393 CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
394
395
396 curLogicChannel = 0;
397 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
398 Ini_powerOn_eUICC_LPAe_not_activate();
399
400 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
401 TS_MANAGE_CHANNEL_OPEN();
402
403 curLogicChannel = 1;
404
405 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
406 TS_SELECT("Select ISD",ISD_R_AID,"9000");
407
408 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,LIST_NOTIF_ALL;");
409
410 var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
411
412 var listNotificationResponse = new ListNotificationResponse();
413
414 listNotificationResponse.checkCardResDataFormat(resdata);
415
416 Max_seqNumber_Of_Notification ++;
417 var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
418 curStrHandle.CheckData("0", arr1.length.toString(), "Number of Notification");
419
420 if (arr1.length == 1)
421 {
422 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
423 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
424 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
425 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
426 }
427 else if (arr1.length == 2)
428 {
429 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
430 curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
431 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
432 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
433
434 Max_seqNumber_Of_Notification ++;
435 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
436 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
437 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
438 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
439 }
440
441 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
442
443 var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
444 curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
445
446
447 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
448
449 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
450 curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
451
452
453 RecoverCard();
454}
455
456function TC_eUICC_ES10c_eUICCMemoryReset_06_Nominal_eUICCMemoryReset_when_this_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported()
457{
458
459 //测试入口条件
460 if(!check_Applicability_of_tests_RSP_SGP23_test("C033"))
461 return;
462
463 initial_condition_PROFILE_OPERATIONAL1_is_Enabled();
464 var ISD_P_Test01 = curProfile_ISD_P_AID;
465
466 initial_condition_PROFILE_OPERATIONAL3_is_Disabled();
467 var ISD_P_Test03 = curProfile_ISD_P_AID;
468
469 initial_condition_Remove_All_Notification();
470
471 tracenamestr = "测试目的:eUICC不支持catBusy,有处于激活状态的Profile,主动式会话进行中(未给终端响应)时,执行eUICCMemoryReset";
472 curDis.TraceStart(sno++,tracenamestr);
473
474 curLogicChannel = 0;
475 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
476 Ini_powerOn_eUICC_LPAe_not_activate();
477
478 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
479 TS_MANAGE_CHANNEL_OPEN();
480
481 curLogicChannel = 1;
482
483 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
484 TS_SELECT("Select ISD",ISD_R_AID,"9000");
485
486 curLogicChannel = 0;
487 curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
488
489 var sSendType = SendTypeByOTA.SMS;
490 KIC = MNO_SCP80_ENC_KEY;
491 KID = MNO_SCP80_AUTH_KEY;
492 KIK = MNO_SCP80_DATA_ENC_KEY;
493 sAPDU = "80F28002024F00";
494 SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
495 HaveReEntry91XX = true;
496 var ss = obj.GetState();
497 ReEntry91XXLength = ss.substr(2,2);
498
499 curDis.TestStepStart2(stno++,"SCP80,发送Fetch命令,检查por");
500 curLogicChannel = 0;
501 CardSendMessageToServer(sSendType,1,"0161XX","00");
502
503 curLogicChannel = 1;
504
505 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
506 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
507 euiMemoryResetRequest.resetOptions = "0780";
508 euiMemoryResetRequest.GenHexData();
509 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
510 curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
511
512 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
513 var euiMemoryResetRequest = new EuiccMemoryResetRequest();
514 euiMemoryResetRequest.resetOptions = "0780";
515 euiMemoryResetRequest.GenHexData();
516 var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
517 curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
518
519 curLogicChannel = 0;
520 curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
521
522 FetchStr = Fetch("","9000","");
523
524 var CmdDetails = GetValueByTag("01",1);
525 var CmdQualifier = CmdDetails.substr(4,2);
526 CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
527
528
529 curLogicChannel = 0;
530 curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
531 Ini_powerOn_eUICC_LPAe_not_activate();
532
533 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
534 TS_MANAGE_CHANNEL_OPEN();
535
536 curLogicChannel = 1;
537
538 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
539 TS_SELECT("Select ISD",ISD_R_AID,"9000");
540
541 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,LIST_NOTIF_ALL;");
542
543 var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
544
545 var listNotificationResponse = new ListNotificationResponse();
546
547 listNotificationResponse.checkCardResDataFormat(resdata);
548
549 Max_seqNumber_Of_Notification ++;
550 var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
551 curStrHandle.CheckData("0", arr1.length.toString(), "Number of Notification");
552
553 if (arr1.length == 1)
554 {
555 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
556 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
557 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
558 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
559 }
560 else if (arr1.length == 2)
561 {
562 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
563 curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
564 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
565 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
566
567 Max_seqNumber_Of_Notification ++;
568 curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
569 curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
570 curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
571 curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
572 }
573
574 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
575
576 var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
577 curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
578
579
580 curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
581
582 var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
583 curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
584
585
586 RecoverCard();
587}
588
-cas 盲生成TC_eUICC_ES10c_eUICCMemoryReset/Import/TC_eUICC_ES10c_eUICCMemoryReset.js791 行 / 59167 字符 / gb18030入口函数 @L45
1// Author: 卡思Cas智能体
2// Date: 20261004-143902
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.eUICCMemoryReset,Test Sequence #01-#06 (Nominal: Reset OP without/with Enabled Profile / Reset Default SM-DP+ Address only / Reset All / catBusy not supported ×2),适用性 M (序列#01-#04) / C039 (序列#05、#06)。
4// Test points: IC1-IC1-K1-C1 ATR_present;IC1-IC1-K2-C2 FCP_Template;IC1-IC1-K2-C4 SW
5// IC1-IC1-K3-C4 SW;IC1-IC1-K4-C4 final SW;IC2-IC2-K1-C4 SW;IC2-IC2-K1-C3 CHANNEL_NUMBER extracted
6// IC2-IC2-K2-C4 SW;S3-C1 free non-volatile memory tag 82 present;S4-C1 SW;S4-C2 resetResult ok
7// S5-C1 SW;S5-C2 profileInfoListOk empty;S6-C1 SW
8// S6-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1
9// S7-C1 free non-volatile memory lower than step 7;S7-C2 free non-volatile memory tag 82 present
10// S8-C1 SW;S8-C2 defaultDpAddress testsmdpplus1.example.com;S8-C2 rootDsAddress present
11// IC9-IC1-K1-C1 ATR_present;IC9-IC1-K2-C2 FCP_Template;IC9-IC1-K2-C4 SW;IC9-IC1-K3-C4 SW
12// IC9-IC1-K4-C4 final SW;IC10-IC2-K1-C4 SW;IC10-IC2-K1-C3 CHANNEL_NUMBER extracted
13// IC10-IC2-K2-C4 SW;S11-C1 SW1 91;S11-C2 resetResult ok;S12-C1 proactive command envelope
14// IC13-IC1-K1-C1 ATR_present;IC13-IC1-K2-C2 FCP_Template;IC13-IC1-K2-C4 SW;IC13-IC1-K3-C4 SW
15// IC13-IC1-K4-C4 final SW;IC13-IC2-K1-C4 SW;IC13-IC2-K1-C3 CHANNEL_NUMBER extracted
16// IC13-IC2-K2-C4 SW;S14-C1 SW;S14-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1
17// S15-C1 SW;S15-C2 PPRS_ALLOWED field-value oracle;S16-C1 SW;S16-C2 profileInfoListOk empty
18// IC17-IC1-K1-C1 ATR_present;IC17-IC1-K2-C2 FCP_Template;IC17-IC1-K2-C4 SW;IC17-IC1-K3-C4 SW
19// IC17-IC1-K4-C4 final SW;IC18-IC2-K1-C4 SW;IC18-IC2-K1-C3 CHANNEL_NUMBER extracted
20// IC18-IC2-K2-C4 SW;S19-C1 SW;S19-C2 resetResult in {nothingToDelete, ok};S20-C1 SW
21// S20-C2 contains PROFILE_INFO1_DISABLED;S20-C2 contains PROFILE_INFO3;S21-C1 SW
22// S21-C2 defaultDpAddress absent;S21-C2 rootDsAddress testrootsmds.example.com
23// IC22-IC1-K1-C1 ATR_present;IC22-IC1-K2-C2 FCP_Template;IC22-IC1-K2-C4 SW;IC22-IC1-K3-C4 SW
24// IC22-IC1-K4-C4 final SW;IC23-IC2-K1-C4 SW;IC23-IC2-K1-C3 CHANNEL_NUMBER extracted
25// IC23-IC2-K2-C4 SW;S24-C1 SW;S24-C2 resetResult ok;S25-C1 SW;S25-C2 profileInfoListOk empty
26// S26-C1 SW;S26-C2 defaultDpAddress absent;IC27-IC1-K1-C1 ATR_present;IC27-IC1-K2-C2 FCP_Template
27// IC27-IC1-K2-C4 SW;IC27-IC1-K3-C4 SW;IC27-IC1-K4-C4 final SW;IC28-IC2-K1-C4 SW
28// IC28-IC2-K1-C3 CHANNEL_NUMBER extracted;IC28-IC2-K2-C4 SW;S29-C1 SW1 91;S31-C1 SW1 91
29// S31-C2 resetResult ok;S32-C1 proactive command envelope;IC33-IC1-K1-C1 ATR_present
30// IC33-IC1-K2-C2 FCP_Template;IC33-IC1-K2-C4 SW;IC33-IC1-K3-C4 SW;IC33-IC1-K4-C4 final SW
31// IC33-IC2-K1-C4 SW;IC33-IC2-K1-C3 CHANNEL_NUMBER extracted;IC33-IC2-K2-C4 SW;S34-C1 SW
32// S34-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1;S35-C1 SW
33// S35-C2 PPRS_ALLOWED field-value oracle;S36-C1 SW;S36-C2 profileInfoListOk empty
34// IC37-IC1-K1-C1 ATR_present;IC37-IC1-K2-C2 FCP_Template;IC37-IC1-K2-C4 SW;IC37-IC1-K3-C4 SW
35// IC37-IC1-K4-C4 final SW;IC38-IC2-K1-C4 SW;IC38-IC2-K1-C3 CHANNEL_NUMBER extracted
36// IC38-IC2-K2-C4 SW;S39-C1 SW1 91;S41-C1 SW;S41-C2 resetResult ok;S42-C1 SW1 91
37// S43-C1 proactive command envelope;IC44-IC1-K1-C1 ATR_present;IC44-IC1-K2-C2 FCP_Template
38// IC44-IC1-K2-C4 SW;IC44-IC1-K3-C4 SW;IC44-IC1-K4-C4 final SW;IC44-IC2-K1-C4 SW
39// IC44-IC2-K1-C3 CHANNEL_NUMBER extracted;IC44-IC2-K2-C4 SW;S45-C1 SW
40// S45-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1;S46-C1 SW
41// S46-C2 PPRS_ALLOWED field-value oracle;S47-C1 SW;S47-C2 profileInfoListOk empty
42// 本函数由 CaseIR 4.2.24.2.1 编译生成(fullwave-blindgen-live-70-W1-laneA5,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
43// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
44// 适用性 M (序列#01-#04) / C039 (序列#05、#06):编译期门,运行时由 harness 环境前置承担。
45function TC_eUICC_ES10c_eUICCMemoryReset_01_06_merged() {
46 var bind = curBind;
47 // GIC-1 卡态编排:PROFILE_OPERATIONAL1 已安装: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
48 // GIC-2 Default SM-DP+ Address #TEST_DP_ADDRESS1 已设置到 ISD-R(testsmdpplus1.example.com,F_annexA_constants): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
49 // S1/S3/S4-IC PROF1 Disabled;PROFILE_OPERATIONAL3 已安装且 Disabled(#01/#03 另要求 Nickname=#NICKNAME3);#01 另要求 Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
50 // S2/S5-IC PROF1 Enabled;Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
51 // S6-IC PROF1 Enabled;PROF3 已安装且 Disabled;Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
52
53 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
54 var s48 = bind.resetAndAtr();
55 bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s48.atr_hex !== "" ? "1" : "0");
56
57 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
58 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
59 var s49 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
60 bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s49.resp.length > 0 ? "1" : "0");
61 bind.checkData("IC1-IC1-K2-C4 SW", "9000", s49.sw);
62
63 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
64 var s50 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
65 bind.checkData("IC1-IC1-K3-C4 SW", "9000", s50.sw);
66
67 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
68 var steady51 = bind.runToSteadyState(function () {
69 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
70 });
71 bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady51.final.sw);
72
73 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
74 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
75 var s52 = bind.manageChannelOpen("9000");
76 bind.checkData("IC2-IC2-K1-C4 SW", "9000", s52.sw);
77 bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s52.chan !== null ? "1" : "0");
78
79 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
80 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
81 var s53 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
82 // 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.
83 bind.checkData("IC2-IC2-K2-C4 SW", "9000", s53.sw);
84
85 // 步骤 3:MTD_STORE_DATA(tc_step)
86 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
87 var sdCla3 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
88 var s3 = bind.sendApdu(sdCla3, "E2", "91", "00", "BF2200", "00", "9000");
89 // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
90 var gw3 = BindGecaProc.parseGecaResponse(s3.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
91 var ext3 = BindEs10xSingleRequest.parseBerTlv(gw3.fields["84"] || "");
92 var freeVal3 = null; for (var fti3 = 0; fti3 < ext3.length; fti3++) { if (ext3[fti3].tag === "82") { freeVal3 = ext3[fti3].value; } }
93 bind.checkData("S3-C1 free non-volatile memory tag 82 present", "1", freeVal3 !== null ? "1" : "0");
94
95 // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_169, RQ57_170, RQ33_010)
96 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
97 var sdCla4 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
98 var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF340482020780", "00", "9000");
99 bind.checkData("S4-C1 SW", "9000", s4.sw);
100 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
101 var pw4 = BindEs10xProcProfile.walkChoiceList(s4.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
102 var r2w4 = BindGecaProc.parseGecaResponse(s4.resp, {outer: "BF34", required: ["02"]});
103 bind.checkData("S4-C2 resetResult ok", "00", (r2w4.ok && r2w4.fields["02"] === "00") ? "00" : (r2w4.fields["02"] || "absent"));
104
105 // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
106 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
107 var sdCla5 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
108 var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2D00", "00", "9000");
109 bind.checkData("S5-C1 SW", "9000", s5.sw);
110 var r2p5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
111 bind.checkData("S5-C2 profileInfoListOk empty", "1", (r2p5.branch_tag === "A0" && r2p5.elements.length === 0) ? "1" : "0");
112
113 // 步骤 6:MTD_STORE_DATA(tc_step;REQ: RQ57_071, RQ57_071_1, RQ57_071_2, RQ57_072, RQ57_072_1, RQ57_072_2, RQ57_074, RQ57_167_1)
114 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
115 var sdCla6 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
116 var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2804810204F0", "00", "9000");
117 bind.checkData("S6-C1 SW", "9000", s6.sw);
118 // Inline ASCII->hex helper (UTF8String expected values; values enter as
119 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
120 function __asciiHex(text) {
121 var out = "";
122 for (var i = 0; i < text.length; i++) {
123 var c = text.charCodeAt(i).toString(16).toUpperCase();
124 out += (c.length === 1 ? "0" + c : c);
125 }
126 return out;
127 }
128 var r2n6T = BindEs10xSingleRequest.parseBerTlv(s6.resp);
129 var r2n6Ok0 = r2n6T.length === 1 && r2n6T[0].tag === "BF28";
130 var r2n6B = r2n6Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n6T[0].value) : [];
131 var r2n6_brtag = r2n6B.length === 1 ? r2n6B[0].tag : "";
132 var r2n6_els = r2n6_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n6B[0].value) : [];
133 var r2n6Has = false;
134 for (var r2n6i = 0; r2n6i < r2n6_els.length; r2n6i++) {
135 if (r2n6_els[r2n6i].tag !== "BF2F") { continue; }
136 var r2n6F = {};
137 var r2n6M = BindEs10xSingleRequest.parseBerTlv(r2n6_els[r2n6i].value);
138 for (var r2n6j = 0; r2n6j < r2n6M.length; r2n6j++) { r2n6F[r2n6M[r2n6j].tag] = r2n6M[r2n6j].value; }
139 if (r2n6F["5A"] === "989209012143658709F5" && r2n6F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n6Has = true; break; }
140 }
141 bind.checkData("S6-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n6Has ? "1" : "0");
142
143 // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ31_027, RQ31_028, RQ57_051, RQ57_052, RQ57_054, RQ24_020)
144 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
145 var sdCla7 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
146 var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF2200", "00", "9000");
147 // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
148 var gw7 = BindGecaProc.parseGecaResponse(s7.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
149 bind.checkData("S7-C1 free non-volatile memory lower than step 7", "1", (freeVal3 !== null && freeVal3 !== undefined && freeVal7 !== null && freeVal7 !== undefined && parseInt(freeVal3, 16) < parseInt(freeVal7, 16)) ? "1" : "0");
150 var ext7 = BindEs10xSingleRequest.parseBerTlv(gw7.fields["84"] || "");
151 var freeVal7 = null; for (var fti7 = 0; fti7 < ext7.length; fti7++) { if (ext7[fti7].tag === "82") { freeVal7 = ext7[fti7].value; } }
152 bind.checkData("S7-C2 free non-volatile memory tag 82 present", "1", freeVal7 !== null ? "1" : "0");
153
154 // 步骤 8:MTD_STORE_DATA(tc_step;REQ: RQ33_009)
155 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
156 var sdCla8 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
157 var s8 = bind.sendApdu(sdCla8, "E2", "91", "00", "BF3C00", "00", "9000");
158 bind.checkData("S8-C1 SW", "9000", s8.sw);
159 // Inline ASCII->hex helper (UTF8String expected values; values enter as
160 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
161 function __asciiHex(text) {
162 var out = "";
163 for (var i = 0; i < text.length; i++) {
164 var c = text.charCodeAt(i).toString(16).toUpperCase();
165 out += (c.length === 1 ? "0" + c : c);
166 }
167 return out;
168 }
169 var r2w8 = BindGecaProc.parseGecaResponse(s8.resp, {outer: "BF3C", required: []});
170 var r2c8 = r2w8.children;
171 var r2c08 = 0;
172 for (var r2ci8 = 0; r2ci8 < r2c8.length; r2ci8++) {
173 if (r2c8[r2ci8].tag === "80" || r2c8[r2ci8].tag === "81") { r2c08++; }
174 }
175 var r2v8 = __asciiHex("testsmdpplus1.example.com");
176 bind.checkData("S8-C2 defaultDpAddress testsmdpplus1.example.com", r2v8, (r2c08 >= 2 ? r2c8[0].value : "absent"));
177 bind.checkData("S8-C2 rootDsAddress present", "1", (r2c08 >= 1 ? "1" : "0"));
178
179 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
180 var s54 = bind.resetAndAtr();
181 bind.checkData("IC9-IC1-K1-C1 ATR_present", "1", s54.atr_hex !== "" ? "1" : "0");
182
183 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
184 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
185 var s55 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
186 bind.checkData("IC9-IC1-K2-C2 FCP_Template", "1", s55.resp.length > 0 ? "1" : "0");
187 bind.checkData("IC9-IC1-K2-C4 SW", "9000", s55.sw);
188
189 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
190 var s56 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
191 bind.checkData("IC9-IC1-K3-C4 SW", "9000", s56.sw);
192
193 // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
194 var steady57 = bind.runToSteadyState(function () {
195 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
196 });
197 bind.checkData("IC9-IC1-K4-C4 final SW", "9000", steady57.final.sw);
198
199 // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
200 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
201 var s58 = bind.manageChannelOpen("9000");
202 bind.checkData("IC10-IC2-K1-C4 SW", "9000", s58.sw);
203 bind.checkData("IC10-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s58.chan !== null ? "1" : "0");
204
205 // IC ref inline @E 步骤 10(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
206 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
207 var s59 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
208 // 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.
209 bind.checkData("IC10-IC2-K2-C4 SW", "9000", s59.sw);
210
211 // 步骤 11:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_169, RQ57_170, RQ33_010)
212 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
213 var sdCla11 = s58.chan !== null ? (s58.chan <= 3 ? 128 + s58.chan : 188 + s58.chan).toString(16).toUpperCase() : null;
214 var s11 = bind.sendApdu(sdCla11, "E2", "91", "00", "BF340482020780", "00", "9000");
215 bind.checkData("S11-C1 SW1 91", "91", s11.sw.substring(0, 2));
216 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
217 var pw11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
218 var r2w11 = BindGecaProc.parseGecaResponse(s11.resp, {outer: "BF34", required: ["02"]});
219 bind.checkData("S11-C2 resetResult ok", "00", (r2w11.ok && r2w11.fields["02"] === "00") ? "00" : (r2w11.fields["02"] || "absent"));
220
221 // 步骤 12:FETCH 'XX'(序列#02 步2)(tc_step;REQ: RQ57_168)
222 // FETCH header literals follow the golden wire evidence 8012 (same
223 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
224 // gives mechanism only). Le = pending length from the last 91XX
225 // (chain rule, binding-internal state).
226 var s12 = bind.fetchPending("80", "12", "00", "00", null);
227 bind.checkData("S12-C1 proactive command envelope", "1", (s12.resp.length >= 4 && s12.resp.substring(0, 2) === "D0") ? "1" : "0");
228 // S12-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
229 // S12:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
230 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
231 var s12tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
232
233 // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
234 var s60 = bind.resetAndAtr();
235 bind.checkData("IC13-IC1-K1-C1 ATR_present", "1", s60.atr_hex !== "" ? "1" : "0");
236
237 // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
238 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
239 var s61 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
240 bind.checkData("IC13-IC1-K2-C2 FCP_Template", "1", s61.resp.length > 0 ? "1" : "0");
241 bind.checkData("IC13-IC1-K2-C4 SW", "9000", s61.sw);
242
243 // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
244 var s62 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
245 bind.checkData("IC13-IC1-K3-C4 SW", "9000", s62.sw);
246
247 // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
248 var steady63 = bind.runToSteadyState(function () {
249 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
250 });
251 bind.checkData("IC13-IC1-K4-C4 final SW", "9000", steady63.final.sw);
252
253 // IC ref inline @E 步骤 13(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
254 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
255 var s64 = bind.manageChannelOpen("9000");
256 bind.checkData("IC13-IC2-K1-C4 SW", "9000", s64.sw);
257 bind.checkData("IC13-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s64.chan !== null ? "1" : "0");
258
259 // IC ref inline @E 步骤 13(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
260 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
261 var s65 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
262 // 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.
263 bind.checkData("IC13-IC2-K2-C4 SW", "9000", s65.sw);
264
265 // 步骤 14:MTD_STORE_DATA(tc_step;REQ: RQ57_071, RQ57_071_1, RQ57_071_2, RQ57_072, RQ57_072_1, RQ57_072_2, RQ57_074, RQ57_167_1, RQ35_006)
266 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
267 var sdCla14 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
268 var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF2804810204F0", "00", "9000");
269 bind.checkData("S14-C1 SW", "9000", s14.sw);
270 // Inline ASCII->hex helper (UTF8String expected values; values enter as
271 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
272 function __asciiHex(text) {
273 var out = "";
274 for (var i = 0; i < text.length; i++) {
275 var c = text.charCodeAt(i).toString(16).toUpperCase();
276 out += (c.length === 1 ? "0" + c : c);
277 }
278 return out;
279 }
280 var r2n14T = BindEs10xSingleRequest.parseBerTlv(s14.resp);
281 var r2n14Ok0 = r2n14T.length === 1 && r2n14T[0].tag === "BF28";
282 var r2n14B = r2n14Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n14T[0].value) : [];
283 var r2n14_brtag = r2n14B.length === 1 ? r2n14B[0].tag : "";
284 var r2n14_els = r2n14_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n14B[0].value) : [];
285 var r2n14Has = false;
286 for (var r2n14i = 0; r2n14i < r2n14_els.length; r2n14i++) {
287 if (r2n14_els[r2n14i].tag !== "BF2F") { continue; }
288 var r2n14F = {};
289 var r2n14M = BindEs10xSingleRequest.parseBerTlv(r2n14_els[r2n14i].value);
290 for (var r2n14j = 0; r2n14j < r2n14M.length; r2n14j++) { r2n14F[r2n14M[r2n14j].tag] = r2n14M[r2n14j].value; }
291 if (r2n14F["5A"] === "989209012143658709F5" && r2n14F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n14Has = true; break; }
292 }
293 bind.checkData("S14-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n14Has ? "1" : "0");
294
295 // 步骤 15:MTD_STORE_DATA(tc_step;REQ: RQ29_005, RQ57_179, RQ57_180, RQ57_181, RQ57_182, RQ57_184)
296 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
297 var sdCla15 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
298 var s15 = bind.sendApdu(sdCla15, "E2", "91", "00", "BF4300", "00", "9000");
299 bind.checkData("S15-C1 SW", "9000", s15.sw);
300 // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
301 var rgw15 = BindGecaProc.parseGecaResponse(s15.resp, {outer: "BF43", required: [], optional: []});
302 var rrat15 = (rgw15.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw15.children[0].value) : [];
303 // S15-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
304 // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
305 bind.checkData("S15-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
306
307 // 步骤 16:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
308 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
309 var sdCla16 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
310 var s16 = bind.sendApdu(sdCla16, "E2", "91", "00", "BF2D00", "00", "9000");
311 bind.checkData("S16-C1 SW", "9000", s16.sw);
312 var r2p16 = BindEs10xProcProfile.walkChoiceList(s16.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
313 bind.checkData("S16-C2 profileInfoListOk empty", "1", (r2p16.branch_tag === "A0" && r2p16.elements.length === 0) ? "1" : "0");
314
315 // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
316 var s66 = bind.resetAndAtr();
317 bind.checkData("IC17-IC1-K1-C1 ATR_present", "1", s66.atr_hex !== "" ? "1" : "0");
318
319 // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
320 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
321 var s67 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
322 bind.checkData("IC17-IC1-K2-C2 FCP_Template", "1", s67.resp.length > 0 ? "1" : "0");
323 bind.checkData("IC17-IC1-K2-C4 SW", "9000", s67.sw);
324
325 // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
326 var s68 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
327 bind.checkData("IC17-IC1-K3-C4 SW", "9000", s68.sw);
328
329 // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
330 var steady69 = bind.runToSteadyState(function () {
331 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
332 });
333 bind.checkData("IC17-IC1-K4-C4 final SW", "9000", steady69.final.sw);
334
335 // IC ref inline @E 步骤 18(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
336 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
337 var s70 = bind.manageChannelOpen("9000");
338 bind.checkData("IC18-IC2-K1-C4 SW", "9000", s70.sw);
339 bind.checkData("IC18-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s70.chan !== null ? "1" : "0");
340
341 // IC ref inline @E 步骤 18(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
342 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
343 var s71 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
344 // 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.
345 bind.checkData("IC18-IC2-K2-C4 SW", "9000", s71.sw);
346
347 // 步骤 19:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_167, RQ57_169, RQ57_170, RQ33_010)
348 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
349 var sdCla19 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
350 var s19 = bind.sendApdu(sdCla19, "E2", "91", "00", "BF340482020520", "00", "9000");
351 bind.checkData("S19-C1 SW", "9000", s19.sw);
352 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
353 var pw19 = BindEs10xProcProfile.walkChoiceList(s19.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
354 var r2w19 = BindGecaProc.parseGecaResponse(s19.resp, {outer: "BF34", required: ["02"]});
355 var r2w19Set = ["01", "00"];
356 var r2w19Hit = false;
357 for (var r2w19I = 0; r2w19.ok && r2w19I < r2w19Set.length; r2w19I++) { if (r2w19Set[r2w19I] === r2w19.fields["02"]) { r2w19Hit = true; } }
358 bind.checkData("S19-C2 resetResult in {nothingToDelete, ok}", "1", (r2w19.ok && r2w19Hit) ? "1" : "0");
359
360 // 步骤 20:MTD_STORE_DATA(tc_step)
361 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
362 var sdCla20 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
363 var s20 = bind.sendApdu(sdCla20, "E2", "91", "00", "BF2D00", "00", "9000");
364 bind.checkData("S20-C1 SW", "9000", s20.sw);
365 var r2p20 = BindEs10xProcProfile.walkChoiceList(s20.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
366 var r2has20_0 = false;
367 for (var r2i20_0 = 0; r2i20_0 < r2p20.elements.length; r2i20_0++) {
368 var f = r2p20.elements[r2i20_0].fields;
369 if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has20_0 = true; break; }
370 }
371 bind.checkData("S20-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p20.branch_tag === "A0" && r2has20_0) ? "1" : "0");
372 var r2has20_1 = false;
373 for (var r2i20_1 = 0; r2i20_1 < r2p20.elements.length; r2i20_1++) {
374 var f = r2p20.elements[r2i20_1].fields;
375 if (f["5A"] === "989209014365870921F5" && f["9F70"] === "00") { r2has20_1 = true; break; }
376 }
377 bind.checkData("S20-C2 contains PROFILE_INFO3", "1", (r2p20.branch_tag === "A0" && r2has20_1) ? "1" : "0");
378
379 // 步骤 21:MTD_STORE_DATA(tc_step;REQ: RQ33_008)
380 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
381 var sdCla21 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
382 var s21 = bind.sendApdu(sdCla21, "E2", "91", "00", "BF3C00", "00", "9000");
383 bind.checkData("S21-C1 SW", "9000", s21.sw);
384 // Inline ASCII->hex helper (UTF8String expected values; values enter as
385 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
386 function __asciiHex(text) {
387 var out = "";
388 for (var i = 0; i < text.length; i++) {
389 var c = text.charCodeAt(i).toString(16).toUpperCase();
390 out += (c.length === 1 ? "0" + c : c);
391 }
392 return out;
393 }
394 var r2w21 = BindGecaProc.parseGecaResponse(s21.resp, {outer: "BF3C", required: []});
395 var r2c21 = r2w21.children;
396 var r2c021 = 0;
397 for (var r2ci21 = 0; r2ci21 < r2c21.length; r2ci21++) {
398 if (r2c21[r2ci21].tag === "80" || r2c21[r2ci21].tag === "81") { r2c021++; }
399 }
400 bind.checkData("S21-C2 defaultDpAddress absent", "absent", (r2c021 <= 1 ? "absent" : "present:" + r2c21[0].value));
401 var r2v21 = __asciiHex("testrootsmds.example.com");
402 bind.checkData("S21-C2 rootDsAddress testrootsmds.example.com", r2v21, (r2c021 >= 1 ? r2c21[r2c21.length - 1].value : "absent"));
403
404 // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
405 var s72 = bind.resetAndAtr();
406 bind.checkData("IC22-IC1-K1-C1 ATR_present", "1", s72.atr_hex !== "" ? "1" : "0");
407
408 // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
409 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
410 var s73 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
411 bind.checkData("IC22-IC1-K2-C2 FCP_Template", "1", s73.resp.length > 0 ? "1" : "0");
412 bind.checkData("IC22-IC1-K2-C4 SW", "9000", s73.sw);
413
414 // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
415 var s74 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
416 bind.checkData("IC22-IC1-K3-C4 SW", "9000", s74.sw);
417
418 // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
419 var steady75 = bind.runToSteadyState(function () {
420 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
421 });
422 bind.checkData("IC22-IC1-K4-C4 final SW", "9000", steady75.final.sw);
423
424 // IC ref inline @E 步骤 23(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
425 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
426 var s76 = bind.manageChannelOpen("9000");
427 bind.checkData("IC23-IC2-K1-C4 SW", "9000", s76.sw);
428 bind.checkData("IC23-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s76.chan !== null ? "1" : "0");
429
430 // IC ref inline @E 步骤 23(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
431 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
432 var s77 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
433 // 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.
434 bind.checkData("IC23-IC2-K2-C4 SW", "9000", s77.sw);
435
436 // 步骤 24:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_167, RQ57_169, RQ57_170, RQ33_010)
437 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
438 var sdCla24 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
439 var s24 = bind.sendApdu(sdCla24, "E2", "91", "00", "BF3404820205A0", "00", "9000");
440 bind.checkData("S24-C1 SW", "9000", s24.sw);
441 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
442 var pw24 = BindEs10xProcProfile.walkChoiceList(s24.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
443 var r2w24 = BindGecaProc.parseGecaResponse(s24.resp, {outer: "BF34", required: ["02"]});
444 bind.checkData("S24-C2 resetResult ok", "00", (r2w24.ok && r2w24.fields["02"] === "00") ? "00" : (r2w24.fields["02"] || "absent"));
445
446 // 步骤 25:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
447 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
448 var sdCla25 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
449 var s25 = bind.sendApdu(sdCla25, "E2", "91", "00", "BF2D00", "00", "9000");
450 bind.checkData("S25-C1 SW", "9000", s25.sw);
451 var r2p25 = BindEs10xProcProfile.walkChoiceList(s25.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
452 bind.checkData("S25-C2 profileInfoListOk empty", "1", (r2p25.branch_tag === "A0" && r2p25.elements.length === 0) ? "1" : "0");
453
454 // 步骤 26:MTD_STORE_DATA(tc_step;REQ: RQ33_008)
455 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
456 var sdCla26 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
457 var s26 = bind.sendApdu(sdCla26, "E2", "91", "00", "BF3C00", "00", "9000");
458 bind.checkData("S26-C1 SW", "9000", s26.sw);
459 // Inline ASCII->hex helper (UTF8String expected values; values enter as
460 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
461 function __asciiHex(text) {
462 var out = "";
463 for (var i = 0; i < text.length; i++) {
464 var c = text.charCodeAt(i).toString(16).toUpperCase();
465 out += (c.length === 1 ? "0" + c : c);
466 }
467 return out;
468 }
469 var r2w26 = BindGecaProc.parseGecaResponse(s26.resp, {outer: "BF3C", required: []});
470 var r2c26 = r2w26.children;
471 var r2c026 = 0;
472 for (var r2ci26 = 0; r2ci26 < r2c26.length; r2ci26++) {
473 if (r2c26[r2ci26].tag === "80" || r2c26[r2ci26].tag === "81") { r2c026++; }
474 }
475 bind.checkData("S26-C2 defaultDpAddress absent", "absent", (r2c026 <= 1 ? "absent" : "present:" + r2c26[0].value));
476
477 // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
478 var s78 = bind.resetAndAtr();
479 bind.checkData("IC27-IC1-K1-C1 ATR_present", "1", s78.atr_hex !== "" ? "1" : "0");
480
481 // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
482 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
483 var s79 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
484 bind.checkData("IC27-IC1-K2-C2 FCP_Template", "1", s79.resp.length > 0 ? "1" : "0");
485 bind.checkData("IC27-IC1-K2-C4 SW", "9000", s79.sw);
486
487 // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
488 var s80 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
489 bind.checkData("IC27-IC1-K3-C4 SW", "9000", s80.sw);
490
491 // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
492 var steady81 = bind.runToSteadyState(function () {
493 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
494 });
495 bind.checkData("IC27-IC1-K4-C4 final SW", "9000", steady81.final.sw);
496
497 // IC ref inline @E 步骤 28(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
498 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
499 var s82 = bind.manageChannelOpen("9000");
500 bind.checkData("IC28-IC2-K1-C4 SW", "9000", s82.sw);
501 bind.checkData("IC28-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s82.chan !== null ? "1" : "0");
502
503 // IC ref inline @E 步骤 28(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
504 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
505 var s83 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
506 // 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.
507 bind.checkData("IC28-IC2-K2-C4 SW", "9000", s83.sw);
508
509 // 步骤 29:IC3: MTD_SEND_SMS_PP(tc_step)
510 // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
511 // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
512 // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
513 var s29 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
514 bind.checkData("S29-C1 SW1 91", "91", s29.sw.substring(0, 2));
515
516 // 步骤 30:IC4: Do not send FETCH command(序列#05:保持 proactive session 挂起)(tc_step)
517 // FETCH header literals follow the golden wire evidence 8012 (same
518 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
519 // gives mechanism only). Le = pending length from the last 91XX
520 // (chain rule, binding-internal state).
521 var s30 = bind.fetchPending("80", "12", "00", "00", null);
522 // S30:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
523 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
524 var s30tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
525
526 // 步骤 31:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
527 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
528 var sdCla31 = s82.chan !== null ? (s82.chan <= 3 ? 128 + s82.chan : 188 + s82.chan).toString(16).toUpperCase() : null;
529 var s31 = bind.sendApdu(sdCla31, "E2", "91", "00", "BF340482020780", "00", "9000");
530 bind.checkData("S31-C1 SW1 91", "91", s31.sw.substring(0, 2));
531 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
532 var pw31 = BindEs10xProcProfile.walkChoiceList(s31.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
533 var r2w31 = BindGecaProc.parseGecaResponse(s31.resp, {outer: "BF34", required: ["02"]});
534 bind.checkData("S31-C2 resetResult ok", "00", (r2w31.ok && r2w31.fields["02"] === "00") ? "00" : (r2w31.fields["02"] || "absent"));
535
536 // 步骤 32:FETCH 'YY'(序列#05 步2)(tc_step)
537 // FETCH header literals follow the golden wire evidence 8012 (same
538 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
539 // gives mechanism only). Le = pending length from the last 91XX
540 // (chain rule, binding-internal state).
541 var s32 = bind.fetchPending("80", "12", "00", "00", null);
542 bind.checkData("S32-C1 proactive command envelope", "1", (s32.resp.length >= 4 && s32.resp.substring(0, 2) === "D0") ? "1" : "0");
543 // S32-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
544 // S32:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
545 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
546 var s32tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
547
548 // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
549 var s84 = bind.resetAndAtr();
550 bind.checkData("IC33-IC1-K1-C1 ATR_present", "1", s84.atr_hex !== "" ? "1" : "0");
551
552 // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
553 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
554 var s85 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
555 bind.checkData("IC33-IC1-K2-C2 FCP_Template", "1", s85.resp.length > 0 ? "1" : "0");
556 bind.checkData("IC33-IC1-K2-C4 SW", "9000", s85.sw);
557
558 // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
559 var s86 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
560 bind.checkData("IC33-IC1-K3-C4 SW", "9000", s86.sw);
561
562 // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
563 var steady87 = bind.runToSteadyState(function () {
564 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
565 });
566 bind.checkData("IC33-IC1-K4-C4 final SW", "9000", steady87.final.sw);
567
568 // IC ref inline @E 步骤 33(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
569 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
570 var s88 = bind.manageChannelOpen("9000");
571 bind.checkData("IC33-IC2-K1-C4 SW", "9000", s88.sw);
572 bind.checkData("IC33-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s88.chan !== null ? "1" : "0");
573
574 // IC ref inline @E 步骤 33(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
575 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
576 var s89 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
577 // 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.
578 bind.checkData("IC33-IC2-K2-C4 SW", "9000", s89.sw);
579
580 // 步骤 34:MTD_STORE_DATA(tc_step)
581 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
582 var sdCla34 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
583 var s34 = bind.sendApdu(sdCla34, "E2", "91", "00", "BF2804810204F0", "00", "9000");
584 bind.checkData("S34-C1 SW", "9000", s34.sw);
585 // Inline ASCII->hex helper (UTF8String expected values; values enter as
586 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
587 function __asciiHex(text) {
588 var out = "";
589 for (var i = 0; i < text.length; i++) {
590 var c = text.charCodeAt(i).toString(16).toUpperCase();
591 out += (c.length === 1 ? "0" + c : c);
592 }
593 return out;
594 }
595 var r2n34T = BindEs10xSingleRequest.parseBerTlv(s34.resp);
596 var r2n34Ok0 = r2n34T.length === 1 && r2n34T[0].tag === "BF28";
597 var r2n34B = r2n34Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n34T[0].value) : [];
598 var r2n34_brtag = r2n34B.length === 1 ? r2n34B[0].tag : "";
599 var r2n34_els = r2n34_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n34B[0].value) : [];
600 var r2n34Has = false;
601 for (var r2n34i = 0; r2n34i < r2n34_els.length; r2n34i++) {
602 if (r2n34_els[r2n34i].tag !== "BF2F") { continue; }
603 var r2n34F = {};
604 var r2n34M = BindEs10xSingleRequest.parseBerTlv(r2n34_els[r2n34i].value);
605 for (var r2n34j = 0; r2n34j < r2n34M.length; r2n34j++) { r2n34F[r2n34M[r2n34j].tag] = r2n34M[r2n34j].value; }
606 if (r2n34F["5A"] === "989209012143658709F5" && r2n34F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n34Has = true; break; }
607 }
608 bind.checkData("S34-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n34Has ? "1" : "0");
609
610 // 步骤 35:MTD_STORE_DATA(tc_step)
611 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
612 var sdCla35 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
613 var s35 = bind.sendApdu(sdCla35, "E2", "91", "00", "BF4300", "00", "9000");
614 bind.checkData("S35-C1 SW", "9000", s35.sw);
615 // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
616 var rgw35 = BindGecaProc.parseGecaResponse(s35.resp, {outer: "BF43", required: [], optional: []});
617 var rrat35 = (rgw35.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw35.children[0].value) : [];
618 // S35-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
619 // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
620 bind.checkData("S35-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
621
622 // 步骤 36:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
623 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
624 var sdCla36 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
625 var s36 = bind.sendApdu(sdCla36, "E2", "91", "00", "BF2D00", "00", "9000");
626 bind.checkData("S36-C1 SW", "9000", s36.sw);
627 var r2p36 = BindEs10xProcProfile.walkChoiceList(s36.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
628 bind.checkData("S36-C2 profileInfoListOk empty", "1", (r2p36.branch_tag === "A0" && r2p36.elements.length === 0) ? "1" : "0");
629
630 // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
631 var s90 = bind.resetAndAtr();
632 bind.checkData("IC37-IC1-K1-C1 ATR_present", "1", s90.atr_hex !== "" ? "1" : "0");
633
634 // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
635 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
636 var s91 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
637 bind.checkData("IC37-IC1-K2-C2 FCP_Template", "1", s91.resp.length > 0 ? "1" : "0");
638 bind.checkData("IC37-IC1-K2-C4 SW", "9000", s91.sw);
639
640 // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
641 var s92 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
642 bind.checkData("IC37-IC1-K3-C4 SW", "9000", s92.sw);
643
644 // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
645 var steady93 = bind.runToSteadyState(function () {
646 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
647 });
648 bind.checkData("IC37-IC1-K4-C4 final SW", "9000", steady93.final.sw);
649
650 // IC ref inline @E 步骤 38(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
651 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
652 var s94 = bind.manageChannelOpen("9000");
653 bind.checkData("IC38-IC2-K1-C4 SW", "9000", s94.sw);
654 bind.checkData("IC38-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s94.chan !== null ? "1" : "0");
655
656 // IC ref inline @E 步骤 38(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
657 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
658 var s95 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
659 // 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.
660 bind.checkData("IC38-IC2-K2-C4 SW", "9000", s95.sw);
661
662 // 步骤 39:IC3: MTD_SEND_SMS_PP(tc_step)
663 // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
664 // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
665 // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
666 var s39 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
667 bind.checkData("S39-C1 SW1 91", "91", s39.sw.substring(0, 2));
668
669 // 步骤 40:FETCH 'XX'(序列#06 步1:取回 proactive 命令,POR 待回)(tc_step)
670 // FETCH header literals follow the golden wire evidence 8012 (same
671 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
672 // gives mechanism only). Le = pending length from the last 91XX
673 // (chain rule, binding-internal state).
674 var s40 = bind.fetchPending("80", "12", "00", "00", null);
675 // S40:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
676 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
677 var s40tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
678 // S40-C1: binding:fetch_sms_por_runtime_parse(MTD_CHECK_SMS_POR;H-annexC1) (check_attestation)
679
680 // 步骤 41:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
681 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
682 var sdCla41 = s94.chan !== null ? (s94.chan <= 3 ? 128 + s94.chan : 188 + s94.chan).toString(16).toUpperCase() : null;
683 var s41 = bind.sendApdu(sdCla41, "E2", "91", "00", "BF340482020780", "00", "9000");
684 bind.checkData("S41-C1 SW", "9000", s41.sw);
685 // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
686 var pw41 = BindEs10xProcProfile.walkChoiceList(s41.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
687 var r2w41 = BindGecaProc.parseGecaResponse(s41.resp, {outer: "BF34", required: ["02"]});
688 bind.checkData("S41-C2 resetResult ok", "00", (r2w41.ok && r2w41.fields["02"] === "00") ? "00" : (r2w41.fields["02"] || "absent"));
689
690 // 步骤 42:TERMINAL RESPONSE(序列#06 步3)(tc_step)
691 // TERMINAL RESPONSE data is dynamically built by the binding from the
692 // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
693 // Header literals follow the golden wire evidence 8014.
694 var s42 = bind.terminalResponseForPending("80", "14", "00", "00", null);
695 bind.checkData("S42-C1 SW1 91", "91", s42.sw.substring(0, 2));
696
697 // 步骤 43:FETCH 'YY'(序列#06 步4)(tc_step)
698 // FETCH header literals follow the golden wire evidence 8012 (same
699 // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
700 // gives mechanism only). Le = pending length from the last 91XX
701 // (chain rule, binding-internal state).
702 var s43 = bind.fetchPending("80", "12", "00", "00", null);
703 bind.checkData("S43-C1 proactive command envelope", "1", (s43.resp.length >= 4 && s43.resp.substring(0, 2) === "D0") ? "1" : "0");
704 // S43-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
705 // S43:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
706 // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
707 var s43tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
708
709 // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
710 var s96 = bind.resetAndAtr();
711 bind.checkData("IC44-IC1-K1-C1 ATR_present", "1", s96.atr_hex !== "" ? "1" : "0");
712
713 // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
714 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
715 var s97 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
716 bind.checkData("IC44-IC1-K2-C2 FCP_Template", "1", s97.resp.length > 0 ? "1" : "0");
717 bind.checkData("IC44-IC1-K2-C4 SW", "9000", s97.sw);
718
719 // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
720 var s98 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
721 bind.checkData("IC44-IC1-K3-C4 SW", "9000", s98.sw);
722
723 // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
724 var steady99 = bind.runToSteadyState(function () {
725 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
726 });
727 bind.checkData("IC44-IC1-K4-C4 final SW", "9000", steady99.final.sw);
728
729 // IC ref inline @E 步骤 44(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
730 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
731 var s100 = bind.manageChannelOpen("9000");
732 bind.checkData("IC44-IC2-K1-C4 SW", "9000", s100.sw);
733 bind.checkData("IC44-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s100.chan !== null ? "1" : "0");
734
735 // IC ref inline @E 步骤 44(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
736 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
737 var s101 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
738 // 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.
739 bind.checkData("IC44-IC2-K2-C4 SW", "9000", s101.sw);
740
741 // 步骤 45:MTD_STORE_DATA(tc_step)
742 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
743 var sdCla45 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
744 var s45 = bind.sendApdu(sdCla45, "E2", "91", "00", "BF2804810204F0", "00", "9000");
745 bind.checkData("S45-C1 SW", "9000", s45.sw);
746 // Inline ASCII->hex helper (UTF8String expected values; values enter as
747 // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
748 function __asciiHex(text) {
749 var out = "";
750 for (var i = 0; i < text.length; i++) {
751 var c = text.charCodeAt(i).toString(16).toUpperCase();
752 out += (c.length === 1 ? "0" + c : c);
753 }
754 return out;
755 }
756 var r2n45T = BindEs10xSingleRequest.parseBerTlv(s45.resp);
757 var r2n45Ok0 = r2n45T.length === 1 && r2n45T[0].tag === "BF28";
758 var r2n45B = r2n45Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n45T[0].value) : [];
759 var r2n45_brtag = r2n45B.length === 1 ? r2n45B[0].tag : "";
760 var r2n45_els = r2n45_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n45B[0].value) : [];
761 var r2n45Has = false;
762 for (var r2n45i = 0; r2n45i < r2n45_els.length; r2n45i++) {
763 if (r2n45_els[r2n45i].tag !== "BF2F") { continue; }
764 var r2n45F = {};
765 var r2n45M = BindEs10xSingleRequest.parseBerTlv(r2n45_els[r2n45i].value);
766 for (var r2n45j = 0; r2n45j < r2n45M.length; r2n45j++) { r2n45F[r2n45M[r2n45j].tag] = r2n45M[r2n45j].value; }
767 if (r2n45F["5A"] === "989209012143658709F5" && r2n45F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n45Has = true; break; }
768 }
769 bind.checkData("S45-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n45Has ? "1" : "0");
770
771 // 步骤 46:MTD_STORE_DATA(tc_step)
772 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
773 var sdCla46 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
774 var s46 = bind.sendApdu(sdCla46, "E2", "91", "00", "BF4300", "00", "9000");
775 bind.checkData("S46-C1 SW", "9000", s46.sw);
776 // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
777 var rgw46 = BindGecaProc.parseGecaResponse(s46.resp, {outer: "BF43", required: [], optional: []});
778 var rrat46 = (rgw46.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw46.children[0].value) : [];
779 // S46-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
780 // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
781 bind.checkData("S46-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
782
783 // 步骤 47:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
784 // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
785 var sdCla47 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
786 var s47 = bind.sendApdu(sdCla47, "E2", "91", "00", "BF2D00", "00", "9000");
787 bind.checkData("S47-C1 SW", "9000", s47.sw);
788 var r2p47 = BindEs10xProcProfile.walkChoiceList(s47.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
789 bind.checkData("S47-C2 profileInfoListOk empty", "1", (r2p47.branch_tag === "A0" && r2p47.elements.length === 0) ? "1" : "0");
790}
791
完整 unified diff
行级差异:新增 789 行 / 删除 586 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(1380 行)
--- -man
+++ -cas
@@ -1,588 +1,791 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10c_eUICCMemoryReset_01_Nominal_Reset_All_Operational_Profiles_without_Enabled_Profile + TC_eUICC_ES10c_eUICCMemoryReset_02_Nominal_Reset_All_Operational_Profiles_with_Enabled_Profile + TC_eUICC_ES10c_eUICCMemoryReset_03_Nominal_Reset_the_Default_SMDP_Address_only + TC_eUICC_ES10c_eUICCMemoryReset_04_Nominal_Reset_All_Operational_Profiles_and_the_Default_SMDP_Address + TC_eUICC_ES10c_eUICCMemoryReset_05_Nominal_eUICCMemoryReset_when_this_Operational_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported + TC_eUICC_ES10c_eUICCMemoryReset_06_Nominal_eUICCMemoryReset_when_this_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported (extracted verbatim)
-
-function TC_eUICC_ES10c_eUICCMemoryReset_01_Nominal_Reset_All_Operational_Profiles_without_Enabled_Profile()
-{
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
- initial_condition_Install_PROFILE_OPERATIONAL3();
-
- initial_condition_set_Profile_Nickname("读卡器向卡片发送 StoreData命令,执行SetNickname,profileNickname为NICKNAME3;", ICCID_OP_PROF3, NICKNAME3);
-
- initial_condition_Remove_All_Notification();
-
- tracenamestr = "测试目的:没有处于激活状态的profile,重置所有的Operational 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命令,执行GET_EUICC_INFO2,获取卡片的剩余不可变空间大小;");
- var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
-
- var euiccInfo2 = new EUICCInfo2();
- euiccInfo2.checkCardResDataFormat(hexData);
- var FREE_MEM_OP_PROF_INSTALLED = 0;
- try
- {
- var extCardResourceObj = new ExtendedCardResource();
- extCardResourceObj.SetHexData(euiccInfo2.extCardResource);
- FREE_MEM_OP_PROF_INSTALLED = parseInt(extCardResourceObj.FreeNonVolatileMemory, 16);
- }catch(e){
- obj.SubLevel(display_rsp_card_data_format_check_fail, level_of_SubLevel.error);
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,LIST_NOTIF_ALL;");
- var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
- var listNotificationResponse = new ListNotificationResponse();
- listNotificationResponse.checkCardResDataFormat(resdata);
-
- Max_seqNumber_Of_Notification ++;
- var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
- curStrHandle.CheckData("1", arr1.length.toString(), "Number of Notification");
-
- if (arr1.length >= 1)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GET_EUICC_INFO2,获取卡片的剩余不可变空间大小,剩余不可变空间应变大;");
- var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
- var euiccInfo2 = new EUICCInfo2();
- euiccInfo2.checkCardResDataFormat(hexData);
-
- var FREE_MEMORY_NO_PROFILE = 0;
- try
- {
-
- var extCardResourceObj = new ExtendedCardResource();
- extCardResourceObj.SetHexData(euiccInfo2.extCardResource);
- FREE_MEMORY_NO_PROFILE = parseInt(extCardResourceObj.FreeNonVolatileMemory, 16);
- }catch(e){
- obj.SubLevel(ProfileInfoListResponse_Data_Error, level_of_SubLevel.error);
- }
-
- if (FREE_MEMORY_NO_PROFILE > FREE_MEM_OP_PROF_INSTALLED)
- obj.SubLevel("删除后的卡片剩余不可变空间变大了", 1);
- else
- obj.SubLevel("删除后的卡片剩余不可变空间没有变大", 0);
-
- obj.SubLevel("euiccInfo2.extCardResource.FreeNonVolatileMemory"+euiccInfo2.extCardResource.FreeNonVolatileMemory,1);
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应没有改变;");
- var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
- var resObj = new EuiccConfiguredAddressesResponse();
- resObj.checkCardResDataFormat(hexData);
-
- curStrHandle.CheckData(TEST_DP_ADDRESS1, resObj.defaultDpAddress, "defaultDpAddress");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
-
- RecoverCard();
-}
-
-function TC_eUICC_ES10c_eUICCMemoryReset_02_Nominal_Reset_All_Operational_Profiles_with_Enabled_Profile()
-{
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
- initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
-
- initial_condition_Remove_All_Notification();
-
-
- tracenamestr = "测试目的:有处于激活状态的profile,重置所有的Operational 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命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
-
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
- curLogicChannel = 0;
- curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
-
- FetchStr = Fetch("","9000","");
-
- var CmdDetails = GetValueByTag("01",1);
- var CmdQualifier = CmdDetails.substr(4,2);
- CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
-
-
- 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命令,LIST_NOTIF_ALL;");
-
- var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
-
- var listNotificationResponse = new ListNotificationResponse();
-
- listNotificationResponse.checkCardResDataFormat(resdata);
-
- Max_seqNumber_Of_Notification ++;
- var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
- curStrHandle.CheckData("1/2", arr1.length.toString(), "Number of Notification");
-
- if (arr1.length == 1)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
- else if (arr1.length == 2)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
-
- Max_seqNumber_Of_Notification ++;
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
-
- var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
- curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
-
-
- RecoverCard();
-}
-
-function TC_eUICC_ES10c_eUICCMemoryReset_03_Nominal_Reset_the_Default_SMDP_Address_only()
-{
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
- initial_condition_Install_PROFILE_OPERATIONAL3();
-
- initial_condition_set_Profile_Nickname("读卡器向卡片发送 StoreData命令,执行SetNickname,profileNickname为NICKNAME3;", ICCID_OP_PROF3, NICKNAME3);
-
- tracenamestr = "测试目的:重置缺省SM-DP+地址";
- 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命令,Reset the Default SM-DP+ Address only;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0520";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
-
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- var resObj = new ProfileInfoListResponse();
- resObj.checkCardResDataFormat(respData);
-
- var num = resObj.profileInfoListOk.arrOfElement.length;
-
- curStrHandle.CheckData("2", num.toString(), "ProfileInfo Num");
-
- if (num == 2)
- {
- check_PROFILE_INFO1_DISABLED(resObj.profileInfoListOk.arrOfElement[0]);
- check_PROFILE_INFO3(resObj.profileInfoListOk.arrOfElement[1]);
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应不存在;");
-
- var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
- var resObj = new EuiccConfiguredAddressesResponse();
- resObj.checkCardResDataFormat(hexData);
-
- curStrHandle.CheckData("不存在", resObj.defaultDpAddress, "defaultDpAddress");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
-
- RecoverCard();
-}
-
-function TC_eUICC_ES10c_eUICCMemoryReset_04_Nominal_Reset_All_Operational_Profiles_and_the_Default_SMDP_Address()
-{
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
- initial_condition_Install_PROFILE_OPERATIONAL3();
-
- tracenamestr = "测试目的:重置所有的Operational Profile和缺省SM-DP+地址";
- 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命令,Reset All Operational Profiles and the Default SM-DP+ Address;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "05A0";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
-
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_EUICC_CONFIGURED_ADDRESSES,检查defaultDpAddress应不存在;");
-
- var hexData = LPAd_Transport_data_to_eUICC(EuiccConfiguredAddressesRequestHexStr);
- var resObj = new EuiccConfiguredAddressesResponse();
- resObj.checkCardResDataFormat(hexData);
-
- curStrHandle.CheckData("不存在", resObj.defaultDpAddress, "defaultDpAddress");
- curStrHandle.CheckData(TEST_ROOT_DS_ADDRESS, resObj.rootDsAddress, "rootDsAddress");
-
- RecoverCard();
-}
-
-function TC_eUICC_ES10c_eUICCMemoryReset_05_Nominal_eUICCMemoryReset_when_this_Operational_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported()
-{
-
- //测试入口条件
- if(!check_Applicability_of_tests_RSP_SGP23_test("C033"))
- return;
-
- initial_condition_Start();
-
- initial_condition_Install_PROFILE_OPERATIONAL1();
-
- initial_condition_Set_SMDP_Address(TEST_DP_ADDRESS1);
-
- initial_condition_Enable_Profile("Enable Profile1", ICCID_OP_PROF1);
-
- initial_condition_Remove_All_Notification();
-
-
- tracenamestr = "测试目的:eUICC不支持catBusy,有一个处于激活状态的Operational Profile,主动式会话进行中时,执行eUICCMemoryReset";
- 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");
-
- curLogicChannel = 0;
- var sSendType = SendTypeByOTA.SMS;
- KIC = MNO_SCP80_ENC_KEY;
- KID = MNO_SCP80_AUTH_KEY;
- KIK = MNO_SCP80_DATA_ENC_KEY;
- curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
- sAPDU = "80F28002024F0000";
- SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
- HaveReEntry91XX = true;
- var ss = obj.GetState();
- ReEntry91XXLength = ss.substr(2,2);
-
- curLogicChannel = 1;
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
-
- curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
-
- curLogicChannel = 0;
- curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
-
- FetchStr = Fetch("","9000","");
-
- var CmdDetails = GetValueByTag("01",1);
- var CmdQualifier = CmdDetails.substr(4,2);
- CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
-
-
- 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命令,LIST_NOTIF_ALL;");
-
- var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
-
- var listNotificationResponse = new ListNotificationResponse();
-
- listNotificationResponse.checkCardResDataFormat(resdata);
-
- Max_seqNumber_Of_Notification ++;
- var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
- curStrHandle.CheckData("0", arr1.length.toString(), "Number of Notification");
-
- if (arr1.length == 1)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
- else if (arr1.length == 2)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
-
- Max_seqNumber_Of_Notification ++;
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
-
- var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
- curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
-
-
- RecoverCard();
-}
-
-function TC_eUICC_ES10c_eUICCMemoryReset_06_Nominal_eUICCMemoryReset_when_this_Profile_is_in_Enabled_state_while_proactive_sessionisongoing_catBusynotsupported()
-{
-
- //测试入口条件
- if(!check_Applicability_of_tests_RSP_SGP23_test("C033"))
- return;
-
- initial_condition_PROFILE_OPERATIONAL1_is_Enabled();
- var ISD_P_Test01 = curProfile_ISD_P_AID;
-
- initial_condition_PROFILE_OPERATIONAL3_is_Disabled();
- var ISD_P_Test03 = curProfile_ISD_P_AID;
-
- initial_condition_Remove_All_Notification();
-
- tracenamestr = "测试目的:eUICC不支持catBusy,有处于激活状态的Profile,主动式会话进行中(未给终端响应)时,执行eUICCMemoryReset";
- 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");
-
- curLogicChannel = 0;
- curDis.TestStepStart2(stno++,"SCP80,发送get status命令,使用MNO-SD的tar");
-
- var sSendType = SendTypeByOTA.SMS;
- KIC = MNO_SCP80_ENC_KEY;
- KID = MNO_SCP80_AUTH_KEY;
- KIK = MNO_SCP80_DATA_ENC_KEY;
- sAPDU = "80F28002024F00";
- SendMessageToCard_GP(sSendType,"91XX",0,"B20100","12210015",sAPDU);
- HaveReEntry91XX = true;
- var ss = obj.GetState();
- ReEntry91XXLength = ss.substr(2,2);
-
- curDis.TestStepStart2(stno++,"SCP80,发送Fetch命令,检查por");
- curLogicChannel = 0;
- CardSendMessageToServer(sSendType,1,"0161XX","00");
-
- curLogicChannel = 1;
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData, "91", "00", "91XX");
- curStrHandle.CheckData("BF3403800105", respData, "EuiccMemoryResetResponse");
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行EuiccMemoryResetRequest,删除OperationalProfile;");
- var euiMemoryResetRequest = new EuiccMemoryResetRequest();
- euiMemoryResetRequest.resetOptions = "0780";
- euiMemoryResetRequest.GenHexData();
- var respData = LPAd_Transport_data_to_eUICC(euiMemoryResetRequest.hexData);
- curStrHandle.CheckData("BF3403800100", respData, "EuiccMemoryResetResponse");
-
- curLogicChannel = 0;
- curDis.TestStepStart2(stno++,"Fetch主动式命令refresh;");
-
- FetchStr = Fetch("","9000","");
-
- var CmdDetails = GetValueByTag("01",1);
- var CmdQualifier = CmdDetails.substr(4,2);
- CheckData("04",CmdQualifier,"the command qualifier is equal to ’04’ (UICC Reset)");
-
-
- 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命令,LIST_NOTIF_ALL;");
-
- var resdata = LPAd_Transport_data_to_eUICC(listNotificationAllRequest);
-
- var listNotificationResponse = new ListNotificationResponse();
-
- listNotificationResponse.checkCardResDataFormat(resdata);
-
- Max_seqNumber_Of_Notification ++;
- var arr1 = listNotificationResponse.notificationMetadataList.arrOfElement;
- curStrHandle.CheckData("0", arr1.length.toString(), "Number of Notification");
-
- if (arr1.length == 1)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
- else if (arr1.length == 2)
- {
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0640", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
-
- Max_seqNumber_Of_Notification ++;
- curStrHandle.CheckData(Max_seqNumber_Of_Notification.toString(), parseInt(arr1[0].seqNumber,16).toString(), "seqNumber");
- curStrHandle.CheckData("0410", arr1[0].profileManagementOperation, "profileManagementOperation");
- curStrHandle.CheckData(TEST_DP_ADDRESS1, arr1[0].notificationAddress, "notificationAddress");
- curStrHandle.CheckData(ICCID_OP_PROF1, arr1[0].iccid, "iccid");
- }
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_RAT,期望返回值不变;");
-
- var respData = LPAd_Transport_data_to_eUICC(GetRatRequestHexStr);
- curStrHandle.CheckData(R_DEFAULT_RAT, respData, "R_DEFAULT_RAT");
-
-
- curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,GET_PROFILES_INFO_ALL,期望返回列表为空;");
-
- var respData = LPAd_Transport_data_to_eUICC(RetrieveProfileInfoAll);
- curStrHandle.CheckData(ProfileInfoListResponse_empty, respData, "ProfileInfoListResponse");
-
-
- RecoverCard();
+// Author: 卡思Cas智能体
+// Date: 20261004-143902
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10c.eUICCMemoryReset,Test Sequence #01-#06 (Nominal: Reset OP without/with Enabled Profile / Reset Default SM-DP+ Address only / Reset All / catBusy not supported ×2),适用性 M (序列#01-#04) / C039 (序列#05、#06)。
+// Test points: IC1-IC1-K1-C1 ATR_present;IC1-IC1-K2-C2 FCP_Template;IC1-IC1-K2-C4 SW
+// IC1-IC1-K3-C4 SW;IC1-IC1-K4-C4 final SW;IC2-IC2-K1-C4 SW;IC2-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC2-IC2-K2-C4 SW;S3-C1 free non-volatile memory tag 82 present;S4-C1 SW;S4-C2 resetResult ok
+// S5-C1 SW;S5-C2 profileInfoListOk empty;S6-C1 SW
+// S6-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1
+// S7-C1 free non-volatile memory lower than step 7;S7-C2 free non-volatile memory tag 82 present
+// S8-C1 SW;S8-C2 defaultDpAddress testsmdpplus1.example.com;S8-C2 rootDsAddress present
+// IC9-IC1-K1-C1 ATR_present;IC9-IC1-K2-C2 FCP_Template;IC9-IC1-K2-C4 SW;IC9-IC1-K3-C4 SW
+// IC9-IC1-K4-C4 final SW;IC10-IC2-K1-C4 SW;IC10-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC10-IC2-K2-C4 SW;S11-C1 SW1 91;S11-C2 resetResult ok;S12-C1 proactive command envelope
+// IC13-IC1-K1-C1 ATR_present;IC13-IC1-K2-C2 FCP_Template;IC13-IC1-K2-C4 SW;IC13-IC1-K3-C4 SW
+// IC13-IC1-K4-C4 final SW;IC13-IC2-K1-C4 SW;IC13-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC13-IC2-K2-C4 SW;S14-C1 SW;S14-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1
+// S15-C1 SW;S15-C2 PPRS_ALLOWED field-value oracle;S16-C1 SW;S16-C2 profileInfoListOk empty
+// IC17-IC1-K1-C1 ATR_present;IC17-IC1-K2-C2 FCP_Template;IC17-IC1-K2-C4 SW;IC17-IC1-K3-C4 SW
+// IC17-IC1-K4-C4 final SW;IC18-IC2-K1-C4 SW;IC18-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC18-IC2-K2-C4 SW;S19-C1 SW;S19-C2 resetResult in {nothingToDelete, ok};S20-C1 SW
+// S20-C2 contains PROFILE_INFO1_DISABLED;S20-C2 contains PROFILE_INFO3;S21-C1 SW
+// S21-C2 defaultDpAddress absent;S21-C2 rootDsAddress testrootsmds.example.com
+// IC22-IC1-K1-C1 ATR_present;IC22-IC1-K2-C2 FCP_Template;IC22-IC1-K2-C4 SW;IC22-IC1-K3-C4 SW
+// IC22-IC1-K4-C4 final SW;IC23-IC2-K1-C4 SW;IC23-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC23-IC2-K2-C4 SW;S24-C1 SW;S24-C2 resetResult ok;S25-C1 SW;S25-C2 profileInfoListOk empty
+// S26-C1 SW;S26-C2 defaultDpAddress absent;IC27-IC1-K1-C1 ATR_present;IC27-IC1-K2-C2 FCP_Template
+// IC27-IC1-K2-C4 SW;IC27-IC1-K3-C4 SW;IC27-IC1-K4-C4 final SW;IC28-IC2-K1-C4 SW
+// IC28-IC2-K1-C3 CHANNEL_NUMBER extracted;IC28-IC2-K2-C4 SW;S29-C1 SW1 91;S31-C1 SW1 91
+// S31-C2 resetResult ok;S32-C1 proactive command envelope;IC33-IC1-K1-C1 ATR_present
+// IC33-IC1-K2-C2 FCP_Template;IC33-IC1-K2-C4 SW;IC33-IC1-K3-C4 SW;IC33-IC1-K4-C4 final SW
+// IC33-IC2-K1-C4 SW;IC33-IC2-K1-C3 CHANNEL_NUMBER extracted;IC33-IC2-K2-C4 SW;S34-C1 SW
+// S34-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1;S35-C1 SW
+// S35-C2 PPRS_ALLOWED field-value oracle;S36-C1 SW;S36-C2 profileInfoListOk empty
+// IC37-IC1-K1-C1 ATR_present;IC37-IC1-K2-C2 FCP_Template;IC37-IC1-K2-C4 SW;IC37-IC1-K3-C4 SW
+// IC37-IC1-K4-C4 final SW;IC38-IC2-K1-C4 SW;IC38-IC2-K1-C3 CHANNEL_NUMBER extracted
+// IC38-IC2-K2-C4 SW;S39-C1 SW1 91;S41-C1 SW;S41-C2 resetResult ok;S42-C1 SW1 91
+// S43-C1 proactive command envelope;IC44-IC1-K1-C1 ATR_present;IC44-IC1-K2-C2 FCP_Template
+// IC44-IC1-K2-C4 SW;IC44-IC1-K3-C4 SW;IC44-IC1-K4-C4 final SW;IC44-IC2-K1-C4 SW
+// IC44-IC2-K1-C3 CHANNEL_NUMBER extracted;IC44-IC2-K2-C4 SW;S45-C1 SW
+// S45-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1;S46-C1 SW
+// S46-C2 PPRS_ALLOWED field-value oracle;S47-C1 SW;S47-C2 profileInfoListOk empty
+// 本函数由 CaseIR 4.2.24.2.1 编译生成(fullwave-blindgen-live-70-W1-laneA5,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 (序列#01-#04) / C039 (序列#05、#06):编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_ES10c_eUICCMemoryReset_01_06_merged() {
+ var bind = curBind;
+ // GIC-1 卡态编排:PROFILE_OPERATIONAL1 已安装: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // GIC-2 Default SM-DP+ Address #TEST_DP_ADDRESS1 已设置到 ISD-R(testsmdpplus1.example.com,F_annexA_constants): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // S1/S3/S4-IC PROF1 Disabled;PROFILE_OPERATIONAL3 已安装且 Disabled(#01/#03 另要求 Nickname=#NICKNAME3);#01 另要求 Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // S2/S5-IC PROF1 Enabled;Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // S6-IC PROF1 Enabled;PROF3 已安装且 Disabled;Pending Notifications List 为空: declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s48 = bind.resetAndAtr();
+ bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s48.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 1(IC1 → 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 s49 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s49.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC1-IC1-K2-C4 SW", "9000", s49.sw);
+
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s50 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC1-IC1-K3-C4 SW", "9000", s50.sw);
+
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady51 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady51.final.sw);
+
+ // IC ref inline @E 步骤 2(IC2 → 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 s52 = bind.manageChannelOpen("9000");
+ bind.checkData("IC2-IC2-K1-C4 SW", "9000", s52.sw);
+ bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s52.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 2(IC2 → 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 s53 = 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("IC2-IC2-K2-C4 SW", "9000", s53.sw);
+
+ // 步骤 3:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla3 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s3 = bind.sendApdu(sdCla3, "E2", "91", "00", "BF2200", "00", "9000");
+ // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+ var gw3 = BindGecaProc.parseGecaResponse(s3.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
+ var ext3 = BindEs10xSingleRequest.parseBerTlv(gw3.fields["84"] || "");
+ var freeVal3 = null; for (var fti3 = 0; fti3 < ext3.length; fti3++) { if (ext3[fti3].tag === "82") { freeVal3 = ext3[fti3].value; } }
+ bind.checkData("S3-C1 free non-volatile memory tag 82 present", "1", freeVal3 !== null ? "1" : "0");
+
+ // 步骤 4:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_169, RQ57_170, RQ33_010)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla4 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s4 = bind.sendApdu(sdCla4, "E2", "91", "00", "BF340482020780", "00", "9000");
+ bind.checkData("S4-C1 SW", "9000", s4.sw);
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw4 = BindEs10xProcProfile.walkChoiceList(s4.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w4 = BindGecaProc.parseGecaResponse(s4.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S4-C2 resetResult ok", "00", (r2w4.ok && r2w4.fields["02"] === "00") ? "00" : (r2w4.fields["02"] || "absent"));
+
+ // 步骤 5:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla5 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S5-C1 SW", "9000", s5.sw);
+ var r2p5 = BindEs10xProcProfile.walkChoiceList(s5.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ bind.checkData("S5-C2 profileInfoListOk empty", "1", (r2p5.branch_tag === "A0" && r2p5.elements.length === 0) ? "1" : "0");
+
+ // 步骤 6:MTD_STORE_DATA(tc_step;REQ: RQ57_071, RQ57_071_1, RQ57_071_2, RQ57_072, RQ57_072_1, RQ57_072_2, RQ57_074, RQ57_167_1)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla6 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S6-C1 SW", "9000", s6.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2n6T = BindEs10xSingleRequest.parseBerTlv(s6.resp);
+ var r2n6Ok0 = r2n6T.length === 1 && r2n6T[0].tag === "BF28";
+ var r2n6B = r2n6Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n6T[0].value) : [];
+ var r2n6_brtag = r2n6B.length === 1 ? r2n6B[0].tag : "";
+ var r2n6_els = r2n6_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n6B[0].value) : [];
+ var r2n6Has = false;
+ for (var r2n6i = 0; r2n6i < r2n6_els.length; r2n6i++) {
+ if (r2n6_els[r2n6i].tag !== "BF2F") { continue; }
+ var r2n6F = {};
+ var r2n6M = BindEs10xSingleRequest.parseBerTlv(r2n6_els[r2n6i].value);
+ for (var r2n6j = 0; r2n6j < r2n6M.length; r2n6j++) { r2n6F[r2n6M[r2n6j].tag] = r2n6M[r2n6j].value; }
+ if (r2n6F["5A"] === "989209012143658709F5" && r2n6F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n6Has = true; break; }
+ }
+ bind.checkData("S6-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n6Has ? "1" : "0");
+
+ // 步骤 7:MTD_STORE_DATA(tc_step;REQ: RQ31_027, RQ31_028, RQ57_051, RQ57_052, RQ57_054, RQ24_020)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla7 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s7 = bind.sendApdu(sdCla7, "E2", "91", "00", "BF2200", "00", "9000");
+ // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+ var gw7 = BindGecaProc.parseGecaResponse(s7.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
+ bind.checkData("S7-C1 free non-volatile memory lower than step 7", "1", (freeVal3 !== null && freeVal3 !== undefined && freeVal7 !== null && freeVal7 !== undefined && parseInt(freeVal3, 16) < parseInt(freeVal7, 16)) ? "1" : "0");
+ var ext7 = BindEs10xSingleRequest.parseBerTlv(gw7.fields["84"] || "");
+ var freeVal7 = null; for (var fti7 = 0; fti7 < ext7.length; fti7++) { if (ext7[fti7].tag === "82") { freeVal7 = ext7[fti7].value; } }
+ bind.checkData("S7-C2 free non-volatile memory tag 82 present", "1", freeVal7 !== null ? "1" : "0");
+
+ // 步骤 8:MTD_STORE_DATA(tc_step;REQ: RQ33_009)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla8 = s52.chan !== null ? (s52.chan <= 3 ? 128 + s52.chan : 188 + s52.chan).toString(16).toUpperCase() : null;
+ var s8 = bind.sendApdu(sdCla8, "E2", "91", "00", "BF3C00", "00", "9000");
+ bind.checkData("S8-C1 SW", "9000", s8.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2w8 = BindGecaProc.parseGecaResponse(s8.resp, {outer: "BF3C", required: []});
+ var r2c8 = r2w8.children;
+ var r2c08 = 0;
+ for (var r2ci8 = 0; r2ci8 < r2c8.length; r2ci8++) {
+ if (r2c8[r2ci8].tag === "80" || r2c8[r2ci8].tag === "81") { r2c08++; }
+ }
+ var r2v8 = __asciiHex("testsmdpplus1.example.com");
+ bind.checkData("S8-C2 defaultDpAddress testsmdpplus1.example.com", r2v8, (r2c08 >= 2 ? r2c8[0].value : "absent"));
+ bind.checkData("S8-C2 rootDsAddress present", "1", (r2c08 >= 1 ? "1" : "0"));
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s54 = bind.resetAndAtr();
+ bind.checkData("IC9-IC1-K1-C1 ATR_present", "1", s54.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 9(IC1 → 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 s55 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC9-IC1-K2-C2 FCP_Template", "1", s55.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC9-IC1-K2-C4 SW", "9000", s55.sw);
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s56 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC9-IC1-K3-C4 SW", "9000", s56.sw);
+
+ // IC ref inline @E 步骤 9(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady57 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC9-IC1-K4-C4 final SW", "9000", steady57.final.sw);
+
+ // IC ref inline @E 步骤 10(IC2 → 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 s58 = bind.manageChannelOpen("9000");
+ bind.checkData("IC10-IC2-K1-C4 SW", "9000", s58.sw);
+ bind.checkData("IC10-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s58.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 10(IC2 → 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 s59 = 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("IC10-IC2-K2-C4 SW", "9000", s59.sw);
+
+ // 步骤 11:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_169, RQ57_170, RQ33_010)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla11 = s58.chan !== null ? (s58.chan <= 3 ? 128 + s58.chan : 188 + s58.chan).toString(16).toUpperCase() : null;
+ var s11 = bind.sendApdu(sdCla11, "E2", "91", "00", "BF340482020780", "00", "9000");
+ bind.checkData("S11-C1 SW1 91", "91", s11.sw.substring(0, 2));
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw11 = BindEs10xProcProfile.walkChoiceList(s11.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w11 = BindGecaProc.parseGecaResponse(s11.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S11-C2 resetResult ok", "00", (r2w11.ok && r2w11.fields["02"] === "00") ? "00" : (r2w11.fields["02"] || "absent"));
+
+ // 步骤 12:FETCH 'XX'(序列#02 步2)(tc_step;REQ: RQ57_168)
+ // FETCH header literals follow the golden wire evidence 8012 (same
+ // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+ // gives mechanism only). Le = pending length from the last 91XX
+ // (chain rule, binding-internal state).
+ var s12 = bind.fetchPending("80", "12", "00", "00", null);
+ bind.checkData("S12-C1 proactive command envelope", "1", (s12.resp.length >= 4 && s12.resp.substring(0, 2) === "D0") ? "1" : "0");
+ // S12-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
+ // S12:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s12tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+
+ // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s60 = bind.resetAndAtr();
+ bind.checkData("IC13-IC1-K1-C1 ATR_present", "1", s60.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 13(IC1 → 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 s61 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC13-IC1-K2-C2 FCP_Template", "1", s61.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC13-IC1-K2-C4 SW", "9000", s61.sw);
+
+ // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s62 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC13-IC1-K3-C4 SW", "9000", s62.sw);
+
+ // IC ref inline @E 步骤 13(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady63 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC13-IC1-K4-C4 final SW", "9000", steady63.final.sw);
+
+ // IC ref inline @E 步骤 13(IC2 → 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 s64 = bind.manageChannelOpen("9000");
+ bind.checkData("IC13-IC2-K1-C4 SW", "9000", s64.sw);
+ bind.checkData("IC13-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s64.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 13(IC2 → 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 s65 = 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("IC13-IC2-K2-C4 SW", "9000", s65.sw);
+
+ // 步骤 14:MTD_STORE_DATA(tc_step;REQ: RQ57_071, RQ57_071_1, RQ57_071_2, RQ57_072, RQ57_072_1, RQ57_072_2, RQ57_074, RQ57_167_1, RQ35_006)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla14 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
+ var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S14-C1 SW", "9000", s14.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2n14T = BindEs10xSingleRequest.parseBerTlv(s14.resp);
+ var r2n14Ok0 = r2n14T.length === 1 && r2n14T[0].tag === "BF28";
+ var r2n14B = r2n14Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n14T[0].value) : [];
+ var r2n14_brtag = r2n14B.length === 1 ? r2n14B[0].tag : "";
+ var r2n14_els = r2n14_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n14B[0].value) : [];
+ var r2n14Has = false;
+ for (var r2n14i = 0; r2n14i < r2n14_els.length; r2n14i++) {
+ if (r2n14_els[r2n14i].tag !== "BF2F") { continue; }
+ var r2n14F = {};
+ var r2n14M = BindEs10xSingleRequest.parseBerTlv(r2n14_els[r2n14i].value);
+ for (var r2n14j = 0; r2n14j < r2n14M.length; r2n14j++) { r2n14F[r2n14M[r2n14j].tag] = r2n14M[r2n14j].value; }
+ if (r2n14F["5A"] === "989209012143658709F5" && r2n14F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n14Has = true; break; }
+ }
+ bind.checkData("S14-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n14Has ? "1" : "0");
+
+ // 步骤 15:MTD_STORE_DATA(tc_step;REQ: RQ29_005, RQ57_179, RQ57_180, RQ57_181, RQ57_182, RQ57_184)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla15 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
+ var s15 = bind.sendApdu(sdCla15, "E2", "91", "00", "BF4300", "00", "9000");
+ bind.checkData("S15-C1 SW", "9000", s15.sw);
+ // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
+ var rgw15 = BindGecaProc.parseGecaResponse(s15.resp, {outer: "BF43", required: [], optional: []});
+ var rrat15 = (rgw15.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw15.children[0].value) : [];
+ // S15-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
+ // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
+ bind.checkData("S15-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
+
+ // 步骤 16:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla16 = s64.chan !== null ? (s64.chan <= 3 ? 128 + s64.chan : 188 + s64.chan).toString(16).toUpperCase() : null;
+ var s16 = bind.sendApdu(sdCla16, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S16-C1 SW", "9000", s16.sw);
+ var r2p16 = BindEs10xProcProfile.walkChoiceList(s16.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ bind.checkData("S16-C2 profileInfoListOk empty", "1", (r2p16.branch_tag === "A0" && r2p16.elements.length === 0) ? "1" : "0");
+
+ // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s66 = bind.resetAndAtr();
+ bind.checkData("IC17-IC1-K1-C1 ATR_present", "1", s66.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 17(IC1 → 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 s67 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC17-IC1-K2-C2 FCP_Template", "1", s67.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC17-IC1-K2-C4 SW", "9000", s67.sw);
+
+ // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s68 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC17-IC1-K3-C4 SW", "9000", s68.sw);
+
+ // IC ref inline @E 步骤 17(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady69 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC17-IC1-K4-C4 final SW", "9000", steady69.final.sw);
+
+ // IC ref inline @E 步骤 18(IC2 → 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 s70 = bind.manageChannelOpen("9000");
+ bind.checkData("IC18-IC2-K1-C4 SW", "9000", s70.sw);
+ bind.checkData("IC18-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s70.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 18(IC2 → 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 s71 = 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("IC18-IC2-K2-C4 SW", "9000", s71.sw);
+
+ // 步骤 19:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_167, RQ57_169, RQ57_170, RQ33_010)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla19 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
+ var s19 = bind.sendApdu(sdCla19, "E2", "91", "00", "BF340482020520", "00", "9000");
+ bind.checkData("S19-C1 SW", "9000", s19.sw);
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw19 = BindEs10xProcProfile.walkChoiceList(s19.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w19 = BindGecaProc.parseGecaResponse(s19.resp, {outer: "BF34", required: ["02"]});
+ var r2w19Set = ["01", "00"];
+ var r2w19Hit = false;
+ for (var r2w19I = 0; r2w19.ok && r2w19I < r2w19Set.length; r2w19I++) { if (r2w19Set[r2w19I] === r2w19.fields["02"]) { r2w19Hit = true; } }
+ bind.checkData("S19-C2 resetResult in {nothingToDelete, ok}", "1", (r2w19.ok && r2w19Hit) ? "1" : "0");
+
+ // 步骤 20:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla20 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
+ var s20 = bind.sendApdu(sdCla20, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S20-C1 SW", "9000", s20.sw);
+ var r2p20 = BindEs10xProcProfile.walkChoiceList(s20.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ var r2has20_0 = false;
+ for (var r2i20_0 = 0; r2i20_0 < r2p20.elements.length; r2i20_0++) {
+ var f = r2p20.elements[r2i20_0].fields;
+ if (f["5A"] === "989209012143658709F5" && f["9F70"] === "00") { r2has20_0 = true; break; }
+ }
+ bind.checkData("S20-C2 contains PROFILE_INFO1_DISABLED", "1", (r2p20.branch_tag === "A0" && r2has20_0) ? "1" : "0");
+ var r2has20_1 = false;
+ for (var r2i20_1 = 0; r2i20_1 < r2p20.elements.length; r2i20_1++) {
+ var f = r2p20.elements[r2i20_1].fields;
+ if (f["5A"] === "989209014365870921F5" && f["9F70"] === "00") { r2has20_1 = true; break; }
+ }
+ bind.checkData("S20-C2 contains PROFILE_INFO3", "1", (r2p20.branch_tag === "A0" && r2has20_1) ? "1" : "0");
+
+ // 步骤 21:MTD_STORE_DATA(tc_step;REQ: RQ33_008)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla21 = s70.chan !== null ? (s70.chan <= 3 ? 128 + s70.chan : 188 + s70.chan).toString(16).toUpperCase() : null;
+ var s21 = bind.sendApdu(sdCla21, "E2", "91", "00", "BF3C00", "00", "9000");
+ bind.checkData("S21-C1 SW", "9000", s21.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2w21 = BindGecaProc.parseGecaResponse(s21.resp, {outer: "BF3C", required: []});
+ var r2c21 = r2w21.children;
+ var r2c021 = 0;
+ for (var r2ci21 = 0; r2ci21 < r2c21.length; r2ci21++) {
+ if (r2c21[r2ci21].tag === "80" || r2c21[r2ci21].tag === "81") { r2c021++; }
+ }
+ bind.checkData("S21-C2 defaultDpAddress absent", "absent", (r2c021 <= 1 ? "absent" : "present:" + r2c21[0].value));
+ var r2v21 = __asciiHex("testrootsmds.example.com");
+ bind.checkData("S21-C2 rootDsAddress testrootsmds.example.com", r2v21, (r2c021 >= 1 ? r2c21[r2c21.length - 1].value : "absent"));
+
+ // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s72 = bind.resetAndAtr();
+ bind.checkData("IC22-IC1-K1-C1 ATR_present", "1", s72.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 22(IC1 → 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 s73 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC22-IC1-K2-C2 FCP_Template", "1", s73.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC22-IC1-K2-C4 SW", "9000", s73.sw);
+
+ // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s74 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC22-IC1-K3-C4 SW", "9000", s74.sw);
+
+ // IC ref inline @E 步骤 22(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady75 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC22-IC1-K4-C4 final SW", "9000", steady75.final.sw);
+
+ // IC ref inline @E 步骤 23(IC2 → 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 s76 = bind.manageChannelOpen("9000");
+ bind.checkData("IC23-IC2-K1-C4 SW", "9000", s76.sw);
+ bind.checkData("IC23-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s76.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 23(IC2 → 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 s77 = 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("IC23-IC2-K2-C4 SW", "9000", s77.sw);
+
+ // 步骤 24:MTD_STORE_DATA(tc_step;REQ: RQ57_163, RQ57_166, RQ57_167, RQ57_169, RQ57_170, RQ33_010)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla24 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
+ var s24 = bind.sendApdu(sdCla24, "E2", "91", "00", "BF3404820205A0", "00", "9000");
+ bind.checkData("S24-C1 SW", "9000", s24.sw);
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw24 = BindEs10xProcProfile.walkChoiceList(s24.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w24 = BindGecaProc.parseGecaResponse(s24.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S24-C2 resetResult ok", "00", (r2w24.ok && r2w24.fields["02"] === "00") ? "00" : (r2w24.fields["02"] || "absent"));
+
+ // 步骤 25:MTD_STORE_DATA(tc_step;REQ: RQ33_011, RQ33_008, RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla25 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
+ var s25 = bind.sendApdu(sdCla25, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S25-C1 SW", "9000", s25.sw);
+ var r2p25 = BindEs10xProcProfile.walkChoiceList(s25.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ bind.checkData("S25-C2 profileInfoListOk empty", "1", (r2p25.branch_tag === "A0" && r2p25.elements.length === 0) ? "1" : "0");
+
+ // 步骤 26:MTD_STORE_DATA(tc_step;REQ: RQ33_008)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla26 = s76.chan !== null ? (s76.chan <= 3 ? 128 + s76.chan : 188 + s76.chan).toString(16).toUpperCase() : null;
+ var s26 = bind.sendApdu(sdCla26, "E2", "91", "00", "BF3C00", "00", "9000");
+ bind.checkData("S26-C1 SW", "9000", s26.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2w26 = BindGecaProc.parseGecaResponse(s26.resp, {outer: "BF3C", required: []});
+ var r2c26 = r2w26.children;
+ var r2c026 = 0;
+ for (var r2ci26 = 0; r2ci26 < r2c26.length; r2ci26++) {
+ if (r2c26[r2ci26].tag === "80" || r2c26[r2ci26].tag === "81") { r2c026++; }
+ }
+ bind.checkData("S26-C2 defaultDpAddress absent", "absent", (r2c026 <= 1 ? "absent" : "present:" + r2c26[0].value));
+
+ // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s78 = bind.resetAndAtr();
+ bind.checkData("IC27-IC1-K1-C1 ATR_present", "1", s78.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 27(IC1 → 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 s79 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC27-IC1-K2-C2 FCP_Template", "1", s79.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC27-IC1-K2-C4 SW", "9000", s79.sw);
+
+ // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s80 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC27-IC1-K3-C4 SW", "9000", s80.sw);
+
+ // IC ref inline @E 步骤 27(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady81 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC27-IC1-K4-C4 final SW", "9000", steady81.final.sw);
+
+ // IC ref inline @E 步骤 28(IC2 → 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 s82 = bind.manageChannelOpen("9000");
+ bind.checkData("IC28-IC2-K1-C4 SW", "9000", s82.sw);
+ bind.checkData("IC28-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s82.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 28(IC2 → 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 s83 = 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("IC28-IC2-K2-C4 SW", "9000", s83.sw);
+
+ // 步骤 29:IC3: MTD_SEND_SMS_PP(tc_step)
+ // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
+ // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
+ // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
+ var s29 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
+ bind.checkData("S29-C1 SW1 91", "91", s29.sw.substring(0, 2));
+
+ // 步骤 30:IC4: Do not send FETCH command(序列#05:保持 proactive session 挂起)(tc_step)
+ // FETCH header literals follow the golden wire evidence 8012 (same
+ // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+ // gives mechanism only). Le = pending length from the last 91XX
+ // (chain rule, binding-internal state).
+ var s30 = bind.fetchPending("80", "12", "00", "00", null);
+ // S30:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s30tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+
+ // 步骤 31:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla31 = s82.chan !== null ? (s82.chan <= 3 ? 128 + s82.chan : 188 + s82.chan).toString(16).toUpperCase() : null;
+ var s31 = bind.sendApdu(sdCla31, "E2", "91", "00", "BF340482020780", "00", "9000");
+ bind.checkData("S31-C1 SW1 91", "91", s31.sw.substring(0, 2));
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw31 = BindEs10xProcProfile.walkChoiceList(s31.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w31 = BindGecaProc.parseGecaResponse(s31.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S31-C2 resetResult ok", "00", (r2w31.ok && r2w31.fields["02"] === "00") ? "00" : (r2w31.fields["02"] || "absent"));
+
+ // 步骤 32:FETCH 'YY'(序列#05 步2)(tc_step)
+ // FETCH header literals follow the golden wire evidence 8012 (same
+ // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+ // gives mechanism only). Le = pending length from the last 91XX
+ // (chain rule, binding-internal state).
+ var s32 = bind.fetchPending("80", "12", "00", "00", null);
+ bind.checkData("S32-C1 proactive command envelope", "1", (s32.resp.length >= 4 && s32.resp.substring(0, 2) === "D0") ? "1" : "0");
+ // S32-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
+ // S32:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s32tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+
+ // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s84 = bind.resetAndAtr();
+ bind.checkData("IC33-IC1-K1-C1 ATR_present", "1", s84.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 33(IC1 → 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 s85 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC33-IC1-K2-C2 FCP_Template", "1", s85.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC33-IC1-K2-C4 SW", "9000", s85.sw);
+
+ // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s86 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC33-IC1-K3-C4 SW", "9000", s86.sw);
+
+ // IC ref inline @E 步骤 33(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady87 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC33-IC1-K4-C4 final SW", "9000", steady87.final.sw);
+
+ // IC ref inline @E 步骤 33(IC2 → 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 s88 = bind.manageChannelOpen("9000");
+ bind.checkData("IC33-IC2-K1-C4 SW", "9000", s88.sw);
+ bind.checkData("IC33-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s88.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 33(IC2 → 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 s89 = 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("IC33-IC2-K2-C4 SW", "9000", s89.sw);
+
+ // 步骤 34:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla34 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
+ var s34 = bind.sendApdu(sdCla34, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S34-C1 SW", "9000", s34.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2n34T = BindEs10xSingleRequest.parseBerTlv(s34.resp);
+ var r2n34Ok0 = r2n34T.length === 1 && r2n34T[0].tag === "BF28";
+ var r2n34B = r2n34Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n34T[0].value) : [];
+ var r2n34_brtag = r2n34B.length === 1 ? r2n34B[0].tag : "";
+ var r2n34_els = r2n34_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n34B[0].value) : [];
+ var r2n34Has = false;
+ for (var r2n34i = 0; r2n34i < r2n34_els.length; r2n34i++) {
+ if (r2n34_els[r2n34i].tag !== "BF2F") { continue; }
+ var r2n34F = {};
+ var r2n34M = BindEs10xSingleRequest.parseBerTlv(r2n34_els[r2n34i].value);
+ for (var r2n34j = 0; r2n34j < r2n34M.length; r2n34j++) { r2n34F[r2n34M[r2n34j].tag] = r2n34M[r2n34j].value; }
+ if (r2n34F["5A"] === "989209012143658709F5" && r2n34F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n34Has = true; break; }
+ }
+ bind.checkData("S34-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n34Has ? "1" : "0");
+
+ // 步骤 35:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla35 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
+ var s35 = bind.sendApdu(sdCla35, "E2", "91", "00", "BF4300", "00", "9000");
+ bind.checkData("S35-C1 SW", "9000", s35.sw);
+ // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
+ var rgw35 = BindGecaProc.parseGecaResponse(s35.resp, {outer: "BF43", required: [], optional: []});
+ var rrat35 = (rgw35.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw35.children[0].value) : [];
+ // S35-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
+ // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
+ bind.checkData("S35-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
+
+ // 步骤 36:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla36 = s88.chan !== null ? (s88.chan <= 3 ? 128 + s88.chan : 188 + s88.chan).toString(16).toUpperCase() : null;
+ var s36 = bind.sendApdu(sdCla36, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S36-C1 SW", "9000", s36.sw);
+ var r2p36 = BindEs10xProcProfile.walkChoiceList(s36.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ bind.checkData("S36-C2 profileInfoListOk empty", "1", (r2p36.branch_tag === "A0" && r2p36.elements.length === 0) ? "1" : "0");
+
+ // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s90 = bind.resetAndAtr();
+ bind.checkData("IC37-IC1-K1-C1 ATR_present", "1", s90.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 37(IC1 → 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 s91 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC37-IC1-K2-C2 FCP_Template", "1", s91.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC37-IC1-K2-C4 SW", "9000", s91.sw);
+
+ // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s92 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC37-IC1-K3-C4 SW", "9000", s92.sw);
+
+ // IC ref inline @E 步骤 37(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady93 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC37-IC1-K4-C4 final SW", "9000", steady93.final.sw);
+
+ // IC ref inline @E 步骤 38(IC2 → 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 s94 = bind.manageChannelOpen("9000");
+ bind.checkData("IC38-IC2-K1-C4 SW", "9000", s94.sw);
+ bind.checkData("IC38-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s94.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 38(IC2 → 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 s95 = 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("IC38-IC2-K2-C4 SW", "9000", s95.sw);
+
+ // 步骤 39:IC3: MTD_SEND_SMS_PP(tc_step)
+ // MTD_SEND_SMS_PP ENVELOPE (H Annex C.1 表1238 Details: 80 C2 00 00 <L>): SCP80-packed SMS-PP body is runtime-domain
+ // (<MNO_SCP80_COUNTER>/<CC>/<C_APDUS_SCRIPT>) — no bytes fabricated; the embedded STORE DATA
+ // script executes via the proactive FETCH / TERMINAL RESPONSE chain, not in this response.
+ var s39 = bind.sendApdu("80", "C2", "00", "00", null, null, null);
+ bind.checkData("S39-C1 SW1 91", "91", s39.sw.substring(0, 2));
+
+ // 步骤 40:FETCH 'XX'(序列#06 步1:取回 proactive 命令,POR 待回)(tc_step)
+ // FETCH header literals follow the golden wire evidence 8012 (same
+ // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+ // gives mechanism only). Le = pending length from the last 91XX
+ // (chain rule, binding-internal state).
+ var s40 = bind.fetchPending("80", "12", "00", "00", null);
+ // S40:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s40tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+ // S40-C1: binding:fetch_sms_por_runtime_parse(MTD_CHECK_SMS_POR;H-annexC1) (check_attestation)
+
+ // 步骤 41:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla41 = s94.chan !== null ? (s94.chan <= 3 ? 128 + s94.chan : 188 + s94.chan).toString(16).toUpperCase() : null;
+ var s41 = bind.sendApdu(sdCla41, "E2", "91", "00", "BF340482020780", "00", "9000");
+ bind.checkData("S41-C1 SW", "9000", s41.sw);
+ // es10x-proc-profile 响应面(TC_eUICC_ES10c.eUICCMemoryReset,SGP.22 §5.7.15 结构 + vendor ABI 分支锚;断言参数经 spec_pattern 子句注入):
+ var pw41 = BindEs10xProcProfile.walkChoiceList(s41.resp, {respTag: "BF34", okTag: "A0", errTag: "81"});
+ var r2w41 = BindGecaProc.parseGecaResponse(s41.resp, {outer: "BF34", required: ["02"]});
+ bind.checkData("S41-C2 resetResult ok", "00", (r2w41.ok && r2w41.fields["02"] === "00") ? "00" : (r2w41.fields["02"] || "absent"));
+
+ // 步骤 42:TERMINAL RESPONSE(序列#06 步3)(tc_step)
+ // TERMINAL RESPONSE data is dynamically built by the binding from the
+ // last FETCHed proactive command (D 2.2.2; buildTrData) - never static.
+ // Header literals follow the golden wire evidence 8014.
+ var s42 = bind.terminalResponseForPending("80", "14", "00", "00", null);
+ bind.checkData("S42-C1 SW1 91", "91", s42.sw.substring(0, 2));
+
+ // 步骤 43:FETCH 'YY'(序列#06 步4)(tc_step)
+ // FETCH header literals follow the golden wire evidence 8012 (same
+ // anchor as runToSteadyState; J Annex D.4 has no FETCH row, D 2.2.2
+ // gives mechanism only). Le = pending length from the last 91XX
+ // (chain rule, binding-internal state).
+ var s43 = bind.fetchPending("80", "12", "00", "00", null);
+ bind.checkData("S43-C1 proactive command envelope", "1", (s43.resp.length >= 4 && s43.resp.substring(0, 2) === "D0") ? "1" : "0");
+ // S43-C1: REFRESH type/mode bytes are not corpus-fixed (envelope face only; per-mode bytes absent from input).
+ // S43:主动会话协议闭合(TS 102 223 §6.3:主动命令必须 TR 应答;
+ // UICC Reset 变体 E 表无 TR 行属编辑省略,golden U3 线证同构)。
+ var s43tr = bind.terminalResponseForPending("80", "14", "00", "00", "9000");
+
+ // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s96 = bind.resetAndAtr();
+ bind.checkData("IC44-IC1-K1-C1 ATR_present", "1", s96.atr_hex !== "" ? "1" : "0");
+
+ // IC ref inline @E 步骤 44(IC1 → 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 s97 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC44-IC1-K2-C2 FCP_Template", "1", s97.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC44-IC1-K2-C4 SW", "9000", s97.sw);
+
+ // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s98 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC44-IC1-K3-C4 SW", "9000", s98.sw);
+
+ // IC ref inline @E 步骤 44(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady99 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC44-IC1-K4-C4 final SW", "9000", steady99.final.sw);
+
+ // IC ref inline @E 步骤 44(IC2 → 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 s100 = bind.manageChannelOpen("9000");
+ bind.checkData("IC44-IC2-K1-C4 SW", "9000", s100.sw);
+ bind.checkData("IC44-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s100.chan !== null ? "1" : "0");
+
+ // IC ref inline @E 步骤 44(IC2 → 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 s101 = 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("IC44-IC2-K2-C4 SW", "9000", s101.sw);
+
+ // 步骤 45:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla45 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
+ var s45 = bind.sendApdu(sdCla45, "E2", "91", "00", "BF2804810204F0", "00", "9000");
+ bind.checkData("S45-C1 SW", "9000", s45.sw);
+ // Inline ASCII->hex helper (UTF8String expected values; values enter as
+ // ASCII literals traced to CaseIR check text / F_annexA_constants rows).
+ function __asciiHex(text) {
+ var out = "";
+ for (var i = 0; i < text.length; i++) {
+ var c = text.charCodeAt(i).toString(16).toUpperCase();
+ out += (c.length === 1 ? "0" + c : c);
+ }
+ return out;
+ }
+ var r2n45T = BindEs10xSingleRequest.parseBerTlv(s45.resp);
+ var r2n45Ok0 = r2n45T.length === 1 && r2n45T[0].tag === "BF28";
+ var r2n45B = r2n45Ok0 ? BindEs10xSingleRequest.parseBerTlv(r2n45T[0].value) : [];
+ var r2n45_brtag = r2n45B.length === 1 ? r2n45B[0].tag : "";
+ var r2n45_els = r2n45_brtag === "A0" ? BindEs10xSingleRequest.parseBerTlv(r2n45B[0].value) : [];
+ var r2n45Has = false;
+ for (var r2n45i = 0; r2n45i < r2n45_els.length; r2n45i++) {
+ if (r2n45_els[r2n45i].tag !== "BF2F") { continue; }
+ var r2n45F = {};
+ var r2n45M = BindEs10xSingleRequest.parseBerTlv(r2n45_els[r2n45i].value);
+ for (var r2n45j = 0; r2n45j < r2n45M.length; r2n45j++) { r2n45F[r2n45M[r2n45j].tag] = r2n45M[r2n45j].value; }
+ if (r2n45F["5A"] === "989209012143658709F5" && r2n45F["0C"] === __asciiHex("testsmdpplus1.example.com")) { r2n45Has = true; break; }
+ }
+ bind.checkData("S45-C2 notificationMetadataList contains NOTIF_METADATA_DELETE1", "1", r2n45Has ? "1" : "0");
+
+ // 步骤 46:MTD_STORE_DATA(tc_step)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla46 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
+ var s46 = bind.sendApdu(sdCla46, "E2", "91", "00", "BF4300", "00", "9000");
+ bind.checkData("S46-C1 SW", "9000", s46.sw);
+ // grat ES10b GetRAT 响应面(外层 BF43,S22_tag_table Table 66 + I_annexD3_es10x:179/249 机械推导;PPAR 内部 DER 定位 = §5.7.22 模块语料真空):
+ var rgw46 = BindGecaProc.parseGecaResponse(s46.resp, {outer: "BF43", required: [], optional: []});
+ var rrat46 = (rgw46.children.length === 1) ? BindEs10xSingleRequest.parseBerTlv(rgw46.children[0].value) : [];
+ // S46-C2: PPRS_ALLOWED 字段值(pprIds/allowedOperators/pprFlags)DER 定位 oracle 缺席——SGP.22 §5.7.22 ASN.1
+ // 模块未入包、tag 表仅给 BF43 外层——发射 fail-closed 恒断言诚实面(如实计错,不伪造通过)。
+ bind.checkData("S46-C2 PPRS_ALLOWED field-value oracle", "ppar_member_tag_oracle_declared", "oracle_absent_sgp22_5_7_22_module_vacuum");
+
+ // 步骤 47:MTD_STORE_DATA(tc_step;REQ: RQ33_012)
+ // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+ var sdCla47 = s100.chan !== null ? (s100.chan <= 3 ? 128 + s100.chan : 188 + s100.chan).toString(16).toUpperCase() : null;
+ var s47 = bind.sendApdu(sdCla47, "E2", "91", "00", "BF2D00", "00", "9000");
+ bind.checkData("S47-C1 SW", "9000", s47.sw);
+ var r2p47 = BindEs10xProcProfile.walkChoiceList(s47.resp, {respTag: "BF2D", okTag: "A0", errTag: "81"});
+ bind.checkData("S47-C2 profileInfoListOk empty", "1", (r2p47.branch_tag === "A0" && r2p47.elements.length === 0) ? "1" : "0");
}