Package org.kapott.hbci.smartcardio

## Class SmartCardService

- java.lang.Object
- - org.kapott.hbci.smartcardio.SmartCardService

Direct Known Subclasses:
  `ChipTanCardService`, `HBCICardService`

    public abstract class SmartCardService
    extends java.lang.Object

Smartcard-Service fuer den DDVPCSC-Passport, basierend auf dem OCF-Code aus HBCI4Java 2.5.8.

### Nested Class Summary

Nested Classes
`protected static class` `SmartCardService.Feature` Kapselt die Features der Karte.

### Constructor Summary

Constructors
`SmartCardService()`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`protected void` `check​(javax.smartcardio.ResponseAPDU response, byte[] returncodes)` Prueft das Response auf die angegebenen Return-Codes.
`void` `close()` Schliesst die Karte und resettet den Service.
`static <T extends SmartCardService> T` `createInstance​(java.lang.Class<? extends SmartCardService> type, java.lang.String name)` Erzeut eine neue Instanz des Card-Service fuer die angegebene Karte.
`protected byte[]` `expand​(java.lang.String st, int len)` Fuellt den String rechtsbuendig mit Leerzeichen auf die angegebene Laenge.
`protected javax.smartcardio.Card` `getCard()` Liefert die Instanz der Smartcard.
`protected byte[]` `getChallenge()`
`protected java.util.Map<SmartCardService.Feature,​java.lang.Integer>` `getFeatures()` Liefert die Map mit den verfuegbaren Features.
`protected byte[]` `getKeyInfo​(int idx)`
`protected void` `init​(javax.smartcardio.Card card)` Initialisiert den Service mit der angegebenen Karte.
`protected byte[]` `internalAuthenticate​(int keynum, byte[] challenge)`
`protected void` `putData​(int tag, byte[] data)`
`protected byte[]` `readBinary​(int offset, int length)`
`protected byte[]` `readRecordBySFI​(int sfi, int idx)`
`protected byte[]` `receive​(javax.smartcardio.CommandAPDU command)` Sendet ein Kommando an den Kartenleser, prueft ob es erfolgreich ausgefuehrt wurde und liefert die Antwort zurueck.
`protected byte[]` `receive​(javax.smartcardio.CommandAPDU command, byte[] returncodes)` Sendet ein Kommando an den Kartenleser, prueft ob es erfolgreich ausgefuehrt wurde und liefert die Antwort zurueck.
`protected void` `selectFile​(int id)`
`protected void` `selectSubFile​(int id)`
`protected void` `send​(javax.smartcardio.CommandAPDU command)` Sendet ein Kommando an den Kartenleser und prueft, ob es erfolgreich ausgefuehrt wurde.
`byte[]` `toBytes​(java.lang.String hex)` Konvertiert den HEX-String zurueck in ein Byte-Array.
`protected java.lang.String` `toHex​(byte[] bytes)` Konvertiert die Bytes in HEX-Darstellung.
`protected java.lang.String` `toHex​(byte[] bytes, java.lang.String sep)` Konvertiert die Bytes in HEX-Darstellung.
`protected void` `updateRecordBySFI​(int sfi, int idx, byte[] data)`
`protected void` `writeRecordBySFI​(int sfi, int idx, byte[] data)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### SmartCardService

    public SmartCardService()

### Method Detail

#### createInstance

    public static <T extends SmartCardService> T createInstance​(java.lang.Class<? extends SmartCardService> type,
                                                                java.lang.String name)

Erzeut eine neue Instanz des Card-Service fuer die angegebene Karte.

Parameters:
  `type` - der Typ des zu erzeugenden Service.
  `name` - optionale Angabe des Kartenlesernamens - noetig, wenn am Rechner mehrere Kartenleser angeschlossen sind.
Returns:
  die neue Instanz des Card-Service.

#### close

    public void close()

Schliesst die Karte und resettet den Service.

#### init

    protected void init​(javax.smartcardio.Card card)

Initialisiert den Service mit der angegebenen Karte.

Parameters:
  `card` - die Karte.

#### getFeatures

    protected final java.util.Map<SmartCardService.Feature,​java.lang.Integer> getFeatures()

Liefert die Map mit den verfuegbaren Features.

Returns:
  die Map mit den verfuegbaren Features.

#### getCard

    protected final javax.smartcardio.Card getCard()

Liefert die Instanz der Smartcard.

Returns:
  die Instanz der Smartcard.

#### writeRecordBySFI

    protected final void writeRecordBySFI​(int sfi,
                                          int idx,
                                          byte[] data)

Parameters:
  `sfi` -
  `idx` -
  `data` -

#### updateRecordBySFI

    protected final void updateRecordBySFI​(int sfi,
                                           int idx,
                                           byte[] data)

Parameters:
  `sfi` -
  `idx` -
  `data` -

#### readRecordBySFI

    protected final byte[] readRecordBySFI​(int sfi,
                                           int idx)

Parameters:
  `sfi` -
  `idx` -
Returns:

#### readBinary

    protected byte[] readBinary​(int offset,
                                int length)

Parameters:
  `offset` -
  `length` -
Returns:

#### selectFile

    protected final void selectFile​(int id)

Parameters:
  `id` -

#### selectSubFile

    protected final void selectSubFile​(int id)

Parameters:
  `id` -

#### getKeyInfo

    protected final byte[] getKeyInfo​(int idx)

Parameters:
  `idx` -
Returns:

#### putData

    protected final void putData​(int tag,
                                 byte[] data)

Parameters:
  `tag` -
  `data` -

#### getChallenge

    protected final byte[] getChallenge()

Returns:

#### internalAuthenticate

    protected final byte[] internalAuthenticate​(int keynum,
                                                byte[] challenge)

Parameters:
  `keynum` -
  `challenge` -
Returns:

#### send

    protected final void send​(javax.smartcardio.CommandAPDU command)

Sendet ein Kommando an den Kartenleser und prueft, ob es erfolgreich ausgefuehrt wurde.

Parameters:
  `command` - das Kommando.

#### receive

    protected final byte[] receive​(javax.smartcardio.CommandAPDU command)

Sendet ein Kommando an den Kartenleser, prueft ob es erfolgreich ausgefuehrt wurde und liefert die Antwort zurueck.

Parameters:
  `command` - das Kommando.
Returns:
  die Antwort.

#### receive

    protected byte[] receive​(javax.smartcardio.CommandAPDU command,
                             byte[] returncodes)

Sendet ein Kommando an den Kartenleser, prueft ob es erfolgreich ausgefuehrt wurde und liefert die Antwort zurueck.

Parameters:
  `command` - das Kommando.
  `returncodes` - zulaessige Return-Codes.
Returns:
  die Antwort.

#### check

    protected final void check​(javax.smartcardio.ResponseAPDU response,
                               byte[] returncodes)

Prueft das Response auf die angegebenen Return-Codes.

Parameters:
  `response` - das Response.
  `returncodes` - zulaessige Return-Codes.

#### toHex

    protected final java.lang.String toHex​(byte[] bytes)

Konvertiert die Bytes in HEX-Darstellung.

Parameters:
  `bytes` -
Returns:
  String-Repraesentation.

#### toHex

    protected final java.lang.String toHex​(byte[] bytes,
                                           java.lang.String sep)

Konvertiert die Bytes in HEX-Darstellung.

Parameters:
  `bytes` -
  `sep` - Separator-Zeichen.
Returns:
  String-Repraesentation.

#### toBytes

    public byte[] toBytes​(java.lang.String hex)

Konvertiert den HEX-String zurueck in ein Byte-Array.

Parameters:
  `hex` - der Text in HEX-Schreibweise.
Returns:
  das Byte-Array.

#### expand

    protected final byte[] expand​(java.lang.String st,
                                  int len)

Fuellt den String rechtsbuendig mit Leerzeichen auf die angegebene Laenge.

Parameters:
  `st` - der String.
  `len` - die Gesamtlaenge.
Returns:
  der codierte String mit Leerzeichen auf der rechten Seite.