SCF API には、スマートカードにアクセスするための 1 組のインタフェースが用意されています。これらのインタフェースを使用すると、低レベルのアプリケーションプロトコルデータユニット (APDU) 形式でスマートカードとの通信を行うことができます。これらのインタフェースは、C と Java の両方で提供されます。これらのインタフェースは、Solaris オペレーティングシステムでサポートされているすべてのリーダー、および APDU で通信を行うすべてのスマートカードで動作します。SCF API は、次のコンポーネントに基づいています。
端末オブジェクト – 実際のスマートカード端末を抽象化したもの。このオブジェクトは、カードの存在、挿入、または取り外しを検出できます。
カードオブジェクト – 端末に挿入されるスマートカードを表します。このオブジェクトは、APDU 形式の情報を実際のスマートカードに送信します。また、アプリケーションがカードへの排他的アクセスを行えるように相互排他ロックにも対応しています。
SCF API には、次のような機能が備わっています。
スマートカードがリーダーに物理的に存在するかどうか検査する。
スマートカードの動作 (挿入や取り外し) の通知を受信する。
データをスマートカードと交換する。
セッション、端末、およびスマートカードに関する情報を取り出す。
排他的アクセスに備えてスマートカードをロックおよびロック解除する。
次の節では、それぞれの SCF インタフェースについて説明します。
システムのスマートカードフレームワークを使ってセッションを確立します。セッションが開いたら、SCF_Session_getTerminal(3SMARTCARD) を使ってスマートカード端末にアクセスできます。
セッションが開いたときに割り当てられたリソースを解放します。また、そのセッションに関連付けられている端末またはカードをすべて閉じます。
SCF_Session_getInfo(3SMARTCARD) によって戻された記憶領域を解放します。
セッション内で特定のスマートカード端末によるコンテキストを確立します。カードの動作 (挿入または取り外し) の検出には、端末オブジェクトが使用されます。端末オブジェクトは、特定のカードにアクセスするためのカードオブジェクトの作成にも使用されます。
SCF_Terminal_getInfo(3SMARTCARD) によって戻された記憶領域を解放します。
端末でイベントが発生したときにコールバック通知をプログラムで受信できるようにします。シグナルハンドラと同じような働きです。イベントが発生すると、サービススレッドによって用意されたコールバック関数が実行されます。
端末内で特定のスマートカードによるコンテキストを確立します。SCF_Card_exchangeAPDU(3SMARTCARD) で APDU をカードに送信する際にはカードオブジェクトが使用されます。
スマートカードへのアクセスと状態の取得には、次の関数が使用されます。
カードが開いたときに割り当てられたメモリーやスレッドなどのリソースを解放します。また、そのカードによって保持されていたロックも解放します。
SCF_Card_getInfo(3SMARTCARD) によって戻された記憶領域を解放します。
特定のカードに対するロックを取得します。この関数を使用すると、アプリケーションはほかのスマートカードアプリケーションからの干渉を受けないで、多重 APDU トランザクションを実行できます。
特定のカードが削除されたかどうかを確認します。削除された後で別のカードまたは同じカードが再度挿入された場合は、古いカードが削除されたことを報告します。