Package org.kapott.hbci.passport

## Class HBCIPassportDDV

- java.lang.Object
- - org.kapott.hbci.passport.AbstractHBCIPassport
  - - org.kapott.hbci.passport.AbstractDDVPassport
    - - org.kapott.hbci.passport.HBCIPassportDDV

All Implemented Interfaces:
  `java.io.Serializable`, `HBCIPassport`, `HBCIPassportChipcard`, `HBCIPassportInternal`

Direct Known Subclasses:
  `HBCIPassportDDVPCSC`

    public class HBCIPassportDDV
    extends AbstractDDVPassport

Passport-Klasse für Sicherheitsverfahren DDV mit Medium Chipkarte. Bei dieser Variante gibt die Bank eine Chipkarte aus, auf der die Zugangsdaten des Nutzers für den HBCI-Zugang gespeichert sind. Außerdem befinden sich auf der Karte die (symmetrischen) Schlüssel für die Erzeugung der Signaturen und für die Verschlüsselung der Nachrichten.

Diese Klasse unterstützt DDV-Chipkarten vom Typ 0 und 1. Auf einer DDV-Chipkarte können prinzipiell bis zu fünf HBCI-Zugangsdatensätze (für unterschiedliche Banken) gespeichert werden. Diese Klasse ermöglicht die Benutzung eines beliebigen dieser Datensätze. Das hat aber in der Praxis kaum Relevanz, weil dann alle HBCI-Zugänge die gleichen kryptografischen Schlüssel benutzen müssten (es gibt nur ein Schlüsselpaar pro Chipkarte). Für Chipkarten, die von Betreibern für HBCI-Testzugängen ausgegeben werden, ist diese Option jedoch nützlich, da hier häufig tatsächlich mehrere Zugänge existieren und diese Zugangsdaten auf einer einzigen Chipkarte gespeichert werden können.

Prinzipiell benötigt diese Passport-Variante also keine zusätzliche Schlüsseldatei, da alle benötigten HBCI-Daten auf der Chipkarte gespeichert sind. Dennoch verwendet diese Klasse eine zusätzliche Datei. In dieser werden u.a. die zuletzt empfangenen BPD und UPD sowie die zuletzt benutzte HBCI-Version gespeichert, um beim nächsten Benutzen dieses HBCI-Zuganges diese Daten nicht erneut abfragen zu müssen. Diese zusätzliche Datei wird automatisch angelegt, der Dateiname setzt sich aus einem definierbaren Prefix (Pfad) und der Seriennummer der Chipkarte zusammen.

See Also:
  Serialized Form

### Field Summary

### Fields inherited from interface org.kapott.hbci.passport.HBCIPassport

`ROLE_CON, ROLE_ISS, ROLE_WIT`

### Constructor Summary

