ifdtest2 的 A、B 和 C 部分(智能卡读卡器徽标)- 手动测试
此测试通过验证 PC/SC 工作组测试卡来验证智能卡读卡器的功能。 你可以使用任何智能卡运行 A、B 和 C 部分。
测试详细信息
规范 |
|
平台 |
|
支持的版本 |
|
预计运行时间(以分钟为单位) | 5 |
类别 | 兼容性 |
超时(以分钟为单位) | 300 |
需要重启 | false |
需要特殊配置 | false |
类型 | automatic |
其他文档
此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:
运行测试
在运行测试之前,请按照如下测试要求中所述完成测试设置:智能卡读卡器测试先决条件。
故障排除
有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题。
有关故障排除信息,请参阅排查 Device.Input 测试问题。
更多信息
此测试通过验证 PC/SC 工作组测试卡的修订版 2,来验证智能卡读卡器的功能。
测试及其硬件必须能够执行特定的 IFD 测试并生成测试报告。 特定要求涉及标准操作和异常操作(错误条件)。 此外,这些要求必须应用于读卡器子系统支持的所有协议。
需要为以下类型的智能卡读卡器提供配置文件:
- 免接触式
- 虚拟
- 需要网络
配置文件必须命名为 ifdtest_config.xml,并且必须放在 C:\SmartCardReaderTest 中。 以下代码片段显示了一个示例配置文件:
<SmartCardReader>
<Version>1</Version>
<Contactless>False</Contactless>
<Virtual>False</Virtual>
<Network>False</Network>
</SmartCardReader>
IFDTEST2 在三个单独的测试作业中执行测试用例:读卡器接口测试在未将任何卡插入到读卡器的情况下执行。 执行资源管理器状态测试用例的方式是先将示例卡插入到读卡器中,然后再从中取出卡,并在各种条件下处理卡插入检测(任何卡都可用于此测试)。
卡协议测试涉及插入了通常可用的代表性智能卡和具有某些特殊编程行为的特殊卡的操作。 使用通常可用的卡的测试用例将针对所选卡执行例行操作,以表示各种通信速度和协议组合。 对于卡集 2,这些测试已更改。
资源管理器状态测试用例
A 部分
卡监视器测试用例将检查是否正确检测智能卡插入状态,以及是否正确处理由于意外取出卡而中断的操作。
使用 IOCTL_SMARTCARD_IS_PRESENT 测试空读卡器的检测
使用 IOCTL_SMARTCARD_IS_PRESENT 测试插入的卡的检测
使用 IOCTL_SMARTCARD_IS_ABSENT 测试插入的卡的取出
测试 15 秒内是否正确处理随机时间的卡插入和取出操作
- 验证 IOCTL_SMARTCARD_IS_PRESENT 和 IOCTL_SMARTCARD_IS_ABSENT 是否生成有效结果
C 部分
资源管理器测试用例将验证通常由智能卡资源管理器控制的状态更改操作是否成功完成。
在未插入卡的情况下验证 IOCTL_SMARTCARD_GET_STATE 是否成功
验证返回的状态是否有效
验证 IOCTL_SMARTCARD_IS_PRESENT 的返回值是否正确
验证 IOCTL_SMARTCARD_IS_ABSENT 的返回值是否正确
操作员插入卡
在插入了卡的情况下验证 IOCTL_SMARTCARD_GET_STATE 是否成功
验证返回的状态是否有效
验证 IOCTL_SMARTCARD_IS_ABSENT 的返回值是否正确
冷重置卡
验证卡状态是否为 SCARD_NEGOTIABLE
将卡协议设置为 T0 或 T1
验证 IOCTL_SMARTCARD_POWER 是否成功关闭卡
操作员取出卡
在未插入卡的情况下验证 IOCTL_SMARTCARD_GET_STATE 是否成功
E 部分
电源管理测试用例将验证即使在休眠期间读卡器的状态由于插入或取出卡而发生更改,驱动程序是否也能跨休眠序列返回读卡器的正确状态信息。
操作员取出所有卡
操作员将计算机置入休眠状态
操作员启动计算机
验证从休眠中恢复后读卡器状态是否为 SCARD_ABSENT
操作员插入卡
操作员将计算机置入休眠状态
操作员启动计算机
验证从休眠中恢复后读卡器状态是否为 SCARD_PRESENT
操作员取出卡
操作员将计算机置入休眠状态
操作员在休眠期间取出卡
操作员启动计算机
验证从休眠中恢复后读卡器状态是否为 SCARD_ABSENT
操作员将计算机置入休眠状态
操作员在休眠期间插入卡
操作员启动计算机
验证从休眠中恢复后读卡器状态是否为 SCARD_PRESENT
读卡器接口测试用例
B 部分
读卡器接口测试用例在读卡器驱动程序上检查是否有正确的实现属性和状态信息。
在插入了示例卡的情况下检查读卡器报告的属性
测试驱动程序报告的设备名称是否符合 WDM PnP 标准
测试驱动程序是否正确处理具有 NULL 返回缓冲区的属性读取请求
测试在通过挂起的 I/O 操作关闭再重新打开驱动程序时,驱动程序是否正确停止挂起的 I/O 请求
测试读取属性(未插入卡)
SCARD_ATTR_VENDOR_NAME:非零长度字符串
SCARD_ATTR_VENDOR_IFD_TYPE:非零长度字符串
SCARD_ATTR_DEVICE_UNIT:4 个字节或更大的长度值
SCARD_ATTR_ATR_STRING:读取尝试失败
SCARD_ATTR_DEFAULT_CLK:1000 <= 值 <= 20000
SCARD_ATTR_MAX_CLK:1000 <= 值 <= 20000
SCARD_ATTR_DEFAULT_DATA_RATE:读取尝试成功
SCARD_ATTR_MAX_DATA_RATE:读取尝试成功
SCARD_ATTR_MAX_IFSD:1 <= 值 <= 254
SCARD_ATTR_CURRENT_PROTOCOL_TYPE:读取尝试失败
测试读取属性(已插入卡)
SCARD_ATTR_VENDOR_NAME:非零长度字符串
SCARD_ATTR_VENDOR_IFD_TYPE:非零长度字符串
SCARD_ATTR_DEVICE_UNIT:4 个字节或更大的长度值
SCARD_ATTR_ATR_STRING:读取尝试成功
SCARD_ATTR_DEFAULT_CLK:值 1000 <= 值 <= 20000
SCARD_ATTR_MAX_CLK:1000 <= 值 <= 20000
SCARD_ATTR_DEFAULT_DATA_RATE:读取尝试成功
SCARD_ATTR_MAX_DATA_RATE:读取尝试成功
SCARD_ATTR_MAX_IFSD:1 <= 值 <= 254
SCARD_ATTR_CURRENT_PROTOCOL_TYPE:值 = 0
使用 IOCTL_SMARTCARD_GET_STATE 读取已取出卡时的卡状态:状态 <= SCARD_SWALLOWED
重置卡:验证结果是否为 ERROR_UNRECOGNIZED_MEDIA
卡协议测试用例
D 部分
Infineon Technologies PC/SC 符合性测试卡(卡 0/无标签)
ATR:3B EF 00 00 81 31 20 49
00 5C 50 43 54 10 27 F8
D2 76 00 00 38 33 00 4D
在缓冲区太小的情况下尝试读取
等待时间延长请求 - 将请求图路由到文件 0001,读回并验证
文件 0002 上的块链接重新同步测试:卡接受第一个块。 然后重复请求重新传输块 2;主机重新同步 - 预期返回 ERROR_IO_DEVICE
文件 0002 上的块链接重新同步测试:卡重复声明块 2 上的 EDC 错误;主机重新同步 - 预期返回 ERROR_IO_DEVICE
读取到文件 0003 时出现错误的块序列 - 预期返回 ERROR_IO_DEVICE
Ifsc 请求文件 ID 0004
读取到文件 0005 时强制超时 - 预期返回 ERROR_IO_DEVICE
读取并处理结果文件 (A000),分析并报告错误
Athena T0 测试卡(卡 1)
ATR:3B D6 18 00 80 B1 80 6D
1F 03 80 51 00 61 10 30
9E
在较长的 ATR 传输时间(约 900 毫秒)后重置
将协议设置为 T0,预期成功
通过专有命令擦除所有卡文件,预期成功
创建测试文件 0002,预期成功
选择测试文件 0002,预期成功
写入 256 个字节(作为 4 个大小为 64 个字节的块),预期成功
读取并验证 256 个字节(作为 4 个大小为 64 个字节的块),预期成功
写入 255 个字节(作为单个块),预期成功。 卡将在单字节模式下接收字节,直到剩下 8 个字节为止,此时将以单个块的形式从主机请求剩余的数据,预期成功
将接收缓冲区设置为 9 个字节,并尝试从卡接收 10 个字节的响应,预期返回 ERROR_INSUFFICIENT BUFFER
发送格式不正确(Lc 与数据长度不一致)的 select 命令 00 a4 00 00 08 00,预期返回 ERROR_INVALID_PARAMETER
选择不存在的文件,预期返回 6A 82
发送命令以使卡静音 (80 00 01 00 01 11),预期返回 ERROR_SEM_TIMEOUT
重置卡
向卡发送回显命令,以测试请求等待时间延长的延长计数是否为 1、2、5 和 30 个延期,预期成功
Athena\反向约定测试卡(卡 2)
ATR:3F 96 18 80 01 80 51 00
61 10 30 9F
在较长的 ATR 传输时间(约 900 毫秒)后重置
将协议设置为 T0,预期成功
通过专有命令擦除所有卡文件,预期成功
创建测试文件 0002,预期成功
选择测试文件 0002,预期成功
写入 256 个字节(作为 4 个大小为 64 个字节的块),预期成功
读取并验证 256 个字节(作为 4 个大小为 64 个字节的块),预期成功
写入 255 个字节(作为单个块),预期成功。 卡将在单字节模式下接收字节,直到剩下 128 个字节为止,此时将以单个块的形式从主机请求剩余的数据,预期成功
将接收缓冲区设置为 9 个字节,并尝试从卡接收 10 个字节的响应,预期返回 ERROR_INSUFFICIENT BUFFER
发送格式不正确(Lc 与数据长度不一致)的 select 命令 00 a4 00 00 08 00,预期返回 ERROR_INVALID_PARAMETER
选择不存在的文件,预期返回 6A 82
发送命令以使卡静音 (80 00 01 00 01 11),预期返回 ERROR_SEM_TIMEOUT
重置卡
向卡发送回显命令,以测试请求等待时间延长的延长计数是否为 1、2、5 和 30 个延期,预期成功
Axalto 32K eGate 测试卡(卡 3)
ATR:3B 95 18 40 FF 62 01 02
01 04
尝试将协议设置为 T1,预期返回 ERROR_NOT_SUPPORTED
尝试将协议设置为 T0
使用卡传输密钥进行身份验证,预期成功
通过删除以前的运行所生成的文件来清除卡状态(删除 RSA 公钥和私钥文件、用户 PIN 文件和测试文件),预期成功
创建新的测试文件 0055,预期成功
测试将包含 1、25、75、128 个字节的块写入到测试文件,预期成功
测试从测试文件读取 128 个字节,比较数据,预期成功
删除测试文件 0055,预期成功
创建 PIN 文件,预期成功
将用户 PIN 设置为 00000000,预期成功
创建私钥文件,预期成功
创建公钥文件,预期成功
选择私钥文件,预期成功
对具有 PIN 的用户进行身份验证,预期成功
生成密钥对,预期成功
对 16 个字节数据执行哈希操作,预期成功
获取哈希操作的响应数据,20 个字节 + 2 个字节响应,预期成功
Infineon SiCrypt 卡模块测试卡(卡 4)
ATR:3B DF 18 00 81 31 FE 67
00 5C 49 43 4D D4 91 47
D2 76 00 00 38 33 00 58
尝试将协议设置为 T0,预期返回 ERROR_NOT_SUPPORTED
将协议设置为 T1,预期成功
使用 PIN 12345678 进行身份验证,预期成功
删除以前的运行所生成的文件(如果存在)
创建新的测试文件 0007,预期成功
选择文件 0007,预期成功
记录系统时间
将大小为 1、25、50、75、100、125、128 个字节的测试块写入到卡 - 写入每个块后读取并验证数据,预期成功
获取系统时间,并显示完成测试所用的时间(以秒表示)
选择文件 0007,预期成功
写入字节值为 55 的 128 字节块,读回并验证,预期成功
写入字节值为 AA 的 128 字节块,读回并验证,预期成功
写入字节值为 00 的 128 字节块,读回并验证,预期成功
写入字节值为 FF 的 128 字节块,读回并验证,预期成功
选择不存在的文件 7777,预期返回 9404
选择 MF by 00 a4 00 00,预期返回 90 00(成功)
选择无效文件 77,预期返回 94 04
发送格式不正确(Lc 与数据长度不一致)的 select 命令 00 a4 00 00 08 00,预期返回 94 04
发送格式不正确(长度太多)的 select 命令 by 00 a4 00,预期返回 67 00
根据 MF 创建 DF 5555,预期成功
Select into 5555,预期成功
根据 5555 创建 DF 5656,预期成功
Select into 5656,预期成功
在 DF 5656 中创建文件 5757,预期成功
按完整路径从 MF 中选择该文件,预期成功
将 8 个字节写入到文件,读回并验证,预期成功
删除所选文件,预期成功
尝试按完整路径选择该文件,预期返回 94 04
选择并删除 DF 5656,预期成功
选择并删除 DF 5555,预期成功
选择并删除文件 0007,预期成功
运行读卡器测试
警告
对于 D 部分中的电源管理测试用例,计算机将进入休眠状态,你可能必须取出或重新插入测试智能卡读卡器中的智能卡。
A、B、C 和 E 部分
使用 PC/SC 工作组测试卡集 2 中的卡,按照屏幕上针对 A、B、C 和 E 部分的说明进行操作。 系统提示时,插入每张智能卡,然后从测试智能卡读卡器中取出。
D 部分
按照屏幕上针对 D 部分的说明完成四个电源管理测试用例。 系统提示时,在测试智能卡读卡器中插入或取出智能卡,然后休眠或重启测试计算机。
要运行“测试 1 - 卡取出/卡取出”测试用例:
从测试智能卡读卡器中取出智能卡。
计算机将在 15 秒后自动休眠。
让计算机休眠 30 到 60 秒。
按计算机电源按钮,使计算机退出休眠状态并继续测试。
系统提示时,将智能卡重新插入到测试智能卡读卡器中。
要运行“测试 2 - 卡插入/卡取出”测试用例:
验证智能卡是否位于测试智能卡读卡器中。
计算机将在 15 秒后自动休眠。
让计算机休眠 30 到 60 秒。
从测试智能卡读卡器中取出智能卡。
按计算机电源按钮,使计算机退出休眠状态。
在开始下一个测试用例之前,当系统提示时将智能卡重新插入到测试智能卡读卡器中。
要运行“测试 3 - 卡插入/卡插入”测试用例:
验证智能卡是否位于测试智能卡读卡器中。
计算机将在 15 秒后自动休眠。
让计算机休眠 30 到 60 秒。
按计算机电源按钮,使计算机退出休眠状态。
在开始下一个测试用例之前,当系统提示时从测试智能卡读卡器中取出智能卡。
要运行“测试 4 - 卡取出/卡插入”测试用例:
验证智能卡测试智能卡读卡器中是否没有卡。
计算机将在 15 秒后自动休眠。
让计算机休眠 30 到 60 秒。
将智能卡重新插入到测试智能卡读卡器中。
按计算机电源按钮,使计算机退出休眠状态。 智能卡读卡器测试已完成。
查看测试日志文件。
运行所有其他必需的测试。
成功完成此测试提交所需的所有测试后,返回测试结果。
命令语法
要在 HLK Studio 外部运行此命令,必须停止智能卡服务,运行命令,然后启动智能卡服务。
命令 | 说明 |
---|---|
ifdtest2.exe -sd -se -sf |
运行测试。 |
文件列表
文件 | 位置 |
---|---|
ifdtest2.exe |
<testbinroot>\nttest\Driverstest\storage\wdk\ |
参数
参数名称 | 参数说明 |
---|---|
LLU_NetAccessOnly | 用于访问测试文件共享的用户帐户。 |
LLU_LclAdminUsr | 用于运行测试的用户帐户。 |