eSIM RSP 测试用例对比站

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

源码对照:4.2.13.2.4

ES10b 获取 eUICCInfo2 / TC_eUICC_ES10b.GetEUICCInfo2

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
43 行 / 1789 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_GetEUICCInfo2/Import/TC_eUICC_ES10b_GetEUICCInfo2.js
208 行 / 18553 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js43 行 / 1789 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo2_02_Nominal_GetEUICCInfo2_call_after_AuthenticateServer (extracted verbatim)
2
3function TC_eUICC_ES10b_GetEUICCInfo2_02_Nominal_GetEUICCInfo2_call_after_AuthenticateServer()
4{
5	tracenamestr = "测试目的:执行AuthenticateServer后获取EUICCInfo2";
6	curDis.TraceStart(sno++,tracenamestr);
7
8	curDis.TestStepStart2(stno++,"eUICC卡片初始化;");
9	Ini_powerOn_eUICC_LPAe_not_activate();
10	
11	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
12	TS_MANAGE_CHANNEL_OPEN();
13	
14	curLogicChannel = 1;
15	
16	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
17	TS_SELECT("Select ISD",ISD_R_AID,"9000");
18	
19	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
20	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
21	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
22	Profile_load_procedure.ES10b_GetEUICCInfo1();
23
24	
25	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
26	Profile_load_procedure.ES10b_GetEUICCChallenge();
27
28	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
29	Profile_load_procedure.ES10b_AuthenticateServer();
30	var euiccInfo2_hexData_1 = Profile_load_procedure.authServerResponse.authenticateResponseOk.euiccSigned1.euiccInfo2.hexData;
31	
32	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
33	
34	var euiccInfo2 = new EUICCInfo2();
35	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
36	
37	euiccInfo2.checkCardResDataFormat(hexData);
38	curStrHandle.CheckData(euiccInfo2_hexData_1, euiccInfo2.hexData,"检查EUICCInfo2数据应与authServerResponse中返回的数据一致");
39	
40	check_EUICCInfo2(euiccInfo2);
41	RecoverCard();
42}
43
-cas 盲生成TC_eUICC_ES10b_GetEUICCInfo2/Import/TC_eUICC_ES10b_GetEUICCInfo2.js208 行 / 18553 字符 / gb18030入口函数 @L22
1// Author: 卡思Cas智能体
2// Date: 20260928-203316
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo2,Test Sequence #01 Nominal: GetEUICCInfo2 call after AuthenticateServer,适用性 M。
4// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
5//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
6//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO1 outer tag
7//   S1-C2 R_EUICC_INFO1 required members present;S1-C3 CI PK lists share at least one key id
8//   S2-C1 SW;S2-C2 R_CHALLENGE outer tag;S2-C2 euiccChallenge tag;S2-C2 euiccChallenge length
9//   IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW
10//   IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1);S3-C1 SW
11//   S3-C2 R_EUICC_INFO2 outer tag;S3-C2 R_EUICC_INFO2 required members present
12//   S3-C3 IC6 euiccInfo2 equality (extCardResource excluded) oracle
13//   S3-C4 RQ57_051 function accepted at this sequence position;S3-C5 RQ57_053 command data
14//   S3-C6 RQ57_058 ts102241Version presence observed
15//   S3-C7 RQ57_059 globalplatformVersion presence observed;S3-C8 RQ57_062 rpmSupport bit is 0
16//   S3-C9 svn consistency with step (6) via IC6 equality oracle
17//   S3-C10 RQ43_001 eUICC information provided in response
18//   S3-C11 RQ43_002 EUICCInfo2 received from eUICC
19// 本函数由 CaseIR 4.2.13.2.4 编译生成(4.2.13.2.4-TC_eUICC_ES10b.GetEUICCInfo2-20260928_043958,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
20// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
21// 适用性 M:编译期门,运行时由 harness 环境前置承担。
22function TC_eUICC_ES10b_GetEUICCInfo2_01_merged() {
23    var bind = curBind;
24
25    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
26    var s4 = bind.resetAndAtr();
27    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s4.atr_hex !== "" ? "1" : "0");
28
29    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
30    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
31    var s5 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
32    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s5.resp.length > 0 ? "1" : "0");
33    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s5.sw);
34
35    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
36    var s6 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
37    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s6.sw);
38
39    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
40    var steady7 = bind.runToSteadyState(function () {
41        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
42    });
43    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady7.final.sw);
44
45    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
46    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
47    var s8 = bind.manageChannelOpen("9000");
48    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s8.sw);
49    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s8.chan !== null ? "1" : "0");
50
51    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
52    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
53    var s9 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
54    // 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.
55    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s9.sw);
56
57    // 步骤 1:MTD_STORE_DATA(procedure_expansion)
58    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
59    var sdCla1 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
60    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2000", "00", "9000");
61    bind.checkData("S1-C1 SW", "9000", s1.sw);
62    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
63    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
64    bind.checkData("S1-C2 R_EUICC_INFO1 outer tag", "BF20", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
65    bind.checkData("S1-C2 R_EUICC_INFO1 required members present", "1", gw1.ok ? "1" : "0");
66    var pkV1 = BindEs10xSingleRequest.parseBerTlv(gw1.fields["A9"] || "");
67    var pkS1 = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
68    var samePk1 = false;
69    for (var pvi1 = 0; pvi1 < pkV1.length; pvi1++) {
70        for (var psi1 = 0; psi1 < pkS1.length; psi1++) {
71            if (pkV1[pvi1].value !== "" && pkV1[pvi1].value === pkS1[psi1].value) { samePk1 = true; }
72        }
73    }
74    bind.checkData("S1-C3 CI PK lists share at least one key id", "1", samePk1 ? "1" : "0");
75
76    // 步骤 2:MTD_STORE_DATA(procedure_expansion)
77    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
78    var sdCla2 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
79    var s2 = bind.sendApdu(sdCla2, "E2", "91", "00", "BF2E00", "00", "9000");
80    bind.checkData("S2-C1 SW", "9000", s2.sw);
81    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
82    var gw2 = BindGecaProc.parseGecaResponse(s2.resp, {outer: "BF2E", required: ["80"], optional: []});
83    bind.checkData("S2-C2 R_CHALLENGE outer tag", "BF2E", gw2.outer_tag === null ? "absent" : gw2.outer_tag);
84    var gwch2 = null; for (var gwci2 = 0; gwci2 < gw2.children.length; gwci2++) { if (gw2.children[gwci2].tag === "80") { gwch2 = gw2.children[gwci2]; } }
85    bind.checkData("S2-C2 euiccChallenge tag", "80", gwch2 === null ? "absent" : gwch2.tag);
86    bind.checkData("S2-C2 euiccChallenge length", "10", gwch2 === null ? "absent" : (gwch2.len < 16 ? ("0" + gwch2.len.toString(16).toUpperCase()) : gwch2.len.toString(16).toUpperCase()));
87
88    // IC6 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP): dynamic-bound 运行时绑定(payload-dynamic-binding lane 落地;声明面 = CaseIR initial_conditions IC6
89    // dynamic_binding;物料 = input/crypto SGP.26 v1.5 valid DPauth 双曲线套(sha256 锚定);binding 链结构照 vendor ABI
90    // RSP_Test_Procedure.js:1915-1950(组装+签名+CI PK ID+证书裁剪)/CommonArith.js:2210-2236(EccSignData(·,·,33)=ECDSA-SHA256 重试环)。
91    // 运行时随机输入(vendor RandHexStr 形态:engine.Hex+Math.random 机制字节,无静态虚构):
92    var ic6Tid = "";
93    var ic6Sc = "";
94    for (var ic6Ri = 0; ic6Ri < 16; ic6Ri++) {
95        ic6Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
96        ic6Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
97    }
98    // 物料套运行时选择(vendor FromPKID_Select_CertInfo 先例;E 表133 IC5:取步1 EUICC_CI_PK_ID_LIST_FOR_SIGNING 最高优先级命中套):
99    var ic6PkList = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
100    var ic6CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
101    var ic6Sks = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
102    var ic6Certs = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
103    var ic6Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
104    var ic6Sel = -1;
105    for (var ic6Pi = 0; ic6Pi < ic6PkList.length && ic6Sel < 0; ic6Pi++) {
106        for (var ic6Mi = 0; ic6Mi < ic6CiIds.length; ic6Mi++) {
107            if (ic6PkList[ic6Pi].value === ic6CiIds[ic6Mi]) { ic6Sel = ic6Mi; break; }
108        }
109    }
110    var ic6Info2 = "";
111    if (ic6Sel < 0) {
112        // fail-closed 诚实面:CI PK ID 零命中物料套 → 不发送,oracle 操作数缺席如实计错。
113        bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", "ic6_not_executed:no_matching_ci_pk_id");
114        bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", "0");
115    } else {
116        bind.engine.InitEccDomainParams(ic6Dps[ic6Sel][0], ic6Dps[ic6Sel][1], ic6Dps[ic6Sel][2], ic6Dps[ic6Sel][3], ic6Dps[ic6Sel][4], 1);
117        // 签名明文 = serverSigned1 完整 SEQUENCE TLV(vendor 签名面形态);成员 tag 自声明面 member_tags 注入:
118        var ic6S1 = BindEs10xSingleRequest.buildTlv("30",
119            BindEs10xSingleRequest.buildTlv("80", ic6Tid)
120            + BindEs10xSingleRequest.buildTlv("81", gw2.fields["80"] || "")
121            + BindEs10xSingleRequest.buildTlv("83", "736D6470706C75732E746573742E636F6D")
122            + BindEs10xSingleRequest.buildTlv("84", ic6Sc));
123        // 原生签名(vendor Ecc_Sign 同款长度校验重试环;输出 raw R||S 64B 线格式):
124        var ic6Sig = "";
125        while (ic6Sig.length != 2 * ic6Sks[ic6Sel].length) {
126            bind.engine.SleepTime(2000);
127            ic6Sig = bind.engine.EccSignData(ic6Sks[ic6Sel], ic6S1, 33);
128        }
129        var ic6Asm = BindEs10bAuthServer.assembleAuthenticateServer(
130            {outer: "BF38",
131             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
132             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
133            {transactionId: ic6Tid, euiccChallenge: gw2.fields["80"] || "",
134             serverAddress: "736D6470706C75732E746573742E636F6D", serverChallenge: ic6Sc,
135             serverSignature1: ic6Sig, euiccCiPKIdToBeUsed: ic6CiIds[ic6Sel],
136             serverCertificate: ic6Certs[ic6Sel], ctxParams1: "A10D800400000110A1058003000010"});
137        if (ic6Asm.error) {
138            bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", "ic6_assemble_error:" + ic6Asm.error);
139            bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", "0");
140        } else {
141            var ic6Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
142                {cla: "", ins: "E2", p1: "91", p2: "00", data: ic6Asm.request_hex,
143                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
144            var ic6Sw = (ic6Run.final && ic6Run.final.sw) ? ic6Run.final.sw : "transport_error";
145            bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", ic6Sw);
146            var ic6Ex = BindEs10bAuthServer.extractAuthenticateServer(
147                {outer: "BF38",
148                 ok: {tag: "A0", children: [
149                     {name: "euiccSigned1", tag: "30", children: [
150                         {name: "transactionId", tag: "80"},
151                         {name: "serverAddress", tag: "83"},
152                         {name: "serverChallenge", tag: "84"},
153                         {name: "euiccInfo2", tag: "BF22"},
154                         {name: "ctxParams1", tag: "A0"}]},
155                     {name: "euiccSignature1", tag: "5F37"},
156                     {name: "euiccCertificate", tag: "30"},
157                     {name: "eumCertificate", tag: "30"}]},
158                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "02"}]}},
159                ic6Run.final ? ic6Run.final.resp : "");
160            var ic6StructOk = ic6Ex.branch === "ok" && ic6Ex.ok && ic6Ex.ok.missing.length === 0 && ic6Ex.ok.fields.euiccSigned1.children.missing.length === 0;
161            bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", ic6StructOk ? "1" : "0");
162            if (ic6StructOk) {
163                ic6Info2 = ic6Ex.ok.fields.euiccSigned1.children.fields.euiccInfo2.value;
164            }
165        }
166    }
167
168    // 步骤 3:MTD_STORE_DATA(tc_step;REQ: RQ57_051, RQ57_053, RQ57_054, RQ57_058, RQ57_059, RQ57_062, RQ31_060, RQ43_001, RQ43_002)
169    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
170    var sdCla3 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
171    var s3 = bind.sendApdu(sdCla3, "E2", "91", "00", "BF2200", "00", "9000");
172    bind.checkData("S3-C1 SW", "9000", s3.sw);
173    // geca-proc ES10b Info 响应面(R_EUICC_INFO2,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
174    var gw3 = BindGecaProc.parseGecaResponse(s3.resp, {outer: "BF22", required: ["81", "82", "83", "84", "85", "88", "A9", "AA", "04", "0C"], optional: ["86", "87"]});
175    // IC6 dynamic-bound oracle 操作数准备(payload-dynamic-binding lane):双侧成员图
176    // (tag→value)剥离 tag 84(声明面 oracle_feed.exclude_tag 注入);IC6 操作数缺席即恒假。
177    var ic6Map3 = {};
178    var ic6Ch3 = BindEs10xSingleRequest.parseBerTlv(ic6Info2);
179    for (var ic6I3 = 0; ic6I3 < ic6Ch3.length; ic6I3++) {
180        if (ic6Ch3[ic6I3].tag !== "84") { ic6Map3[ic6Ch3[ic6I3].tag] = ic6Ch3[ic6I3].value; }
181    }
182    var s3Map = {};
183    for (var s3Ii = 0; s3Ii < gw3.children.length; s3Ii++) {
184        if (gw3.children[s3Ii].tag !== "84") { s3Map[gw3.children[s3Ii].tag] = gw3.children[s3Ii].value; }
185    }
186    var s3Ic6Eq = ic6Info2 !== "";
187    for (var kA3 in ic6Map3) {
188        if (Object.prototype.hasOwnProperty.call(ic6Map3, kA3) && s3Map[kA3] !== ic6Map3[kA3]) { s3Ic6Eq = false; }
189    }
190    for (var kB3 in s3Map) {
191        if (Object.prototype.hasOwnProperty.call(s3Map, kB3) && ic6Map3[kB3] !== s3Map[kB3]) { s3Ic6Eq = false; }
192    }
193    bind.checkData("S3-C2 R_EUICC_INFO2 outer tag", "BF22", gw3.outer_tag === null ? "absent" : gw3.outer_tag);
194    bind.checkData("S3-C2 R_EUICC_INFO2 required members present", "1", gw3.ok ? "1" : "0");
195    // S3-C3: IC6 动态绑定实断言——比对基准 = IC6 运行时响应 euiccSigned1.euiccInfo2;成员级相等(extCardResource 剥离,双侧成员集核对)。
196    bind.checkData("S3-C3 IC6 euiccInfo2 equality (extCardResource excluded) oracle", "1", s3Ic6Eq ? "1" : "0");
197    bind.checkData("S3-C4 RQ57_051 function accepted at this sequence position", "9000", s3.sw);
198    bind.checkData("S3-C5 RQ57_053 command data", "BF2200", s3.cmd.substring(10, 16));
199    bind.checkData("S3-C6 RQ57_058 ts102241Version presence observed", "1", gw3.ok ? "1" : "0");
200    bind.checkData("S3-C7 RQ57_059 globalplatformVersion presence observed", "1", gw3.ok ? "1" : "0");
201    var rspCap3 = gw3.fields["88"] || "";
202    bind.checkData("S3-C8 RQ57_062 rpmSupport bit is 0", "1", (rspCap3.length >= 4 && (parseInt(rspCap3.substring(2, 4), 16) & 32) === 0) ? "1" : "0");
203    // S3-C9: RQ31_060 svn 一致性实断言——期望 = IC6 运行时 euiccSigned1.euiccInfo2 svn 成员值,实际 = 本步响应 svn 成员。
204    bind.checkData("S3-C9 svn consistency with step (6) via IC6 equality oracle", ic6Map3["82"] !== undefined ? ic6Map3["82"] : "ic6_operand_absent", gw3.fields["82"] || "absent");
205    bind.checkData("S3-C10 RQ43_001 eUICC information provided in response", "1", (s3.resp !== "" && gw3.outer_tag === "BF22") ? "1" : "0");
206    bind.checkData("S3-C11 RQ43_002 EUICCInfo2 received from eUICC", "1", (s3.resp !== "" && gw3.outer_tag === "BF22") ? "1" : "0");
207}
208

