ACR83 Application Programming Interface V1.06

Similar documents
威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

國立臺東高級中學102學年度第一學期第二次期中考高一國文科試題

Page 2 of 12

Microsoft Word - Sunday

秘密大乘佛法(下)

!! :!!??!!?!??!!!... :... :'?'?! :' ' :'?' :'?' :'!' : :? Page 2

<D2B0D0C4D3C5D1C52DC8CED6BEC7BF202D20BCC7CAC2B1BE>

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

6寸PDF生成工具

Microsoft Word - 送報伕2.doc

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

申论写作套路万能模板

Information for consent

PowerPoint Presentation

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

工程设计资质标准

4 办 公 室 工 作 实 务 ( 第 3 版 ) 第 1 单 元 单 位 组 织 的 有 效 运 作 离 不 开 办 公 室 工 作 情 景 案 例 左 景 被 宏 达 商 业 集 团 公 司 录 用 为 秘 书, 试 用 期 间, 只 能 在 办 公 室 打 杂, 有 时 工 作 稍 有 差 错


ttian

Microsoft Word - InoTouch Editor编程软件手册 doc

2005年卷广东科技年鉴

昭英,

ACR1222L 应用程序编程接口 V1.02

96年第2次勘誤( 新增)

當母親禱告時

X 广 州 澳 希 亚 实 业 有 限 公 司 广 州 市 荔 湾 区 国 家 税 务 局 第 二 税 务 分 局 广 州 市 运 输 有 限 公 司 广 州 市 荔 湾 区 国 家 税 务 局 第 二 税 务 分

形 成 为 习 俗, 久 远 地 流 传 着 我 国 传 统 的 家 庭 结 构 基 本 上 属 于 生 育 型 的, 传 宗 接 代 成 为 男 女 结 合 的 第 一 使 命 家 族 在 旧 社 会, 特 别 在 封 建 社 会 里, 代 表 着 一 种 社 会 地 位, 于 是 在 人 们 头

Slide 1

中国打击、遏制和消除强迫劳动的法律规定与执法实践

酒 神 (长篇小说)

Microsoft Word - WANGSHI_No46.doc

chap07.key



《计算机应用基础》学习材料(讲义)

T

儿童和青少年的修炼故事


我 们 再 看 到 尼 西 米 记, 也 会 发 现 当 时 神 的 百 姓 有 一 颗 单 纯 受 教 的 心, 他 们 单 纯 的 听 从 神 的 教 导, 敬 畏 遵 从 神 的 训 诲 当 他 们 明 白 自 己 的 罪 孽 时, 个 个 俯 伏 在 地, 为 罪 痛 悔 哭 泣 在 整 个


ACR1281S-C1 通信协议 V1.01

060522達文西密碼_全_.PDF

一月七日


水权定义 法律规定的用户获得水权的方式 法律规定的几种水相关许可 水利经济 电话 传真

Transcription:

ACR83 PINeasy 应用程序编程接口 V1.06 如有任何更改, 恕不另行通知

目录 1.0. 简介... 3 2.0. 特性... 4 3.0. 设备控制... 5 3.1. 操作流程 (PC/SC 2.0 第 10 部分 )... 5 3.2. 具体的 ScardControl 函数... 6 3.3. 智能卡设备 IOCTL... 6 3.3.1. CM_IOCTL_GET_FEATURE_REQUEST... 6 3.3.2. FEATURE_VERIFY_PIN_DIRECT... 7 3.3.3. FEATURE_MODIFY_PIN_DIRECT... 8 3.3.4. FEATURE_IFD_PIN_PROP... 10 3.3.5. IOCTL_SMARTCARD_GET_FIRMWARE_VERSION... 11 3.3.6. IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE... 12 3.3.7. IOCTL_SMARTCARD_READ_KEY... 12 附录 A. 设置 bkeyreturncondition... 14 附录 B. 响应错误代码... 15 附录 C. bmformatstrings 说明... 16 附录 D. bmpinblockstring 说明... 17 附录 E. bmpinlength 格式... 18 图目录 图 1 : 操作流程图... 5 Page 2 of 18

