Class 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 Detail

      • CIPHER_SALT

        protected static final byte[] CIPHER_SALT
    • Constructor Detail

      • HBCIPassportDDV

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

        public HBCIPassportDDV​(java.lang.Object 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()
      • 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()
      • 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)
      • sign

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

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

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

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

        public void setPINEntered​(boolean 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
      • getLibName

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

        protected void setPassportKey​(javax.crypto.SecretKey key)
      • getPassportKey

        protected javax.crypto.SecretKey getPassportKey()