完整 unified diff

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

展开 diff(252 行)
--- -man
+++ -cas
@@ -1,43 +1,208 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_GetEUICCInfo2_02_Nominal_GetEUICCInfo2_call_after_AuthenticateServer (extracted verbatim)
-
-function TC_eUICC_ES10b_GetEUICCInfo2_02_Nominal_GetEUICCInfo2_call_after_AuthenticateServer()
-{
-	tracenamestr = "测试目的:执行AuthenticateServer后获取EUICCInfo2";
-	curDis.TraceStart(sno++,tracenamestr);
-
-	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命令,执行GetEuiccInfo1Request;");
-	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
-	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
-	Profile_load_procedure.ES10b_GetEUICCInfo1();
-
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
-	Profile_load_procedure.ES10b_GetEUICCChallenge();
-
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	var euiccInfo2_hexData_1 = Profile_load_procedure.authServerResponse.authenticateResponseOk.euiccSigned1.euiccInfo2.hexData;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo2Request,获取EUICCInfo2;");
-	
-	var euiccInfo2 = new EUICCInfo2();
-	var hexData = LPAd_Transport_data_to_eUICC(GetEuiccInfo2RequestHexStr);
-	
-	euiccInfo2.checkCardResDataFormat(hexData);
-	curStrHandle.CheckData(euiccInfo2_hexData_1, euiccInfo2.hexData,"检查EUICCInfo2数据应与authServerResponse中返回的数据一致");
-	
-	check_EUICCInfo2(euiccInfo2);
-	RecoverCard();
+// Author: 卡思Cas智能体
+// Date: 20260928-203316
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.GetEUICCInfo2,Test Sequence #01 Nominal: GetEUICCInfo2 call after AuthenticateServer,适用性 M。
+// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
+//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
+//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO1 outer tag
+//   S1-C2 R_EUICC_INFO1 required members present;S1-C3 CI PK lists share at least one key id
+//   S2-C1 SW;S2-C2 R_CHALLENGE outer tag;S2-C2 euiccChallenge tag;S2-C2 euiccChallenge length
+//   IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW
+//   IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1);S3-C1 SW
+//   S3-C2 R_EUICC_INFO2 outer tag;S3-C2 R_EUICC_INFO2 required members present
+//   S3-C3 IC6 euiccInfo2 equality (extCardResource excluded) oracle
+//   S3-C4 RQ57_051 function accepted at this sequence position;S3-C5 RQ57_053 command data
+//   S3-C6 RQ57_058 ts102241Version presence observed
+//   S3-C7 RQ57_059 globalplatformVersion presence observed;S3-C8 RQ57_062 rpmSupport bit is 0
+//   S3-C9 svn consistency with step (6) via IC6 equality oracle
+//   S3-C10 RQ43_001 eUICC information provided in response
+//   S3-C11 RQ43_002 EUICCInfo2 received from eUICC
+// 本函数由 CaseIR 4.2.13.2.4 编译生成(4.2.13.2.4-TC_eUICC_ES10b.GetEUICCInfo2-20260928_043958,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_GetEUICCInfo2_01_merged() {
+    var bind = curBind;
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s4 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s4.atr_hex !== "" ? "1" : "0");
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
+    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
+    var s5 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s5.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s5.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s6 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s6.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady7 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady7.final.sw);
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
+    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s8 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s8.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s8.chan !== null ? "1" : "0");
+
+    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
+    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+    var s9 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
+    // MTD_SELECT expected face is SW-only (K Annex C.2 open-channel procedure step 2: no FCI content assertion in corpus); no fabricated template parse.
+    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s9.sw);
+
+    // 步骤 1:MTD_STORE_DATA(procedure_expansion)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla1 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
+    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S1-C1 SW", "9000", s1.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S1-C2 R_EUICC_INFO1 outer tag", "BF20", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
+    bind.checkData("S1-C2 R_EUICC_INFO1 required members present", "1", gw1.ok ? "1" : "0");
+    var pkV1 = BindEs10xSingleRequest.parseBerTlv(gw1.fields["A9"] || "");
+    var pkS1 = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
+    var samePk1 = false;
+    for (var pvi1 = 0; pvi1 < pkV1.length; pvi1++) {
+        for (var psi1 = 0; psi1 < pkS1.length; psi1++) {
+            if (pkV1[pvi1].value !== "" && pkV1[pvi1].value === pkS1[psi1].value) { samePk1 = true; }
+        }
+    }
+    bind.checkData("S1-C3 CI PK lists share at least one key id", "1", samePk1 ? "1" : "0");
+
+    // 步骤 2:MTD_STORE_DATA(procedure_expansion)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla2 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
+    var s2 = bind.sendApdu(sdCla2, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S2-C1 SW", "9000", s2.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw2 = BindGecaProc.parseGecaResponse(s2.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S2-C2 R_CHALLENGE outer tag", "BF2E", gw2.outer_tag === null ? "absent" : gw2.outer_tag);
+    var gwch2 = null; for (var gwci2 = 0; gwci2 < gw2.children.length; gwci2++) { if (gw2.children[gwci2].tag === "80") { gwch2 = gw2.children[gwci2]; } }
+    bind.checkData("S2-C2 euiccChallenge tag", "80", gwch2 === null ? "absent" : gwch2.tag);
+    bind.checkData("S2-C2 euiccChallenge length", "10", gwch2 === null ? "absent" : (gwch2.len < 16 ? ("0" + gwch2.len.toString(16).toUpperCase()) : gwch2.len.toString(16).toUpperCase()));
+
+    // IC6 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP): dynamic-bound 运行时绑定(payload-dynamic-binding lane 落地;声明面 = CaseIR initial_conditions IC6
+    // dynamic_binding;物料 = input/crypto SGP.26 v1.5 valid DPauth 双曲线套(sha256 锚定);binding 链结构照 vendor ABI
+    // RSP_Test_Procedure.js:1915-1950(组装+签名+CI PK ID+证书裁剪)/CommonArith.js:2210-2236(EccSignData(·,·,33)=ECDSA-SHA256 重试环)。
+    // 运行时随机输入(vendor RandHexStr 形态:engine.Hex+Math.random 机制字节,无静态虚构):
+    var ic6Tid = "";
+    var ic6Sc = "";
+    for (var ic6Ri = 0; ic6Ri < 16; ic6Ri++) {
+        ic6Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        ic6Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    // 物料套运行时选择(vendor FromPKID_Select_CertInfo 先例;E 表133 IC5:取步1 EUICC_CI_PK_ID_LIST_FOR_SIGNING 最高优先级命中套):
+    var ic6PkList = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
+    var ic6CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var ic6Sks = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
+    var ic6Certs = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
+    var ic6Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var ic6Sel = -1;
+    for (var ic6Pi = 0; ic6Pi < ic6PkList.length && ic6Sel < 0; ic6Pi++) {
+        for (var ic6Mi = 0; ic6Mi < ic6CiIds.length; ic6Mi++) {
+            if (ic6PkList[ic6Pi].value === ic6CiIds[ic6Mi]) { ic6Sel = ic6Mi; break; }
+        }
+    }
+    var ic6Info2 = "";
+    if (ic6Sel < 0) {
+        // fail-closed 诚实面:CI PK ID 零命中物料套 → 不发送,oracle 操作数缺席如实计错。
+        bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", "ic6_not_executed:no_matching_ci_pk_id");
+        bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", "0");
+    } else {
+        bind.engine.InitEccDomainParams(ic6Dps[ic6Sel][0], ic6Dps[ic6Sel][1], ic6Dps[ic6Sel][2], ic6Dps[ic6Sel][3], ic6Dps[ic6Sel][4], 1);
+        // 签名明文 = serverSigned1 完整 SEQUENCE TLV(vendor 签名面形态);成员 tag 自声明面 member_tags 注入:
+        var ic6S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", ic6Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw2.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "736D6470706C75732E746573742E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", ic6Sc));
+        // 原生签名(vendor Ecc_Sign 同款长度校验重试环;输出 raw R||S 64B 线格式):
+        var ic6Sig = "";
+        while (ic6Sig.length != 2 * ic6Sks[ic6Sel].length) {
+            bind.engine.SleepTime(2000);
+            ic6Sig = bind.engine.EccSignData(ic6Sks[ic6Sel], ic6S1, 33);
+        }
+        var ic6Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: ic6Tid, euiccChallenge: gw2.fields["80"] || "",
+             serverAddress: "736D6470706C75732E746573742E636F6D", serverChallenge: ic6Sc,
+             serverSignature1: ic6Sig, euiccCiPKIdToBeUsed: ic6CiIds[ic6Sel],
+             serverCertificate: ic6Certs[ic6Sel], ctxParams1: "A10D800400000110A1058003000010"});
+        if (ic6Asm.error) {
+            bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", "ic6_assemble_error:" + ic6Asm.error);
+            bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", "0");
+        } else {
+            var ic6Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: ic6Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var ic6Sw = (ic6Run.final && ic6Run.final.sw) ? ic6Run.final.sw : "transport_error";
+            bind.checkData("IC6-C1 MTD_STORE_DATA_SCRIPT(#AUTHENTICATE_SMDP) SW", "9000", ic6Sw);
+            var ic6Ex = BindEs10bAuthServer.extractAuthenticateServer(
+                {outer: "BF38",
+                 ok: {tag: "A0", children: [
+                     {name: "euiccSigned1", tag: "30", children: [
+                         {name: "transactionId", tag: "80"},
+                         {name: "serverAddress", tag: "83"},
+                         {name: "serverChallenge", tag: "84"},
+                         {name: "euiccInfo2", tag: "BF22"},
+                         {name: "ctxParams1", tag: "A0"}]},
+                     {name: "euiccSignature1", tag: "5F37"},
+                     {name: "euiccCertificate", tag: "30"},
+                     {name: "eumCertificate", tag: "30"}]},
+                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "02"}]}},
+                ic6Run.final ? ic6Run.final.resp : "");
+            var ic6StructOk = ic6Ex.branch === "ok" && ic6Ex.ok && ic6Ex.ok.missing.length === 0 && ic6Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            bind.checkData("IC6-C2 #R_AUTHENTICATE_SMDP authenticateResponseOk structure (euiccSigned1)", "1", ic6StructOk ? "1" : "0");
+            if (ic6StructOk) {
+                ic6Info2 = ic6Ex.ok.fields.euiccSigned1.children.fields.euiccInfo2.value;
+            }
+        }
+    }
+
+    // 步骤 3:MTD_STORE_DATA(tc_step;REQ: RQ57_051, RQ57_053, RQ57_054, RQ57_058, RQ57_059, RQ57_062, RQ31_060, RQ43_001, RQ43_002)
+    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
+    var sdCla3 = s8.chan !== null ? (s8.chan <= 3 ? 128 + s8.chan : 188 + s8.chan).toString(16).toUpperCase() : null;
+    var s3 = bind.sendApdu(sdCla3, "E2", "91", "00", "BF2200", "00", "9000");
+    bind.checkData("S3-C1 SW", "9000", s3.sw);
+    // 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"]});
+    // IC6 dynamic-bound oracle 操作数准备(payload-dynamic-binding lane):双侧成员图
+    // (tag→value)剥离 tag 84(声明面 oracle_feed.exclude_tag 注入);IC6 操作数缺席即恒假。
+    var ic6Map3 = {};
+    var ic6Ch3 = BindEs10xSingleRequest.parseBerTlv(ic6Info2);
+    for (var ic6I3 = 0; ic6I3 < ic6Ch3.length; ic6I3++) {
+        if (ic6Ch3[ic6I3].tag !== "84") { ic6Map3[ic6Ch3[ic6I3].tag] = ic6Ch3[ic6I3].value; }
+    }
+    var s3Map = {};
+    for (var s3Ii = 0; s3Ii < gw3.children.length; s3Ii++) {
+        if (gw3.children[s3Ii].tag !== "84") { s3Map[gw3.children[s3Ii].tag] = gw3.children[s3Ii].value; }
+    }
+    var s3Ic6Eq = ic6Info2 !== "";
+    for (var kA3 in ic6Map3) {
+        if (Object.prototype.hasOwnProperty.call(ic6Map3, kA3) && s3Map[kA3] !== ic6Map3[kA3]) { s3Ic6Eq = false; }
+    }
+    for (var kB3 in s3Map) {
+        if (Object.prototype.hasOwnProperty.call(s3Map, kB3) && ic6Map3[kB3] !== s3Map[kB3]) { s3Ic6Eq = false; }
+    }
+    bind.checkData("S3-C2 R_EUICC_INFO2 outer tag", "BF22", gw3.outer_tag === null ? "absent" : gw3.outer_tag);
+    bind.checkData("S3-C2 R_EUICC_INFO2 required members present", "1", gw3.ok ? "1" : "0");
+    // S3-C3: IC6 动态绑定实断言——比对基准 = IC6 运行时响应 euiccSigned1.euiccInfo2;成员级相等(extCardResource 剥离,双侧成员集核对)。
+    bind.checkData("S3-C3 IC6 euiccInfo2 equality (extCardResource excluded) oracle", "1", s3Ic6Eq ? "1" : "0");
+    bind.checkData("S3-C4 RQ57_051 function accepted at this sequence position", "9000", s3.sw);
+    bind.checkData("S3-C5 RQ57_053 command data", "BF2200", s3.cmd.substring(10, 16));
+    bind.checkData("S3-C6 RQ57_058 ts102241Version presence observed", "1", gw3.ok ? "1" : "0");
+    bind.checkData("S3-C7 RQ57_059 globalplatformVersion presence observed", "1", gw3.ok ? "1" : "0");
+    var rspCap3 = gw3.fields["88"] || "";
+    bind.checkData("S3-C8 RQ57_062 rpmSupport bit is 0", "1", (rspCap3.length >= 4 && (parseInt(rspCap3.substring(2, 4), 16) & 32) === 0) ? "1" : "0");
+    // S3-C9: RQ31_060 svn 一致性实断言——期望 = IC6 运行时 euiccSigned1.euiccInfo2 svn 成员值,实际 = 本步响应 svn 成员。
+    bind.checkData("S3-C9 svn consistency with step (6) via IC6 equality oracle", ic6Map3["82"] !== undefined ? ic6Map3["82"] : "ic6_operand_absent", gw3.fields["82"] || "absent");
+    bind.checkData("S3-C10 RQ43_001 eUICC information provided in response", "1", (s3.resp !== "" && gw3.outer_tag === "BF22") ? "1" : "0");
+    bind.checkData("S3-C11 RQ43_002 EUICCInfo2 received from eUICC", "1", (s3.resp !== "" && gw3.outer_tag === "BF22") ? "1" : "0");
 }