Constructors
`HBCIPassportDDV​(java.lang.Object init)` ct.
`HBCIPassportDDV​(java.lang.Object init, int dummy)` ct.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `close()` Schließen eines Passport-Objektes.
`protected void` `closeCT()`
`protected byte[]` `ctDecrypt​(byte[] cryptedKey)`
`protected byte[][]` `ctEncrypt()`
`protected void` `ctEnterPIN()`
`protected void` `ctReadBankData()`
`protected void` `ctReadKeyData()`
`protected void` `ctSaveBankData()`
`protected void` `ctSaveSigId()`
`protected byte[]` `ctSign​(byte[] data)`
`byte[]` `decrypt​(byte[] cryptedKey, byte[] cryptedMsg)`
`byte[][]` `encrypt​(byte[] plainMsg)`
`java.lang.String` `getCardId()` Gibt eine 16-stellige Identifikationsnummer für die verwendete Chipkarte zurück
`int` `getComPort()` Gibt zurück, welcher logische Port für die Kommunikation mit der Chipkarte benutzt wird.
`int` `getCTNumber()` Gibt die logische Nummer zurück, unter der der Chipkartenleser zu verwenden ist.
`int` `getEntryIdx()` Gibt die Indexnummer des Datensatzes zurück, dessen Inhalt als HBCI-Account-Informationen benutzt werden sollen.
`java.lang.String` `getFileName()` Gibt den Dateinamen für die zusätzliche Schlüsseldatei zurück.
`HBCIKey` `getInstEncKey()`
`java.lang.String` `getInstEncKeyName()`
`java.lang.String` `getInstEncKeyNum()`
`java.lang.String` `getInstEncKeyVersion()`
`HBCIKey` `getInstSigKey()`
`java.lang.String` `getInstSigKeyName()`
`java.lang.String` `getInstSigKeyNum()`
`java.lang.String` `getInstSigKeyVersion()`
`java.lang.String` `getLibName()` Gibt den Dateinamen der verwendeten CTAPI-Treiberbibliothek zurück.
`java.lang.String` `getMyEncKeyName()`
`java.lang.String` `getMyEncKeyNum()`
`java.lang.String` `getMyEncKeyVersion()`
`HBCIKey` `getMyPrivateDigKey()`
`HBCIKey` `getMyPrivateEncKey()`
`HBCIKey` `getMyPrivateSigKey()`
`HBCIKey` `getMyPublicDigKey()`
`HBCIKey` `getMyPublicEncKey()`
`HBCIKey` `getMyPublicSigKey()`
`java.lang.String` `getMySigKeyName()`
`java.lang.String` `getMySigKeyNum()`
`java.lang.String` `getMySigKeyVersion()`
`protected java.lang.String` `getParamHeader()`
`byte[]` `getSoftPin()`
`int` `getUseBio()` Gibt zurück, ob zur PIN-Eingabe am Chipkartenterminal das Biometric-Interface verwendet werden soll.
`int` `getUseSoftPin()` Gibt zurück, ob die PIN-Eingabe für die Chipkarte über das Keypad des Chipkartenterminals oder über die PC-Tastatur erfolgen soll.
`byte[]` `hash​(byte[] data)`
`protected void` `initCT()`
`boolean` `isSupported()`
`void` `resetPassphrase()`
`void` `saveBankData()` Schreiben der aktuellen Zugangsdaten auf die Chipkarte.
`void` `saveChanges()` Speichern der Änderungen an den Passport-Daten.
`void` `setCardId​(java.lang.String cardid)`
`void` `setComPort​(int comport)`
`void` `setCTNumber​(int ctnumber)`
`void` `setEntryIdx​(int idx)`
`void` `setFileName​(java.lang.String filename)` Legt den Dateinamen fuer die zusaetzliche Schluesseldatei fest.
`void` `setInstEncKey​(HBCIKey key)`
`void` `setInstSigKey​(HBCIKey key)`
`void` `setMyPrivateDigKey​(HBCIKey key)`
`void` `setMyPrivateEncKey​(HBCIKey key)`
`void` `setMyPrivateSigKey​(HBCIKey key)`
`void` `setMyPublicDigKey​(HBCIKey key)`
`void` `setMyPublicEncKey​(HBCIKey key)`
`void` `setMyPublicSigKey​(HBCIKey key)`
`protected void` `setParamHeader​(java.lang.String p)`
`void` `setPINEntered​(boolean pinEntered)`
`void` `setSoftPin​(byte[] softPin)`
`void` `setUseBio​(int useBio)`
`void` `setUseSoftPin​(int useSoftPin)`
`byte[]` `sign​(byte[] data)`
`boolean` `verify​(byte[] data, byte[] sig)`

### Methods inherited from class org.kapott.hbci.passport.AbstractDDVPassport

`getCommInstance, getCryptAlg, getCryptFunction, getCryptKeyType, getCryptMode, getHashAlg, getPassportTypeName, getProfileMethod, getProfileVersion, getSigAlg, getSigFunction, getSigMode, getSysStatus, hasInstEncKey, hasInstSigKey, hasMyEncKey, hasMySigKey, needInstKeys, needUserKeys, needUserSig`

### Methods inherited from class org.kapott.hbci.passport.AbstractHBCIPassport

`askForMissingData, canMixSecMethods, changePassphrase, checkForCryptDataSize, clearBPD, clearInstEncKey, clearInstSigKey, clearMyDigKey, clearMyEncKey, clearMySigKey, clearUPD, closeComm, fillAccountInfo, generateNewUserKeys, getAccount, getAccounts, getBLZ, getBPD, getBPDVersion, getCID, getClientData, getComm, getCommFilter, getCountry, getCustomerId, getCustomerId, getDefaultLang, getFilterType, getHBCIVersion, getHost, getInstance, getInstance, getInstance, getInstance, getInstName, getJobRestrictions, getJobRestrictions, getLang, getMaxGVperMsg, getMaxGVSegsPerMsg, getMaxMsgSizeKB, getParamSegmentNames, getParentHandlerData, getPersistentData, getPort, getSigId, getStoredCustomerId, getSuppCompMethods, getSuppLangs, getSuppSecMethods, getSuppVersions, getSysId, getUPD, getUPDVersion, getUserId, incSigId, isAnonymous, onDialogEvent, onlyBPDGVs, setBLZ, setBPD, setCID, setClientData, setCountry, setCustomerId, setFilterType, setHBCIVersion, setHost, setParentHandlerData, setPersistentData, setPort, setProfileMethod, setProfileVersion, setSigId, setSysId, setUPD, setUserId, syncSigId, syncSysId`

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

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