1.0. 简介 ACR83 PINeasy 是一款具有键盘和显示屏的 USB 接口读写器 它支持安全 PIN 码输入 (SPE) 功能, 用户可以在它自带的键盘上安全输入 PIN 码 ( 个人识别号码 ) 持卡人验证在设备内进行, 由于 PIN 码被输入到安全的 ACR83 PINeasy 内, 而非易受攻击的电脑或工作站中, 从而避免了中间人的攻击 本 API 文档介绍了如何执行 PC/SC APDU 命令来对设备外设进行控制 有关接触式卡片的操作, 请参阅相关卡片的文档以及 PC/SC 标准 Page 3 of 18

2.0. 特性 14 键键盘 2 行 x 16 个字符的点阵式 LCD, 每个字符 5x8 点 支持具有以下特性的 ISO-7816 CPU 卡 : o A 类 B 类和 C 类 (5 V 3 V 1.8 V) o T=0 和 / 或 T=1 协议 支持安全 PIN 码输入 (SPE) 通过 EMV Level 1 认证 USB 全速接口 (12 Mbps) 符合下列标准 : o PC/SC o WHQL o CCID o CE/FCC o RoHS Page 4 of 18

3.0. 设备控制 本节将对系统智能卡设备的 IOCTL 进行介绍 3.1. 操作流程 (PC/SC 2.0 第 10 部分 ) 开始 连接 ACR83 (SCardConnect) 获取功能请求 (SCardControl) 修改 PIN? 直接校验 PIN (SCardControl) 是 直接修改 PIN (SCardControl) 断开连接 ACR83 (SCardDisconnect) 结束 图 1 : 操作流程图 为了使用 PIN 码校验和修改功能,SCardControl API 在调用时必须带有 获取功能请求 控制码, 此 API 会返回读写器支持的功能列表 ACR83 仅支持直接校验 PIN 直接修改 PIN 以及 IFD PIN 属性 要使用这些功能, 您可以从此列表中获得相应的控制码 如需了解更多信息, 请参考 PC/SC 2.0 规范第 10 部分 Page 5 of 18

3.2. 具体的 ScardControl 函数 LONG SCardControl( SCARDHANDLE hcard, DWORD dwcontrolcode, LPCVOID lpinbuffer, DWORD ninbuffersize, LPVOID lpoutbuffer, DWORD noutbuffersize, LPDWORD lpbytesreturned ); #define IOCTL_SMARTCARD_GET_FIRMWARE_VERSION SCARD_CTL_CODE(2078) #define IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE SCARD_CTL_CODE(2079) #define IOCTL_SMARTCARD_READ_KEY SCARD_CTL_CODE(2080 // PC/SC 2.0 Part 10 #define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400) 注 : 数据以小端格式存储, 最低有效字节 (LSB) 在前面 另外, 必须在源代码中对 SCardControl 命令予以声明 3.3. 智能卡设备 IOCTL 3.3.1. CM_IOCTL_GET_FEATURE_REQUEST CM_IOCTL_GET_FEATURE_REQUEST 会返回读写器支持的功能列表 hcard dwcontrolcode lpinbuffer ninbuffersize 由函数 SCardConnect 返回的引用值 CM_IOCTL_GET_FEATURE_REQUEST NULL 必须是 IpInBuffer 的 sizeof(ulong) lpoutbuffer 根据 PC/SC 2.0 规范第 10 部分规定, 定义了以下功能 : #define FEATURE_VERIFY_PIN_START 0x01 #define FEATURE_VERIFY_PIN_FINISH 0x02 #define FEATURE_MODIFY_PIN_START 0x03 #define FEATURE_MODIFY_PIN_FINISH 0x04 #define FEATURE_GET_KEY_PRESSED 0x05 #define FEATURE_VERIFY_PIN_DIRECT 0x06 #define FEATURE_MODIFY_PIN_DIRECT 0x07 #define FEATURE_MCT_READERDIRECT 0x08 #define FEATURE_MCT_UNIVERSAL 0x09 #define FEATURE_IFD_PIN_PROP 0x0A #define FEATURE_ABORT 0x0B ACR83 支持以下功能 : #define FEATURE_VERIFY_PIN_DIRECT 0x06 #define FEATURE_MODIFY_PIN_DIRECT 0x07 #define FEATURE_IFD_PIN_PROP 0x0A Page 6 of 18

