源码对照:4.2.19.2.4
ES10b 取消会话异常用例 / TC_eUICC_ES10b.CancelSession_ErrorCase
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
94 行 / 3974 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_CancelSession_ErrorCase/Import/TC_eUICC_ES10b_CancelSession_ErrorCase.js
163 行 / 14730 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js94 行 / 3974 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_CancelSession_ErrorCase_01_Error_No_on_going_RSP_session + TC_eUICC_ES10b_CancelSession_ErrorCase_02_Error_Invalid_Transaction_ID (extracted verbatim)
2
3function TC_eUICC_ES10b_CancelSession_ErrorCase_01_Error_No_on_going_RSP_session()
4{
5 tracenamestr = "测试目的:无正在进行的RSP会话时,取消RSP会话";
6 curDis.TraceStart(sno++,tracenamestr);
7
8 curDis.TestStepStart("eUICC卡片初始化;");
9 Ini_powerOn_eUICC_LPAe_not_activate();
10
11 curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
12 TS_MANAGE_CHANNEL_OPEN();
13
14 curLogicChannel = 1;
15
16 curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
17 TS_SELECT("Select ISD",ISD_R_AID,"9000");
18
19 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行CancelSession;");
20 var cancelSessionRequest = new CancelSessionRequest();
21
22 cancelSessionRequest.transactionId = "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
23 cancelSessionRequest.reason = CancelSessionReason.endUserRejection;
24 var CancelSessionRequestHexStr = cancelSessionRequest.GenHexData();
25 var hexData = LPAd_Transport_data_to_eUICC(CancelSessionRequestHexStr);
26
27 curStrHandle.CheckData("BF4103810105",hexData,"CancelSessionResponse检查");
28
29 RecoverCard();
30}
31
32function TC_eUICC_ES10b_CancelSession_ErrorCase_02_Error_Invalid_Transaction_ID()
33{
34
35 curLogicChannel = 0;
36
37 tracenamestr = "测试目的:取消RSP会话时,Transaction ID无效";
38 curDis.TraceStart(sno++,tracenamestr);
39
40 curDis.TestStepStart("eUICC卡片初始化;");
41 Ini_powerOn_eUICC_LPAe_not_activate();
42
43 curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
44 TS_MANAGE_CHANNEL_OPEN();
45
46 curLogicChannel = 1;
47
48 curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
49 TS_SELECT("Select ISD",ISD_R_AID,"9000");
50
51 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
52 curDis.OutlengStr(PROFILE_OPERATIONAL1_DATA,"PROFILE_OPERATIONAL1_DATA");
53 var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
54
55 Profile_load_procedure.ICCID = ICCID_OP_PROF1;
56 Profile_load_procedure.ES10b_GetEUICCInfo1();
57
58 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
59 Profile_load_procedure.ES10b_GetEUICCChallenge();
60
61 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
62 Profile_load_procedure.serverAddress = TEST_DP_ADDRESS1;
63 Profile_load_procedure.ES10b_AuthenticateServer();
64
65 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行CancelSession;");
66 var cancelSessionRequest = new CancelSessionRequest();
67
68 cancelSessionRequest.transactionId = "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
69 cancelSessionRequest.reason = CancelSessionReason.endUserRejection;
70 var CancelSessionRequestHexStr = cancelSessionRequest.GenHexData();
71 var hexData = LPAd_Transport_data_to_eUICC(CancelSessionRequestHexStr);
72 curStrHandle.CheckData("BF4103810105",hexData,"CancelSessionResponse检查");
73
74 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
75 Profile_load_procedure.ES10b_PrepareDownload();
76
77 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
78 Profile_load_procedure.ES10b_GetEID();
79
80 curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
81 Profile_load_procedure.serviceProviderName = SP_NAME1;
82 Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
83 Profile_load_procedure.iconType = "01";
84 Profile_load_procedure.icon = ICON_OP_PROF1;
85 Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
86 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
87 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
88 Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS1;
89 Profile_load_procedure.mccMnc = MCC_MNC1;
90 Profile_load_procedure.ES10b_LoadBoundProfilePackage();
91
92 RecoverCard();
93}
94
-cas 盲生成TC_eUICC_ES10b_CancelSession_ErrorCase/Import/TC_eUICC_ES10b_CancelSession_ErrorCase.js163 行 / 14730 字符 / gb18030入口函数 @L12
1// Author: 卡思Cas智能体
2// Date: 20261004-143915
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.CancelSession_ErrorCase,Test Sequence #01-#02 (Error: No on-going RSP session / Error: Invalid Transaction ID),适用性 M。
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 assemble;S3-C2 assemble;S3-C1 SW;S3-C2 error response;S4-C1 assemble
7// S4-C2 assemble;S4-C1 SW;S4-C2 error response;S5-C1 SW;S5-C2 R_PREP_DOWNLOAD response structure
8// S5-C2 R_PREP_DOWNLOAD outer tag;S5-C2 R_PREP_DOWNLOAD required members present
9// 本函数由 CaseIR 4.2.19.2.4 编译生成(fullwave-blindgen-live-70-W1-laneA5,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
10// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
11// 适用性 M:编译期门,运行时由 harness 环境前置承担。
12function TC_eUICC_ES10b_CancelSession_ErrorCase_01_02_merged() {
13 var bind = curBind;
14 var profileAidSession = BindEs10xProcProfileDynamic.beginSession(bind, "TC_eUICC_ES10b_CancelSession_ErrorCase_01_02_merged");
15 // S1-IC 卡态前提:无进行中的 RSP 会话(即未执行过 Common Mutual Authentication procedure): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
16 // S2-IC 通信已初始化且 S_LPAd 已选 ISD-R;#GET_EUICC_INFO1、#GET_EUICC_CHALLENGE、#AUTHENTICATE_SMDP 已发送;同一 GSMA CI 用于签名与验签(存在进行中的 RSP 会话): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
17
18 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
19 var s6 = bind.resetAndAtr();
20 bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s6.atr_hex !== "" ? "1" : "0");
21
22 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
23 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
24 var s7 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
25 bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s7.resp.length > 0 ? "1" : "0");
26 bind.checkData("IC1-IC1-K2-C4 SW", "9000", s7.sw);
27
28 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
29 var s8 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
30 bind.checkData("IC1-IC1-K3-C4 SW", "9000", s8.sw);
31
32 // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
33 var steady9 = bind.runToSteadyState(function () {
34 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
35 });
36 bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady9.final.sw);
37
38 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
39 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
40 var s10 = bind.manageChannelOpen("9000");
41 bind.checkData("IC2-IC2-K1-C4 SW", "9000", s10.sw);
42 bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s10.chan !== null ? "1" : "0");
43
44 // IC ref inline @E 步骤 2(IC2 → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
45 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
46 var s11 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
47 // 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.
48 bind.checkData("IC2-IC2-K2-C4 SW", "9000", s11.sw);
49
50 var cs3Tid = "0102030405060708090A0B0C0D0E0F10";
51 // cancel_session 运行时绑定(B-7):BF41{80<tid> 81 01 00}——tid 声明面哑值;reason S22:9140 枚举
52 var cs3Asm = BindEs10bCancelSession.assembleCancelSession({outer: "BF41", transactionId: "80", reason: "81"}, {transactionId: cs3Tid, reason: "00"});
53 if (cs3Asm.error) {
54 bind.checkData("S3-C1 assemble", "1", "0");
55 bind.checkData("S3-C2 assemble", "1", "0");
56 } else {
57 var s3 = bind.sendApdu(null, "E2", "91", "00", cs3Asm.request_hex, "00", "9000");
58 bind.checkData("S3-C1 SW", "9000", s3.sw);
59 var cs3Ex = BindEs10bCancelSession.extractCancelSession({outer: "BF41", ok: {tag: "A0", children: [{name: "euiccCancelSessionSigned", tag: "30", children: [{name: "transactionId", tag: "80"},{name: "smdpOid", tag: "81"},{name: "reason", tag: "82"}]},{name: "euiccCancelSessionSignature", tag: "5F37"}]},error: {tag: "81"}}, s3.resp);
60 bind.checkData("S3-C2 error response", "BF4103810105", cs3Ex.branch === "error" ? "BF41" + cs3Ex.error.raw : "branch_absent");
61 }
62
63 var cs4Tid = "0102030405060708090A0B0C0D0E0F10";
64 // cancel_session 运行时绑定(B-7):BF41{80<tid> 81 01 00}——tid 声明面哑值;reason S22:9140 枚举
65 var cs4Asm = BindEs10bCancelSession.assembleCancelSession({outer: "BF41", transactionId: "80", reason: "81"}, {transactionId: cs4Tid, reason: "00"});
66 if (cs4Asm.error) {
67 bind.checkData("S4-C1 assemble", "1", "0");
68 bind.checkData("S4-C2 assemble", "1", "0");
69 } else {
70 var s4 = bind.sendApdu(null, "E2", "91", "00", cs4Asm.request_hex, "00", "9000");
71 bind.checkData("S4-C1 SW", "9000", s4.sw);
72 var cs4Ex = BindEs10bCancelSession.extractCancelSession({outer: "BF41", ok: {tag: "A0", children: [{name: "euiccCancelSessionSigned", tag: "30", children: [{name: "transactionId", tag: "80"},{name: "smdpOid", tag: "81"},{name: "reason", tag: "82"}]},{name: "euiccCancelSessionSignature", tag: "5F37"}]},error: {tag: "81"}}, s4.resp);
73 bind.checkData("S4-C2 error response", "BF4103810105", cs4Ex.branch === "error" ? "BF41" + cs4Ex.error.raw : "branch_absent");
74 }
75
76 // 步骤 5:MTD_STORE_DATA_SCRIPT(tc_step)
77 // PREP_DOWNLOAD 运行时绑定(PREP_DOWNLOAD_NO_CC;SGP.22 §5.7.5 PrepareDownloadRequest=BF21 成员序 smdpSigned2(30) → smdpSignature2(5F37) → smdpCertificate(30)):
78 // 无前序 cma_decl 源(GIC CMA):transactionId 运行时随机(G Annex B <S_TRANSACTION_ID>,vendor RandHexStr 机制);euiccSignature1 无源→空串,诚实守卫拦截发送(不硬造签名明文)。
79 // DPpb cert/SK=named_certs/named_sks 声明面(sha256 锚编译期已核;曲线套索引=CI 选择同号——同一 GSMA CI 链)。
80 var pd5Certs = ["308201DFA00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434355A170D3330303333303038333434355A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D03010703420004104C2AE3D02DEF9C979261A7C6710076B970721D0955A2644AE05FAE4BC2314E5DC09F6BF0118026165342E212318775E365F3B57325373066B9906E0BD1388DA381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414E6EAF71EE0FB9430ECCD1EBB421F881437C13263300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034800304502203EA51B0129FC11E843C38C8CB104244CCF92D8DDBCD4D5F9DAFD0AEF700A9B1C022100FEF382FF71FEFC58168A3607D5685DB7CB48F6B434261891496385BCD6B5857A", "308201E0A00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434365A170D3330303333303038333434365A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004893253ECC94C51DF4FEE6E0DB0951CFC65627481B5418E557069F487FAA15466A5CB8E10CC2B38099CF2A929F7F82DAC065126B71D0640961DB7F91A49E95612A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E04160414A8C68DF449EB71EC723EAC132E40E4B6F54644FE300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D04030203470030440220244ED22119D00D49D9EA4AC5D9A6D925FACFCD1998A96448A870CE47FE5E470E02206C4BC7223C925D548DDDD3D8DDD81118DA202973311F6012BB0A20E6DD2D7B7B"];
81 var pd5Sks = ["DCD694B778957E8E9ADDBDD94433E9EF8F73D11E491C48D425A38A9491BD3BED", "75FF322F416616DAE1A484EF71D4874FB0DF3295FD35C2CBA489FBB2BB9C7BF6"];
82 var pd5Tid = "";
83 for (var pd5Ri = 0; pd5Ri < 16; pd5Ri++) {
84 pd5Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
85 }
86 var pd5Sel = 0;
87 var pd5Sig1 = "";
88 var pd5Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
89 if (pd5Sel < 0 || pd5Sig1 === "") {
90 // fail-closed 诚实面:CMA 运行时操作数缺席(CMA 失败/未执行)→ BF21 不发送(前序 CMA 步断言面已计错,本步不伪造通过)。
91 bind.checkData("S5-C1 SW", "9000", "pd5_not_executed:cma_operands_absent");
92 bind.checkData("S5-C2 R_PREP_DOWNLOAD response structure", "1", "pd5_not_executed:cma_operands_absent");
93 } else {
94 bind.engine.InitEccDomainParams(pd5Dps[pd5Sel][0], pd5Dps[pd5Sel][1], pd5Dps[pd5Sel][2], pd5Dps[pd5Sel][3], pd5Dps[pd5Sel][4], 1);
95 var pd5S2 = BindEs10xSingleRequest.buildTlv("30",
96 BindEs10xSingleRequest.buildTlv("80", pd5Tid)
97 + BindEs10xSingleRequest.buildTlv("01", "00"));
98 var pd5Sgn = "";
99 while (pd5Sgn.length != 2 * pd5Sks[pd5Sel].length) {
100 bind.engine.SleepTime(2000);
101 pd5Sgn = bind.engine.EccSignData(pd5Sks[pd5Sel], pd5S2 + BindEs10xSingleRequest.buildTlv("5F37", pd5Sig1), 33);
102 }
103 var pd5Req = BindEs10xSingleRequest.buildTlv("BF21",
104 pd5S2
105 + BindEs10xSingleRequest.buildTlv("5F37", pd5Sgn)
106 + BindEs10xSingleRequest.buildTlv("30", pd5Certs[pd5Sel]));
107 var pd5Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
108 {cla: "", ins: "E2", p1: "91", p2: "00", data: pd5Req,
109 le: "00", blockSize: 255, blockSw: "9000", final_sw: "9000"});
110 var pd5Sw = (pd5Run.final && pd5Run.final.sw) ? pd5Run.final.sw : "transport_error";
111 bind.checkData("S5-C1 SW", "9000", pd5Sw);
112 // euiccOtpk(5F49)运行时提取面登记:响应 ok 分支 euiccSigned2 成员(BF21 A0 30 5F49 路径),供后续步(RETRY 形 bppEuiccOtpk/BPP 装配)消费。
113 var pd5Otpk = "";
114 if (pd5Run.final && pd5Run.final.resp) {
115 var pd5L1 = BindEs10xSingleRequest.parseBerTlv(pd5Run.final.resp);
116 for (var pd5I1 = 0; pd5I1 < pd5L1.length && pd5Otpk === ""; pd5I1++) {
117 if (pd5L1[pd5I1].tag !== "BF21") continue;
118 var pd5L2 = BindEs10xSingleRequest.parseBerTlv(pd5L1[pd5I1].value);
119 for (var pd5I2 = 0; pd5I2 < pd5L2.length && pd5Otpk === ""; pd5I2++) {
120 if (pd5L2[pd5I2].tag !== "A0") continue;
121 var pd5L3 = BindEs10xSingleRequest.parseBerTlv(pd5L2[pd5I2].value);
122 for (var pd5I3 = 0; pd5I3 < pd5L3.length && pd5Otpk === ""; pd5I3++) {
123 if (pd5L3[pd5I3].tag !== "30") continue;
124 var pd5L4 = BindEs10xSingleRequest.parseBerTlv(pd5L3[pd5I3].value);
125 for (var pd5I4 = 0; pd5I4 < pd5L4.length; pd5I4++) {
126 if (pd5L4[pd5I4].tag === "5F49") pd5Otpk = pd5L4[pd5I4].value;
127 }
128 }
129 }
130 }
131 }
132 }
133 // R_PREP_DOWNLOAD 响应结构(S22_prep_dl §5.7.5 行 77-111:外层 BF21 CHOICE;downloadResponseOk A0{euiccSigned2 30{80,5F49}, euiccSignature2 5F37}):运行时域,仅结构与在场性断言。
134 var pd5RSR = (pd5Run.final && pd5Run.final.resp) ? BindEs10xSingleRequest.parseBerTlv(pd5Run.final.resp) : [];
135 var pd5RSOuter = pd5RSR.length === 1 ? pd5RSR[0].tag : "absent";
136 var pd5RSBr = pd5RSR.length === 1 ? BindEs10xSingleRequest.parseBerTlv(pd5RSR[0].value) : [];
137 var pd5RSA0 = false, pd5RSA1 = false, pd5RSCk = [];
138 for (var pd5RSi = 0; pd5RSi < pd5RSBr.length; pd5RSi++) {
139 if (pd5RSBr[pd5RSi].tag === "A0") { pd5RSA0 = true; pd5RSCk = BindEs10xSingleRequest.parseBerTlv(pd5RSBr[pd5RSi].value); }
140 if (pd5RSBr[pd5RSi].tag === "A1") { pd5RSA1 = true; pd5RSCk = BindEs10xSingleRequest.parseBerTlv(pd5RSBr[pd5RSi].value); }
141 }
142 var pd5RS30 = false, pd5RS5F37 = false, pd5RS80 = false, pd5RS02 = false;
143 for (var pd5RSj = 0; pd5RSj < pd5RSCk.length; pd5RSj++) {
144 if (pd5RSCk[pd5RSj].tag === "30") pd5RS30 = true;
145 if (pd5RSCk[pd5RSj].tag === "5F37") pd5RS5F37 = true;
146 if (pd5RSCk[pd5RSj].tag === "80") pd5RS80 = true;
147 if (pd5RSCk[pd5RSj].tag === "02") pd5RS02 = true;
148 }
149 var pd5RS5F49 = false;
150 if (pd5RS30) {
151 for (var pd5RSk = 0; pd5RSk < pd5RSCk.length; pd5RSk++) {
152 if (pd5RSCk[pd5RSk].tag !== "30") continue;
153 var pd5RSU = BindEs10xSingleRequest.parseBerTlv(pd5RSCk[pd5RSk].value);
154 for (var pd5RSm = 0; pd5RSm < pd5RSU.length; pd5RSm++) {
155 if (pd5RSU[pd5RSm].tag === "5F49") pd5RS5F49 = true;
156 if (pd5RSU[pd5RSm].tag === "80") pd5RS80 = true;
157 }
158 }
159 }
160 bind.checkData("S5-C2 R_PREP_DOWNLOAD outer tag", "BF21", pd5RSOuter);
161 bind.checkData("S5-C2 R_PREP_DOWNLOAD required members present", "1", (pd5RSA0 && pd5RS30 && pd5RS80 && pd5RS5F49 && pd5RS5F37) ? "1" : "0");
162}
163
完整 unified diff
行级差异:新增 156 行 / 删除 87 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(253 行)
--- -man
+++ -cas
@@ -1,94 +1,163 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_CancelSession_ErrorCase_01_Error_No_on_going_RSP_session + TC_eUICC_ES10b_CancelSession_ErrorCase_02_Error_Invalid_Transaction_ID (extracted verbatim)
+// Author: 卡思Cas智能体
+// Date: 20261004-143915
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.CancelSession_ErrorCase,Test Sequence #01-#02 (Error: No on-going RSP session / Error: Invalid Transaction ID),适用性 M。
+// 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 assemble;S3-C2 assemble;S3-C1 SW;S3-C2 error response;S4-C1 assemble
+// S4-C2 assemble;S4-C1 SW;S4-C2 error response;S5-C1 SW;S5-C2 R_PREP_DOWNLOAD response structure
+// S5-C2 R_PREP_DOWNLOAD outer tag;S5-C2 R_PREP_DOWNLOAD required members present
+// 本函数由 CaseIR 4.2.19.2.4 编译生成(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:编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_ES10b_CancelSession_ErrorCase_01_02_merged() {
+ var bind = curBind;
+ var profileAidSession = BindEs10xProcProfileDynamic.beginSession(bind, "TC_eUICC_ES10b_CancelSession_ErrorCase_01_02_merged");
+ // S1-IC 卡态前提:无进行中的 RSP 会话(即未执行过 Common Mutual Authentication procedure): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+ // S2-IC 通信已初始化且 S_LPAd 已选 ISD-R;#GET_EUICC_INFO1、#GET_EUICC_CHALLENGE、#AUTHENTICATE_SMDP 已发送;同一 GSMA CI 用于签名与验签(存在进行中的 RSP 会话): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
-function TC_eUICC_ES10b_CancelSession_ErrorCase_01_Error_No_on_going_RSP_session()
-{
- tracenamestr = "测试目的:无正在进行的RSP会话时,取消RSP会话";
- curDis.TraceStart(sno++,tracenamestr);
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+ var s6 = bind.resetAndAtr();
+ bind.checkData("IC1-IC1-K1-C1 ATR_present", "1", s6.atr_hex !== "" ? "1" : "0");
- curDis.TestStepStart("eUICC卡片初始化;");
- Ini_powerOn_eUICC_LPAe_not_activate();
-
- curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
- TS_MANAGE_CHANNEL_OPEN();
-
- curLogicChannel = 1;
-
- curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
- TS_SELECT("Select ISD",ISD_R_AID,"9000");
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行CancelSession;");
- var cancelSessionRequest = new CancelSessionRequest();
-
- cancelSessionRequest.transactionId = "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- cancelSessionRequest.reason = CancelSessionReason.endUserRejection;
- var CancelSessionRequestHexStr = cancelSessionRequest.GenHexData();
- var hexData = LPAd_Transport_data_to_eUICC(CancelSessionRequestHexStr);
-
- curStrHandle.CheckData("BF4103810105",hexData,"CancelSessionResponse检查");
-
- RecoverCard();
-}
+ // 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 s7 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("IC1-IC1-K2-C2 FCP_Template", "1", s7.resp.length > 0 ? "1" : "0");
+ bind.checkData("IC1-IC1-K2-C4 SW", "9000", s7.sw);
-function TC_eUICC_ES10b_CancelSession_ErrorCase_02_Error_Invalid_Transaction_ID()
-{
-
- curLogicChannel = 0;
-
- tracenamestr = "测试目的:取消RSP会话时,Transaction ID无效";
- curDis.TraceStart(sno++,tracenamestr);
-
- curDis.TestStepStart("eUICC卡片初始化;");
- Ini_powerOn_eUICC_LPAe_not_activate();
-
- curDis.TestStepStart("读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
- TS_MANAGE_CHANNEL_OPEN();
-
- curLogicChannel = 1;
-
- curDis.TestStepStart("读卡器向卡片发送SELECT命令,选择ISD-R;");
- TS_SELECT("Select ISD",ISD_R_AID,"9000");
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
- curDis.OutlengStr(PROFILE_OPERATIONAL1_DATA,"PROFILE_OPERATIONAL1_DATA");
- var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
-
- Profile_load_procedure.ICCID = ICCID_OP_PROF1;
- Profile_load_procedure.ES10b_GetEUICCInfo1();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
- Profile_load_procedure.ES10b_GetEUICCChallenge();
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+ var s8 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("IC1-IC1-K3-C4 SW", "9000", s8.sw);
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
- Profile_load_procedure.serverAddress = TEST_DP_ADDRESS1;
- Profile_load_procedure.ES10b_AuthenticateServer();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行CancelSession;");
- var cancelSessionRequest = new CancelSessionRequest();
-
- cancelSessionRequest.transactionId = "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
- cancelSessionRequest.reason = CancelSessionReason.endUserRejection;
- var CancelSessionRequestHexStr = cancelSessionRequest.GenHexData();
- var hexData = LPAd_Transport_data_to_eUICC(CancelSessionRequestHexStr);
- curStrHandle.CheckData("BF4103810105",hexData,"CancelSessionResponse检查");
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行PrepareDownloadRequest;");
- Profile_load_procedure.ES10b_PrepareDownload();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行GetEuiccDataRequest(GetEID);");
- Profile_load_procedure.ES10b_GetEID();
-
- curDis.TestStepStart("读卡器向卡片发送 StoreData命令,执行BoundProfilePackage;");
- Profile_load_procedure.serviceProviderName = SP_NAME1;
- Profile_load_procedure.profileName = PROFILE_OPERATIONAL1_NAME1;
- Profile_load_procedure.iconType = "01";
- Profile_load_procedure.icon = ICON_OP_PROF1;
- Profile_load_procedure.notificationConfigurationInfo = new SequenceOfElement("30");
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0] = new NotificationConfigurationInformation();
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].profileManagementOperation = "04F0";
- Profile_load_procedure.notificationConfigurationInfo.arrOfElement[0].notificationAddress = TEST_DP_ADDRESS1;
- Profile_load_procedure.mccMnc = MCC_MNC1;
- Profile_load_procedure.ES10b_LoadBoundProfilePackage();
+ // IC ref inline @E 步骤 1(IC1 → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+ var steady9 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+ });
+ bind.checkData("IC1-IC1-K4-C4 final SW", "9000", steady9.final.sw);
- RecoverCard();
+ // 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 s10 = bind.manageChannelOpen("9000");
+ bind.checkData("IC2-IC2-K1-C4 SW", "9000", s10.sw);
+ bind.checkData("IC2-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s10.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 s11 = 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", s11.sw);
+
+ var cs3Tid = "0102030405060708090A0B0C0D0E0F10";
+ // cancel_session 运行时绑定(B-7):BF41{80<tid> 81 01 00}——tid 声明面哑值;reason S22:9140 枚举
+ var cs3Asm = BindEs10bCancelSession.assembleCancelSession({outer: "BF41", transactionId: "80", reason: "81"}, {transactionId: cs3Tid, reason: "00"});
+ if (cs3Asm.error) {
+ bind.checkData("S3-C1 assemble", "1", "0");
+ bind.checkData("S3-C2 assemble", "1", "0");
+ } else {
+ var s3 = bind.sendApdu(null, "E2", "91", "00", cs3Asm.request_hex, "00", "9000");
+ bind.checkData("S3-C1 SW", "9000", s3.sw);
+ var cs3Ex = BindEs10bCancelSession.extractCancelSession({outer: "BF41", ok: {tag: "A0", children: [{name: "euiccCancelSessionSigned", tag: "30", children: [{name: "transactionId", tag: "80"},{name: "smdpOid", tag: "81"},{name: "reason", tag: "82"}]},{name: "euiccCancelSessionSignature", tag: "5F37"}]},error: {tag: "81"}}, s3.resp);
+ bind.checkData("S3-C2 error response", "BF4103810105", cs3Ex.branch === "error" ? "BF41" + cs3Ex.error.raw : "branch_absent");
+ }
+
+ var cs4Tid = "0102030405060708090A0B0C0D0E0F10";
+ // cancel_session 运行时绑定(B-7):BF41{80<tid> 81 01 00}——tid 声明面哑值;reason S22:9140 枚举
+ var cs4Asm = BindEs10bCancelSession.assembleCancelSession({outer: "BF41", transactionId: "80", reason: "81"}, {transactionId: cs4Tid, reason: "00"});
+ if (cs4Asm.error) {
+ bind.checkData("S4-C1 assemble", "1", "0");
+ bind.checkData("S4-C2 assemble", "1", "0");
+ } else {
+ var s4 = bind.sendApdu(null, "E2", "91", "00", cs4Asm.request_hex, "00", "9000");
+ bind.checkData("S4-C1 SW", "9000", s4.sw);
+ var cs4Ex = BindEs10bCancelSession.extractCancelSession({outer: "BF41", ok: {tag: "A0", children: [{name: "euiccCancelSessionSigned", tag: "30", children: [{name: "transactionId", tag: "80"},{name: "smdpOid", tag: "81"},{name: "reason", tag: "82"}]},{name: "euiccCancelSessionSignature", tag: "5F37"}]},error: {tag: "81"}}, s4.resp);
+ bind.checkData("S4-C2 error response", "BF4103810105", cs4Ex.branch === "error" ? "BF41" + cs4Ex.error.raw : "branch_absent");
+ }
+
+ // 步骤 5:MTD_STORE_DATA_SCRIPT(tc_step)
+ // PREP_DOWNLOAD 运行时绑定(PREP_DOWNLOAD_NO_CC;SGP.22 §5.7.5 PrepareDownloadRequest=BF21 成员序 smdpSigned2(30) → smdpSignature2(5F37) → smdpCertificate(30)):
+ // 无前序 cma_decl 源(GIC CMA):transactionId 运行时随机(G Annex B <S_TRANSACTION_ID>,vendor RandHexStr 机制);euiccSignature1 无源→空串,诚实守卫拦截发送(不硬造签名明文)。
+ // DPpb cert/SK=named_certs/named_sks 声明面(sha256 锚编译期已核;曲线套索引=CI 选择同号——同一 GSMA CI 链)。
+ var pd5Certs = ["308201DFA00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434355A170D3330303333303038333434355A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D03010703420004104C2AE3D02DEF9C979261A7C6710076B970721D0955A2644AE05FAE4BC2314E5DC09F6BF0118026165342E212318775E365F3B57325373066B9906E0BD1388DA381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414E6EAF71EE0FB9430ECCD1EBB421F881437C13263300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034800304502203EA51B0129FC11E843C38C8CB104244CCF92D8DDBCD4D5F9DAFD0AEF700A9B1C022100FEF382FF71FEFC58168A3607D5685DB7CB48F6B434261891496385BCD6B5857A", "308201E0A00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434365A170D3330303333303038333434365A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004893253ECC94C51DF4FEE6E0DB0951CFC65627481B5418E557069F487FAA15466A5CB8E10CC2B38099CF2A929F7F82DAC065126B71D0640961DB7F91A49E95612A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E04160414A8C68DF449EB71EC723EAC132E40E4B6F54644FE300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D04030203470030440220244ED22119D00D49D9EA4AC5D9A6D925FACFCD1998A96448A870CE47FE5E470E02206C4BC7223C925D548DDDD3D8DDD81118DA202973311F6012BB0A20E6DD2D7B7B"];
+ var pd5Sks = ["DCD694B778957E8E9ADDBDD94433E9EF8F73D11E491C48D425A38A9491BD3BED", "75FF322F416616DAE1A484EF71D4874FB0DF3295FD35C2CBA489FBB2BB9C7BF6"];
+ var pd5Tid = "";
+ for (var pd5Ri = 0; pd5Ri < 16; pd5Ri++) {
+ pd5Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+ }
+ var pd5Sel = 0;
+ var pd5Sig1 = "";
+ var pd5Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+ if (pd5Sel < 0 || pd5Sig1 === "") {
+ // fail-closed 诚实面:CMA 运行时操作数缺席(CMA 失败/未执行)→ BF21 不发送(前序 CMA 步断言面已计错,本步不伪造通过)。
+ bind.checkData("S5-C1 SW", "9000", "pd5_not_executed:cma_operands_absent");
+ bind.checkData("S5-C2 R_PREP_DOWNLOAD response structure", "1", "pd5_not_executed:cma_operands_absent");
+ } else {
+ bind.engine.InitEccDomainParams(pd5Dps[pd5Sel][0], pd5Dps[pd5Sel][1], pd5Dps[pd5Sel][2], pd5Dps[pd5Sel][3], pd5Dps[pd5Sel][4], 1);
+ var pd5S2 = BindEs10xSingleRequest.buildTlv("30",
+ BindEs10xSingleRequest.buildTlv("80", pd5Tid)
+ + BindEs10xSingleRequest.buildTlv("01", "00"));
+ var pd5Sgn = "";
+ while (pd5Sgn.length != 2 * pd5Sks[pd5Sel].length) {
+ bind.engine.SleepTime(2000);
+ pd5Sgn = bind.engine.EccSignData(pd5Sks[pd5Sel], pd5S2 + BindEs10xSingleRequest.buildTlv("5F37", pd5Sig1), 33);
+ }
+ var pd5Req = BindEs10xSingleRequest.buildTlv("BF21",
+ pd5S2
+ + BindEs10xSingleRequest.buildTlv("5F37", pd5Sgn)
+ + BindEs10xSingleRequest.buildTlv("30", pd5Certs[pd5Sel]));
+ var pd5Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+ {cla: "", ins: "E2", p1: "91", p2: "00", data: pd5Req,
+ le: "00", blockSize: 255, blockSw: "9000", final_sw: "9000"});
+ var pd5Sw = (pd5Run.final && pd5Run.final.sw) ? pd5Run.final.sw : "transport_error";
+ bind.checkData("S5-C1 SW", "9000", pd5Sw);
+ // euiccOtpk(5F49)运行时提取面登记:响应 ok 分支 euiccSigned2 成员(BF21 A0 30 5F49 路径),供后续步(RETRY 形 bppEuiccOtpk/BPP 装配)消费。
+ var pd5Otpk = "";
+ if (pd5Run.final && pd5Run.final.resp) {
+ var pd5L1 = BindEs10xSingleRequest.parseBerTlv(pd5Run.final.resp);
+ for (var pd5I1 = 0; pd5I1 < pd5L1.length && pd5Otpk === ""; pd5I1++) {
+ if (pd5L1[pd5I1].tag !== "BF21") continue;
+ var pd5L2 = BindEs10xSingleRequest.parseBerTlv(pd5L1[pd5I1].value);
+ for (var pd5I2 = 0; pd5I2 < pd5L2.length && pd5Otpk === ""; pd5I2++) {
+ if (pd5L2[pd5I2].tag !== "A0") continue;
+ var pd5L3 = BindEs10xSingleRequest.parseBerTlv(pd5L2[pd5I2].value);
+ for (var pd5I3 = 0; pd5I3 < pd5L3.length && pd5Otpk === ""; pd5I3++) {
+ if (pd5L3[pd5I3].tag !== "30") continue;
+ var pd5L4 = BindEs10xSingleRequest.parseBerTlv(pd5L3[pd5I3].value);
+ for (var pd5I4 = 0; pd5I4 < pd5L4.length; pd5I4++) {
+ if (pd5L4[pd5I4].tag === "5F49") pd5Otpk = pd5L4[pd5I4].value;
+ }
+ }
+ }
+ }
+ }
+ }
+ // R_PREP_DOWNLOAD 响应结构(S22_prep_dl §5.7.5 行 77-111:外层 BF21 CHOICE;downloadResponseOk A0{euiccSigned2 30{80,5F49}, euiccSignature2 5F37}):运行时域,仅结构与在场性断言。
+ var pd5RSR = (pd5Run.final && pd5Run.final.resp) ? BindEs10xSingleRequest.parseBerTlv(pd5Run.final.resp) : [];
+ var pd5RSOuter = pd5RSR.length === 1 ? pd5RSR[0].tag : "absent";
+ var pd5RSBr = pd5RSR.length === 1 ? BindEs10xSingleRequest.parseBerTlv(pd5RSR[0].value) : [];
+ var pd5RSA0 = false, pd5RSA1 = false, pd5RSCk = [];
+ for (var pd5RSi = 0; pd5RSi < pd5RSBr.length; pd5RSi++) {
+ if (pd5RSBr[pd5RSi].tag === "A0") { pd5RSA0 = true; pd5RSCk = BindEs10xSingleRequest.parseBerTlv(pd5RSBr[pd5RSi].value); }
+ if (pd5RSBr[pd5RSi].tag === "A1") { pd5RSA1 = true; pd5RSCk = BindEs10xSingleRequest.parseBerTlv(pd5RSBr[pd5RSi].value); }
+ }
+ var pd5RS30 = false, pd5RS5F37 = false, pd5RS80 = false, pd5RS02 = false;
+ for (var pd5RSj = 0; pd5RSj < pd5RSCk.length; pd5RSj++) {
+ if (pd5RSCk[pd5RSj].tag === "30") pd5RS30 = true;
+ if (pd5RSCk[pd5RSj].tag === "5F37") pd5RS5F37 = true;
+ if (pd5RSCk[pd5RSj].tag === "80") pd5RS80 = true;
+ if (pd5RSCk[pd5RSj].tag === "02") pd5RS02 = true;
+ }
+ var pd5RS5F49 = false;
+ if (pd5RS30) {
+ for (var pd5RSk = 0; pd5RSk < pd5RSCk.length; pd5RSk++) {
+ if (pd5RSCk[pd5RSk].tag !== "30") continue;
+ var pd5RSU = BindEs10xSingleRequest.parseBerTlv(pd5RSCk[pd5RSk].value);
+ for (var pd5RSm = 0; pd5RSm < pd5RSU.length; pd5RSm++) {
+ if (pd5RSU[pd5RSm].tag === "5F49") pd5RS5F49 = true;
+ if (pd5RSU[pd5RSm].tag === "80") pd5RS80 = true;
+ }
+ }
+ }
+ bind.checkData("S5-C2 R_PREP_DOWNLOAD outer tag", "BF21", pd5RSOuter);
+ bind.checkData("S5-C2 R_PREP_DOWNLOAD required members present", "1", (pd5RSA0 && pd5RS30 && pd5RS80 && pd5RS5F49 && pd5RS5F37) ? "1" : "0");
}