### Methods inherited from interface org.kapott.hbci.passport.HBCIPassport

`changePassphrase, clearBPD, clearInstEncKey, clearInstSigKey, clearUPD, fillAccountInfo, getAccount, getAccounts, getBLZ, getBPD, getBPDVersion, getClientData, getCountry, getCustomerId, getCustomerId, getDefaultLang, getFilterType, getHBCIVersion, getHost, getInstName, getMaxGVperMsg, getMaxMsgSizeKB, getPort, getSuppCompMethods, getSuppLangs, getSuppSecMethods, getSuppVersions, getUPD, getUPDVersion, getUserId, onlyBPDGVs, setBLZ, setClientData, setCountry, setCustomerId, setFilterType, setHost, setPort, setUserId, syncSigId, syncSysId`

### Constructor Detail

#### HBCIPassportDDV

    public HBCIPassportDDV​(java.lang.Object init,
                           int dummy)

ct.

Parameters:
  `init` -
  `dummy` -

#### HBCIPassportDDV

    public HBCIPassportDDV​(java.lang.Object init)

ct.

Parameters:
  `init` -

### Method Detail

#### initCT

    protected void initCT()

#### ctReadBankData

    protected void ctReadBankData()

#### ctReadKeyData

    protected void ctReadKeyData()

#### ctEnterPIN

    protected void ctEnterPIN()

#### ctSaveBankData

    protected void ctSaveBankData()

#### ctSaveSigId

    protected void ctSaveSigId()

#### ctSign

    protected byte[] ctSign​(byte[] data)

#### ctEncrypt

    protected byte[][] ctEncrypt()

#### ctDecrypt

    protected byte[] ctDecrypt​(byte[] cryptedKey)

#### closeCT

    protected void closeCT()

#### getFileName

    public java.lang.String getFileName()

Description copied from interface: `HBCIPassportChipcard`
Gibt den Dateinamen für die zusätzliche Schlüsseldatei zurück. Diese Datei enthält gecachte Daten, um das Initialisieren eines `HBCIHandler` mit einem DDV-Passport zu beschleunigen. Defaultmäßig setzt sich der Dateiname aus einem definiertbaren Prefix (Pfad) und der Seriennummer der Chipkarte zusammen. Da diese Datei vertrauliche Daten enthält (z.B. die Kontodaten des Bankkunden), wird diese Datei verschlüsselt. Vor dem erstmaligen Lesen bzw. beim Erzeugen dieser Datei wird deshalb via Callback-Mechanismus nach einem Passwort gefragt, das zur Erzeugung des kryptografischen Schlüssels für die Verschlüsselung benutzt wird.

Returns:
  Dateiname der Cache-Datei
See Also:
  `HBCIPassportChipcard.getFileName()`

#### setFileName

    public void setFileName​(java.lang.String filename)

Description copied from interface: `HBCIPassportChipcard`
Legt den Dateinamen fuer die zusaetzliche Schluesseldatei fest.

See Also:
  `HBCIPassportChipcard.setFileName(java.lang.String)`

#### setComPort

    public void setComPort​(int comport)

#### setCTNumber

    public void setCTNumber​(int ctnumber)

#### getComPort

    public int getComPort()

Gibt zurück, welcher logische Port für die Kommunikation mit der Chipkarte benutzt wird. Dieser Wert wird vom CTAPI-Treiber des jeweils verwendeten Chipkartenterminals interpretiert.

Returns:
  Schnittstellennummer, an der der Chipkartenleser angeschlossen ist

#### getCTNumber

    public int getCTNumber()

Gibt die logische Nummer zurück, unter der der Chipkartenleser zu verwenden ist. Wird nur ein Chipkartenleser verwendet, so kann dieser Wert immer 0 sein. Bei gleichzeitiger Verwendung mehrerer Chipkartenleser sollten die einzelnen Leser hier unterschiedliche Werte zugewiesen bekommen. Dieser Wert wird vom CTAPI-Treiber benutzt, um die Chipkartenleser intern auseinander zu halten.

Returns:
  logische Nummer des Chipkartenlesers

#### getUseBio

    public int getUseBio()