如果使用的 ACR83 支持 PC/SC 2.0 第 10 部分规定, 您将获得以下数据 : 06 04 XX XX XX XX 07 04 XX XX XX XX 0A 04 XX XX XX XXh 其中,XX XX XX XXh 为功能的控制代码 noutbuffersize IpOutBuffer 的 sizeof(ulong) lpbytesreturned 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 3.3.2. FEATURE_VERIFY_PIN_DIRECT hcard dwcontrolcode IpInBuffer 由函数 SCardConnect 返回的引用值 CM_IOCTL_GET_FEATURE_REQUEST 偏移数据域大小值说明 0 btimeout 1 - 秒数 若值等于 00h, 则使用默认值 1 btimeout2 1 00h 不支持 第一次按键后的秒数 2 bmformatstring 1-3 bmpinblockstring 1 - PIN 格式选项的几个参数, 更多信息请参阅附录 A 定义 APDU 命令中 PIN 数据块的长度 ( 字节数 ) 更多信息请参阅附录 B 4 bmpinlengthformat 1-5 wpinmaxextradigit 2 XXYYh 7 bentryvalidationcondition 1 - 允许在 APDU 命令中加入 PIN 码长度 更多信息请参阅附录 C XXh:PIN 码最大长度 ( 位数 ) Yyh:PIN 码最小长度 ( 位数 ) 该值是一个位 OR 运算 01h = 达到最大长度 02h = 按下确认键 04h = 出现超时 8 bnumbermessage 1 FFh PIN 验证显示的消息数量 9 wlangid 2 0409h 消息的语言 11 bmsgindex 1 00h 消息索引 ( 应为 00h) 12 bteoprologue 3 000000h 要使用的 T=1 信息块 (I-block) 起始域 ( 填写 00h) 15 uldatalength 4 - 待发送至 ICC 的数据的长度 Page 7 of 18

偏移数据域大小值说明 19 abdata - - 待发送至 ICC 的数据 ninbuffersize 19 + uldatalength IpOutBuffer 偏移 数据域 大小 值 说明 6400h:SPE 操作超时 6401h: 通过 取消 按钮取消了 SPE 操作 6402h: 两次输入的 新 PIN 不一致,PIN 修改操作失败 0 abstatus 2-6403h: 用户输入的 PIN 太短或太长, 不符合最短 / 最长 PIN 码长度限制 注 :ACR83 在 PIN 输入过程中检查 PIN 的长度, 将不再返回此状态 6B80h: 传递的结构参数无效 SW1SW2: 来自卡片的结果 noutbuffersize 2 IpBytesReturned 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的长度 ( 字节数 ), 而该缓冲区由 IpOutBuffer 指定 3.3.3. FEATURE_MODIFY_PIN_DIRECT hcard dwcontrolcode IpInBuffer 由函数 SCardConnect 返回的引用值 CM_IOCTL_GET_FEATURE_REQUEST 偏移数据域大小值说明 0 btimeout 1 - 秒数 若值等于 00h, 则使用默认值 1 btimeout2 1 00h 不支持 第一次按键后的秒数 2 bmformatstring 1-3 bmpinblockstring 1 - PIN 码格式选项的几个参数, 更多信息请参阅附录 A 定义 APDU 命令中 PIN 数据块的字节长度 更多信息请参阅附录 B Page 8 of 18

偏移数据域大小值说明 4 bmpinlengthformat 1-5 binsertionoffsetold 1-6 binsertionoffsetnew 1-7 wpinmaxextradigit 2 XXYYh 允许在 APDU 命令中加入 PIN 码长度 更多信息请参阅附录 C 当前 PIN 码的插入位置偏移 ( 字节 ) 新 PIN 码的插入位置偏移 ( 字节 ) XXh:PIN 码最大长度 ( 位数 ) Yyh:PIN 码最小长度 ( 位数 ) 9 bconfirmpin 1 00h, 01h, 02h, 03h 表示是否要在新的 PIN 码生效前进行确认 ( 意思是用户要输入两次新 PIN 后, 该 PIN 才会生效 ) 表示是否要在相同的 APDU 域输入并设置当前 PIN 码 b0:(0/1) 如果为 0 = 无需进行确认如果为 1 = 需要进行确认 b1:(0/1) 如果为 0 = 无需输入当前 PIN( 在此情况下,bInsertinoOffsetOld 的值不能被考虑在内 ) 如果为 1 = 需要输入当前 PIN b2 b7:rfu 10 bentryvalidationcondition 1 - 该值是一个位 OR 运算 01h = 达到最大长度 02h = 按下确认键 04h = 出现超时 11 bnumbermessage 1 FFh PIN 验证显示的消息数量 12 wlangid 2 0409h 消息的语言 14 bmsgindex1 1 00h 第一条提示信息的索引 15 bmsgindex2 1 01h 第二条提示信息的索引 16 bmsgindex3 1 02h 第三条提示信息的索引 17 bteoprologue 3 000000h 要使用的 T=1 信息块 (I-block) 起始域 ( 填写 00h) 20 uldatalength 4 - 待发送至 ICC 的数据的长度 24 abdata - 待发送至 ICC 的数据 Page 9 of 18

