Package org.kapott.hbci.passport

# Class HBCIPassportPinTan

java.lang.Object
org.kapott.hbci.passport.AbstractHBCIPassport
org.kapott.hbci.passport.AbstractPinTanPassport
org.kapott.hbci.passport.HBCIPassportPinTan

All Implemented Interfaces:
  `Serializable`, `HBCIPassport`, `HBCIPassportInternal`

Direct Known Subclasses:
  `HBCIPassportPinTanMemory`

public class HBCIPassportPinTan extends AbstractPinTanPassport

Passport-Klasse für HBCI mit PIN/TAN. Dieses Sicherheitsverfahren wird erst in FinTS 3.0 spezifiziert, von einigen Banken aber schon mit früheren HBCI-Versionen angeboten.

Bei diesem Verfahren werden die Nachrichten auf HBCI-Ebene nicht mit kryptografischen Verfahren signiert oder verschlüsselt. Als "Signatur" werden statt dessen TANs zusammen mit einer PIN verwendet. Die PIN wird dabei in jeder HBCI-Nachricht als Teil der "Signatur" eingefügt, doch nicht alle Nachrichten benötigen eine TAN. Eine TAN wird nur bei der Übermittlung bestimmter Geschäftsvorfälle benötigt. Welche GV das konkret sind, ermittelt HBCI4Java automatisch aus den BPD. Für jeden GV, der eine TAN benötigt, wird diese via Callback abgefragt und in die Nachricht eingefügt.

Die Verschlüsselung der Nachrichten bei der Übertragung erfolgt auf einer höheren Transportschicht. Die Nachrichten werden nämlich nicht direkt via TCP/IP übertragen, sondern in das HTTP-Protokoll eingebettet. Die Verschlüsselung der übertragenen Daten erfolgt dabei auf HTTP-Ebene (via SSL = HTTPS).

Wie auch bei `HBCIPassportRDHNew` wird eine "Schlüsseldatei" verwendet. In dieser werden allerdings keine kryptografischen Schlüssel abgelegt, sondern lediglich die Zugangsdaten für den HBCI-Server (Hostadresse, Nutzerkennung, usw.) sowie einige zusätzliche Daten (BPD, UPD, zuletzt benutzte HBCI-Version). Diese Datei wird vor dem Abspeichern verschlüsselt. Vor dem Erzeugen bzw. erstmaligen Einlesen wird via Callback nach einem Passwort gefragt, aus welchem der Schlüssel für die Verschlüsselung der Datei berechnet wird

See Also:
  - Serialized Form

## Field Summary

### Fields inherited from class org.kapott.hbci.passport.AbstractPinTanPassport

`KEY_PD_CHALLENGE, KEY_PD_HHDUC, KEY_PD_ORDERREF, KEY_PD_SCA`

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

`ROLE_CON, ROLE_ISS, ROLE_WIT`

## Constructor Summary

Constructors
Constructor
Description
`HBCIPassportPinTan(Object initObject)`
ct.
`HBCIPassportPinTan(Object init, int dummy)`
ct.

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
Schließen eines Passport-Objektes.
`protected void`
`create()`
Erzeugt die Passport-Datei wenn noetig.
`byte[]`
`decrypt(byte[] cryptedKey, byte[] cryptedMsg)`
`byte[][]`
`encrypt(byte[] plainMsg)`
`String`
`getFileName()`
Gibt den Dateinamen der Schlüsseldatei zurück.
`byte[]`
`hash(byte[] data)`
`protected void`
`read()`
Liest die Daten aus der Passport-Datei ein.
`void`
`resetPassphrase()`
`void`
`saveChanges()`
Speichern der Änderungen an den Passport-Daten.
`void`
`setFileName(String filename)`
Speichert den Dateinamen der Passport-Datei.
`byte[]`
`sign(byte[] data)`
`boolean`
`verify(byte[] data, byte[] sig)`

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

`activateTANVerifyMode, clearPIN, collectSegCodes, deactivateTANVerifyMode, getAllowedTwostepMechanisms, getCertFile, getCheckCert, getCommInstance, getCryptAlg, getCryptFunction, getCryptKeyType, getCryptMode, getCurrentSecMechInfo, getCurrentTANMethod, getHashAlg, getHost, getInstEncKey, getInstEncKeyName, getInstEncKeyNum, getInstEncKeyVersion, getInstSigKey, getInstSigKeyName, getInstSigKeyNum, getInstSigKeyVersion, getMaxGVSegsPerMsg, getMyEncKeyName, getMyEncKeyNum, getMyEncKeyVersion, getMyPrivateDigKey, getMyPrivateEncKey, getMyPrivateSigKey, getMyPublicDigKey, getMyPublicEncKey, getMyPublicSigKey, getMySigKeyName, getMySigKeyNum, getMySigKeyVersion, getPassportTypeName, getPIN, getPinTanInfo, getProfileMethod, getProfileVersion, getProxy, getProxyPass, getProxyUser, getSigAlg, getSigFunction, getSigMode, getSysStatus, getTwostepMechanisms, hasInstEncKey, hasInstSigKey, hasMyEncKey, hasMySigKey, incSigId, isSupported, needInstKeys, needUserKeys, needUserSig, onDialogEvent, resetSecMechs, setAllowedTwostepMechanisms, setBPD, setCertFile, setCheckCert, setCurrentTANMethod, setInstEncKey, setInstSigKey, setMyPrivateDigKey, setMyPrivateEncKey, setMyPrivateSigKey, setMyPublicDigKey, setMyPublicEncKey, setMyPublicSigKey, setPIN, setProxy, setProxyPass, setProxyUser`

### 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, getInstance, getInstance, getInstance, getInstance, getInstName, getJobRestrictions, getJobRestrictions, getLang, getMaxGVperMsg, getMaxMsgSizeKB, getParamHeader, getParamSegmentNames, getParentHandlerData, getPersistentData, getPort, getSigId, getStoredCustomerId, getSuppCompMethods, getSuppLangs, getSuppSecMethods, getSuppVersions, getSysId, getUPD, getUPDVersion, getUserId, isAnonymous, onlyBPDGVs, setBLZ, setCID, setClientData, setCountry, setCustomerId, setFilterType, setHBCIVersion, setHost, setParamHeader, 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`

## Constructor Details

### HBCIPassportPinTan

public HBCIPassportPinTan(Object init, int dummy)
ct.

Parameters:
  `init` -
  `dummy` -

### HBCIPassportPinTan

public HBCIPassportPinTan(Object initObject)
ct.

Parameters:
  `initObject` -

## Method Details

### getFileName

public String getFileName()
Gibt den Dateinamen der Schlüsseldatei zurück.

Returns:
  Dateiname der Schlüsseldatei

### setFileName

public void setFileName(String filename)
Speichert den Dateinamen der Passport-Datei.

Parameters:
  `filename` -

### resetPassphrase

public void resetPassphrase()

See Also:
  - `HBCIPassportInternal.resetPassphrase()`

### create

protected void create()
Erzeugt die Passport-Datei wenn noetig. In eine extra Funktion ausgelagert, damit es von abgeleiteten Klassen ueberschrieben werden kann.

### read

protected void read()
Liest die Daten aus der Passport-Datei ein. In eine extra Funktion ausgelagert, damit es von abgeleiteten Klassen ueberschrieben werden kann. Zum Beispiel, um eine andere Art der Persistierung zu implementieren.

### 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[])`

### 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()`