Gibt zurück, ob zur PIN-Eingabe am Chipkartenterminal das Biometric-Interface verwendet werden soll. Diese Funktion steht zur Zeit nur für Reiner-SCT- Chipkartenterminals zur Verfügung.

Returns:
  `1`, wenn die Biometrie-Einheit des Chipkartenterminals für die PIN-Eingabe benutzt werden soll; `0`, wenn die Biometrie-Einheit nicht benutzt werden soll, oder `-1`, wenn die Verwendung der Biometrie-Einheit automatisch erkannt werden soll.

#### setUseBio

    public void setUseBio​(int useBio)

#### getUseSoftPin

    public int getUseSoftPin()

Gibt zurück, ob die PIN-Eingabe für die Chipkarte über das Keypad des Chipkartenterminals oder über die PC-Tastatur erfolgen soll. Dieser Wert wird benutzt, um die PIN-Eingabe sowohl bei Klasse-2-Lesern mit eigener Tastatur wir auch für Klasse-1-Leser ohne separate Tastatur zu ermöglichen.

Returns:
  PIN-Eingabe über welche Tastatur
  - =0 PIN-Eingabe zwingend über Terminal-Keypad
  - =1 PIN-Eingabe zwingend über PC-Tastatur
  - =-1 automatische Erkennung, ob bevorzugtes Chipkarten-Terminal-Keypad verfügbar ist

#### setUseSoftPin

    public void setUseSoftPin​(int useSoftPin)

#### getSoftPin

    public byte[] getSoftPin()

#### setSoftPin

    public void setSoftPin​(byte[] softPin)

#### setEntryIdx

    public void setEntryIdx​(int idx)

#### getEntryIdx

    public int getEntryIdx()

Gibt die Indexnummer des Datensatzes zurück, dessen Inhalt als HBCI-Account-Informationen benutzt werden sollen. Auf einer Chipkarte können bis zu fünf Zugangsdatensätze gespeichert sein, dieser Wert enthält die Nummer des benutzten Eintrages (von 1-5). Normalerweise wird der Eintrag Nummer 1 (welcher auch meist der einzige Eintrag ist) verwendet.

Returns:
  Indexnummer des verwendeten Account-Datensatzes

#### setCardId

    public void setCardId​(java.lang.String cardid)

#### getCardId

    public java.lang.String getCardId()

Gibt eine 16-stellige Identifikationsnummer für die verwendete Chipkarte zurück

Returns:
  Chipkarten-Identifikationsnummer

#### isSupported

    public boolean isSupported()

#### getInstSigKey

    public HBCIKey getInstSigKey()

#### getInstSigKeyName

    public java.lang.String getInstSigKeyName()

#### getInstSigKeyNum

    public java.lang.String getInstSigKeyNum()

#### getInstSigKeyVersion

    public java.lang.String getInstSigKeyVersion()

#### getInstEncKey

    public HBCIKey getInstEncKey()

#### getInstEncKeyName

    public java.lang.String getInstEncKeyName()

#### getInstEncKeyNum

    public java.lang.String getInstEncKeyNum()

#### getInstEncKeyVersion

    public java.lang.String getInstEncKeyVersion()

#### getMyPublicSigKey

    public HBCIKey getMyPublicSigKey()

#### getMyPublicEncKey

    public HBCIKey getMyPublicEncKey()

#### getMyPublicDigKey

    public HBCIKey getMyPublicDigKey()

#### getMyPrivateSigKey

    public HBCIKey getMyPrivateSigKey()

#### getMyPrivateEncKey

    public HBCIKey getMyPrivateEncKey()

#### getMyPrivateDigKey

    public HBCIKey getMyPrivateDigKey()

#### getMySigKeyName

    public java.lang.String getMySigKeyName()

#### getMySigKeyNum

    public java.lang.String getMySigKeyNum()

#### getMySigKeyVersion

    public java.lang.String getMySigKeyVersion()

#### getMyEncKeyName

    public java.lang.String getMyEncKeyName()

#### getMyEncKeyNum

    public java.lang.String getMyEncKeyNum()

#### getMyEncKeyVersion

    public java.lang.String getMyEncKeyVersion()

#### setInstSigKey

    public void setInstSigKey​(HBCIKey key)

#### setInstEncKey

    public void setInstEncKey​(HBCIKey key)

#### setMyPublicDigKey

    public void setMyPublicDigKey​(HBCIKey key)

#### setMyPrivateDigKey

    public void setMyPrivateDigKey​(HBCIKey key)

#### setMyPublicSigKey

    public void setMyPublicSigKey​(HBCIKey key)