ninbuffersize lpoutbuffer 24 + uldatalength 偏移数据域大小值说明 6400h:SPE 操作超时 6401h: 通过 取消 按钮取消了 SPE 操作 6402h: 两次输入的 新 PIN 不一致,PIN 修改操作失败 0 abstatus 2-6403h: 用户输入的 PIN 太短或太长, 不符合最短 / 最长 PIN 码长度限制 注 :ACR83 在 PIN 输入过程中检查 PIN 的长度, 将不再返回此状态 6B80h: 传递的结构参数无效 SW1SW2: 来自卡片的结果 noutbuffersize 2 lpbytesreturned 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 3.3.4. FEATURE_IFD_PIN_PROP hcard 由函数 SCardConnect 返回的引用值 dwcontrolcode 由 CM_IOCTL_GET_FEATURE_REQUEST 返回 lpinbuffer NULL LpOutBuffer 偏移 数据域 大小 值 说明 0 wlcdlayout 2 0210h 2 bentryvalidationcondition 1 07h 3 btimeout2 1 00h 显示特性 :2 行, 每行 16 个字符 支持超时时间到 达到 PIN 码最大长度以及按下确认按钮这三种条件 0 = IFD 不能识别 btimeout 和 btimeout2 1 = IFD 可以识别 btimeout 和 btimeout2 noutbuffersize 4 lpbytesreturned 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 Page 10 of 18

3.3.5. IOCTL_SMARTCARD_GET_FIRMWARE_VERSION IOCTL_SMARTCARD_GET_FIRMWARE_VERSION 用于启用 Get Firmware Version 命令 3.3.5.1. 固件版本号 为了获得设备的固件版本号, 要将接收到的缓冲数据的第三个数据元位移 8 位, 之后再将位移后的结果与缓冲数据的第四个数据元进行 OR 运算 lpoutbuffer[2] 位移 8 位 位移后 lpoutbuffer[2] 的值与 lpoutbuffer[3] 的值进行 OR 运算 例如 :Firmware_Version = (Common.RecvBuff[2] << 8) Common.RecvBuff[3]); 3.3.5.2. LCD 为了获得设备 LCD 的信息, 要将接收到的缓冲数据的第五个数据元位移 8 位, 之后再将位移后的结果与缓冲数据的第六个数据元进行 OR 运算 lpoutbuffer[4] 位移 8 位 位移后 lpoutbuffer[4] 的值与 lpoutbuffer[5] 的值进行 OR 运算 输入数据 : hcard dwcontrolcode 由函数 SCardConnect 返回的引用值 IOCTL_SMARTCARD_GET_FIRMWARE_VERSION 输出数据 : lpoutbuffer 命令输出的值 Page 11 of 18

noutbuffersize lpbytesreturned lpoutbuffer 的 sizeof(ulong) 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 偏移 数据域 大小 值 说明 0 abstatus 2 0000h 成功 2 wacr83firmware 2-4 LCD 2-3.3.6. IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE 用于启用 Display LCD Message 命令 hcard dwcontrolcode lpinbuffer ninbuffersize 由函数 SCardConnect 返回的引用值 IOCTL_SMARTCARD_DISPLAY_LCD_MESSAGE 设置 Display LCD Message 选项的值 lpinbuffer 的 sizeof(ulong) 偏移数据域大小值说明 0 ablcdmessage 0-32 - LCD 消息 ( 最多 32 个字符 ) 输出数据 : lpoutbuffer noutbuffersize lpbytesreturned 命令输出的值 lpoutbuffer 的 sizeof(ulong) 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 偏移数据域大小值说明 0 abstatus 2 0000h 0001h 成功 BAD_PARAMETER 3.3.7. IOCTL_SMARTCARD_READ_KEY IOCTL_SMARTCARD_READ_KEY 用于启用 Read Key 命令 输入数据 : hcard dwcontrolcode 由函数 SCardConnect 返回的引用值 IOCTL_SMARTCARD_READ_KEY Page 12 of 18

