开发智能卡使用者应用程序
SCF API 提供了一组用于访问智能卡的接口。这些接口采用低级应用程序协议数据单元 (Application Protocol Data Unit, APDU) 形式提供与卡之间的通信。C 和 Java 中都提供了这些接口。这些接口与
Solaris 操作系统支持的所有读取器以及与 APDU 通信的任何智能卡协同工作。SCF API 基于以下组件:
-
会话对象-每个单个线程的常规上下文,以便避免冲突。
-
终端对象-物理智能卡终端的抽象术语。此对象可以检测出是否存在、插入或移除了卡。
-
卡对象-表示在终端插入的智能卡。该对象可以采用 APDU 格式将信息发送给物理智能卡。该对象还可以调节互斥锁,以使应用程序可具有对卡进行独占访问的权限。
-
侦听器对象-接收事件通知的对象。
SCF API 提供以下领域的功能:
-
检查读取器中是否存在智能卡。
-
接收智能卡移动(即插入和移除)通知。
-
与智能卡交换数据。
-
检索有关会话、终端和智能卡的信息。
-
锁定和解除锁定要独占访问的智能卡。
以下各节提供有关特定 SCF 接口的信息。
SCF 会话接口
以下函数用于 SCF 会话。
- SCF_Session_getSession(3SMARTCARD)
使用系统的智能卡框架建立会话。打开会话后,可以将该会话与 SCF_Session_getTerminal(3SMARTCARD) 一同使用,以访问智能卡终端。
- SCF_Session_close(3SMARTCARD)
释放打开会话时分配的资源。另外,关闭与该会话关联的所有终端或卡。
- SCF_Session_getInfo(3SMARTCARD)
获取有关会话的信息。
- SCF_Session_freeInfo(3SMARTCARD)
取消从 SCF_Session_getInfo(3SMARTCARD) 返回的存储的分配。
- SCF_Session_getTerminal(3SMARTCARD)
使用特定的智能卡终端在会话中建立上下文。终端对象用于检测卡移动(即插入或移除)。终端对象还用于创建用于访问特定卡的卡对象。
SCF 终端接口
以下函数用于访问 SCF 终端。
- SCF_Terminal_close(3SMARTCARD)
释放打开终端时分配的资源。该函数还可以关闭所有与终端关联的卡。
- SCF_Terminal_getInfo(3SMARTCARD)
获取有关终端的信息。
- SCF_Terminal_freeInfo(3SMARTCARD)
取消从 SCF_Terminal_getInfo(3SMARTCARD) 返回的存储的分配。
- SCF_Terminal_waitForCardPresent(3SMARTCARD)
阻塞并等待,直到指定终端中出现卡为止。
- SCF_Terminal_waitForCardAbsent(3SMARTCARD)
阻塞并等待,直到指定终端中移除卡为止。
- SCF_Terminal_addEventListener(3SMARTCARD)
在终端发生事件时,允许程序接收回调通知。此概念与信号处理程序类似。发生事件时,服务线程将执行提供的回调函数。
- SCF_Terminal_updateEventListener(3SMARTCARD)
更新与此终端关联的指定事件侦听器。
- SCF_Terminal_removeEventListener(3SMARTCARD)
从与此终端关联的侦听器列表中删除指定的事件侦听器。
- SCF_Terminal_getCard(3SMARTCARD)
使用特定的智能卡在终端中建立上下文。可以使用卡对象借助 SCF_Card_exchangeAPDU(3SMARTCARD) 将 APDU 发送给卡。
SCF 卡和各种接口
以下函数用于访问智能卡及获取状态。
- SCF_Card_close(3SMARTCARD)
释放打开卡时分配的资源(如内存和线程)。另外,还释放该卡持有的锁定。
- SCF_Card_getInfo(3SMARTCARD)
获取有关卡的信息。
- SCF_Card_freeInfo(3SMARTCARD)
取消从 SCF_Card_getInfo(3SMARTCARD) 返回的存储的分配。
- SCF_Card_lock(3SMARTCARD)
获取对特定卡的锁定。此函数允许应用程序执行多重 APDU 事务,而不会受到其他智能卡应用程序的干扰。
- SCF_Card_unlock(3SMARTCARD)
从特定卡中移除锁定。
- SCF_Card_exchangeAPDU(3SMARTCARD)
将命令 APDU 发送给卡并读取卡的响应。
- SCF_Card_waitForCardRemoved(3SMARTCARD)
检查是否已移除特定卡。如果插入了其他卡或重新插入了同一个卡,则该函数将报告旧卡已被移除。
- SCF_Card_reset(3SMARTCARD)
重置特定卡。
- SCF_strerror(3SMARTCARD)
获取描述状态代码的字符串。