eSIM RSP 测试用例对比站

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

源码对照:4.2.18.2.4

ES10b 服务器认证(SM-DP+)异常用例 / TC_eUICC_ES10b.AuthenticateServer_SM-DP+_ErrorCases

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

完整 unified diff

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

展开 diff(1120 行)
--- -man
+++ -cas
@@ -1,280 +1,839 @@
-// slice of Import\TestCase_SGP_23.js - cases: TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_01_Error_With_Incorrect_SM_DPauth_certificate + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_02_Error_With_Invalid_SM_DP_Signature + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_03_Error_Unsupported_Curve + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_04_Error_eUICC_Challenge_Mismatch + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_05_Error_Unknown_CI_PK + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_06_Error_Invalid_Certificate_Role_OID + TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_07_Error_No_RSP_session_on_going (extracted verbatim)
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_01_Error_With_Incorrect_SM_DPauth_certificate()
-{
-	tracenamestr = "测试目的:执行AuthenticateServer指令,使用错误的SM-DPauth证书(如 签名无效)";
-	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;
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.invalidCertificate;
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DPauth_INV_SIGN_BRP;	
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-  RecoverCard();	
-	
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_02_Error_With_Invalid_SM_DP_Signature()
-{
-
-	tracenamestr = "测试目的:执行AuthenticateServer指令,SM-DP+签名无效";
-	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;
-	Profile_load_procedure.DPauthInforObj.D_key = curStrHandle.RandHexStr(32);
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.invalidSignature;
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DPauth_ECDSA_BRP;	
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();	
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_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();
-
-
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.isErrorTest=true;
-	euiccAuthenticateErrorCode = AuthenticateErrorCode.unsupportedCurve;
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DPauth_INV_CURVE_NIST192;
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_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_DP_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();
-
-	Profile_load_procedure.isErrorTest=true;
-	Profile_load_procedure.CIbpInforObj.PK_ID_Auth=curStrHandle.RandHexStr(20);
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.ciPKUnknown;
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;");
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();	
-	
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_06_Error_Invalid_Certificate_Role_OID()
-{
-	
-	tracenamestr = "测试目的:验证eUICC应拒绝任何在Extension for Certificate Policies中没有指示为“id-rspRole-dp-auth”的SM-DP+认证证书";
-	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;
-	euiccAuthenticateErrorCode=AuthenticateErrorCode.invalidCertificate;	
-	curDis.TestStepStart2(stno++,"读卡器向卡片发送 StoreData命令,执行AuthenticateServerRequest;Choose the  #CERT_S_SM_DPpb_ECDSA  (instead of  #CERT_S_SM_DPauth_ECDSA) ");
-	Profile_load_procedure.DPauthInforObj.Cert = CERT_S_SM_DPpb_ECDSA_BRP;
-	Profile_load_procedure.ES10b_AuthenticateServer();
-	
-	RecoverCard();	
-	
-}
-
-function TC_eUICC_ES10b_AuthenticateServer_SM_DP_ErrorCases_07_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-022634
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ES10b.AuthenticateServer_SM-DP+_ErrorCases,Test Sequence #01-#07 Error(本 TC 全部 7 条 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;S22-C1 SW;S22-C2 R_CHALLENGE outer tag
+//   S22-C2 R_CHALLENGE required members present;S22-C2 tagOfeuiccChallenge
+//   S22-C2 lengthOfeuiccChallenge;S24-C1 SW;S24-C2 structure_error;S24-C3 transactionId echo
+//   S24-C2 R_AUTH_SERVER_INV_OID authenticateResponseError structure
+//   S24-C2 authenticateErrorCode invalidOid;S25-C1 SW;S25-C2 R_EUICC_INFO1 outer tag
+//   S25-C2 R_EUICC_INFO1 required members present;S27-C1 SW;S27-C2 structure_error
+//   S27-C3 tid_unchecked;S27-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure
+//   S27-C2 authenticateErrorCode noSessionContext
+//   S27-C3 error transactionId present (any value accepted)
+// 本函数由 CaseIR 4.2.18.2.4 编译生成(4.2.18.2.4-TC_eUICC_ES10b.AuthenticateServer_SM-DP+_ErrorCases-20261004_022634,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_DP_ErrorCases_01_07_merged() {
+    var bind = curBind;
+    // Seq#07 附加 (卡态)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 s28 = bind.resetAndAtr();
+    bind.checkData("ICH-IC1-K1-C1 ATR_present", "1", s28.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 s29 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+    bind.checkData("ICH-IC1-K2-C2 FCP_Template", "1", s29.resp.length > 0 ? "1" : "0");
+    bind.checkData("ICH-IC1-K2-C4 SW", "9000", s29.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 3):TERMINAL_CAPABILITY_LPAd(K 语料机械展开)
+    var s30 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+    bind.checkData("ICH-IC1-K3-C4 SW", "9000", s30.sw);
+
+    // IC head inline (initial_conditions → PROC_EUICC_INITIALIZATION_SEQUENCE, K row 4):TERMINAL_PROFILE(K 语料机械展开)
+    var steady31 = bind.runToSteadyState(function () {
+        return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000");
+    });
+    bind.checkData("ICH-IC1-K4-C4 final SW", "9000", steady31.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 s32 = bind.manageChannelOpen("9000");
+    bind.checkData("ICH-IC2-K1-C4 SW", "9000", s32.sw);
+    bind.checkData("ICH-IC2-K1-C3 CHANNEL_NUMBER extracted", "1", s32.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 s33 = 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", s33.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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> 为 <EUICC_CI_PK_ID_LIST_FOR_SIGNING> 中最高优先级 CI Key ID;选取 #CERT_S_SM_DPauth_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: RQ26_005, RQ26_006, RQ31_052, RQ45_006, RQ45_026_1, RQ45_026, RQ45_028, RQ55_005, RQ57_100, 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 = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4085B05C09D0DE12B90AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DF27035EDCA3F9231F2D635ED7A8AB4049774057B0ACDF726063"];
+    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 = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
+    var dt4Ctx = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    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", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + 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: "1674657374736D6470706C7573312E6578616D706C652E636F6D", 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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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_SMDP_SIGNATURE1> 不以 #SK_S_SM_DPauth_ECDSA 计算但长度同有效签名(=<S_SMDP_SIGNATURE_INV>);CI Key ID 取 SIGNING 列表最高优先级;证书正常 #CERT_S_SM_DPauth_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: RQ31_052, RQ45_006, RQ45_026_1, RQ45_026, RQ45_028, RQ55_005, RQ57_100, RQ57_097, 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 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 = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
+    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 = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    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", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + 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: "1674657374736D6470706C7573312E6578616D706C652E636F6D", 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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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_DP+_SIGN>;证书 #CERT_S_SM_DPauth_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: RQ26_005, RQ26_006, RQ31_049, RQ31_052, RQ45_006, RQ45_026_1, RQ45_026, RQ45_028, RQ55_005, RQ57_097, RQ57_100, 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 = ["308201CFA00302010202020900300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313131313433385A170D3330303333303131313433385A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3049301306072A8648CE3D020106082A8648CE3D0301010332000422AF96316FB80393A6BE0BCC6B9A49DB467F4622BDED70EEFE04C7F3613BF5F1CF4C4C1E01CE38D22747D03684B8F6D5A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E041604149B3A9E3D46E78F192729A8EF4A46206A2CCAB2D2300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034800304502202A022B3E01771646812A0A34C71AA61D44B91E5B61E0A8E2B75351929106444A022100DD94B571B2CC128F590C89DC418FF9F698F79A57481633DAFEFBCE72CDD426B9", "308201D0A00302010202020900300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313131313433385A170D3330303333303131313433385A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B304A301406072A8648CE3D020106092B240303020801010303320004C1E971D3F45FDC87E9964B7F4A9A71DE019B5E4F7360E16B904E6412A947FCFD78287590A02F00BDA0F2326C4A0503C6A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E041604140F80D8E3DF68588D6EAC7235A68F9A59E19A3BE9300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034800304502210083EF35CB9E1D97E341C4584CFDF3B8B7F345BCB9061201ACD85B83E043EABA67022027C7EEC49108C20C78004D4653AAE75DB6F1D73B7304AFCF5AFD2FB6D1A83F6E"];
+    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 = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    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", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + 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: "1674657374736D6470706C7573312E6578616D706C652E636F6D", 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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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: RQ26_005, RQ26_006, RQ31_050, RQ31_052, RQ57_098, RQ57_100, 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 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 = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
+    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 = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
+    var dt16Ctx = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    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", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + 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: "1674657374736D6470706C7573312E6578616D706C652E636F6D", 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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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);证书导向 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_005, RQ26_006, RQ26_033, RQ31_048, RQ31_051, RQ31_052, RQ45_006, RQ45_026_1, RQ45_026, RQ45_028, RQ57_099, RQ57_100, 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 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 = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
+    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 = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
+    var dt20Ctx = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    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", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + 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: "1674657374736D6470706C7573312E6578616D706C652E636F6D", 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 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.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] 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 sdCla22 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.chan).toString(16).toUpperCase() : null;
+    var s22 = bind.sendApdu(sdCla22, "E2", "91", "00", "BF2E00", "00", "9000");
+    bind.checkData("S22-C1 SW", "9000", s22.sw);
+    // geca-proc ES10b Info 响应面(R_CHALLENGE,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw22 = BindGecaProc.parseGecaResponse(s22.resp, {outer: "BF2E", required: ["80"], optional: []});
+    bind.checkData("S22-C2 R_CHALLENGE outer tag", "BF2E", gw22.outer_tag === null ? "absent" : gw22.outer_tag);
+    bind.checkData("S22-C2 R_CHALLENGE required members present", "1", gw22.ok ? "1" : "0");
+    var r2w22 = BindGecaProc.parseGecaResponse(s22.resp, {outer: "BF2E", required: ["80"]});
+    bind.checkData("S22-C2 R_CHALLENGE outer tag", "BF2E", r2w22.outer_tag === null ? "absent" : r2w22.outer_tag);
+    var r2ch22 = null; for (var r2ci22 = 0; r2ci22 < r2w22.children.length; r2ci22++) { if (r2w22.children[r2ci22].tag === "80") { r2ch22 = r2w22.children[r2ci22]; } }
+    var r2chal22 = r2ch22 === null ? "" : r2ch22.value;
+    bind.checkData("S22-C2 tagOfeuiccChallenge", "80", r2ch22 === null ? "absent" : r2ch22.tag);
+    bind.checkData("S22-C2 lengthOfeuiccChallenge", "10", r2ch22 === null ? "absent" : (r2ch22.len < 16 ? ("0" + r2ch22.len.toString(16).toUpperCase()) : r2ch22.len.toString(16).toUpperCase()));
+
+    // 步骤 23:Seq#06] Step4 输入准备(InitiateAuthentication):选取 #CERT_S_SM_DPpb_ECDSA(Profile Binding 证书,Certificate Policies 非 id-rspRole-dp-auth)替代 #CERT_S_SM_DPauth_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.
+
+    // 步骤 24:Seq#06] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ26_005, RQ26_006, RQ31_052, RQ45_006, RQ45_026_1, RQ45_026, RQ45_028, RQ45_030, RQ57_096, RQ57_100, 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 dt24Tid = "";
+    var dt24Sc = "";
+    for (var dt24Ri = 0; dt24Ri < 16; dt24Ri++) {
+        dt24Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt24Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt24PkList = BindEs10xSingleRequest.parseBerTlv(gw21.fields["AA"] || "");
+    var dt24CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt24Certs = ["308201DFA00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434355A170D3330303333303038333434355A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D03010703420004104C2AE3D02DEF9C979261A7C6710076B970721D0955A2644AE05FAE4BC2314E5DC09F6BF0118026165342E212318775E365F3B57325373066B9906E0BD1388DA381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414E6EAF71EE0FB9430ECCD1EBB421F881437C13263300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034800304502203EA51B0129FC11E843C38C8CB104244CCF92D8DDBCD4D5F9DAFD0AEF700A9B1C022100FEF382FF71FEFC58168A3607D5685DB7CB48F6B434261891496385BCD6B5857A", "308201E0A00302010202020101300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333434365A170D3330303333303038333434365A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004893253ECC94C51DF4FEE6E0DB0951CFC65627481B5418E557069F487FAA15466A5CB8E10CC2B38099CF2A929F7F82DAC065126B71D0640961DB7F91A49E95612A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E04160414A8C68DF449EB71EC723EAC132E40E4B6F54644FE300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010530610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D04030203470030440220244ED22119D00D49D9EA4AC5D9A6D925FACFCD1998A96448A870CE47FE5E470E02206C4BC7223C925D548DDDD3D8DDD81118DA202973311F6012BB0A20E6DD2D7B7B"];
+    var dt24Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt24Sel = -1;
+    for (var dt24Pi = 0; dt24Pi < dt24PkList.length && dt24Sel < 0; dt24Pi++) {
+        for (var dt24Mi = 0; dt24Mi < dt24CiIds.length; dt24Mi++) {
+            if (dt24PkList[dt24Pi].value === dt24CiIds[dt24Mi]) { dt24Sel = dt24Mi; break; }
+        }
+    }
+    var dt24SkiSel = dt24Sel;
+    var dt24Sks = ["DCD694B778957E8E9ADDBDD94433E9EF8F73D11E491C48D425A38A9491BD3BED", "75FF322F416616DAE1A484EF71D4874FB0DF3295FD35C2CBA489FBB2BB9C7BF6"];
+    var dt24Ctx = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt24Sel < 0 || dt24SkiSel < 0) {
+        bind.checkData("S24-C1 SW", "9000", "dt24_not_executed:no_usable_material_set");
+        bind.checkData("S24-C2 structure_error", "1", "0");
+        bind.checkData("S24-C3 transactionId echo", dt24Tid, "dt24_not_executed:no_usable_material_set");
+    } else {
+        bind.engine.InitEccDomainParams(dt24Dps[dt24Sel][0], dt24Dps[dt24Sel][1], dt24Dps[dt24Sel][2], dt24Dps[dt24Sel][3], dt24Dps[dt24Sel][4], 1);
+        var dt24S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt24Tid)
+            + BindEs10xSingleRequest.buildTlv("81", gw22.fields["80"] || "")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt24Sc));
+        var dt24Sgn = "";
+        while (dt24Sgn.length != 2 * dt24Sks[dt24Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt24Sgn = bind.engine.EccSignData(dt24Sks[dt24Sel], dt24S1, 33);
+        }
+        var dt24Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt24Tid, euiccChallenge: gw22.fields["80"] || "",
+             serverAddress: "1674657374736D6470706C7573312E6578616D706C652E636F6D", serverChallenge: dt24Sc,
+             serverSignature1: dt24Sgn, euiccCiPKIdToBeUsed: dt24CiIds[dt24SkiSel],
+             serverCertificate: dt24Certs[dt24Sel], ctxParams1: dt24Ctx});
+        if (dt24Asm.error) {
+        bind.checkData("S24-C1 SW", "9000", "dt24_assemble_error");
+        bind.checkData("S24-C2 structure_error", "1", "0");
+        bind.checkData("S24-C3 transactionId echo", dt24Tid, "dt24_assemble_error");
+        } else {
+            var dt24Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt24Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt24Sw = (dt24Run.final && dt24Run.final.sw) ? dt24Run.final.sw : "transport_error";
+            bind.checkData("S24-C1 SW", "9000", dt24Sw);
+            var dt24Ex = 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"}]}},
+                dt24Run.final ? dt24Run.final.resp : "");
+            var dt24OkBr = dt24Ex.branch === "ok" && dt24Ex.ok && dt24Ex.ok.missing.length === 0 && dt24Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt24ErrBr = dt24Ex.branch === "error" && dt24Ex.error && dt24Ex.error.missing.length === 0;
+            bind.checkData("S24-C2 R_AUTH_SERVER_INV_OID authenticateResponseError structure", "1", dt24ErrBr ? "1" : "0");
+            bind.checkData("S24-C2 authenticateErrorCode invalidOid", "05", dt24ErrBr ? dt24Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S24-C3 transactionId echo", dt24Tid,
+                dt24OkBr ? dt24Ex.ok.fields.euiccSigned1.children.fields.transactionId.value
+                : (dt24ErrBr ? dt24Ex.error.fields.transactionId.value : "branch_absent"));
+        }
+    }
+
+    // 步骤 25:Seq#07] 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 sdCla25 = s32.chan !== null ? (s32.chan <= 3 ? 128 + s32.chan : 188 + s32.chan).toString(16).toUpperCase() : null;
+    var s25 = bind.sendApdu(sdCla25, "E2", "91", "00", "BF2000", "00", "9000");
+    bind.checkData("S25-C1 SW", "9000", s25.sw);
+    // geca-proc ES10b Info 响应面(R_EUICC_INFO1,SGP.22 §5.7.7/§5.7.8 结构机械转录;响应外层 tag = 请求 tag):绑定层结构步行 + 在场性断言。
+    var gw25 = BindGecaProc.parseGecaResponse(s25.resp, {outer: "BF20", required: ["82", "A9", "AA"], optional: []});
+    bind.checkData("S25-C2 R_EUICC_INFO1 outer tag", "BF20", gw25.outer_tag === null ? "absent" : gw25.outer_tag);
+    bind.checkData("S25-C2 R_EUICC_INFO1 required members present", "1", gw25.ok ? "1" : "0");
+
+    // 步骤 26:Seq#07] Step3 输入准备:<S_TRANSACTION_ID>、#S_EUICC_CHALLENGE、<S_SMDP_CHALLENGE>、<S_SMDP_SIGNATURE1>;CI Key ID 取 SIGNING 列表最高优先级;#CERT_S_SM_DPauth_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.
+
+    // 步骤 27:Seq#07] MTD_STORE_DATA_SCRIPT(tc_step;REQ: RQ26_005, RQ26_006, RQ31_052, RQ57_094, RQ57_100, 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 dt27Tid = "";
+    var dt27Sc = "";
+    for (var dt27Ri = 0; dt27Ri < 16; dt27Ri++) {
+        dt27Tid += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+        dt27Sc += bind.engine.Hex(Math.round(255 * Math.random()), 2);
+    }
+    var dt27PkList = BindEs10xSingleRequest.parseBerTlv(gw25.fields["AA"] || "");
+    var dt27CiIds = ["F54172BDF98A95D65CBEB88A38A1C11D800A85C3", "C0BC70BA36929D43B467FF57570530E57AB8FCD8"];
+    var dt27Certs = ["308201DFA00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B3059301306072A8648CE3D020106082A8648CE3D030107034200044DFED4F4694791BF1695CEA0307A35B418019695387BB75B7D2447B6B5209F0445AE4E5E521CD13888D75FE07C8580222AE20DBAAC1D77CD76304993421BD739A381DF3081DC301F0603551D23041830168014F54172BDF98A95D65CBEB88A38A1C11D800A85C3301D0603551D0E04160414BD5A82CC1A96602118BA7560A1FF83A78B210BE5300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D040302034700304402200823EE7DFA5E3DD07838E930F81BC34AE99F06CBA35927FE9E502C464DC1FEE302200D2D4087DB01A5382D21690AC0488B15067FB2460D336332446CA99F08A8A4EF", "308201E0A00302010202020100300A06082A8648CE3D04030230443110300E06035504030C07546573742043493111300F060355040B0C0854455354434552543110300E060355040A0C0752535054455354310B3009060355040613024954301E170D3230303430313038333133305A170D3330303333303038333133305A3025310D300B060355040A0C0441434D453114301206035504030C0B5445535420534D2D44502B305A301406072A8648CE3D020106092B240303020801010703420004255D7DAF00EF841D76FA7A63D63EB3FE6C9F70492D381923F8F8BD7B24F3C5AD168EBE3B09DD80F29E7FFD24A4D1BE747F8323E472928396DDE9E0151CEABA18A381DF3081DC301F0603551D23041830168014C0BC70BA36929D43B467FF57570530E57AB8FCD8301D0603551D0E0416041479A4BD4D78FF4734BC6045CF9196244A1FB84BEB300E0603551D1104073005880388370A300E0603551D0F0101FF04040302078030170603551D200101FF040D300B300906076781120102010430610603551D1F045A3058302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D412E63726C302AA028A0268624687474703A2F2F63692E746573742E6578616D706C652E636F6D2F43524C2D422E63726C300A06082A8648CE3D0403020347003044022003078BD459045184BC50C1397141F8B90398E6B81737EC703403D5CB0DC0DFC302201A38E7FC84D3DB1179FBB17199231F2D635ED7A8AB4049774057B0ACDF726063"];
+    var dt27Dps = [["FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"], ["A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377", "7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9", "26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6", "048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997", "A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7"]];
+    var dt27Sel = -1;
+    for (var dt27Pi = 0; dt27Pi < dt27PkList.length && dt27Sel < 0; dt27Pi++) {
+        for (var dt27Mi = 0; dt27Mi < dt27CiIds.length; dt27Mi++) {
+            if (dt27PkList[dt27Pi].value === dt27CiIds[dt27Mi]) { dt27Sel = dt27Mi; break; }
+        }
+    }
+    var dt27SkiSel = dt27Sel;
+    var dt27Sks = ["0A7CC1C244E60C52CD5B7807AB8C360C26524601507DCABC5DD598B5A616D5D5", "93FB33D0584F349B07F8B5D2AF93D7C3E354B349A3B913502E6ABC070E4D4929"];
+    var dt27Ctx = "A130800400000000A12880030500008103080000820301000083030100008403020000850302000086030900008703020100";
+    if (dt27Sel < 0 || dt27SkiSel < 0) {
+        bind.checkData("S27-C1 SW", "9000", "dt27_not_executed:no_usable_material_set");
+        bind.checkData("S27-C2 structure_error", "1", "0");
+        bind.checkData("S27-C3 tid_unchecked", "1", "0");
+    } else {
+        bind.engine.InitEccDomainParams(dt27Dps[dt27Sel][0], dt27Dps[dt27Sel][1], dt27Dps[dt27Sel][2], dt27Dps[dt27Sel][3], dt27Dps[dt27Sel][4], 1);
+        var dt27S1 = BindEs10xSingleRequest.buildTlv("30",
+            BindEs10xSingleRequest.buildTlv("80", dt27Tid)
+            + BindEs10xSingleRequest.buildTlv("81", "01020304050607080102030405060708")
+            + BindEs10xSingleRequest.buildTlv("83", "1674657374736D6470706C7573312E6578616D706C652E636F6D")
+            + BindEs10xSingleRequest.buildTlv("84", dt27Sc));
+        var dt27Sgn = "";
+        while (dt27Sgn.length != 2 * dt27Sks[dt27Sel].length) {
+            bind.engine.SleepTime(2000);
+            dt27Sgn = bind.engine.EccSignData(dt27Sks[dt27Sel], dt27S1, 33);
+        }
+        var dt27Asm = BindEs10bAuthServer.assembleAuthenticateServer(
+            {outer: "BF38",
+             signed1: {tag: "30", transactionId: "80", euiccChallenge: "81", serverAddress: "83", serverChallenge: "84"},
+             serverSignature1: "5F37", euiccCiPKIdToBeUsed: "04", serverCertificate: "30", ctxParams1: "A0"},
+            {transactionId: dt27Tid, euiccChallenge: "01020304050607080102030405060708",
+             serverAddress: "1674657374736D6470706C7573312E6578616D706C652E636F6D", serverChallenge: dt27Sc,
+             serverSignature1: dt27Sgn, euiccCiPKIdToBeUsed: dt27CiIds[dt27SkiSel],
+             serverCertificate: dt27Certs[dt27Sel], ctxParams1: dt27Ctx});
+        if (dt27Asm.error) {
+        bind.checkData("S27-C1 SW", "9000", "dt27_assemble_error");
+        bind.checkData("S27-C2 structure_error", "1", "0");
+        bind.checkData("S27-C3 tid_unchecked", "1", "0");
+        } else {
+            var dt27Run = BindEs10xSingleRequest.runTransport(bind.sendApdu,
+                {cla: "", ins: "E2", p1: "91", p2: "00", data: dt27Asm.request_hex,
+                 le: "00", blockSize: 255, blockSw: "9000", finalSw: "9000"});
+            var dt27Sw = (dt27Run.final && dt27Run.final.sw) ? dt27Run.final.sw : "transport_error";
+            bind.checkData("S27-C1 SW", "9000", dt27Sw);
+            var dt27Ex = 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"}]}},
+                dt27Run.final ? dt27Run.final.resp : "");
+            var dt27OkBr = dt27Ex.branch === "ok" && dt27Ex.ok && dt27Ex.ok.missing.length === 0 && dt27Ex.ok.fields.euiccSigned1.children.missing.length === 0;
+            var dt27ErrBr = dt27Ex.branch === "error" && dt27Ex.error && dt27Ex.error.missing.length === 0;
+            bind.checkData("S27-C2 R_AUTH_SERVER_NO_SESSION authenticateResponseError structure", "1", dt27ErrBr ? "1" : "0");
+            bind.checkData("S27-C2 authenticateErrorCode noSessionContext", "04", dt27ErrBr ? dt27Ex.error.fields.authenticateErrorCode.value : "branch_absent");
+            bind.checkData("S27-C3 error transactionId present (any value accepted)", "1",
+                dt27ErrBr ? "1" : "0");
+        }
+    }
 }