Oracle Solaris セキュリティーサービス開発ガイド

スマートカードのコンシューマアプリケーションの開発

SCF API には、スマートカードにアクセスするための 1 組のインタフェースが用意されています。これらのインタフェースを使用すると、低レベルのアプリケーションプロトコルデータユニット (APDU) 形式でスマートカードとの通信を行うことができます。これらのインタフェースは、C と Java の両方で提供されます。これらのインタフェースは、Solaris オペレーティングシステムでサポートされているすべてのリーダー、および APDU で通信を行うすべてのスマートカードで動作します。SCF API は、次のコンポーネントに基づいています。

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)

状態コードを記述する文字列を取得します。