Java Smart Card I/O

javax.smartcardio
クラス CardChannel

java.lang.Object
  上位を拡張 javax.smartcardio.CardChannel

public abstract class CardChannel
extends Object

スマートカードへの論理チャネル接続です。スマートカードとの APDU の交換に使用します。CardChannel オブジェクトは、Card.getBasicChannel() または Card.openLogicalChannel() メソッドを呼び出すことで取得できます。

導入されたバージョン:
1.6
関連項目:
Card, CommandAPDU, ResponseAPDU

コンストラクタの概要
protected CardChannel()
          新しい CardChannel オブジェクトを構築します。
 
メソッドの概要
abstract  void close()
          この CardChannel をクローズします。
abstract  Card getCard()
          このチャネルが関連付けられているカードを返します。
abstract  int getChannelNumber()
          この CardChannel のチャネル番号を返します。
abstract  int transmit(ByteBuffer command, ByteBuffer response)
          コマンド ByteBuffer に格納されたコマンド APDU を送信し、応答 ByteBuffer にレスポンス APDU を受信します。
abstract  ResponseAPDU transmit(CommandAPDU command)
          指定されたコマンド APDU をスマートカードに送信し、レスポンス APDU を返します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

CardChannel

protected CardChannel()
新しい CardChannel オブジェクトを構築します。

このコンストラクタはサブクラスのみから呼び出されます。アプリケーションでは、Card.getBasicChannel() および Card.openLogicalChannel() メソッドを呼び出して CardChannel オブジェクトを取得する必要があります。

メソッドの詳細

getCard

public abstract Card getCard()
このチャネルが関連付けられているカードを返します。

戻り値:
このチャネルが関連付けられているカード

getChannelNumber

public abstract int getChannelNumber()
この CardChannel のチャネル番号を返します。チャネル番号 0 は、基本論理チャネルを示します。

戻り値:
この CardChannel のチャネル番号
例外:
IllegalStateException - このチャネルが クローズ している場合、または対応する Card が 切断 されている場合

transmit

public abstract ResponseAPDU transmit(CommandAPDU command)
                               throws CardException
指定されたコマンド APDU をスマートカードに送信し、レスポンス APDU を返します。

コマンド APDU の CLA バイトは、この CardChannel のチャネル番号と一致するよう自動的に調整されます。

このメソッドは、MANAGE CHANNEL APDU の送信には使用できません。論理チャネルは、Card.openLogicalChannel() および CardChannel.close() メソッドを使用して管理する必要があります。

実装では、送信プロトコルのアーティファクトが透過的に処理されます。たとえば、T=0 プロトコルを使用すると、ISO/IEC 7816-4 に記載されているように、次のような処理が行われます。

このメソッドによって返される ResponseAPDU は、この処理が実行されたあとの結果です。

パラメータ:
command - コマンド APDU
戻り値:
カードから受信したレスポンス APDU
例外:
IllegalStateException - このチャネルが クローズ している場合、または対応する Card が 切断 されている場合
IllegalArgumentException - APDU が MANAGE CHANNEL コマンドを符号化する場合
NullPointerException - コマンドが null の場合
CardException - カード操作が失敗した場合

transmit

public abstract int transmit(ByteBuffer command,
                             ByteBuffer response)
                      throws CardException
コマンド ByteBuffer に格納されたコマンド APDU を送信し、応答 ByteBuffer にレスポンス APDU を受信します。

コマンドバッファーには command.position() から始まる有効なコマンド APDU が含まれている必要があり、APDU の長さは command.remaining() バイトでなければなりません。復帰時には、コマンドバッファーの位置はその制限と等しくなります。制限は変更されません。出力バッファーは、レスポンス APDU バイトを受信します。その位置は受信したバイト数だけ増加します。これは、このメソッドの戻り値でもあります。

コマンド APDU の CLA バイトは、この CardChannel のチャネル番号と一致するよう自動的に調整されます。

このメソッドは、MANAGE CHANNEL APDU の送信には使用できません。論理チャネルは、Card.openLogicalChannel() および CardChannel.close() メソッドを使用して管理する必要があります。

SW1 値 61 または 6C を持つレスポンス APDU の処理については、transmit() を参照してください。

パラメータ:
command - コマンド APDU を含むバッファー
response - カードからレスポンス APDU を受信するバッファー
戻り値:
受信したレスポンス APDU の長さ
例外:
IllegalStateException - このチャネルが クローズ している場合、または対応する Card が 切断 されている場合
NullPointerException - コマンドまたは応答が null の場合
ReadOnlyBufferException - 応答バッファーが読み取り専用の場合
IllegalArgumentException - コマンドと応答が同じオブジェクトの場合、response にレスポンス APDU を受信するための十分な容量がない可能性がある場合、または APDU が MANAGE CHANNEL コマンドを符号化する場合
CardException - カード操作が失敗した場合

close

public abstract void close()
                    throws CardException
この CardChannel をクローズします。論理チャネルは、[xx 70 80 0n] という形式を使用する MANAGE CHANNEL コマンドを発行することによってクローズされます。ここで、n はこのチャネルのチャネル番号であり、xx は、この論理チャネルを符号化し、ほかのすべてのビットが 0 に設定されている CLA バイトです。このメソッドが復帰したあと、このクラス内のその他のメソッドを呼び出すと、IllegalStateException が発生します。

このメソッドを使用して基本論理チャネルをクローズすることはできません。基本論理チャネルは、Card.disconnect(boolean) を呼び出すことでクローズできます。

例外:
CardException - カード操作が失敗した場合
IllegalStateException - この CardChannel が基本論理チャネルの接続を表す場合

Java Smart Card I/O