Class HBCIPassportDDV

All Implemented Interfaces:
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:
  • Constructor Details

    • HBCIPassportDDV

      public HBCIPassportDDV(Object init, int dummy)
      ct.
      Parameters:
      init -
      dummy -
    • HBCIPassportDDV

      public HBCIPassportDDV(Object init)
      ct.
      Parameters:
      init -
  • Method Details

    • 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 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:
    • setFileName

      public void setFileName(String filename)
      Description copied from interface: HBCIPassportChipcard
      Legt den Dateinamen fuer die zusaetzliche Schluesseldatei fest.
      Parameters:
      filename -
      See Also:
    • 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(String cardid)
    • getCardId

      public 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 String getInstSigKeyName()
    • getInstSigKeyNum

      public String getInstSigKeyNum()
    • getInstSigKeyVersion

      public String getInstSigKeyVersion()
    • getInstEncKey

      public HBCIKey getInstEncKey()
    • getInstEncKeyName

      public String getInstEncKeyName()
    • getInstEncKeyNum

      public String getInstEncKeyNum()
    • getInstEncKeyVersion

      public 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 String getMySigKeyName()
    • getMySigKeyNum

      public String getMySigKeyNum()
    • getMySigKeyVersion

      public String getMySigKeyVersion()
    • getMyEncKeyName

      public String getMyEncKeyName()
    • getMyEncKeyNum

      public String getMyEncKeyNum()
    • getMyEncKeyVersion

      public 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:
    • resetPassphrase

      public void resetPassphrase()
      See Also:
    • 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:
    • hash

      public byte[] hash(byte[] data)
      See Also:
    • sign

      public byte[] sign(byte[] data)
      See Also:
    • verify

      public boolean verify(byte[] data, byte[] sig)
      See Also:
    • encrypt

      public byte[][] encrypt(byte[] plainMsg)
      See Also:
    • decrypt

      public byte[] decrypt(byte[] cryptedKey, byte[] cryptedMsg)
      See Also:
    • 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:
    • getLibName

      public String getLibName()
      Gibt den Dateinamen der verwendeten CTAPI-Treiberbibliothek zurück.
      Returns:
      Dateiname der CTAPI-Bibliothek
    • setParamHeader

      protected void setParamHeader(String p)
      Overrides:
      setParamHeader in class AbstractHBCIPassport
      See Also:
    • getParamHeader

      protected String getParamHeader()
      Overrides:
      getParamHeader in class AbstractHBCIPassport
      See Also: