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 Constructor Description HBCIPassportDDV(java.lang.Object init)
ct.HBCIPassportDDV(java.lang.Object init, int dummy)
ct.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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ückint
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
-
-
-
-
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 einesHBCIHandler
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.
-
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. mitHBCIPassport.setHost(String)
, so werden diese Daten durch die MethodeHBCIPassport.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 vonsaveChanges
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)
-
encrypt
public byte[][] encrypt(byte[] plainMsg)
- See Also:
HBCIPassportInternal.encrypt(byte[])
-
decrypt
public byte[] decrypt(byte[] cryptedKey, byte[] cryptedMsg)
-
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 einHBCIPassport.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 interfaceHBCIPassport
- Overrides:
close
in classAbstractHBCIPassport
- 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 classAbstractHBCIPassport
- See Also:
AbstractHBCIPassport.setParamHeader(java.lang.String)
-
getParamHeader
protected java.lang.String getParamHeader()
- Overrides:
getParamHeader
in classAbstractHBCIPassport
- See Also:
AbstractHBCIPassport.getParamHeader()
-
-