#### setMyPrivateSigKey

    public void setMyPrivateSigKey​(HBCIKey key)

#### setMyPublicEncKey

    public void setMyPublicEncKey​(HBCIKey key)

#### setMyPrivateEncKey

    public void setMyPrivateEncKey​(HBCIKey key)

#### saveBankData

    public void saveBankData()

Description copied from interface: `HBCIPassportChipcard`
Schreiben der aktuellen Zugangsdaten auf die Chipkarte. Werden Zugangsdaten des Passport verändert (z.B. mit `HBCIPassport.setHost(String)`, so werden diese Daten durch die Methode `HBCIPassport.saveChanges()` nicht auf der Chipkarte gespeichert. Durch Aufruf dieser Methode wird das Schreiben der aktuellen Zugangsdaten erzwungen. Zu den hiervon betroffenen Daten zählen der Ländercode der Bank, die Bankleitzahl, die Hostadresse des HBCI-Servers sowie die User-ID zur Anmeldung am HBCI-Server.

See Also:
  `HBCIPassportChipcard.saveBankData()`

#### resetPassphrase

    public void resetPassphrase()

See Also:
  `HBCIPassportInternal.resetPassphrase()`

#### saveChanges

    public void saveChanges()

Description copied from interface: `HBCIPassport`
Speichern der Änderungen an den Passport-Daten. Diese Methode sollte eigentlich niemals manuell aus einer Anwendung heraus aufgerufen werden, sondern wird vom HBCI-Kernel benutzt. Das manuelle Aufrufen von `saveChanges` ist nur dann sinnvoll, wenn irgendwelche Passport-Daten manuell verändert werden (`HBCIPassport.setHost(String)`, `HBCIPassport.clearBPD()` usw.) und diese Änderungen explizit gespeichert werden sollen.

See Also:
  `HBCIPassport.saveChanges()`

#### hash

    public byte[] hash​(byte[] data)

See Also:
  `HBCIPassportInternal.hash(byte[])`

#### sign

    public byte[] sign​(byte[] data)

See Also:
  `HBCIPassportInternal.sign(byte[])`

#### verify

    public boolean verify​(byte[] data,
                          byte[] sig)

See Also:
  `HBCIPassportInternal.verify(byte[], byte[])`

#### encrypt

    public byte[][] encrypt​(byte[] plainMsg)

See Also:
  `HBCIPassportInternal.encrypt(byte[])`

#### decrypt

    public byte[] decrypt​(byte[] cryptedKey,
                          byte[] cryptedMsg)

See Also:
  `HBCIPassportInternal.decrypt(byte[], byte[])`

#### setPINEntered

    public void setPINEntered​(boolean pinEntered)

Parameters:
  `pinEntered` -

#### close

    public void close()

Description copied from interface: `HBCIPassport`

Schließen eines Passport-Objektes. Diese Methode wird normalerweise nicht manuell aufgerufen, da das bereits von `HBCIHandler.close()` erledigt wird. Wurde jedoch ein Passport-Objekt erzeugt, und das anschließende Erzeugen eines HBCIHandler-Objektes schlägt fehlt, dann ist das Passport immer noch geöffnet und sollte mit dieser Methode geschlossen werden, falls es nicht weiterbenutzt werden soll.

Am Ende eines Programmes sollte also in jedem Fall entweder ein erfolgreiches `HBCIHandler.close()` oder wenigstens ein `HBCIPassport.close()` für jedes erzeugte Passport-Objekt stehen. Das ist vor allem für Passport-Varianten wichtig, die auf einer Chipkarte basieren, da mit dieser Methode die entsprechenden Ressourcen wieder freigegeben werden.

Specified by:
  `close` in interface `HBCIPassport`
Overrides:
  `close` in class `AbstractHBCIPassport`
See Also:
  `AbstractHBCIPassport.close()`

#### getLibName

    public java.lang.String getLibName()

Gibt den Dateinamen der verwendeten CTAPI-Treiberbibliothek zurück.

Returns:
  Dateiname der CTAPI-Bibliothek

#### setParamHeader

    protected void setParamHeader​(java.lang.String p)

Overrides:
  `setParamHeader` in class `AbstractHBCIPassport`
See Also:
  `AbstractHBCIPassport.setParamHeader(java.lang.String)`

#### getParamHeader

    protected java.lang.String getParamHeader()

Overrides:
  `getParamHeader` in class `AbstractHBCIPassport`
See Also:
  `AbstractHBCIPassport.getParamHeader()`