源码对照:4.2.1.2.1
ATR 与 ISD-R 选择 / TC_eUICC_ATR_And_ISDR_Selection
左侧为人工切片入口(-man,来自 原料/切片 的最小可执行脚本),右侧为 Cas 盲生成入口(-cas,仅依据规范生成)。文件按原始编码(多为 GBK)解码为 UTF-8 显示,行号自 1 起;字节级原文与 sha256 见两侧脚本包。完整 unified diff 见本页底部折叠区,以及 报告原文 §4。
-man 入口
Import/TestCase_SGP_23.js
44 行 / 1323 字符 / gb18030
-cas 入口
TC_eUICC_ATR_And_ISDR_Selection/Import/TC_eUICC_ATR_And_ISDR_Selection.js
72 行 / 5538 字符 / gb18030
默认折行显示长行;取消勾选可横向滚动查看原始行宽
-man 人工切片Import/TestCase_SGP_23.js44 行 / 1323 字符 / gb18030入口函数 @L3
1// slice of Import\TestCase_SGP_23.js — single case: TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R
2
3function TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R()
4{
5
6
7 //测试入口条件
8 if(!check_Applicability_of_tests_RSP_SGP23_test("C006"))
9 return;
10
11 tracenamestr = "正常测试:检查ATR 并选择ISD-R";
12 curDis.TraceStart(sno++,tracenamestr);
13
14 curDis.TestStepStart2(stno++,"复位;");
15 var curRST = ResetCard();
16
17 obj.SubLevel("curRST = " + curRST,1);
18 var atrObj = new ATR_Obj(curRST);
19 if (atrObj.supportEUICC)
20 obj.SubLevel("ATR指示卡片支持EUICC!",1);
21 else
22 obj.SubLevel("ATR指示卡片不支持EUICC!",0);
23
24 curDis.TestStepStart2(stno++,"选择MF;");
25 var para1 = new SelectFileMFPara_3G();
26 SendAPDU(para1.apdu);
27
28 curDis.TestStepStart2(stno++,"读卡器向卡片发送Terminal Capability命令;");
29 TS_TERMINAL_CAPABILITY_cmd();
30
31 curDis.TestStepStart2(stno++,"读卡器向卡片发送MANAGE_CHANNEL命令,打开辅助逻辑通道;");
32 TS_MANAGE_CHANNEL_OPEN();
33
34 curLogicChannel = 1;
35
36 curDis.TestStepStart2(stno++,"读卡器向卡片发送SELECT命令,选择ISD-R;");
37 var sres = TS_SELECT("Select ISD",ISD_R_AID,"9000");
38 var ResponseDataPar = new check_ISDRResponseData(sres);
39 curStrHandle.CheckData(ISD_R_AID,ResponseDataPar.ISD_R_AID,"ISD_R_AID");
40 curStrHandle.CheckData(RSP_SVN_H,ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,"svn");
41
42}
43
44
-cas 盲生成TC_eUICC_ATR_And_ISDR_Selection/Import/TC_eUICC_ATR_And_ISDR_Selection.js72 行 / 5538 字符 / gb18030入口函数 @L14
1// Author: 卡思Cas智能体
2// Date: 20260902-172111
3// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ATR_And_ISDR_Selection,Test Sequence #01 Nominal: ATR and Select ISD-R,适用性 C006。
4// Test points: S1-C1 ATR_present;S1-C1 T15_present;S1-C1 first_tB_after_T15
5// S1-C2 first_tB_after_T15;S1-C2 tB_b2;S2-C1 FCP_Template;S2-C2 SW;S3-C1 SW;S3-C2 request data
6// S3-C3 eUICC_TLV_tag 83;S4-C1 final SW;S5-C1 FETCH Le;S6-C1 TERMINAL RESPONSE
7// S4-C3 ongoing_proactive_commands;S7-C1 SW;S7-C2 CHANNEL_NUMBER extracted
8// S7-C3 CHANNEL_NUMBER extracted;S8-C1 outer tag 6F;S8-C2 tag 84 value;S8-C3 A5 present
9// S8-C4 ISDR E0 present;S8-C4 ISDR svn member (82 03);S8-C5 SW
10// S8-C6 ISDR svn-only (lpaeSupport absent)
11// 本函数由 CaseIR 4.2.1.2.1 编译生成(SPECONLY-421-R1,SGP.23 v1.16 × SGP.22 v2.7):字节权威=CaseIR,非誊录黄金脚本。
12// Value-free template: every data byte is injected from CaseIR fields; no scaffold globals (see docs/speconly/compile-symbol-migration.md).
13// 适用性 C006:编译期门,运行时由 harness 环境前置承担。
14function TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R() {
15 var bind = curBind;
16
17 // 步骤 1:RESET(tc_step;REQ: RQ34_001)
18 var s1 = bind.resetAndAtr();
19 bind.checkData("S1-C1 ATR_present", "1", s1.atr_hex !== "" ? "1" : "0");
20 bind.checkData("S1-C1 T15_present", "present", s1.atr_parse.t15_round !== null ? "present" : "absent");
21 bind.checkData("S1-C1 first_tB_after_T15", "present", s1.atr_parse.first_tbi_after_t15 !== null ? "present" : "absent");
22 bind.checkData("S1-C2 first_tB_after_T15", "present", s1.atr_parse.first_tbi_after_t15 !== null ? "present" : "absent");
23 bind.checkData("S1-C2 tB_b2", "1", s1.atr_parse.euicc_b2.present ? String(s1.atr_parse.euicc_b2.b2) : "absent:" + s1.atr_parse.euicc_b2.reason);
24
25 // 步骤 2:SELECT_MF(tc_step)
26 // FCP outer tag not materialized from clause: tag-face asserted only when corpus fixes the tag byte (e.g. TS 102 221 FCP '62').
27 var s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
28 bind.checkData("S2-C1 FCP_Template", "1", s2.resp.length > 0 ? "1" : "0");
29 bind.checkData("S2-C2 SW", "9000", s2.sw);
30
31 // 步骤 3:TERMINAL_CAPABILITY_LPAd(tc_step)
32 var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
33 bind.checkData("S3-C1 SW", "9000", s3.sw);
34 bind.checkData("S3-C2 request data", "A9058100830107", s3.cmd.substring(10));
35 bind.checkData("S3-C3 eUICC_TLV_tag 83", "present", s3.cmd.indexOf("83") >= 0 ? "present" : "absent");
36
37 // 步骤 4:TERMINAL_PROFILE(tc_step);折叠 procedure_expansion 步骤 5, 6(经 runToSteadyState)
38 var steady4 = bind.runToSteadyState(function () {
39 return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
40 });
41 bind.checkData("S4-C1 final SW", "9000", steady4.final.sw);
42 for (var i4 = 0; i4 < steady4.iterations.length; i4++) {
43 bind.checkData("S5-C1 FETCH Le", steady4.iterations[i4].trigger_sw.substring(2, 4), steady4.iterations[i4].fetch_le);
44 bind.checkData("S6-C1 TERMINAL RESPONSE", "sent", steady4.iterations[i4].tr_sw ? "sent" : "absent");
45 }
46 bind.checkData("S4-C3 ongoing_proactive_commands", "0/1", String(steady4.max_in_flight));
47 // S4-C2: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
48 // S4-C2: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
49 // S4-C2: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
50 // S6-C2: binding:buildTrData_result_830100(golden-line) (check_attestation)
51
52 // 步骤 7:MANAGE_CHANNEL_OPEN(tc_step;REQ: RQ57_001)
53 // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
54 var s7 = bind.manageChannelOpen("9000");
55 bind.checkData("S7-C1 SW", "9000", s7.sw);
56 bind.checkData("S7-C2 CHANNEL_NUMBER extracted", "1", s7.chan !== null ? "1" : "0");
57 bind.checkData("S7-C3 CHANNEL_NUMBER extracted", "1", s7.chan !== null ? "1" : "0");
58
59 // 步骤 8:MTD_SELECT(tc_step;REQ: RQ57_003, RQ57_005, RQD0_001)
60 // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
61 var s8 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
62 var fci8 = CasBind.parseSelectResponse(s8.resp, { outer: "6F", required: ["84", "A5"] });
63 bind.checkData("S8-C1 outer tag 6F", "present", fci8.tags["6F"] ? "present" : "absent");
64 bind.checkData("S8-C2 tag 84 value", "A0000005591010FFFFFFFF8900000100", (fci8.inner_tags && fci8.inner_tags["84"]) ? fci8.inner_tags["84"].value : "absent");
65 bind.checkData("S8-C3 A5 present", "present", (fci8.inner_tags && fci8.inner_tags["A5"]) ? "present" : "absent");
66 var isdrE08 = (fci8.inner_tags && fci8.inner_tags["E0"]) ? fci8.inner_tags["E0"].value : "";
67 bind.checkData("S8-C4 ISDR E0 present", "present", isdrE08 !== "" ? "present" : "absent");
68 bind.checkData("S8-C4 ISDR svn member (82 03)", "present", (isdrE08.length >= 10 && isdrE08.substring(0, 2) === "82" && isdrE08.substring(2, 4) === "03") ? "present" : "absent");
69 bind.checkData("S8-C5 SW", "9000", s8.sw);
70 bind.checkData("S8-C6 ISDR svn-only (lpaeSupport absent)", "1", (isdrE08.length === 10 && isdrE08.substring(0, 2) === "82" && isdrE08.substring(2, 4) === "03") ? "1" : "0");
71}
72
完整 unified diff
行级差异:新增 67 行 / 删除 39 行(以 -man 为基准,unified 上下文 3 行)。
展开 diff(114 行)
--- -man
+++ -cas
@@ -1,44 +1,72 @@
-// slice of Import\TestCase_SGP_23.js — single case: TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R
+// Author: 卡思Cas智能体
+// Date: 20260902-172111
+// Function: (purpose 原文未由 SGP.23 该 TC 提供,corpus vacuum 登记)TC_eUICC_ATR_And_ISDR_Selection,Test Sequence #01 Nominal: ATR and Select ISD-R,适用性 C006。
+// Test points: S1-C1 ATR_present;S1-C1 T15_present;S1-C1 first_tB_after_T15
+// S1-C2 first_tB_after_T15;S1-C2 tB_b2;S2-C1 FCP_Template;S2-C2 SW;S3-C1 SW;S3-C2 request data
+// S3-C3 eUICC_TLV_tag 83;S4-C1 final SW;S5-C1 FETCH Le;S6-C1 TERMINAL RESPONSE
+// S4-C3 ongoing_proactive_commands;S7-C1 SW;S7-C2 CHANNEL_NUMBER extracted
+// S7-C3 CHANNEL_NUMBER extracted;S8-C1 outer tag 6F;S8-C2 tag 84 value;S8-C3 A5 present
+// S8-C4 ISDR E0 present;S8-C4 ISDR svn member (82 03);S8-C5 SW
+// S8-C6 ISDR svn-only (lpaeSupport absent)
+// 本函数由 CaseIR 4.2.1.2.1 编译生成(SPECONLY-421-R1,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).
+// 适用性 C006:编译期门,运行时由 harness 环境前置承担。
+function TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R() {
+ var bind = curBind;
-function TC_eUICC_ATR_And_ISDR_Selection_01_Nominal_ATR_and_Select_ISD_R()
-{
+ // 步骤 1:RESET(tc_step;REQ: RQ34_001)
+ var s1 = bind.resetAndAtr();
+ bind.checkData("S1-C1 ATR_present", "1", s1.atr_hex !== "" ? "1" : "0");
+ bind.checkData("S1-C1 T15_present", "present", s1.atr_parse.t15_round !== null ? "present" : "absent");
+ bind.checkData("S1-C1 first_tB_after_T15", "present", s1.atr_parse.first_tbi_after_t15 !== null ? "present" : "absent");
+ bind.checkData("S1-C2 first_tB_after_T15", "present", s1.atr_parse.first_tbi_after_t15 !== null ? "present" : "absent");
+ bind.checkData("S1-C2 tB_b2", "1", s1.atr_parse.euicc_b2.present ? String(s1.atr_parse.euicc_b2.b2) : "absent:" + s1.atr_parse.euicc_b2.reason);
-
- //测试入口条件
- if(!check_Applicability_of_tests_RSP_SGP23_test("C006"))
- return;
-
- tracenamestr = "正常测试:检查ATR 并选择ISD-R";
- curDis.TraceStart(sno++,tracenamestr);
+ // 步骤 2:SELECT_MF(tc_step)
+ // 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 s2 = bind.sendApdu("00", "A4", "00", "04", "3F00", "00", "9000");
+ bind.checkData("S2-C1 FCP_Template", "1", s2.resp.length > 0 ? "1" : "0");
+ bind.checkData("S2-C2 SW", "9000", s2.sw);
- curDis.TestStepStart2(stno++,"复位;");
- var curRST = ResetCard();
-
- obj.SubLevel("curRST = " + curRST,1);
- var atrObj = new ATR_Obj(curRST);
- if (atrObj.supportEUICC)
- obj.SubLevel("ATR指示卡片支持EUICC!",1);
- else
- obj.SubLevel("ATR指示卡片不支持EUICC!",0);
-
- curDis.TestStepStart2(stno++,"选择MF;");
- var para1 = new SelectFileMFPara_3G();
- SendAPDU(para1.apdu);
-
- 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;");
- var sres = TS_SELECT("Select ISD",ISD_R_AID,"9000");
- var ResponseDataPar = new check_ISDRResponseData(sres);
- curStrHandle.CheckData(ISD_R_AID,ResponseDataPar.ISD_R_AID,"ISD_R_AID");
- curStrHandle.CheckData(RSP_SVN_H,ResponseDataPar.ISDRProprietaryApplicationTemplate.svn,"svn");
-
+ // 步骤 3:TERMINAL_CAPABILITY_LPAd(tc_step)
+ var s3 = bind.sendApdu("80", "AA", "00", "00", "A9058100830107", null, "9000");
+ bind.checkData("S3-C1 SW", "9000", s3.sw);
+ bind.checkData("S3-C2 request data", "A9058100830107", s3.cmd.substring(10));
+ bind.checkData("S3-C3 eUICC_TLV_tag 83", "present", s3.cmd.indexOf("83") >= 0 ? "present" : "absent");
+
+ // 步骤 4:TERMINAL_PROFILE(tc_step);折叠 procedure_expansion 步骤 5, 6(经 runToSteadyState)
+ var steady4 = bind.runToSteadyState(function () {
+ return bind.sendTerminalProfile("FFFFFFFF7F9D00DFBF00001FE2000000C7EB0000000168005000000000000200", "9000/91XX");
+ });
+ bind.checkData("S4-C1 final SW", "9000", steady4.final.sw);
+ for (var i4 = 0; i4 < steady4.iterations.length; i4++) {
+ bind.checkData("S5-C1 FETCH Le", steady4.iterations[i4].trigger_sw.substring(2, 4), steady4.iterations[i4].fetch_le);
+ bind.checkData("S6-C1 TERMINAL RESPONSE", "sent", steady4.iterations[i4].tr_sw ? "sent" : "absent");
+ }
+ bind.checkData("S4-C3 ongoing_proactive_commands", "0/1", String(steady4.max_in_flight));
+ // S4-C2: 'interim_SW' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S4-C2: 'fetch_issued' structurally guaranteed by runToSteadyState (binding layer unit 4, chaining rule).
+ // S4-C2: binding:runToSteadyState_structural(chaining-rule) (check_attestation)
+ // S6-C2: binding:buildTrData_result_830100(golden-line) (check_attestation)
+
+ // 步骤 7:MANAGE_CHANNEL_OPEN(tc_step;REQ: RQ57_001)
+ // CHANNEL_NUMBER extraction and dynamic CLA rebinding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s7 = bind.manageChannelOpen("9000");
+ bind.checkData("S7-C1 SW", "9000", s7.sw);
+ bind.checkData("S7-C2 CHANNEL_NUMBER extracted", "1", s7.chan !== null ? "1" : "0");
+ bind.checkData("S7-C3 CHANNEL_NUMBER extracted", "1", s7.chan !== null ? "1" : "0");
+
+ // 步骤 8:MTD_SELECT(tc_step;REQ: RQ57_003, RQ57_005, RQD0_001)
+ // CLA = bound channel (cla_rule) and <L> length binding are CasBind internal state (chaining rule; no generated-code re-implementation).
+ var s8 = bind.sendApdu(null, "A4", "04", "00", "A0000005591010FFFFFFFF8900000100", "00", "9000");
+ var fci8 = CasBind.parseSelectResponse(s8.resp, { outer: "6F", required: ["84", "A5"] });
+ bind.checkData("S8-C1 outer tag 6F", "present", fci8.tags["6F"] ? "present" : "absent");
+ bind.checkData("S8-C2 tag 84 value", "A0000005591010FFFFFFFF8900000100", (fci8.inner_tags && fci8.inner_tags["84"]) ? fci8.inner_tags["84"].value : "absent");
+ bind.checkData("S8-C3 A5 present", "present", (fci8.inner_tags && fci8.inner_tags["A5"]) ? "present" : "absent");
+ var isdrE08 = (fci8.inner_tags && fci8.inner_tags["E0"]) ? fci8.inner_tags["E0"].value : "";
+ bind.checkData("S8-C4 ISDR E0 present", "present", isdrE08 !== "" ? "present" : "absent");
+ bind.checkData("S8-C4 ISDR svn member (82 03)", "present", (isdrE08.length >= 10 && isdrE08.substring(0, 2) === "82" && isdrE08.substring(2, 4) === "03") ? "present" : "absent");
+ bind.checkData("S8-C5 SW", "9000", s8.sw);
+ bind.checkData("S8-C6 ISDR svn-only (lpaeSupport absent)", "1", (isdrE08.length === 10 && isdrE08.substring(0, 2) === "82" && isdrE08.substring(2, 4) === "03") ? "1" : "0");
}
-