|
Java Smart Card I/O | |||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.smartcardio.CardChannel
public abstract class CardChannel
スマートカードへの論理チャネル接続です。スマートカードとの APDU の交換に使用します。CardChannel オブジェクトは、Card.getBasicChannel() または Card.openLogicalChannel() メソッドを呼び出すことで取得できます。
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 |
コンストラクタの詳細 |
---|
protected CardChannel()
このコンストラクタはサブクラスのみから呼び出されます。アプリケーションでは、Card.getBasicChannel() および Card.openLogicalChannel() メソッドを呼び出して CardChannel オブジェクトを取得する必要があります。
メソッドの詳細 |
---|
public abstract Card getCard()
public abstract int getChannelNumber()
IllegalStateException
- このチャネルが クローズ している場合、または対応する Card が 切断 されている場合public abstract ResponseAPDU transmit(CommandAPDU command) throws CardException
コマンド APDU の CLA バイトは、この CardChannel のチャネル番号と一致するよう自動的に調整されます。
このメソッドは、MANAGE CHANNEL
APDU の送信には使用できません。論理チャネルは、Card.openLogicalChannel() および CardChannel.close() メソッドを使用して管理する必要があります。
実装では、送信プロトコルのアーティファクトが透過的に処理されます。たとえば、T=0 プロトコルを使用すると、ISO/IEC 7816-4 に記載されているように、次のような処理が行われます。
レスポンス APDU に SW1 61
がある場合、実装では、Le
フィールドとして SW2
を使用する GET RESPONSE
が発行されます。この処理は、61
の SW1 が受信される限り繰り返されます。これらの交換の応答本体は、最終的な応答本体を作成するために連結されます。
レスポンス APDU が 6C XX
の場合、実装では、Le
フィールドとして XX
を使用するコマンドが再発行されます。
このメソッドによって返される ResponseAPDU は、この処理が実行されたあとの結果です。
command
- コマンド APDU
IllegalStateException
- このチャネルが クローズ している場合、または対応する Card が 切断 されている場合
IllegalArgumentException
- APDU が MANAGE CHANNEL
コマンドを符号化する場合
NullPointerException
- コマンドが null の場合
CardException
- カード操作が失敗した場合public abstract int transmit(ByteBuffer command, ByteBuffer response) throws CardException
コマンドバッファーには 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 を受信するバッファー
IllegalStateException
- このチャネルが クローズ している場合、または対応する Card が 切断 されている場合
NullPointerException
- コマンドまたは応答が null の場合
ReadOnlyBufferException
- 応答バッファーが読み取り専用の場合
IllegalArgumentException
- コマンドと応答が同じオブジェクトの場合、response
にレスポンス APDU を受信するための十分な容量がない可能性がある場合、または APDU が MANAGE CHANNEL
コマンドを符号化する場合
CardException
- カード操作が失敗した場合public abstract void close() throws CardException
[xx 70 80 0n]
という形式を使用する MANAGE CHANNEL
コマンドを発行することによってクローズされます。ここで、n
はこのチャネルのチャネル番号であり、xx
は、この論理チャネルを符号化し、ほかのすべてのビットが 0 に設定されている CLA
バイトです。このメソッドが復帰したあと、このクラス内のその他のメソッドを呼び出すと、IllegalStateException が発生します。
このメソッドを使用して基本論理チャネルをクローズすることはできません。基本論理チャネルは、Card.disconnect(boolean)
を呼び出すことでクローズできます。
CardException
- カード操作が失敗した場合
IllegalStateException
- この CardChannel が基本論理チャネルの接続を表す場合
|
Java Smart Card I/O | |||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |