eSIM RSP 测试用例对比站

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

源码对照:4.2.18.2.8

ES10b 服务器认证(SM-DS)异常用例 / TC_eUICC_ES10b.AuthenticateServer_SM-DS_ErrorCases

左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
241 行 / 9150 字符 / gb18030
-cas 入口
TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases/Import/TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases.js
724 行 / 73028 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js241 行 / 9150 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_01_Error_With_Incorrect_SM_DSauth_certificate + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_02_Error_With_Invalid_SM_DS_Signature + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_03_Error_Unsupported_Curve + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_04_Error_eUICC_Challenge_Mismatch + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_05_Error_Unknown_CI_PK + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_06_Error_No_RSP_session_on_going (extracted verbatim)
2
3function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_01_Error_With_Incorrect_SM_DSauth_certificate()
4{
5	
6	tracenamestr = "测试目的:执行AuthenticateServer指令,使用错误的SM-DSauth证书(如 签名无效)";
7	curDis.TraceStart(sno++,tracenamestr);
8
9	curDis.TestStepStart2(stno++,"复位;");
10	ResetCard();
11	
12	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
13	TS_TERMINAL_CAPABILITY_cmd();
14	
15	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
16	TS_MANAGE_CHANNEL_OPEN();
17	
18	curLogicChannel = 1;
19	
20	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
21	TS_SELECT("Select ISD",ISD_R_AID,"9000");
22	
23	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
24	pkId_CI_ForVerification = pkId_CI_ECDSA_BRP;
25	pkId_CI_ForSigning = pkId_CI_ECDSA_BRP;
26	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
27	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
28	Profile_load_procedure.ES10b_GetEUICCInfo1();
29
30	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
31	Profile_load_procedure.ES10b_GetEUICCChallenge();
32
33	
34
35	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
36	Profile_load_procedure.isErrorTest = true;
37	euiccAuthenticateErrorCode = AuthenticateErrorCode.invalidCertificate;
38	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_INV_SIGN_BRP;	
39	Profile_load_procedure.ES10b_AuthenticateServer();
40	
41	RecoverCard();
42}
43
44function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_02_Error_With_Invalid_SM_DS_Signature()
45{
46	
47	tracenamestr = "测试目的:执行AuthenticateServer指令,SM-DS签名无效";
48	curDis.TraceStart(sno++,tracenamestr);
49
50	curDis.TestStepStart2(stno++,"复位;");
51	ResetCard();
52	
53	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
54	TS_TERMINAL_CAPABILITY_cmd();
55	
56	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
57	TS_MANAGE_CHANNEL_OPEN();
58	
59	curLogicChannel = 1;
60	
61	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
62	TS_SELECT("Select ISD",ISD_R_AID,"9000");
63	
64	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
65	pkId_CI_ForVerification = pkId_CI_ECDSA_BRP;
66	pkId_CI_ForSigning = pkId_CI_ECDSA_BRP;
67	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
68	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
69	Profile_load_procedure.ES10b_GetEUICCInfo1();
70	
71	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
72	Profile_load_procedure.ES10b_GetEUICCChallenge();	
73	
74	Profile_load_procedure.isErrorTest=true;
75	Profile_load_procedure.DPauthInforObj.D_key=curStrHandle.RandHexStr(32);
76	euiccAuthenticateErrorCode=AuthenticateErrorCode.invalidSignature;
77	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
78	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_ECDSA_BRP;	
79	Profile_load_procedure.ES10b_AuthenticateServer();
80	
81	
82	RecoverCard();
83
84}
85
86function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_03_Error_Unsupported_Curve()
87{
88	
89	tracenamestr = "测试目的:执行AuthenticateServer指令时曲线不支持";
90	
91	curDis.TraceStart(sno++,tracenamestr);
92
93	curDis.TestStepStart2(stno++,"复位;");
94	ResetCard();
95	
96	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
97	TS_TERMINAL_CAPABILITY_cmd();
98	
99	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
100	TS_MANAGE_CHANNEL_OPEN();
101	
102	curLogicChannel = 1;
103	
104	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
105	TS_SELECT("Select ISD",ISD_R_AID,"9000");
106	
107	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
108	pkId_CI_ForVerification = pkId_CI_ECDSA_NIST;
109	pkId_CI_ForSigning = pkId_CI_ECDSA_NIST;
110	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
111	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
112	Profile_load_procedure.ES10b_GetEUICCInfo1();
113	
114	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
115	Profile_load_procedure.ES10b_GetEUICCChallenge();
116
117	Profile_load_procedure.isErrorTest=true;
118	euiccAuthenticateErrorCode=AuthenticateErrorCode.unsupportedCurve;
119	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
120	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_INV_CURVE_NIST192;
121	Profile_load_procedure.ES10b_AuthenticateServer();
122	
123  RecoverCard();
124}
125
126function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_04_Error_eUICC_Challenge_Mismatch()
127{
128	
129	tracenamestr = "测试目的:执行AuthenticateServer指令,eUICC随机数不匹配";
130	
131	curDis.TraceStart(sno++,tracenamestr);
132
133	curDis.TestStepStart2(stno++,"复位;");
134	ResetCard();
135	
136	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
137	TS_TERMINAL_CAPABILITY_cmd();
138	
139	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
140	TS_MANAGE_CHANNEL_OPEN();
141	
142	curLogicChannel = 1;
143	
144	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
145	TS_SELECT("Select ISD",ISD_R_AID,"9000");
146	
147	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
148	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
149	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
150	Profile_load_procedure.ES10b_GetEUICCInfo1();
151	
152	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
153	Profile_load_procedure.ES10b_GetEUICCChallenge();
154	
155	Profile_load_procedure.euiccChallenge="";
156	
157	Profile_load_procedure.isErrorTest=true;
158	euiccAuthenticateErrorCode=AuthenticateErrorCode.euiccChallengeMismatch;
159	
160	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
161	Profile_load_procedure.ES10b_AuthenticateServer();
162	
163	
164	RecoverCard();
165
166}
167
168function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_05_Error_Unknown_CI_PK()
169{
170	
171	tracenamestr = "测试目的:执行AuthenticateServer指令时CI PK未知";
172	curDis.TraceStart(sno++,tracenamestr);
173
174	curDis.TestStepStart2(stno++,"复位;");
175	ResetCard();
176	
177	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
178	TS_TERMINAL_CAPABILITY_cmd();
179	
180	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
181	TS_MANAGE_CHANNEL_OPEN();
182	
183	curLogicChannel = 1;
184	
185	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
186	TS_SELECT("Select ISD",ISD_R_AID,"9000");
187	
188	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
189	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
190	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
191	Profile_load_procedure.ES10b_GetEUICCInfo1();
192	
193
194	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccChallengeRequest;");
195	Profile_load_procedure.ES10b_GetEUICCChallenge();
196
197	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
198	Profile_load_procedure.isErrorTest=true;
199	Profile_load_procedure.CIbpInforObj.PK_ID_Auth = curStrHandle.RandHexStr(20);
200	euiccAuthenticateErrorCode = AuthenticateErrorCode.ciPKUnknown;
201	Profile_load_procedure.ES10b_AuthenticateServer();
202	
203	RecoverCard();
204}
205
206function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_06_Error_No_RSP_session_on_going()
207{
208	
209	tracenamestr = "测试目的:无正在进行的RSP会话时执行AuthenticateServer指令";
210	curDis.TraceStart(sno++,tracenamestr);
211
212	curDis.TestStepStart2(stno++,"复位;");
213	ResetCard();
214	
215	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
216	TS_TERMINAL_CAPABILITY_cmd();
217	
218	curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
219	TS_MANAGE_CHANNEL_OPEN();
220	
221	curLogicChannel = 1;
222	
223	curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
224	TS_SELECT("Select ISD",ISD_R_AID,"9000");
225	
226	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行GetEuiccInfo1Request;");
227	var Profile_load_procedure = new RSP_profile_load_procedure_LPAd(PROFILE_OPERATIONAL1_DATA);
228	Profile_load_procedure.ICCID = ICCID_OP_PROF1;
229	Profile_load_procedure.ES10b_GetEUICCInfo1();
230	
231	curDis.TestStepStart2(stno++,"读卡器向卡片不发送 StoreData命令,不执行GetEuiccChallengeRequest;");
232	Profile_load_procedure.euiccChallenge = curStrHandle.RandHexStr(16);
233	
234	Profile_load_procedure.isErrorTest=true;
235	euiccAuthenticateErrorCode=AuthenticateErrorCode.noSessionContext;
236	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;Choose the  #CERT_S_SM_DPpb_ECDSA  (instead of  #CERT_S_SM_DPauth_ECDSA) ");
237	Profile_load_procedure.ES10b_AuthenticateServer();
238		
239  RecoverCard();
240}
241
-cas 盲生成TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases/Import/TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases.js724 行 / 73028 字符 / gb18030入口函数 @L39
1// Author: 卡思Cas智能体
2// Date: 20261004-021953
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.AuthenticateServer_SM-DS_ErrorCases,Test Sequence #01-#06 Error(本 TC 全部 6 条 Test Sequence 合并展开),适用性 M。
4// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
5//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
6//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO1 outer tag
7//   S1-C2 R_EUICC_INFO1 required members present;S2-C1 SW;S2-C2 R_CHALLENGE outer tag
8//   S2-C2 R_CHALLENGE required members present;S2-C2 tagOfeuiccChallenge
9//   S2-C2 lengthOfeuiccChallenge;S4-C1 SW;S4-C2 structure_error;S4-C3 transactionId echo
10//   S4-C2 R_AUTH_SERVER_INV_CERT authenticateResponseError structure
11//   S4-C2 authenticateErrorCode invalidCertificate;S5-C1 SW;S5-C2 R_EUICC_INFO1 outer tag
12//   S5-C2 R_EUICC_INFO1 required members present;S6-C1 SW;S6-C2 R_CHALLENGE outer tag
13//   S6-C2 R_CHALLENGE required members present;S6-C2 tagOfeuiccChallenge
14//   S6-C2 lengthOfeuiccChallenge;S8-C1 SW;S8-C2 structure_error;S8-C3 transactionId echo
15//   S8-C2 R_AUTH_SERVER_INV_SIGN authenticateResponseError structure
16//   S8-C2 authenticateErrorCode invalidSignature;S9-C1 SW;S9-C2 R_EUICC_INFO1 outer tag
17//   S9-C2 R_EUICC_INFO1 required members present;S10-C1 SW;S10-C2 R_CHALLENGE outer tag
18//   S10-C2 R_CHALLENGE required members present;S10-C2 tagOfeuiccChallenge
19//   S10-C2 lengthOfeuiccChallenge;S12-C1 SW;S12-C2 structure_error;S12-C3 transactionId echo
20//   S12-C2 R_AUTH_SERVER_INV_CURV authenticateResponseError structure
21//   S12-C2 authenticateErrorCode unsupportedCurve;S13-C1 SW;S13-C2 R_EUICC_INFO1 outer tag
22//   S13-C2 R_EUICC_INFO1 required members present;S14-C1 SW;S14-C2 R_CHALLENGE outer tag
23//   S14-C2 R_CHALLENGE required members present;S14-C2 tagOfeuiccChallenge
24//   S14-C2 lengthOfeuiccChallenge;S16-C1 SW;S16-C2 structure_error;S16-C3 transactionId echo
25//   S16-C2 R_AUTH_SERVER_INV_CHALLENGE authenticateResponseError structure
26//   S16-C2 authenticateErrorCode euiccChallengeMismatch;S17-C1 SW;S17-C2 R_EUICC_INFO1 outer tag
27//   S17-C2 R_EUICC_INFO1 required members present;S18-C1 SW;S18-C2 R_CHALLENGE outer tag
28//   S18-C2 R_CHALLENGE required members present;S18-C2 tagOfeuiccChallenge
29//   S18-C2 lengthOfeuiccChallenge;S20-C1 SW;S20-C2 structure_error;S20-C3 transactionId echo
30//   S20-C2 R_AUTH_SERVER_INV_CI authenticateResponseError structure
31//   S20-C2 authenticateErrorCode ciPKUnknown;S21-C1 SW;S21-C2 R_EUICC_INFO1 outer tag
32//   S21-C2 R_EUICC_INFO1 required members present;S23-C1 SW;S23-C2 structure_error
33//   S23-C3 tid_unchecked;S23-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure
34//   S23-C2 authenticateErrorCode noSessionContext
35//   S23-C3 error transactionId present (any value accepted)
36// 本函数由 CaseIR 4.2.18.2.8 编译生成(4.2.18.2.8-TC_eUICC_ES10b.AuthenticateServer_SM-DS_ErrorCases-20261004_021953,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
37// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
38// 适用性 M:编译期门,运行时由 harness 环境前置承担。
39function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_01_06_merged() {
40    var bind = curBind;
41    // Seq#06 附加 (卡态)No RSP session is on-going(未调用 ES10b.GetEUICCChallenge): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
42
43    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
44    var s24 = bind.resetAndAtr();
45    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s24.atr_hex !== "" ? "1" : "0");
46
47    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 2):SELECT_MF(K 语料机械展开)
48    // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
49    var s25 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
50    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s25.resp.length > 0 ? "1" : "0");
51    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s25.sw);
52
53    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
54    var s26 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
55    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s26.sw);
56
57    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
58    var steady27 = bind.runToSteadyState(function () {
59        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
60    });
61    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady27.final.sw);
62
63    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 1):MANAGE_CHANNEL_OPEN(K 语料机械展开)
64    // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
65    var s28 = bind.manageChannelOpen("9000");
66    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s28.sw);
67    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s28.chan !== null ? "1" : "0");
68
69    // IC head inline (initial_conditions → PROC_OPEN_LOGICAL_CHANNEL_AND_SELECT_ISDR, K row 2):MTD_SELECT(K 语料机械展开)
70    // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
71    var s29 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", null, "9000");
72    // 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.
73    bind.checkData("ICH-IC2-K2-C4 SW", "9000", s29.sw);
74
75    // 步骤 1:Seq#01] MTD_STORE_DATA(tc_step)
76    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
77    var sdCla1 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
78    var s1 = bind.sendApdu(sdCla1, "E2", "91", "00", "BF2000", "00", "9000");
79    bind.checkData("S1-C1 SW", "9000", s1.sw);
80    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
81    var gw1 = BindGecaProc.parseGecaResponse(s1.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
82    bind.checkData("S1-C2 R_EUICC_INFO1 outer tag", "BF20", gw1.outer_tag === null ? "absent" : gw1.outer_tag);
83    bind.checkData("S1-C2 R_EUICC_INFO1 required members present", "1", gw1.ok ? "1" : "0");
84
85    // 步骤 2:Seq#01] 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 sdCla2 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
88    var s2 = bind.sendApdu(sdCla2, "E2", "91", "00", "BF2E00", "00", "9000");
89    bind.checkData("S2-C1 SW", "9000", s2.sw);
90    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
91    var gw2 = BindGecaProc.parseGecaResponse(s2.resp, {outer: "BF2E", required: ["80"], optional: []});
92    bind.checkData("S2-C2 R_CHALLENGE outer tag", "BF2E", gw2.outer_tag === null ? "absent" : gw2.outer_tag);
93    bind.checkData("S2-C2 R_CHALLENGE required members present", "1", gw2.ok ? "1" : "0");
94    var r2w2 = BindGecaProc.parseGecaResponse(s2.resp, {outer: "BF2E", required: ["80"]});
95    bind.checkData("S2-C2 R_CHALLENGE outer tag", "BF2E", r2w2.outer_tag === null ? "absent" : r2w2.outer_tag);
96    var r2ch2 = null; for (var r2ci2 = 0; r2ci2 < r2w2.children.length; r2ci2++) { if (r2w2.children[r2ci2].tag === "80") { r2ch2 = r2w2.children[r2ci2]; } }
97    var r2chal2 = r2ch2 === null ? "" : r2ch2.value;
98    bind.checkData("S2-C2 tagOfeuiccChallenge", "80", r2ch2 === null ? "absent" : r2ch2.tag);
99    bind.checkData("S2-C2 lengthOfeuiccChallenge", "10", r2ch2 === null ? "absent" : (r2ch2.len < 16 ? ("0" + r2ch2.len.toString(16).toUpperCase()) : r2ch2.len.toString(16).toUpperCase()));
100
101    // 步骤 3:Seq#01] Step4 输入准备(InitiateAuthentication):设 <EUICC_CI_PK_ID_TO_BE_USED> 为 SIGNING 列表最高优先级 CI Key ID;选取 #CERT_S_SM_DSauth_INV_SIGN(签名无效,其余导向同一 Root CI)(tc_step;non_wire)
102    // test-tool internal preparation (no APDU face): runtime-domain
103    // values per CaseIR unresolved (G Annex B generation rules);
104    // no fabricated bytes emitted here.
105
106    // 步骤 4:Seq#01] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ45_028, RQ57_100, RQ31_052, RQ57_095, RQ57_105, RQ57_107, RQ26_010)
107    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
108    var dt4Tid = "";
109    var dt4Sc = "";
110    for (var dt4Ri = 0; dt4Ri < 16; dt4Ri++) {
111        dt4Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
112        dt4Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
113    }
114    var dt4PkList = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
115    var dt4CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
116    var dt4Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC370120D70845920C5DE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D554048309765610337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
117    var dt4Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
118    var dt4Sel = -1;
119    for (var dt4Pi = 0; dt4Pi < dt4PkList.length && dt4Sel < 0; dt4Pi++) {
120        for (var dt4Mi = 0; dt4Mi < dt4CiIds.length; dt4Mi++) {
121            if (dt4PkList[dt4Pi].value === dt4CiIds[dt4Mi]) { dt4Sel = dt4Mi; break; }
122        }
123    }
124    var dt4SkiSel = dt4Sel;
125    var dt4Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
126    var dt4Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
127    if (dt4Sel < 0 || dt4SkiSel < 0) {
128        bind.checkData("S4-C1 SW", "9000", "dt4_not_executed:no_usable_material_set");
129        bind.checkData("S4-C2 structure_error", "1", "0");
130        bind.checkData("S4-C3 transactionId echo", dt4Tid, "dt4_not_executed:no_usable_material_set");
131    } else {
132        bind.engine.InitEccDomainParams(dt4Dps[dt4Sel][0], dt4Dps[dt4Sel][1], dt4Dps[dt4Sel][2], dt4Dps[dt4Sel][3], dt4Dps[dt4Sel][4], 1);
133        var dt4S1 = BindEs10xSingleRequest.buildTlv("30",
134            BindEs10xSingleRequest.buildTlv("80", dt4Tid)
135            + BindEs10xSingleRequest.buildTlv("81", gw2.fields["80"] || "")
136            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
137            + BindEs10xSingleRequest.buildTlv("84", dt4Sc));
138        var dt4Sgn = "";
139        while (dt4Sgn.length != 2 * dt4Sks[dt4Sel].length) {
140            bind.engine.SleepTime(2000);
141            dt4Sgn = bind.engine.EccSignData(dt4Sks[dt4Sel], dt4S1, 33);
142        }
143        var dt4Asm = BindEs10bAuthServer.assembleAuthenticateServer(
144            {outer: "BF38",
145             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
146             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
147            {transactionId: dt4Tid, euiccChallenge: gw2.fields["80"] || "",
148             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt4Sc,
149             serverSignature1: dt4Sgn, euiccCiPKIdToBeUsed: dt4CiIds[dt4SkiSel],
150             serverCertificate: dt4Certs[dt4Sel], ctxParams1: dt4Ctx});
151        if (dt4Asm.error) {
152        bind.checkData("S4-C1 SW", "9000", "dt4_assemble_error");
153        bind.checkData("S4-C2 structure_error", "1", "0");
154        bind.checkData("S4-C3 transactionId echo", dt4Tid, "dt4_assemble_error");
155        } else {
156            var dt4Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
157                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt4Asm.request_hex,
158                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
159            var dt4Sw = (dt4Run.final && dt4Run.final.sw) ? dt4Run.final.sw : "transport_error";
160            bind.checkData("S4-C1 SW", "9000", dt4Sw);
161            var dt4Ex = BindEs10bAuthServer.extractAuthenticateServer(
162                {outer: "BF38",
163                 ok: {tag: "A0", children: [
164                     {name: "euiccSigned1", tag: "30", children: [
165                         {name: "transactionId", tag: "80"},
166                         {name: "serverAddress", tag: "83"},
167                         {name: "serverChallenge", tag: "84"},
168                         {name: "euiccInfo2", tag: "BF22"},
169                         {name: "ctxParams1", tag: "A0"}]},
170                     {name: "euiccSignature1", tag: "5F37"},
171                     {name: "euiccCertificate", tag: "30"},
172                     {name: "eumCertificate", tag: "30"}]},
173                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
174                dt4Run.final ? dt4Run.final.resp : "");
175            var dt4OkBr = dt4Ex.branch === "ok" && dt4Ex.ok && dt4Ex.ok.missing.length === 0 && dt4Ex.ok.fields.euiccSigned1.children.missing.length === 0;
176            var dt4ErrBr = dt4Ex.branch === "error" && dt4Ex.error && dt4Ex.error.missing.length === 0;
177            bind.checkData("S4-C2 R_AUTH_SERVER_INV_CERT authenticateResponseError structure", "1", dt4ErrBr ? "1" : "0");
178            bind.checkData("S4-C2 authenticateErrorCode invalidCertificate", "01", dt4ErrBr ? dt4Ex.error.fields.authenticateErrorCode.value : "branch_absent");
179            bind.checkData("S4-C3 transactionId echo", dt4Tid,
180                dt4OkBr ? dt4Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
181                : (dt4ErrBr ? dt4Ex.error.fields.transactionId.value : "branch_absent"));
182        }
183    }
184
185    // 步骤 5:Seq#02] MTD_STORE_DATA(tc_step)
186    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
187    var sdCla5 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
188    var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2000", "00", "9000");
189    bind.checkData("S5-C1 SW", "9000", s5.sw);
190    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
191    var gw5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
192    bind.checkData("S5-C2 R_EUICC_INFO1 outer tag", "BF20", gw5.outer_tag === null ? "absent" : gw5.outer_tag);
193    bind.checkData("S5-C2 R_EUICC_INFO1 required members present", "1", gw5.ok ? "1" : "0");
194
195    // 步骤 6:Seq#02] MTD_STORE_DATA(tc_step)
196    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
197    var sdCla6 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
198    var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2E00", "00", "9000");
199    bind.checkData("S6-C1 SW", "9000", s6.sw);
200    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
201    var gw6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"], optional: []});
202    bind.checkData("S6-C2 R_CHALLENGE outer tag", "BF2E", gw6.outer_tag === null ? "absent" : gw6.outer_tag);
203    bind.checkData("S6-C2 R_CHALLENGE required members present", "1", gw6.ok ? "1" : "0");
204    var r2w6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"]});
205    bind.checkData("S6-C2 R_CHALLENGE outer tag", "BF2E", r2w6.outer_tag === null ? "absent" : r2w6.outer_tag);
206    var r2ch6 = null; for (var r2ci6 = 0; r2ci6 < r2w6.children.length; r2ci6++) { if (r2w6.children[r2ci6].tag === "80") { r2ch6 = r2w6.children[r2ci6]; } }
207    var r2chal6 = r2ch6 === null ? "" : r2ch6.value;
208    bind.checkData("S6-C2 tagOfeuiccChallenge", "80", r2ch6 === null ? "absent" : r2ch6.tag);
209    bind.checkData("S6-C2 lengthOfeuiccChallenge", "10", r2ch6 === null ? "absent" : (r2ch6.len < 16 ? ("0" + r2ch6.len.toString(16).toUpperCase()) : r2ch6.len.toString(16).toUpperCase()));
210
211    // 步骤 7:Seq#02] Step4 输入准备(InitiateAuthentication):<S_SMDS_SIGNATURE1> 不以 #SK_S_SM_DSauth_ECDSA 计算但长度同有效签名(=<S_SMDS_SIGNATURE_INV>);CI Key ID 取 SIGNING 列表最高优先级;证书正常 #CERT_S_SM_DSauth_ECDSA(tc_step;non_wire)
212    // test-tool internal preparation (no APDU face): runtime-domain
213    // values per CaseIR unresolved (G Annex B generation rules);
214    // no fabricated bytes emitted here.
215
216    // 步骤 8:Seq#02] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_097, RQ57_105, RQ57_107, RQ31_049, RQ26_010)
217    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
218    var dt8Tid = "";
219    var dt8Sc = "";
220    for (var dt8Ri = 0; dt8Ri < 16; dt8Ri++) {
221        dt8Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
222        dt8Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
223    }
224    var dt8PkList = BindEs10xSingleRequest.parseBerTlv(gw5.fields["AA"] || "");
225    var dt8CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
226    var dt8Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
227    var dt8Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
228    var dt8Sel = -1;
229    for (var dt8Pi = 0; dt8Pi < dt8PkList.length && dt8Sel < 0; dt8Pi++) {
230        for (var dt8Mi = 0; dt8Mi < dt8CiIds.length; dt8Mi++) {
231            if (dt8PkList[dt8Pi].value === dt8CiIds[dt8Mi]) { dt8Sel = dt8Mi; break; }
232        }
233    }
234    var dt8SkiSel = dt8Sel;
235    var dt8Sks = ["DCD694B778957E8E9ADDBDD94433E9EF8F73D11E491C48D425A38A9491BD3BED", "75FF322F416616DAE1A484EF71D4874FB0DF3295FD35C2CBA489FBB2BB9C7BF6"];
236    var dt8Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
237    if (dt8Sel < 0 || dt8SkiSel < 0) {
238        bind.checkData("S8-C1 SW", "9000", "dt8_not_executed:no_usable_material_set");
239        bind.checkData("S8-C2 structure_error", "1", "0");
240        bind.checkData("S8-C3 transactionId echo", dt8Tid, "dt8_not_executed:no_usable_material_set");
241    } else {
242        bind.engine.InitEccDomainParams(dt8Dps[dt8Sel][0], dt8Dps[dt8Sel][1], dt8Dps[dt8Sel][2], dt8Dps[dt8Sel][3], dt8Dps[dt8Sel][4], 1);
243        var dt8S1 = BindEs10xSingleRequest.buildTlv("30",
244            BindEs10xSingleRequest.buildTlv("80", dt8Tid)
245            + BindEs10xSingleRequest.buildTlv("81", gw6.fields["80"] || "")
246            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
247            + BindEs10xSingleRequest.buildTlv("84", dt8Sc));
248        var dt8Sgn = "";
249        while (dt8Sgn.length != 2 * dt8Sks[dt8Sel].length) {
250            bind.engine.SleepTime(2000);
251            dt8Sgn = bind.engine.EccSignData(dt8Sks[dt8Sel], dt8S1, 33);
252        }
253        var dt8Asm = BindEs10bAuthServer.assembleAuthenticateServer(
254            {outer: "BF38",
255             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
256             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
257            {transactionId: dt8Tid, euiccChallenge: gw6.fields["80"] || "",
258             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt8Sc,
259             serverSignature1: dt8Sgn, euiccCiPKIdToBeUsed: dt8CiIds[dt8SkiSel],
260             serverCertificate: dt8Certs[dt8Sel], ctxParams1: dt8Ctx});
261        if (dt8Asm.error) {
262        bind.checkData("S8-C1 SW", "9000", "dt8_assemble_error");
263        bind.checkData("S8-C2 structure_error", "1", "0");
264        bind.checkData("S8-C3 transactionId echo", dt8Tid, "dt8_assemble_error");
265        } else {
266            var dt8Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
267                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt8Asm.request_hex,
268                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
269            var dt8Sw = (dt8Run.final && dt8Run.final.sw) ? dt8Run.final.sw : "transport_error";
270            bind.checkData("S8-C1 SW", "9000", dt8Sw);
271            var dt8Ex = BindEs10bAuthServer.extractAuthenticateServer(
272                {outer: "BF38",
273                 ok: {tag: "A0", children: [
274                     {name: "euiccSigned1", tag: "30", children: [
275                         {name: "transactionId", tag: "80"},
276                         {name: "serverAddress", tag: "83"},
277                         {name: "serverChallenge", tag: "84"},
278                         {name: "euiccInfo2", tag: "BF22"},
279                         {name: "ctxParams1", tag: "A0"}]},
280                     {name: "euiccSignature1", tag: "5F37"},
281                     {name: "euiccCertificate", tag: "30"},
282                     {name: "eumCertificate", tag: "30"}]},
283                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
284                dt8Run.final ? dt8Run.final.resp : "");
285            var dt8OkBr = dt8Ex.branch === "ok" && dt8Ex.ok && dt8Ex.ok.missing.length === 0 && dt8Ex.ok.fields.euiccSigned1.children.missing.length === 0;
286            var dt8ErrBr = dt8Ex.branch === "error" && dt8Ex.error && dt8Ex.error.missing.length === 0;
287            bind.checkData("S8-C2 R_AUTH_SERVER_INV_SIGN authenticateResponseError structure", "1", dt8ErrBr ? "1" : "0");
288            bind.checkData("S8-C2 authenticateErrorCode invalidSignature", "02", dt8ErrBr ? dt8Ex.error.fields.authenticateErrorCode.value : "branch_absent");
289            bind.checkData("S8-C3 transactionId echo", dt8Tid,
290                dt8OkBr ? dt8Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
291                : (dt8ErrBr ? dt8Ex.error.fields.transactionId.value : "branch_absent"));
292        }
293    }
294
295    // 步骤 9:Seq#03] MTD_STORE_DATA(tc_step)
296    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
297    var sdCla9 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
298    var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2000", "00", "9000");
299    bind.checkData("S9-C1 SW", "9000", s9.sw);
300    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
301    var gw9 = BindGecaProc.parseGecaResponse(s9.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
302    bind.checkData("S9-C2 R_EUICC_INFO1 outer tag", "BF20", gw9.outer_tag === null ? "absent" : gw9.outer_tag);
303    bind.checkData("S9-C2 R_EUICC_INFO1 required members present", "1", gw9.ok ? "1" : "0");
304
305    // 步骤 10:Seq#03] MTD_STORE_DATA(tc_step)
306    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
307    var sdCla10 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
308    var s10 = bind.sendApdu(sdCla10, "E2", "91", "00", "BF2E00", "00", "9000");
309    bind.checkData("S10-C1 SW", "9000", s10.sw);
310    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
311    var gw10 = BindGecaProc.parseGecaResponse(s10.resp, {outer: "BF2E", required: ["80"], optional: []});
312    bind.checkData("S10-C2 R_CHALLENGE outer tag", "BF2E", gw10.outer_tag === null ? "absent" : gw10.outer_tag);
313    bind.checkData("S10-C2 R_CHALLENGE required members present", "1", gw10.ok ? "1" : "0");
314    var r2w10 = BindGecaProc.parseGecaResponse(s10.resp, {outer: "BF2E", required: ["80"]});
315    bind.checkData("S10-C2 R_CHALLENGE outer tag", "BF2E", r2w10.outer_tag === null ? "absent" : r2w10.outer_tag);
316    var r2ch10 = null; for (var r2ci10 = 0; r2ci10 < r2w10.children.length; r2ci10++) { if (r2w10.children[r2ci10].tag === "80") { r2ch10 = r2w10.children[r2ci10]; } }
317    var r2chal10 = r2ch10 === null ? "" : r2ch10.value;
318    bind.checkData("S10-C2 tagOfeuiccChallenge", "80", r2ch10 === null ? "absent" : r2ch10.tag);
319    bind.checkData("S10-C2 lengthOfeuiccChallenge", "10", r2ch10 === null ? "absent" : (r2ch10.len < 16 ? ("0" + r2ch10.len.toString(16).toUpperCase()) : r2ch10.len.toString(16).toUpperCase()));
320
321    // 步骤 11:Seq#03] Step4 输入准备(InitiateAuthentication):serverSignature1 用 <RANDOM_SM_DS_SIGN>;证书 #CERT_S_SM_DSauth_INV_CURVE(公钥曲线不支持)(tc_step;non_wire)
322    // test-tool internal preparation (no APDU face): runtime-domain
323    // values per CaseIR unresolved (G Annex B generation rules);
324    // no fabricated bytes emitted here.
325
326    // 步骤 12:Seq#03] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_105, RQ57_107, RQ26_010)
327    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
328    var dt12Tid = "";
329    var dt12Sc = "";
330    for (var dt12Ri = 0; dt12Ri < 16; dt12Ri++) {
331        dt12Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
332        dt12Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
333    }
334    var dt12Sgn = "";
335    for (var dt12Gi = 0; dt12Gi < 64; dt12Gi++) {
336        dt12Sgn += bind.engine.Hex(Math.round(255 * Math.random()), 2);
337    }
338    var dt12PkList = BindEs10xSingleRequest.parseBerTlv(gw9.fields["AA"] || "");
339    var dt12CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
340    var dt12Certs = ["308201CEA00302010202020903300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313136303635355A170D3330303333303136303635355A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533049301306072A8648CE3D020106082A8648CE3D03010103320004CCD8AFE5D23E1EADB9959F58BDB32114FF7427B0069444FB2EEA2441A1D1F645A73EA953A4125E24454908A3ABD0E72DA381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414612011BC54849BEEAF5979494EFC562FFB3E0D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D04030203490030460221009542863B0F89C4BF6B8106C0BE069946C11DA92A6061BA634D67C2BD156371CA022100EB98A2A4A4EE0211D6209EFD3A21FAC46240E637DED8C297BEFE0CB7DFB0D290", "308201CFA00302010202020903300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313136303635355A170D3330303333303136303635355A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453304A301406072A8648CE3D020106092B240303020801010303320004AB9961659EFDCA75DCD6A32EBDF3CF62237C37FD7BAFC3750C312F62BF112B72A83331C26193535F4F563C297BD29348A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E0416041458E039F8098E21810C669AF34A2DE924C3D1A07E300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402205A9F512F911F821A95B32E2D1BB3CFC4B1FB0BD96B221C218160C4DAE468836F02204F9A46B06ADA69C5B741D57A4C196F8C768A4BBC0699A4BE4ADCD49FD66B4D3B"];
341    var dt12Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
342    var dt12Sel = -1;
343    for (var dt12Pi = 0; dt12Pi < dt12PkList.length && dt12Sel < 0; dt12Pi++) {
344        for (var dt12Mi = 0; dt12Mi < dt12CiIds.length; dt12Mi++) {
345            if (dt12PkList[dt12Pi].value === dt12CiIds[dt12Mi]) { dt12Sel = dt12Mi; break; }
346        }
347    }
348    var dt12SkiSel = dt12Sel;
349    var dt12Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
350    if (dt12Sel < 0 || dt12SkiSel < 0) {
351        bind.checkData("S12-C1 SW", "9000", "dt12_not_executed:no_usable_material_set");
352        bind.checkData("S12-C2 structure_error", "1", "0");
353        bind.checkData("S12-C3 transactionId echo", dt12Tid, "dt12_not_executed:no_usable_material_set");
354    } else {
355        bind.engine.InitEccDomainParams(dt12Dps[dt12Sel][0], dt12Dps[dt12Sel][1], dt12Dps[dt12Sel][2], dt12Dps[dt12Sel][3], dt12Dps[dt12Sel][4], 1);
356        var dt12S1 = BindEs10xSingleRequest.buildTlv("30",
357            BindEs10xSingleRequest.buildTlv("80", dt12Tid)
358            + BindEs10xSingleRequest.buildTlv("81", gw10.fields["80"] || "")
359            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
360            + BindEs10xSingleRequest.buildTlv("84", dt12Sc));
361        var dt12Asm = BindEs10bAuthServer.assembleAuthenticateServer(
362            {outer: "BF38",
363             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
364             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
365            {transactionId: dt12Tid, euiccChallenge: gw10.fields["80"] || "",
366             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt12Sc,
367             serverSignature1: dt12Sgn, euiccCiPKIdToBeUsed: dt12CiIds[dt12SkiSel],
368             serverCertificate: dt12Certs[dt12Sel], ctxParams1: dt12Ctx});
369        if (dt12Asm.error) {
370        bind.checkData("S12-C1 SW", "9000", "dt12_assemble_error");
371        bind.checkData("S12-C2 structure_error", "1", "0");
372        bind.checkData("S12-C3 transactionId echo", dt12Tid, "dt12_assemble_error");
373        } else {
374            var dt12Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
375                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt12Asm.request_hex,
376                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
377            var dt12Sw = (dt12Run.final && dt12Run.final.sw) ? dt12Run.final.sw : "transport_error";
378            bind.checkData("S12-C1 SW", "9000", dt12Sw);
379            var dt12Ex = BindEs10bAuthServer.extractAuthenticateServer(
380                {outer: "BF38",
381                 ok: {tag: "A0", children: [
382                     {name: "euiccSigned1", tag: "30", children: [
383                         {name: "transactionId", tag: "80"},
384                         {name: "serverAddress", tag: "83"},
385                         {name: "serverChallenge", tag: "84"},
386                         {name: "euiccInfo2", tag: "BF22"},
387                         {name: "ctxParams1", tag: "A0"}]},
388                     {name: "euiccSignature1", tag: "5F37"},
389                     {name: "euiccCertificate", tag: "30"},
390                     {name: "eumCertificate", tag: "30"}]},
391                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
392                dt12Run.final ? dt12Run.final.resp : "");
393            var dt12OkBr = dt12Ex.branch === "ok" && dt12Ex.ok && dt12Ex.ok.missing.length === 0 && dt12Ex.ok.fields.euiccSigned1.children.missing.length === 0;
394            var dt12ErrBr = dt12Ex.branch === "error" && dt12Ex.error && dt12Ex.error.missing.length === 0;
395            bind.checkData("S12-C2 R_AUTH_SERVER_INV_CURV authenticateResponseError structure", "1", dt12ErrBr ? "1" : "0");
396            bind.checkData("S12-C2 authenticateErrorCode unsupportedCurve", "03", dt12ErrBr ? dt12Ex.error.fields.authenticateErrorCode.value : "branch_absent");
397            bind.checkData("S12-C3 transactionId echo", dt12Tid,
398                dt12OkBr ? dt12Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
399                : (dt12ErrBr ? dt12Ex.error.fields.transactionId.value : "branch_absent"));
400        }
401    }
402
403    // 步骤 13:Seq#04] MTD_STORE_DATA(tc_step)
404    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
405    var sdCla13 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
406    var s13 = bind.sendApdu(sdCla13, "E2", "91", "00", "BF2000", "00", "9000");
407    bind.checkData("S13-C1 SW", "9000", s13.sw);
408    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
409    var gw13 = BindGecaProc.parseGecaResponse(s13.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
410    bind.checkData("S13-C2 R_EUICC_INFO1 outer tag", "BF20", gw13.outer_tag === null ? "absent" : gw13.outer_tag);
411    bind.checkData("S13-C2 R_EUICC_INFO1 required members present", "1", gw13.ok ? "1" : "0");
412
413    // 步骤 14:Seq#04] MTD_STORE_DATA(tc_step)
414    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
415    var sdCla14 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
416    var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF2E00", "00", "9000");
417    bind.checkData("S14-C1 SW", "9000", s14.sw);
418    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
419    var gw14 = BindGecaProc.parseGecaResponse(s14.resp, {outer: "BF2E", required: ["80"], optional: []});
420    bind.checkData("S14-C2 R_CHALLENGE outer tag", "BF2E", gw14.outer_tag === null ? "absent" : gw14.outer_tag);
421    bind.checkData("S14-C2 R_CHALLENGE required members present", "1", gw14.ok ? "1" : "0");
422    var r2w14 = BindGecaProc.parseGecaResponse(s14.resp, {outer: "BF2E", required: ["80"]});
423    bind.checkData("S14-C2 R_CHALLENGE outer tag", "BF2E", r2w14.outer_tag === null ? "absent" : r2w14.outer_tag);
424    var r2ch14 = null; for (var r2ci14 = 0; r2ci14 < r2w14.children.length; r2ci14++) { if (r2w14.children[r2ci14].tag === "80") { r2ch14 = r2w14.children[r2ci14]; } }
425    var r2chal14 = r2ch14 === null ? "" : r2ch14.value;
426    bind.checkData("S14-C2 tagOfeuiccChallenge", "80", r2ch14 === null ? "absent" : r2ch14.tag);
427    bind.checkData("S14-C2 lengthOfeuiccChallenge", "10", r2ch14 === null ? "absent" : (r2ch14.len < 16 ? ("0" + r2ch14.len.toString(16).toUpperCase()) : r2ch14.len.toString(16).toUpperCase()));
428
429    // 步骤 15:Seq#04] Step4 输入准备(InitiateAuthentication):serverSigned1.euiccChallenge 用 #S_EUICC_CHALLENGE=0x01 02 03 04 05 06 07 08 01 02 03 04 05 06 07 08(视为不同于 <EUICC_CHALLENGE>)(tc_step;non_wire)
430    // test-tool internal preparation (no APDU face): runtime-domain
431    // values per CaseIR unresolved (G Annex B generation rules);
432    // no fabricated bytes emitted here.
433
434    // 步骤 16:Seq#04] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_098, RQ57_105, RQ57_107, RQ31_050, RQ26_010)
435    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
436    var dt16Tid = "";
437    var dt16Sc = "";
438    for (var dt16Ri = 0; dt16Ri < 16; dt16Ri++) {
439        dt16Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
440        dt16Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
441    }
442    var dt16PkList = BindEs10xSingleRequest.parseBerTlv(gw13.fields["AA"] || "");
443    var dt16CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
444    var dt16Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
445    var dt16Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
446    var dt16Sel = -1;
447    for (var dt16Pi = 0; dt16Pi < dt16PkList.length && dt16Sel < 0; dt16Pi++) {
448        for (var dt16Mi = 0; dt16Mi < dt16CiIds.length; dt16Mi++) {
449            if (dt16PkList[dt16Pi].value === dt16CiIds[dt16Mi]) { dt16Sel = dt16Mi; break; }
450        }
451    }
452    var dt16SkiSel = dt16Sel;
453    var dt16Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
454    var dt16Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
455    if (dt16Sel < 0 || dt16SkiSel < 0) {
456        bind.checkData("S16-C1 SW", "9000", "dt16_not_executed:no_usable_material_set");
457        bind.checkData("S16-C2 structure_error", "1", "0");
458        bind.checkData("S16-C3 transactionId echo", dt16Tid, "dt16_not_executed:no_usable_material_set");
459    } else {
460        bind.engine.InitEccDomainParams(dt16Dps[dt16Sel][0], dt16Dps[dt16Sel][1], dt16Dps[dt16Sel][2], dt16Dps[dt16Sel][3], dt16Dps[dt16Sel][4], 1);
461        var dt16S1 = BindEs10xSingleRequest.buildTlv("30",
462            BindEs10xSingleRequest.buildTlv("80", dt16Tid)
463            + BindEs10xSingleRequest.buildTlv("81", "01020304050607080102030405060708")
464            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
465            + BindEs10xSingleRequest.buildTlv("84", dt16Sc));
466        var dt16Sgn = "";
467        while (dt16Sgn.length != 2 * dt16Sks[dt16Sel].length) {
468            bind.engine.SleepTime(2000);
469            dt16Sgn = bind.engine.EccSignData(dt16Sks[dt16Sel], dt16S1, 33);
470        }
471        var dt16Asm = BindEs10bAuthServer.assembleAuthenticateServer(
472            {outer: "BF38",
473             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
474             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
475            {transactionId: dt16Tid, euiccChallenge: "01020304050607080102030405060708",
476             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt16Sc,
477             serverSignature1: dt16Sgn, euiccCiPKIdToBeUsed: dt16CiIds[dt16SkiSel],
478             serverCertificate: dt16Certs[dt16Sel], ctxParams1: dt16Ctx});
479        if (dt16Asm.error) {
480        bind.checkData("S16-C1 SW", "9000", "dt16_assemble_error");
481        bind.checkData("S16-C2 structure_error", "1", "0");
482        bind.checkData("S16-C3 transactionId echo", dt16Tid, "dt16_assemble_error");
483        } else {
484            var dt16Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
485                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt16Asm.request_hex,
486                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
487            var dt16Sw = (dt16Run.final && dt16Run.final.sw) ? dt16Run.final.sw : "transport_error";
488            bind.checkData("S16-C1 SW", "9000", dt16Sw);
489            var dt16Ex = BindEs10bAuthServer.extractAuthenticateServer(
490                {outer: "BF38",
491                 ok: {tag: "A0", children: [
492                     {name: "euiccSigned1", tag: "30", children: [
493                         {name: "transactionId", tag: "80"},
494                         {name: "serverAddress", tag: "83"},
495                         {name: "serverChallenge", tag: "84"},
496                         {name: "euiccInfo2", tag: "BF22"},
497                         {name: "ctxParams1", tag: "A0"}]},
498                     {name: "euiccSignature1", tag: "5F37"},
499                     {name: "euiccCertificate", tag: "30"},
500                     {name: "eumCertificate", tag: "30"}]},
501                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
502                dt16Run.final ? dt16Run.final.resp : "");
503            var dt16OkBr = dt16Ex.branch === "ok" && dt16Ex.ok && dt16Ex.ok.missing.length === 0 && dt16Ex.ok.fields.euiccSigned1.children.missing.length === 0;
504            var dt16ErrBr = dt16Ex.branch === "error" && dt16Ex.error && dt16Ex.error.missing.length === 0;
505            bind.checkData("S16-C2 R_AUTH_SERVER_INV_CHALLENGE authenticateResponseError structure", "1", dt16ErrBr ? "1" : "0");
506            bind.checkData("S16-C2 authenticateErrorCode euiccChallengeMismatch", "06", dt16ErrBr ? dt16Ex.error.fields.authenticateErrorCode.value : "branch_absent");
507            bind.checkData("S16-C3 transactionId echo", dt16Tid,
508                dt16OkBr ? dt16Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
509                : (dt16ErrBr ? dt16Ex.error.fields.transactionId.value : "branch_absent"));
510        }
511    }
512
513    // 步骤 17:Seq#05] MTD_STORE_DATA(tc_step)
514    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
515    var sdCla17 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
516    var s17 = bind.sendApdu(sdCla17, "E2", "91", "00", "BF2000", "00", "9000");
517    bind.checkData("S17-C1 SW", "9000", s17.sw);
518    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
519    var gw17 = BindGecaProc.parseGecaResponse(s17.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
520    bind.checkData("S17-C2 R_EUICC_INFO1 outer tag", "BF20", gw17.outer_tag === null ? "absent" : gw17.outer_tag);
521    bind.checkData("S17-C2 R_EUICC_INFO1 required members present", "1", gw17.ok ? "1" : "0");
522
523    // 步骤 18:Seq#05] MTD_STORE_DATA(tc_step)
524    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
525    var sdCla18 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
526    var s18 = bind.sendApdu(sdCla18, "E2", "91", "00", "BF2E00", "00", "9000");
527    bind.checkData("S18-C1 SW", "9000", s18.sw);
528    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
529    var gw18 = BindGecaProc.parseGecaResponse(s18.resp, {outer: "BF2E", required: ["80"], optional: []});
530    bind.checkData("S18-C2 R_CHALLENGE outer tag", "BF2E", gw18.outer_tag === null ? "absent" : gw18.outer_tag);
531    bind.checkData("S18-C2 R_CHALLENGE required members present", "1", gw18.ok ? "1" : "0");
532    var r2w18 = BindGecaProc.parseGecaResponse(s18.resp, {outer: "BF2E", required: ["80"]});
533    bind.checkData("S18-C2 R_CHALLENGE outer tag", "BF2E", r2w18.outer_tag === null ? "absent" : r2w18.outer_tag);
534    var r2ch18 = null; for (var r2ci18 = 0; r2ci18 < r2w18.children.length; r2ci18++) { if (r2w18.children[r2ci18].tag === "80") { r2ch18 = r2w18.children[r2ci18]; } }
535    var r2chal18 = r2ch18 === null ? "" : r2ch18.value;
536    bind.checkData("S18-C2 tagOfeuiccChallenge", "80", r2ch18 === null ? "absent" : r2ch18.tag);
537    bind.checkData("S18-C2 lengthOfeuiccChallenge", "10", r2ch18 === null ? "absent" : (r2ch18.len < 16 ? ("0" + r2ch18.len.toString(16).toUpperCase()) : r2ch18.len.toString(16).toUpperCase()));
538
539    // 步骤 19:Seq#05] Step4 输入准备(InitiateAuthentication):<EUICC_CI_PK_ID_TO_BE_USED> 设为不在 SIGNING 列表中的 CI Key ID(可用随机 SubjectKeyIdentifier);#CERT_S_SM_DSauth_ECDSA 导向 VERIFICATION 列表最高优先级 CI(tc_step;non_wire)
540    // test-tool internal preparation (no APDU face): runtime-domain
541    // values per CaseIR unresolved (G Annex B generation rules);
542    // no fabricated bytes emitted here.
543
544    // 步骤 20:Seq#05] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ26_029, RQ45_028, RQ57_100, RQ31_052, RQ57_099, RQ57_105, RQ57_107, RQ31_051, RQ31_048, RQ26_010)
545    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
546    var dt20Tid = "";
547    var dt20Sc = "";
548    for (var dt20Ri = 0; dt20Ri < 16; dt20Ri++) {
549        dt20Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
550        dt20Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
551    }
552    var dt20PkList = BindEs10xSingleRequest.parseBerTlv(gw17.fields["AA"] || "");
553    var dt20CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
554    var dt20Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
555    var dt20Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
556    var dt20Sel = -1;
557    for (var dt20Pi = 0; dt20Pi < dt20PkList.length && dt20Sel < 0; dt20Pi++) {
558        for (var dt20Mi = 0; dt20Mi < dt20CiIds.length; dt20Mi++) {
559            if (dt20PkList[dt20Pi].value === dt20CiIds[dt20Mi]) { dt20Sel = dt20Mi; break; }
560        }
561    }
562    // Unknown CI PK 错误语义:取卡列表外 CI PK ID(声明面 selection=not_in_card_list;卡双列表全命中 → 错误不可确定性诱发,fail-closed 计错)
563    var dt20SkiSel = -1;
564    for (var dt20Ui = 0; dt20Ui < dt20CiIds.length; dt20Ui++) {
565        var dt20Hit = false;
566        for (var dt20Vi = 0; dt20Vi < dt20PkList.length; dt20Vi++) {
567            if (dt20PkList[dt20Vi].value === dt20CiIds[dt20Ui]) { dt20Hit = true; }
568        }
569        if (!dt20Hit && dt20SkiSel < 0) { dt20SkiSel = dt20Ui; }
570    }
571    var dt20Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
572    var dt20Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
573    if (dt20Sel < 0 || dt20SkiSel < 0) {
574        bind.checkData("S20-C1 SW", "9000", "dt20_not_executed:no_usable_material_set");
575        bind.checkData("S20-C2 structure_error", "1", "0");
576        bind.checkData("S20-C3 transactionId echo", dt20Tid, "dt20_not_executed:no_usable_material_set");
577    } else {
578        bind.engine.InitEccDomainParams(dt20Dps[dt20Sel][0], dt20Dps[dt20Sel][1], dt20Dps[dt20Sel][2], dt20Dps[dt20Sel][3], dt20Dps[dt20Sel][4], 1);
579        var dt20S1 = BindEs10xSingleRequest.buildTlv("30",
580            BindEs10xSingleRequest.buildTlv("80", dt20Tid)
581            + BindEs10xSingleRequest.buildTlv("81", gw18.fields["80"] || "")
582            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
583            + BindEs10xSingleRequest.buildTlv("84", dt20Sc));
584        var dt20Sgn = "";
585        while (dt20Sgn.length != 2 * dt20Sks[dt20Sel].length) {
586            bind.engine.SleepTime(2000);
587            dt20Sgn = bind.engine.EccSignData(dt20Sks[dt20Sel], dt20S1, 33);
588        }
589        var dt20Asm = BindEs10bAuthServer.assembleAuthenticateServer(
590            {outer: "BF38",
591             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
592             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
593            {transactionId: dt20Tid, euiccChallenge: gw18.fields["80"] || "",
594             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt20Sc,
595             serverSignature1: dt20Sgn, euiccCiPKIdToBeUsed: dt20CiIds[dt20SkiSel],
596             serverCertificate: dt20Certs[dt20Sel], ctxParams1: dt20Ctx});
597        if (dt20Asm.error) {
598        bind.checkData("S20-C1 SW", "9000", "dt20_assemble_error");
599        bind.checkData("S20-C2 structure_error", "1", "0");
600        bind.checkData("S20-C3 transactionId echo", dt20Tid, "dt20_assemble_error");
601        } else {
602            var dt20Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
603                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt20Asm.request_hex,
604                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
605            var dt20Sw = (dt20Run.final && dt20Run.final.sw) ? dt20Run.final.sw : "transport_error";
606            bind.checkData("S20-C1 SW", "9000", dt20Sw);
607            var dt20Ex = BindEs10bAuthServer.extractAuthenticateServer(
608                {outer: "BF38",
609                 ok: {tag: "A0", children: [
610                     {name: "euiccSigned1", tag: "30", children: [
611                         {name: "transactionId", tag: "80"},
612                         {name: "serverAddress", tag: "83"},
613                         {name: "serverChallenge", tag: "84"},
614                         {name: "euiccInfo2", tag: "BF22"},
615                         {name: "ctxParams1", tag: "A0"}]},
616                     {name: "euiccSignature1", tag: "5F37"},
617                     {name: "euiccCertificate", tag: "30"},
618                     {name: "eumCertificate", tag: "30"}]},
619                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
620                dt20Run.final ? dt20Run.final.resp : "");
621            var dt20OkBr = dt20Ex.branch === "ok" && dt20Ex.ok && dt20Ex.ok.missing.length === 0 && dt20Ex.ok.fields.euiccSigned1.children.missing.length === 0;
622            var dt20ErrBr = dt20Ex.branch === "error" && dt20Ex.error && dt20Ex.error.missing.length === 0;
623            bind.checkData("S20-C2 R_AUTH_SERVER_INV_CI authenticateResponseError structure", "1", dt20ErrBr ? "1" : "0");
624            bind.checkData("S20-C2 authenticateErrorCode ciPKUnknown", "07", dt20ErrBr ? dt20Ex.error.fields.authenticateErrorCode.value : "branch_absent");
625            bind.checkData("S20-C3 transactionId echo", dt20Tid,
626                dt20OkBr ? dt20Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
627                : (dt20ErrBr ? dt20Ex.error.fields.transactionId.value : "branch_absent"));
628        }
629    }
630
631    // 步骤 21:Seq#06] MTD_STORE_DATA(tc_step)
632    // <L> length binding and the conditional 61XX + GET RESPONSE chain (D.4.2) are CasBind internal state (chaining rule).
633    var sdCla21 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
634    var s21 = bind.sendApdu(sdCla21, "E2", "91", "00", "BF2000", "00", "9000");
635    bind.checkData("S21-C1 SW", "9000", s21.sw);
636    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
637    var gw21 = BindGecaProc.parseGecaResponse(s21.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
638    bind.checkData("S21-C2 R_EUICC_INFO1 outer tag", "BF20", gw21.outer_tag === null ? "absent" : gw21.outer_tag);
639    bind.checkData("S21-C2 R_EUICC_INFO1 required members present", "1", gw21.ok ? "1" : "0");
640
641    // 步骤 22:Seq#06] Step3 输入准备:<S_TRANSACTION_ID>、#S_EUICC_CHALLENGE、<S_SMDS_CHALLENGE>、<S_SMDS_SIGNATURE1>;CI Key ID 取 SIGNING 列表最高优先级;#CERT_S_SM_DSauth_ECDSA(本序列 Initial Condition:无 RSP session 在进行——未调用 ES10b.GetEUICCChallenge)(tc_step;non_wire)
642    // test-tool internal preparation (no APDU face): runtime-domain
643    // values per CaseIR unresolved (G Annex B generation rules);
644    // no fabricated bytes emitted here.
645
646    // 步骤 23:Seq#06] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_094, RQ57_105, RQ57_107)
647    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
648    var dt23Tid = "";
649    var dt23Sc = "";
650    for (var dt23Ri = 0; dt23Ri < 16; dt23Ri++) {
651        dt23Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
652        dt23Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
653    }
654    var dt23PkList = BindEs10xSingleRequest.parseBerTlv(gw21.fields["AA"] || "");
655    var dt23CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
656    var dt23Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
657    var dt23Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
658    var dt23Sel = -1;
659    for (var dt23Pi = 0; dt23Pi < dt23PkList.length && dt23Sel < 0; dt23Pi++) {
660        for (var dt23Mi = 0; dt23Mi < dt23CiIds.length; dt23Mi++) {
661            if (dt23PkList[dt23Pi].value === dt23CiIds[dt23Mi]) { dt23Sel = dt23Mi; break; }
662        }
663    }
664    var dt23SkiSel = dt23Sel;
665    var dt23Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
666    var dt23Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
667    if (dt23Sel < 0 || dt23SkiSel < 0) {
668        bind.checkData("S23-C1 SW", "9000", "dt23_not_executed:no_usable_material_set");
669        bind.checkData("S23-C2 structure_error", "1", "0");
670        bind.checkData("S23-C3 tid_unchecked", "1", "0");
671    } else {
672        bind.engine.InitEccDomainParams(dt23Dps[dt23Sel][0], dt23Dps[dt23Sel][1], dt23Dps[dt23Sel][2], dt23Dps[dt23Sel][3], dt23Dps[dt23Sel][4], 1);
673        var dt23S1 = BindEs10xSingleRequest.buildTlv("30",
674            BindEs10xSingleRequest.buildTlv("80", dt23Tid)
675            + BindEs10xSingleRequest.buildTlv("81", "01020304050607080102030405060708")
676            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
677            + BindEs10xSingleRequest.buildTlv("84", dt23Sc));
678        var dt23Sgn = "";
679        while (dt23Sgn.length != 2 * dt23Sks[dt23Sel].length) {
680            bind.engine.SleepTime(2000);
681            dt23Sgn = bind.engine.EccSignData(dt23Sks[dt23Sel], dt23S1, 33);
682        }
683        var dt23Asm = BindEs10bAuthServer.assembleAuthenticateServer(
684            {outer: "BF38",
685             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
686             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
687            {transactionId: dt23Tid, euiccChallenge: "01020304050607080102030405060708",
688             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt23Sc,
689             serverSignature1: dt23Sgn, euiccCiPKIdToBeUsed: dt23CiIds[dt23SkiSel],
690             serverCertificate: dt23Certs[dt23Sel], ctxParams1: dt23Ctx});
691        if (dt23Asm.error) {
692        bind.checkData("S23-C1 SW", "9000", "dt23_assemble_error");
693        bind.checkData("S23-C2 structure_error", "1", "0");
694        bind.checkData("S23-C3 tid_unchecked", "1", "0");
695        } else {
696            var dt23Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
697                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt23Asm.request_hex,
698                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
699            var dt23Sw = (dt23Run.final && dt23Run.final.sw) ? dt23Run.final.sw : "transport_error";
700            bind.checkData("S23-C1 SW", "9000", dt23Sw);
701            var dt23Ex = BindEs10bAuthServer.extractAuthenticateServer(
702                {outer: "BF38",
703                 ok: {tag: "A0", children: [
704                     {name: "euiccSigned1", tag: "30", children: [
705                         {name: "transactionId", tag: "80"},
706                         {name: "serverAddress", tag: "83"},
707                         {name: "serverChallenge", tag: "84"},
708                         {name: "euiccInfo2", tag: "BF22"},
709                         {name: "ctxParams1", tag: "A0"}]},
710                     {name: "euiccSignature1", tag: "5F37"},
711                     {name: "euiccCertificate", tag: "30"},
712                     {name: "eumCertificate", tag: "30"}]},
713                 error: {tag: "A1", children: [{name: "transactionId", tag: "80"}, {name: "authenticateErrorCode", tag: "81"}]}},
714                dt23Run.final ? dt23Run.final.resp : "");
715            var dt23OkBr = dt23Ex.branch === "ok" && dt23Ex.ok && dt23Ex.ok.missing.length === 0 && dt23Ex.ok.fields.euiccSigned1.children.missing.length === 0;
716            var dt23ErrBr = dt23Ex.branch === "error" && dt23Ex.error && dt23Ex.error.missing.length === 0;
717            bind.checkData("S23-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure", "1", dt23ErrBr ? "1" : "0");
718            bind.checkData("S23-C2 authenticateErrorCode noSessionContext", "04", dt23ErrBr ? dt23Ex.error.fields.authenticateErrorCode.value : "branch_absent");
719            bind.checkData("S23-C3 error transactionId present (any value accepted)", "1",
720                dt23ErrBr ? "1" : "0");
721        }
722    }
723}
724

完整 unified diff

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

展开 diff(966 行)
--- -man
+++ -cas
@@ -1,241 +1,724 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_01_Error_With_Incorrect_SM_DSauth_certificate + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_02_Error_With_Invalid_SM_DS_Signature + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_03_Error_Unsupported_Curve + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_04_Error_eUICC_Challenge_Mismatch + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_05_Error_Unknown_CI_PK + TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_06_Error_No_RSP_session_on_going (extracted verbatim)
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_01_Error_With_Incorrect_SM_DSauth_certificate()
-{
-	
-	tracenamestr = "测试目的:执行AuthenticateServer指令,使用错误的SM-DSauth证书(如 签名无效)";
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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;");
-	pkId_CI_ForVerification = pkId_CI_ECDSA_BRP;
-	pkId_CI_ForSigning = pkId_CI_ECDSA_BRP;
-	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.isErrorTest = true;
-	euiccAuthenticateErrorCode = AuthenticateErrorCode.invalidCertificate;
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_INV_SIGN_BRP;	
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_02_Error_With_Invalid_SM_DS_Signature()
-{
-	
-	tracenamestr = "测试目的:执行AuthenticateServer指令,SM-DS签名无效";
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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;");
-	pkId_CI_ForVerification = pkId_CI_ECDSA_BRP;
-	pkId_CI_ForSigning = pkId_CI_ECDSA_BRP;
-	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();	
-	
-	Profile_load_procedure.isErrorTest=true;
-	Profile_load_procedure.DPauthInforObj.D_key=curStrHandle.RandHexStr(32);
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.invalidSignature;
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_ECDSA_BRP;	
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	
-	RecoverCard();
-
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_03_Error_Unsupported_Curve()
-{
-	
-	tracenamestr = "测试目的:执行AuthenticateServer指令时曲线不支持";
-	
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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;");
-	pkId_CI_ForVerification = pkId_CI_ECDSA_NIST;
-	pkId_CI_ForSigning = pkId_CI_ECDSA_NIST;
-	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();
-
-	Profile_load_procedure.isErrorTest=true;
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.unsupportedCurve;
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DSauth_INV_CURVE_NIST192;
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-  RecoverCard();
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_04_Error_eUICC_Challenge_Mismatch()
-{
-	
-	tracenamestr = "测试目的:执行AuthenticateServer指令,eUICC随机数不匹配";
-	
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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();
-	
-	Profile_load_procedure.euiccChallenge="";
-	
-	Profile_load_procedure.isErrorTest=true;
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.euiccChallengeMismatch;
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	
-	RecoverCard();
-
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_05_Error_Unknown_CI_PK()
-{
-	
-	tracenamestr = "测试目的:执行AuthenticateServer指令时CI PK未知";
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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.isErrorTest=true;
-	Profile_load_procedure.CIbpInforObj.PK_ID_Auth = curStrHandle.RandHexStr(20);
-	euiccAuthenticateErrorCode = AuthenticateErrorCode.ciPKUnknown;
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DS_ErrorCases_06_Error_No_RSP_session_on_going()
-{
-	
-	tracenamestr = "测试目的:无正在进行的RSP会话时执行AuthenticateServer指令";
-	curDis.TraceStart(sno++,tracenamestr);
-
-	curDis.TestStepStart2(stno++,"复位;");
-	ResetCard();
-	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
-	TS_TERMINAL_CAPABILITY_cmd();
-	
-	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.euiccChallenge = curStrHandle.RandHexStr(16);
-	
-	Profile_load_procedure.isErrorTest=true;
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.noSessionContext;
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;Choose the  #CERT_S_SM_DPpb_ECDSA  (instead of  #CERT_S_SM_DPauth_ECDSA) ");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-		
-  RecoverCard();
+// Author: 卡思Cas智能体
+// Date: 20261004-021953
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.AuthenticateServer_SM-DS_ErrorCases,Test Sequence #01-#06 Error(本 TC 全部 6 条 Test Sequence 合并展开),适用性 M。
+// Test points: ICH-IC1-K1-C1 ATR_present;ICH-IC1-K2-C2 FCP_Template;ICH-IC1-K2-C4 SW
+//   ICH-IC1-K3-C4 SW;ICH-IC1-K4-C4 final SW;ICH-IC2-K1-C4 SW;ICH-IC2-K1-C3 CHANNEL_NUMBER extracted
+//   ICH-IC2-K2-C4 SW;S1-C1 SW;S1-C2 R_EUICC_INFO1 outer tag
+//   S1-C2 R_EUICC_INFO1 required members present;S2-C1 SW;S2-C2 R_CHALLENGE outer tag
+//   S2-C2 R_CHALLENGE required members present;S2-C2 tagOfeuiccChallenge
+//   S2-C2 lengthOfeuiccChallenge;S4-C1 SW;S4-C2 structure_error;S4-C3 transactionId echo
+//   S4-C2 R_AUTH_SERVER_INV_CERT authenticateResponseError structure
+//   S4-C2 authenticateErrorCode invalidCertificate;S5-C1 SW;S5-C2 R_EUICC_INFO1 outer tag
+//   S5-C2 R_EUICC_INFO1 required members present;S6-C1 SW;S6-C2 R_CHALLENGE outer tag
+//   S6-C2 R_CHALLENGE required members present;S6-C2 tagOfeuiccChallenge
+//   S6-C2 lengthOfeuiccChallenge;S8-C1 SW;S8-C2 structure_error;S8-C3 transactionId echo
+//   S8-C2 R_AUTH_SERVER_INV_SIGN authenticateResponseError structure
+//   S8-C2 authenticateErrorCode invalidSignature;S9-C1 SW;S9-C2 R_EUICC_INFO1 outer tag
+//   S9-C2 R_EUICC_INFO1 required members present;S10-C1 SW;S10-C2 R_CHALLENGE outer tag
+//   S10-C2 R_CHALLENGE required members present;S10-C2 tagOfeuiccChallenge
+//   S10-C2 lengthOfeuiccChallenge;S12-C1 SW;S12-C2 structure_error;S12-C3 transactionId echo
+//   S12-C2 R_AUTH_SERVER_INV_CURV authenticateResponseError structure
+//   S12-C2 authenticateErrorCode unsupportedCurve;S13-C1 SW;S13-C2 R_EUICC_INFO1 outer tag
+//   S13-C2 R_EUICC_INFO1 required members present;S14-C1 SW;S14-C2 R_CHALLENGE outer tag
+//   S14-C2 R_CHALLENGE required members present;S14-C2 tagOfeuiccChallenge
+//   S14-C2 lengthOfeuiccChallenge;S16-C1 SW;S16-C2 structure_error;S16-C3 transactionId echo
+//   S16-C2 R_AUTH_SERVER_INV_CHALLENGE authenticateResponseError structure
+//   S16-C2 authenticateErrorCode euiccChallengeMismatch;S17-C1 SW;S17-C2 R_EUICC_INFO1 outer tag
+//   S17-C2 R_EUICC_INFO1 required members present;S18-C1 SW;S18-C2 R_CHALLENGE outer tag
+//   S18-C2 R_CHALLENGE required members present;S18-C2 tagOfeuiccChallenge
+//   S18-C2 lengthOfeuiccChallenge;S20-C1 SW;S20-C2 structure_error;S20-C3 transactionId echo
+//   S20-C2 R_AUTH_SERVER_INV_CI authenticateResponseError structure
+//   S20-C2 authenticateErrorCode ciPKUnknown;S21-C1 SW;S21-C2 R_EUICC_INFO1 outer tag
+//   S21-C2 R_EUICC_INFO1 required members present;S23-C1 SW;S23-C2 structure_error
+//   S23-C3 tid_unchecked;S23-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure
+//   S23-C2 authenticateErrorCode noSessionContext
+//   S23-C3 error transactionId present (any value accepted)
+// 本函数由 CaseIR 4.2.18.2.8 编译生成(4.2.18.2.8-TC_eUICC_ES10b.AuthenticateServer_SM-DS_ErrorCases-20261004_021953,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_AuthenticateServer_SM_DS_ErrorCases_01_06_merged() {
+    var bind = curBind;
+    // Seq#06 附加 (卡态)No RSP session is on-going(未调用 ES10b.GetEUICCChallenge): declared unexpanded (non-PROC row or K corpus vacuum; see CaseIR open_items).
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 1):RESET(K 语料机械展开)
+    var s24 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s24.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 s25 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s25.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s25.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s26 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s26.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady27 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady27.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 s28 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s28.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s28.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 s29 = 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", s29.sw);
+
+    // 步骤 1:Seq#01] 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 sdCla1 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.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");
+
+    // 步骤 2:Seq#01] 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 sdCla2 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.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);
+    bind.checkData("S2-C2 R_CHALLENGE required members present", "1", gw2.ok ? "1" : "0");
+    var r2w2 = BindGecaProc.parseGecaResponse(s2.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S2-C2 R_CHALLENGE outer tag", "BF2E", r2w2.outer_tag === null ? "absent" : r2w2.outer_tag);
+    var r2ch2 = null; for (var r2ci2 = 0; r2ci2 < r2w2.children.length; r2ci2++) { if (r2w2.children[r2ci2].tag === "80") { r2ch2 = r2w2.children[r2ci2]; } }
+    var r2chal2 = r2ch2 === null ? "" : r2ch2.value;
+    bind.checkData("S2-C2 tagOfeuiccChallenge", "80", r2ch2 === null ? "absent" : r2ch2.tag);
+    bind.checkData("S2-C2 lengthOfeuiccChallenge", "10", r2ch2 === null ? "absent" : (r2ch2.len < 16 ? ("0" + r2ch2.len.toString(16).toUpperCase()) : r2ch2.len.toString(16).toUpperCase()));
+
+    // 步骤 3:Seq#01] Step4 输入准备(InitiateAuthentication):设 <EUICC_CI_PK_ID_TO_BE_USED> 为 SIGNING 列表最高优先级 CI Key ID;选取 #CERT_S_SM_DSauth_INV_SIGN(签名无效,其余导向同一 Root CI)(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 4:Seq#01] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ45_028, RQ57_100, RQ31_052, RQ57_095, RQ57_105, RQ57_107, RQ26_010)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt4Tid = "";
+    var dt4Sc = "";
+    for (var dt4Ri = 0; dt4Ri < 16; dt4Ri++) {
+        dt4Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt4Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt4PkList = BindEs10xSingleRequest.parseBerTlv(gw1.fields["AA"] || "");
+    var dt4CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt4Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC370120D70845920C5DE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D554048309765610337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
+    var dt4Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt4Sel = -1;
+    for (var dt4Pi = 0; dt4Pi < dt4PkList.length && dt4Sel < 0; dt4Pi++) {
+        for (var dt4Mi = 0; dt4Mi < dt4CiIds.length; dt4Mi++) {
+            if (dt4PkList[dt4Pi].value === dt4CiIds[dt4Mi]) { dt4Sel = dt4Mi; break; }
+        }
+    }
+    var dt4SkiSel = dt4Sel;
+    var dt4Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
+    var dt4Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt4Sel < 0 || dt4SkiSel < 0) {
+        bind.checkData("S4-C1 SW", "9000", "dt4_not_executed:no_usable_material_set");
+        bind.checkData("S4-C2 structure_error", "1", "0");
+        bind.checkData("S4-C3 transactionId echo", dt4Tid, "dt4_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt4Dps[dt4Sel][0], dt4Dps[dt4Sel][1], dt4Dps[dt4Sel][2], dt4Dps[dt4Sel][3], dt4Dps[dt4Sel][4], 1);
+        var dt4S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt4Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw2.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt4Sc));
+        var dt4Sgn = "";
+        while (dt4Sgn.length != 2 * dt4Sks[dt4Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt4Sgn = bind.engine.EccSignData(dt4Sks[dt4Sel], dt4S1, 33);
+        }
+        var dt4Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt4Tid, euiccChallenge: gw2.fields["80"] || "",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt4Sc,
+             serverSignature1: dt4Sgn, euiccCiPKIdToBeUsed: dt4CiIds[dt4SkiSel],
+             serverCertificate: dt4Certs[dt4Sel], ctxParams1: dt4Ctx});
+        if (dt4Asm.error) {
+        bind.checkData("S4-C1 SW", "9000", "dt4_assemble_error");
+        bind.checkData("S4-C2 structure_error", "1", "0");
+        bind.checkData("S4-C3 transactionId echo", dt4Tid, "dt4_assemble_error");
+        } else {
+            var dt4Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt4Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt4Sw = (dt4Run.final && dt4Run.final.sw) ? dt4Run.final.sw : "transport_error";
+            bind.checkData("S4-C1 SW", "9000", dt4Sw);
+            var dt4Ex = 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: "81"}]}},
+                dt4Run.final ? dt4Run.final.resp : "");
+            var dt4OkBr = dt4Ex.branch === "ok" && dt4Ex.ok && dt4Ex.ok.missing.length === 0 && dt4Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt4ErrBr = dt4Ex.branch === "error" && dt4Ex.error && dt4Ex.error.missing.length === 0;
+            bind.checkData("S4-C2 R_AUTH_SERVER_INV_CERT authenticateResponseError structure", "1", dt4ErrBr ? "1" : "0");
+            bind.checkData("S4-C2 authenticateErrorCode invalidCertificate", "01", dt4ErrBr ? dt4Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S4-C3 transactionId echo", dt4Tid,
+                dt4OkBr ? dt4Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt4ErrBr ? dt4Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 5:Seq#02] 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 sdCla5 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s5 = bind.sendApdu(sdCla5, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S5-C1 SW", "9000", s5.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw5 = BindGecaProc.parseGecaResponse(s5.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S5-C2 R_EUICC_INFO1 outer tag", "BF20", gw5.outer_tag === null ? "absent" : gw5.outer_tag);
+    bind.checkData("S5-C2 R_EUICC_INFO1 required members present", "1", gw5.ok ? "1" : "0");
+
+    // 步骤 6:Seq#02] 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 sdCla6 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s6 = bind.sendApdu(sdCla6, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S6-C1 SW", "9000", s6.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S6-C2 R_CHALLENGE outer tag", "BF2E", gw6.outer_tag === null ? "absent" : gw6.outer_tag);
+    bind.checkData("S6-C2 R_CHALLENGE required members present", "1", gw6.ok ? "1" : "0");
+    var r2w6 = BindGecaProc.parseGecaResponse(s6.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S6-C2 R_CHALLENGE outer tag", "BF2E", r2w6.outer_tag === null ? "absent" : r2w6.outer_tag);
+    var r2ch6 = null; for (var r2ci6 = 0; r2ci6 < r2w6.children.length; r2ci6++) { if (r2w6.children[r2ci6].tag === "80") { r2ch6 = r2w6.children[r2ci6]; } }
+    var r2chal6 = r2ch6 === null ? "" : r2ch6.value;
+    bind.checkData("S6-C2 tagOfeuiccChallenge", "80", r2ch6 === null ? "absent" : r2ch6.tag);
+    bind.checkData("S6-C2 lengthOfeuiccChallenge", "10", r2ch6 === null ? "absent" : (r2ch6.len < 16 ? ("0" + r2ch6.len.toString(16).toUpperCase()) : r2ch6.len.toString(16).toUpperCase()));
+
+    // 步骤 7:Seq#02] Step4 输入准备(InitiateAuthentication):<S_SMDS_SIGNATURE1> 不以 #SK_S_SM_DSauth_ECDSA 计算但长度同有效签名(=<S_SMDS_SIGNATURE_INV>);CI Key ID 取 SIGNING 列表最高优先级;证书正常 #CERT_S_SM_DSauth_ECDSA(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 8:Seq#02] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_097, RQ57_105, RQ57_107, RQ31_049, RQ26_010)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt8Tid = "";
+    var dt8Sc = "";
+    for (var dt8Ri = 0; dt8Ri < 16; dt8Ri++) {
+        dt8Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt8Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt8PkList = BindEs10xSingleRequest.parseBerTlv(gw5.fields["AA"] || "");
+    var dt8CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt8Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
+    var dt8Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt8Sel = -1;
+    for (var dt8Pi = 0; dt8Pi < dt8PkList.length && dt8Sel < 0; dt8Pi++) {
+        for (var dt8Mi = 0; dt8Mi < dt8CiIds.length; dt8Mi++) {
+            if (dt8PkList[dt8Pi].value === dt8CiIds[dt8Mi]) { dt8Sel = dt8Mi; break; }
+        }
+    }
+    var dt8SkiSel = dt8Sel;
+    var dt8Sks = ["DCD694B778957E8E9ADDBDD94433E9EF8F73D11E491C48D425A38A9491BD3BED", "75FF322F416616DAE1A484EF71D4874FB0DF3295FD35C2CBA489FBB2BB9C7BF6"];
+    var dt8Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt8Sel < 0 || dt8SkiSel < 0) {
+        bind.checkData("S8-C1 SW", "9000", "dt8_not_executed:no_usable_material_set");
+        bind.checkData("S8-C2 structure_error", "1", "0");
+        bind.checkData("S8-C3 transactionId echo", dt8Tid, "dt8_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt8Dps[dt8Sel][0], dt8Dps[dt8Sel][1], dt8Dps[dt8Sel][2], dt8Dps[dt8Sel][3], dt8Dps[dt8Sel][4], 1);
+        var dt8S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt8Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw6.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt8Sc));
+        var dt8Sgn = "";
+        while (dt8Sgn.length != 2 * dt8Sks[dt8Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt8Sgn = bind.engine.EccSignData(dt8Sks[dt8Sel], dt8S1, 33);
+        }
+        var dt8Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt8Tid, euiccChallenge: gw6.fields["80"] || "",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt8Sc,
+             serverSignature1: dt8Sgn, euiccCiPKIdToBeUsed: dt8CiIds[dt8SkiSel],
+             serverCertificate: dt8Certs[dt8Sel], ctxParams1: dt8Ctx});
+        if (dt8Asm.error) {
+        bind.checkData("S8-C1 SW", "9000", "dt8_assemble_error");
+        bind.checkData("S8-C2 structure_error", "1", "0");
+        bind.checkData("S8-C3 transactionId echo", dt8Tid, "dt8_assemble_error");
+        } else {
+            var dt8Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt8Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt8Sw = (dt8Run.final && dt8Run.final.sw) ? dt8Run.final.sw : "transport_error";
+            bind.checkData("S8-C1 SW", "9000", dt8Sw);
+            var dt8Ex = 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: "81"}]}},
+                dt8Run.final ? dt8Run.final.resp : "");
+            var dt8OkBr = dt8Ex.branch === "ok" && dt8Ex.ok && dt8Ex.ok.missing.length === 0 && dt8Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt8ErrBr = dt8Ex.branch === "error" && dt8Ex.error && dt8Ex.error.missing.length === 0;
+            bind.checkData("S8-C2 R_AUTH_SERVER_INV_SIGN authenticateResponseError structure", "1", dt8ErrBr ? "1" : "0");
+            bind.checkData("S8-C2 authenticateErrorCode invalidSignature", "02", dt8ErrBr ? dt8Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S8-C3 transactionId echo", dt8Tid,
+                dt8OkBr ? dt8Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt8ErrBr ? dt8Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 9:Seq#03] 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 sdCla9 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s9 = bind.sendApdu(sdCla9, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S9-C1 SW", "9000", s9.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw9 = BindGecaProc.parseGecaResponse(s9.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S9-C2 R_EUICC_INFO1 outer tag", "BF20", gw9.outer_tag === null ? "absent" : gw9.outer_tag);
+    bind.checkData("S9-C2 R_EUICC_INFO1 required members present", "1", gw9.ok ? "1" : "0");
+
+    // 步骤 10:Seq#03] 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 sdCla10 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s10 = bind.sendApdu(sdCla10, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S10-C1 SW", "9000", s10.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw10 = BindGecaProc.parseGecaResponse(s10.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S10-C2 R_CHALLENGE outer tag", "BF2E", gw10.outer_tag === null ? "absent" : gw10.outer_tag);
+    bind.checkData("S10-C2 R_CHALLENGE required members present", "1", gw10.ok ? "1" : "0");
+    var r2w10 = BindGecaProc.parseGecaResponse(s10.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S10-C2 R_CHALLENGE outer tag", "BF2E", r2w10.outer_tag === null ? "absent" : r2w10.outer_tag);
+    var r2ch10 = null; for (var r2ci10 = 0; r2ci10 < r2w10.children.length; r2ci10++) { if (r2w10.children[r2ci10].tag === "80") { r2ch10 = r2w10.children[r2ci10]; } }
+    var r2chal10 = r2ch10 === null ? "" : r2ch10.value;
+    bind.checkData("S10-C2 tagOfeuiccChallenge", "80", r2ch10 === null ? "absent" : r2ch10.tag);
+    bind.checkData("S10-C2 lengthOfeuiccChallenge", "10", r2ch10 === null ? "absent" : (r2ch10.len < 16 ? ("0" + r2ch10.len.toString(16).toUpperCase()) : r2ch10.len.toString(16).toUpperCase()));
+
+    // 步骤 11:Seq#03] Step4 输入准备(InitiateAuthentication):serverSignature1 用 <RANDOM_SM_DS_SIGN>;证书 #CERT_S_SM_DSauth_INV_CURVE(公钥曲线不支持)(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 12:Seq#03] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_105, RQ57_107, RQ26_010)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt12Tid = "";
+    var dt12Sc = "";
+    for (var dt12Ri = 0; dt12Ri < 16; dt12Ri++) {
+        dt12Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt12Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt12Sgn = "";
+    for (var dt12Gi = 0; dt12Gi < 64; dt12Gi++) {
+        dt12Sgn += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt12PkList = BindEs10xSingleRequest.parseBerTlv(gw9.fields["AA"] || "");
+    var dt12CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt12Certs = ["308201CEA00302010202020903300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313136303635355A170D3330303333303136303635355A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533049301306072A8648CE3D020106082A8648CE3D03010103320004CCD8AFE5D23E1EADB9959F58BDB32114FF7427B0069444FB2EEA2441A1D1F645A73EA953A4125E24454908A3ABD0E72DA381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414612011BC54849BEEAF5979494EFC562FFB3E0D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D04030203490030460221009542863B0F89C4BF6B8106C0BE069946C11DA92A6061BA634D67C2BD156371CA022100EB98A2A4A4EE0211D6209EFD3A21FAC46240E637DED8C297BEFE0CB7DFB0D290", "308201CFA00302010202020903300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313136303635355A170D3330303333303136303635355A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453304A301406072A8648CE3D020106092B240303020801010303320004AB9961659EFDCA75DCD6A32EBDF3CF62237C37FD7BAFC3750C312F62BF112B72A83331C26193535F4F563C297BD29348A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E0416041458E039F8098E21810C669AF34A2DE924C3D1A07E300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402205A9F512F911F821A95B32E2D1BB3CFC4B1FB0BD96B221C218160C4DAE468836F02204F9A46B06ADA69C5B741D57A4C196F8C768A4BBC0699A4BE4ADCD49FD66B4D3B"];
+    var dt12Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt12Sel = -1;
+    for (var dt12Pi = 0; dt12Pi < dt12PkList.length && dt12Sel < 0; dt12Pi++) {
+        for (var dt12Mi = 0; dt12Mi < dt12CiIds.length; dt12Mi++) {
+            if (dt12PkList[dt12Pi].value === dt12CiIds[dt12Mi]) { dt12Sel = dt12Mi; break; }
+        }
+    }
+    var dt12SkiSel = dt12Sel;
+    var dt12Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt12Sel < 0 || dt12SkiSel < 0) {
+        bind.checkData("S12-C1 SW", "9000", "dt12_not_executed:no_usable_material_set");
+        bind.checkData("S12-C2 structure_error", "1", "0");
+        bind.checkData("S12-C3 transactionId echo", dt12Tid, "dt12_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt12Dps[dt12Sel][0], dt12Dps[dt12Sel][1], dt12Dps[dt12Sel][2], dt12Dps[dt12Sel][3], dt12Dps[dt12Sel][4], 1);
+        var dt12S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt12Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw10.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt12Sc));
+        var dt12Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt12Tid, euiccChallenge: gw10.fields["80"] || "",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt12Sc,
+             serverSignature1: dt12Sgn, euiccCiPKIdToBeUsed: dt12CiIds[dt12SkiSel],
+             serverCertificate: dt12Certs[dt12Sel], ctxParams1: dt12Ctx});
+        if (dt12Asm.error) {
+        bind.checkData("S12-C1 SW", "9000", "dt12_assemble_error");
+        bind.checkData("S12-C2 structure_error", "1", "0");
+        bind.checkData("S12-C3 transactionId echo", dt12Tid, "dt12_assemble_error");
+        } else {
+            var dt12Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt12Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt12Sw = (dt12Run.final && dt12Run.final.sw) ? dt12Run.final.sw : "transport_error";
+            bind.checkData("S12-C1 SW", "9000", dt12Sw);
+            var dt12Ex = 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: "81"}]}},
+                dt12Run.final ? dt12Run.final.resp : "");
+            var dt12OkBr = dt12Ex.branch === "ok" && dt12Ex.ok && dt12Ex.ok.missing.length === 0 && dt12Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt12ErrBr = dt12Ex.branch === "error" && dt12Ex.error && dt12Ex.error.missing.length === 0;
+            bind.checkData("S12-C2 R_AUTH_SERVER_INV_CURV authenticateResponseError structure", "1", dt12ErrBr ? "1" : "0");
+            bind.checkData("S12-C2 authenticateErrorCode unsupportedCurve", "03", dt12ErrBr ? dt12Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S12-C3 transactionId echo", dt12Tid,
+                dt12OkBr ? dt12Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt12ErrBr ? dt12Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 13:Seq#04] 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 sdCla13 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s13 = bind.sendApdu(sdCla13, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S13-C1 SW", "9000", s13.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw13 = BindGecaProc.parseGecaResponse(s13.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S13-C2 R_EUICC_INFO1 outer tag", "BF20", gw13.outer_tag === null ? "absent" : gw13.outer_tag);
+    bind.checkData("S13-C2 R_EUICC_INFO1 required members present", "1", gw13.ok ? "1" : "0");
+
+    // 步骤 14:Seq#04] 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 sdCla14 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s14 = bind.sendApdu(sdCla14, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S14-C1 SW", "9000", s14.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw14 = BindGecaProc.parseGecaResponse(s14.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S14-C2 R_CHALLENGE outer tag", "BF2E", gw14.outer_tag === null ? "absent" : gw14.outer_tag);
+    bind.checkData("S14-C2 R_CHALLENGE required members present", "1", gw14.ok ? "1" : "0");
+    var r2w14 = BindGecaProc.parseGecaResponse(s14.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S14-C2 R_CHALLENGE outer tag", "BF2E", r2w14.outer_tag === null ? "absent" : r2w14.outer_tag);
+    var r2ch14 = null; for (var r2ci14 = 0; r2ci14 < r2w14.children.length; r2ci14++) { if (r2w14.children[r2ci14].tag === "80") { r2ch14 = r2w14.children[r2ci14]; } }
+    var r2chal14 = r2ch14 === null ? "" : r2ch14.value;
+    bind.checkData("S14-C2 tagOfeuiccChallenge", "80", r2ch14 === null ? "absent" : r2ch14.tag);
+    bind.checkData("S14-C2 lengthOfeuiccChallenge", "10", r2ch14 === null ? "absent" : (r2ch14.len < 16 ? ("0" + r2ch14.len.toString(16).toUpperCase()) : r2ch14.len.toString(16).toUpperCase()));
+
+    // 步骤 15:Seq#04] Step4 输入准备(InitiateAuthentication):serverSigned1.euiccChallenge 用 #S_EUICC_CHALLENGE=0x01 02 03 04 05 06 07 08 01 02 03 04 05 06 07 08(视为不同于 <EUICC_CHALLENGE>)(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 16:Seq#04] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_098, RQ57_105, RQ57_107, RQ31_050, RQ26_010)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt16Tid = "";
+    var dt16Sc = "";
+    for (var dt16Ri = 0; dt16Ri < 16; dt16Ri++) {
+        dt16Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt16Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt16PkList = BindEs10xSingleRequest.parseBerTlv(gw13.fields["AA"] || "");
+    var dt16CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt16Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
+    var dt16Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt16Sel = -1;
+    for (var dt16Pi = 0; dt16Pi < dt16PkList.length && dt16Sel < 0; dt16Pi++) {
+        for (var dt16Mi = 0; dt16Mi < dt16CiIds.length; dt16Mi++) {
+            if (dt16PkList[dt16Pi].value === dt16CiIds[dt16Mi]) { dt16Sel = dt16Mi; break; }
+        }
+    }
+    var dt16SkiSel = dt16Sel;
+    var dt16Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
+    var dt16Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt16Sel < 0 || dt16SkiSel < 0) {
+        bind.checkData("S16-C1 SW", "9000", "dt16_not_executed:no_usable_material_set");
+        bind.checkData("S16-C2 structure_error", "1", "0");
+        bind.checkData("S16-C3 transactionId echo", dt16Tid, "dt16_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt16Dps[dt16Sel][0], dt16Dps[dt16Sel][1], dt16Dps[dt16Sel][2], dt16Dps[dt16Sel][3], dt16Dps[dt16Sel][4], 1);
+        var dt16S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt16Tid)
+            + BindEs10xSingleRequest.buildTlv("81", "01020304050607080102030405060708")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt16Sc));
+        var dt16Sgn = "";
+        while (dt16Sgn.length != 2 * dt16Sks[dt16Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt16Sgn = bind.engine.EccSignData(dt16Sks[dt16Sel], dt16S1, 33);
+        }
+        var dt16Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt16Tid, euiccChallenge: "01020304050607080102030405060708",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt16Sc,
+             serverSignature1: dt16Sgn, euiccCiPKIdToBeUsed: dt16CiIds[dt16SkiSel],
+             serverCertificate: dt16Certs[dt16Sel], ctxParams1: dt16Ctx});
+        if (dt16Asm.error) {
+        bind.checkData("S16-C1 SW", "9000", "dt16_assemble_error");
+        bind.checkData("S16-C2 structure_error", "1", "0");
+        bind.checkData("S16-C3 transactionId echo", dt16Tid, "dt16_assemble_error");
+        } else {
+            var dt16Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt16Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt16Sw = (dt16Run.final && dt16Run.final.sw) ? dt16Run.final.sw : "transport_error";
+            bind.checkData("S16-C1 SW", "9000", dt16Sw);
+            var dt16Ex = 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: "81"}]}},
+                dt16Run.final ? dt16Run.final.resp : "");
+            var dt16OkBr = dt16Ex.branch === "ok" && dt16Ex.ok && dt16Ex.ok.missing.length === 0 && dt16Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt16ErrBr = dt16Ex.branch === "error" && dt16Ex.error && dt16Ex.error.missing.length === 0;
+            bind.checkData("S16-C2 R_AUTH_SERVER_INV_CHALLENGE authenticateResponseError structure", "1", dt16ErrBr ? "1" : "0");
+            bind.checkData("S16-C2 authenticateErrorCode euiccChallengeMismatch", "06", dt16ErrBr ? dt16Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S16-C3 transactionId echo", dt16Tid,
+                dt16OkBr ? dt16Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt16ErrBr ? dt16Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 17:Seq#05] 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 sdCla17 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s17 = bind.sendApdu(sdCla17, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S17-C1 SW", "9000", s17.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw17 = BindGecaProc.parseGecaResponse(s17.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S17-C2 R_EUICC_INFO1 outer tag", "BF20", gw17.outer_tag === null ? "absent" : gw17.outer_tag);
+    bind.checkData("S17-C2 R_EUICC_INFO1 required members present", "1", gw17.ok ? "1" : "0");
+
+    // 步骤 18:Seq#05] 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 sdCla18 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s18 = bind.sendApdu(sdCla18, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S18-C1 SW", "9000", s18.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw18 = BindGecaProc.parseGecaResponse(s18.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S18-C2 R_CHALLENGE outer tag", "BF2E", gw18.outer_tag === null ? "absent" : gw18.outer_tag);
+    bind.checkData("S18-C2 R_CHALLENGE required members present", "1", gw18.ok ? "1" : "0");
+    var r2w18 = BindGecaProc.parseGecaResponse(s18.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S18-C2 R_CHALLENGE outer tag", "BF2E", r2w18.outer_tag === null ? "absent" : r2w18.outer_tag);
+    var r2ch18 = null; for (var r2ci18 = 0; r2ci18 < r2w18.children.length; r2ci18++) { if (r2w18.children[r2ci18].tag === "80") { r2ch18 = r2w18.children[r2ci18]; } }
+    var r2chal18 = r2ch18 === null ? "" : r2ch18.value;
+    bind.checkData("S18-C2 tagOfeuiccChallenge", "80", r2ch18 === null ? "absent" : r2ch18.tag);
+    bind.checkData("S18-C2 lengthOfeuiccChallenge", "10", r2ch18 === null ? "absent" : (r2ch18.len < 16 ? ("0" + r2ch18.len.toString(16).toUpperCase()) : r2ch18.len.toString(16).toUpperCase()));
+
+    // 步骤 19:Seq#05] Step4 输入准备(InitiateAuthentication):<EUICC_CI_PK_ID_TO_BE_USED> 设为不在 SIGNING 列表中的 CI Key ID(可用随机 SubjectKeyIdentifier);#CERT_S_SM_DSauth_ECDSA 导向 VERIFICATION 列表最高优先级 CI(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 20:Seq#05] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ26_029, RQ45_028, RQ57_100, RQ31_052, RQ57_099, RQ57_105, RQ57_107, RQ31_051, RQ31_048, RQ26_010)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt20Tid = "";
+    var dt20Sc = "";
+    for (var dt20Ri = 0; dt20Ri < 16; dt20Ri++) {
+        dt20Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt20Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt20PkList = BindEs10xSingleRequest.parseBerTlv(gw17.fields["AA"] || "");
+    var dt20CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt20Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
+    var dt20Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt20Sel = -1;
+    for (var dt20Pi = 0; dt20Pi < dt20PkList.length && dt20Sel < 0; dt20Pi++) {
+        for (var dt20Mi = 0; dt20Mi < dt20CiIds.length; dt20Mi++) {
+            if (dt20PkList[dt20Pi].value === dt20CiIds[dt20Mi]) { dt20Sel = dt20Mi; break; }
+        }
+    }
+    // Unknown CI PK 错误语义:取卡列表外 CI PK ID(声明面 selection=not_in_card_list;卡双列表全命中 → 错误不可确定性诱发,fail-closed 计错)
+    var dt20SkiSel = -1;
+    for (var dt20Ui = 0; dt20Ui < dt20CiIds.length; dt20Ui++) {
+        var dt20Hit = false;
+        for (var dt20Vi = 0; dt20Vi < dt20PkList.length; dt20Vi++) {
+            if (dt20PkList[dt20Vi].value === dt20CiIds[dt20Ui]) { dt20Hit = true; }
+        }
+        if (!dt20Hit && dt20SkiSel < 0) { dt20SkiSel = dt20Ui; }
+    }
+    var dt20Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
+    var dt20Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt20Sel < 0 || dt20SkiSel < 0) {
+        bind.checkData("S20-C1 SW", "9000", "dt20_not_executed:no_usable_material_set");
+        bind.checkData("S20-C2 structure_error", "1", "0");
+        bind.checkData("S20-C3 transactionId echo", dt20Tid, "dt20_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt20Dps[dt20Sel][0], dt20Dps[dt20Sel][1], dt20Dps[dt20Sel][2], dt20Dps[dt20Sel][3], dt20Dps[dt20Sel][4], 1);
+        var dt20S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt20Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw18.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt20Sc));
+        var dt20Sgn = "";
+        while (dt20Sgn.length != 2 * dt20Sks[dt20Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt20Sgn = bind.engine.EccSignData(dt20Sks[dt20Sel], dt20S1, 33);
+        }
+        var dt20Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt20Tid, euiccChallenge: gw18.fields["80"] || "",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt20Sc,
+             serverSignature1: dt20Sgn, euiccCiPKIdToBeUsed: dt20CiIds[dt20SkiSel],
+             serverCertificate: dt20Certs[dt20Sel], ctxParams1: dt20Ctx});
+        if (dt20Asm.error) {
+        bind.checkData("S20-C1 SW", "9000", "dt20_assemble_error");
+        bind.checkData("S20-C2 structure_error", "1", "0");
+        bind.checkData("S20-C3 transactionId echo", dt20Tid, "dt20_assemble_error");
+        } else {
+            var dt20Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt20Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt20Sw = (dt20Run.final && dt20Run.final.sw) ? dt20Run.final.sw : "transport_error";
+            bind.checkData("S20-C1 SW", "9000", dt20Sw);
+            var dt20Ex = 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: "81"}]}},
+                dt20Run.final ? dt20Run.final.resp : "");
+            var dt20OkBr = dt20Ex.branch === "ok" && dt20Ex.ok && dt20Ex.ok.missing.length === 0 && dt20Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt20ErrBr = dt20Ex.branch === "error" && dt20Ex.error && dt20Ex.error.missing.length === 0;
+            bind.checkData("S20-C2 R_AUTH_SERVER_INV_CI authenticateResponseError structure", "1", dt20ErrBr ? "1" : "0");
+            bind.checkData("S20-C2 authenticateErrorCode ciPKUnknown", "07", dt20ErrBr ? dt20Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S20-C3 transactionId echo", dt20Tid,
+                dt20OkBr ? dt20Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt20ErrBr ? dt20Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 21:Seq#06] 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 sdCla21 = s28.chan !== null ? (s28.chan <= 3 ? 128 + s28.chan : 188 + s28.chan).toString(16).toUpperCase() : null;
+    var s21 = bind.sendApdu(sdCla21, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S21-C1 SW", "9000", s21.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw21 = BindGecaProc.parseGecaResponse(s21.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S21-C2 R_EUICC_INFO1 outer tag", "BF20", gw21.outer_tag === null ? "absent" : gw21.outer_tag);
+    bind.checkData("S21-C2 R_EUICC_INFO1 required members present", "1", gw21.ok ? "1" : "0");
+
+    // 步骤 22:Seq#06] Step3 输入准备:<S_TRANSACTION_ID>、#S_EUICC_CHALLENGE、<S_SMDS_CHALLENGE>、<S_SMDS_SIGNATURE1>;CI Key ID 取 SIGNING 列表最高优先级;#CERT_S_SM_DSauth_ECDSA(本序列 Initial Condition:无 RSP session 在进行——未调用 ES10b.GetEUICCChallenge)(tc_step;non_wire)
+    // test-tool internal preparation (no APDU face): runtime-domain
+    // values per CaseIR unresolved (G Annex B generation rules);
+    // no fabricated bytes emitted here.
+
+    // 步骤 23:Seq#06] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ57_100, RQ31_052, RQ57_094, RQ57_105, RQ57_107)
+    // dynamic-template 多占位运行时绑定(B-5;声明面 = command.dynamic_template + 顶层 dynamic_templates.es10b_authenticate_server;物料 sha256 锚编译期已核;模板 tag 权威 = SGP.22 §5.7.13 + AUTOMATIC TAGS + 黄金切片线缆三源对账)
+    var dt23Tid = "";
+    var dt23Sc = "";
+    for (var dt23Ri = 0; dt23Ri < 16; dt23Ri++) {
+        dt23Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt23Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt23PkList = BindEs10xSingleRequest.parseBerTlv(gw21.fields["AA"] || "");
+    var dt23CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt23Certs = ["308201DEA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D44533059301306072A8648CE3D020106082A8648CE3D0301070342000437FB94E3A2BEFE763E1A774A4854880F106D80F936845BAD2FDD971BC068D8AB61A5481AEE977D5A8168BB9F79004B1D0072C1BA7673B0CB64816E1019B24FD0A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3300E0603551D0F0101FF040403020780301D0603551D0E04160414C1F4064B3B258AFB61388B3FF2EE6A61E2C44D72300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020348003045022100C0BE4522932DACA9F8997AD54FA0E59490966BED91D222316880BC371FB3223702204FBDE30C3A167F231C0E397EAF29402A01D8C36B148083FD23A9DD39DDC7BAB2", "308201DFA00302010202027495300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038353034315A170D3330303333303038353034315A3024310D300B060355040A0C0441434D453113301106035504030C0A5445535420534D2D4453305A301406072A8648CE3D020106092B24030302080101070342000481D1D023F39F18433418C28CD23D42157A439FEDD29E59AB1186E130898196C1563A13F48B36D6D4B13B4D085A5760AE613D061FFE6FC7A40C6502E3FF733C31A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8300E0603551D0F0101FF040403020780301D0603551D0E04160414F05F0B54AEE8AE0108F01DEF548ED9859714DD48300E0603551D1104073005880388370F30170603551D200101FF040D300B300906076781120102010730610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402203CC1D42AFDEC627E71B962754245B7DF0BAC0AA5A0AB08CC2FA6B7D557BED93F022050337E43DBE80FD4202024760AB9FAD1AC4647F6D450629C9CD51BF7222E2AA0"];
+    var dt23Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt23Sel = -1;
+    for (var dt23Pi = 0; dt23Pi < dt23PkList.length && dt23Sel < 0; dt23Pi++) {
+        for (var dt23Mi = 0; dt23Mi < dt23CiIds.length; dt23Mi++) {
+            if (dt23PkList[dt23Pi].value === dt23CiIds[dt23Mi]) { dt23Sel = dt23Mi; break; }
+        }
+    }
+    var dt23SkiSel = dt23Sel;
+    var dt23Sks = ["03BB1A30D2C8E37A3A8C4D66C20C81CCC2C0BD3681DE3614C8D78A6E6A2BA172", "1C07C347BBC7753E22EA70385D7EB47BABCEEE96C491D629B2104338FB158387"];
+    var dt23Ctx = "801130373339392D42474837452D5438373739A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt23Sel < 0 || dt23SkiSel < 0) {
+        bind.checkData("S23-C1 SW", "9000", "dt23_not_executed:no_usable_material_set");
+        bind.checkData("S23-C2 structure_error", "1", "0");
+        bind.checkData("S23-C3 tid_unchecked", "1", "0");
+    } else {
+        bind.engine.InitEccDomainParams(dt23Dps[dt23Sel][0], dt23Dps[dt23Sel][1], dt23Dps[dt23Sel][2], dt23Dps[dt23Sel][3], dt23Dps[dt23Sel][4], 1);
+        var dt23S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt23Tid)
+            + BindEs10xSingleRequest.buildTlv("81", "01020304050607080102030405060708")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374726F6F74736D64732E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt23Sc));
+        var dt23Sgn = "";
+        while (dt23Sgn.length != 2 * dt23Sks[dt23Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt23Sgn = bind.engine.EccSignData(dt23Sks[dt23Sel], dt23S1, 33);
+        }
+        var dt23Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt23Tid, euiccChallenge: "01020304050607080102030405060708",
+             serverAddress: "1674657374726F6F74736D64732E6578616D706C652E636F6D", serverChallenge: dt23Sc,
+             serverSignature1: dt23Sgn, euiccCiPKIdToBeUsed: dt23CiIds[dt23SkiSel],
+             serverCertificate: dt23Certs[dt23Sel], ctxParams1: dt23Ctx});
+        if (dt23Asm.error) {
+        bind.checkData("S23-C1 SW", "9000", "dt23_assemble_error");
+        bind.checkData("S23-C2 structure_error", "1", "0");
+        bind.checkData("S23-C3 tid_unchecked", "1", "0");
+        } else {
+            var dt23Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt23Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt23Sw = (dt23Run.final && dt23Run.final.sw) ? dt23Run.final.sw : "transport_error";
+            bind.checkData("S23-C1 SW", "9000", dt23Sw);
+            var dt23Ex = 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: "81"}]}},
+                dt23Run.final ? dt23Run.final.resp : "");
+            var dt23OkBr = dt23Ex.branch === "ok" && dt23Ex.ok && dt23Ex.ok.missing.length === 0 && dt23Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt23ErrBr = dt23Ex.branch === "error" && dt23Ex.error && dt23Ex.error.missing.length === 0;
+            bind.checkData("S23-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure", "1", dt23ErrBr ? "1" : "0");
+            bind.checkData("S23-C2 authenticateErrorCode noSessionContext", "04", dt23ErrBr ? dt23Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S23-C3 error transactionId present (any value accepted)", "1",
+                dt23ErrBr ? "1" : "0");
+        }
+    }
 }