lpinbuffer ninbuffersize 设置 Display LCD Message 选项的值 lpinbuffer 的 sizeof(ulong) 偏移数据域大小值说明 0 btimeout 1-1 wpinmaxextradigit 2 XXYYh 3 bkeyreturncondition 1 - 秒数若值等于 00h, 则使用默认值 XXh:PIN 码最大长度 ( 位数 ) YYh:PIN 码最小长度 ( 位数 ) 该值是一个位 OR 运算 01h: 达到最大长度 02h: 按下了按键 [E] 04h: 发生超时 08h: 按下了按键 [C] 4 becholcdstartposition 1 - 开始位置 (0 31) 5 becholcdmode 1-00h: 通过按键输入的数据在 LCD 上显示为 ASCII 格式 01h: 通过按键输入的数据在 LCD 上显示为星号 * 输出数据 : lpoutbuffer noutbuffersize lpbytesreturned 命令输出的值 lpoutbuffer 的 sizeof(ulong) 指向一个 DWORD 变量的指针, 该变量用于接收存储进缓冲区的数据的大小 ( 字节数 ), 而该缓冲区由 lpoutbuffer 指定 偏移数据域大小值说明 0 abstatus 2 2 bkeyreturncondition 1 0000h 0001h 31h 32h 33h 34h 成功 BAD_PARAMETER 达到最大长度按下了按键 [E] 发生超时按下了按键 [C] 3 abnumericinputkeys 0-32 - - Page 13 of 18

附录 A. 设置 bkeyreturncondition bkeyreturncondition 若达到 PIN 码最大长度若按下 ACR83 设备的 KEY_E 若 ACR83 会话超时时间到若按下 ACR83 设备的 KEY_C 若按下 ACR83 设备的 KEY_BACK 若按下 ACR83 设备的 KEY_FN OR 操作数 0x01h 0x02 0x04h 0x08h 0x10h 0x20h 注 : 将值设为对特定的 OR 操作数进行 OR 运算 Page 14 of 18

附录 B. 响应错误代码 下表汇总了 ACR83(CCID) 可能返回的错误代码 : 错误代码 0001h 0083h 0084h 0085h 0086h 00EFh 00F0h 状态 BAD_PARAMETER SLOTERROR_LCDCOMMANDERROR SLOTERROR_WRONGCONFIRMPIN SLOTERROR_UNKNOWN_LCD SLOTERROR_MAXPINSIZE_EQUAL_ZERO SLOTERROR_PIN_CANCELLED SLOTERROR_PIN_TIMEOUT Page 15 of 18

附录 C. bmformatstrings 说明 位号 Bit 7 Bit 6 3 Bit 2 Bit 1-0 说明 系统单位的类型指示符 若为 0h: 系统的单位是比特 (Bit) 若为 1h: 系统的单位是字节 (Byte) 该位可量化下一个参数 ( 单位移动 ) 定义格式化后 PIN 在 APDU 命令中的位置 ( 相对于 Lc 后的第一个数据 ) 该位置基于系统单位的类型指示符来确定 ( 最大值为 1111,15 个系统单位 ) PIN 对齐的位掩码 若为 0h: 数据左对齐 若为 1h: 数据右对齐 PIN 格式类型 00h: 二进制 01h:BCD 10h:ASCII Page 16 of 18

附录 D. 位号 Bit 7-4 Bit 3-0 说明 bmpinblockstring 说明 加入 APDU 命令的 PIN 长度的大小, 单位为比特 ( 如果该值为 0, 则不在 APDU 命令中加入有效的 PIN 长度 ) PIN 长度信息 : 经过对齐和格式化后 PIN 数据块的大小, 单位为字节 Page 17 of 18

附录 E. bmpinlength 格式 位号 Bit 7-5 Bit 4 Bit 3-0 说明 RFU 系统单位的类型指示符 若为 0h: 系统的单位是比特 (Bit) 若为 1h: 系统的单位是字节 (Byte) 根据前面所讲的参数表示 PIN 长度在 APDU 命令中的位置 ( 最大值为 1111,15 个系统单位 ) Page 18 of 18