org.kapott.hbci.manager.HHDVersion Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hbci4j-core Show documentation
Show all versions of hbci4j-core Show documentation
HBCI4j - Home Banking Computer Interface for Java
/**********************************************************************
*
* Copyright (c) by Olaf Willuhn
* All rights reserved
*
**********************************************************************/
package org.kapott.hbci.manager;
import java.util.Properties;
/**
* Kapselt die Erkennung der verschiedenen HHD-Versionen.
*/
public enum HHDVersion
{
/**
* HHD-Version 1.4
* Zur HKTAN-Segment-Version: Genau wissen wir es nicht, aber HHD 1.4 ist wahrscheinlich.
*/
HHD_1_4(Type.CHIPTAN,"HHD1.4","1.4",5,"hhd14"),
/**
* HHD-Version 1.3
* Zur HKTAN-Segment-Version: 1.4 ist in HKTAN4 noch nicht erlaubt, damit bleibt eigentlich nur 1.3
*/
HHD_1_3(Type.CHIPTAN,"HHD1.3","1.3",4,"hhd13"),
/**
* Server-seitig generierter Matrix-Code (photoTAN)
* ZKA-Version und HKTAN-Version bleiben hier frei, weil wir anhand diesen
* Merkmalen das Matrix-Code-Verfahren nicht eindeutig erkennen koennen.
* Und da chipTAN/smsTAN deutlich gebrauechlicher ist, ist es erheblich wahrscheinlicher,
* dass dann nicht Matrix-Code ist.
* Generell unterstuetzen wir nur server-seitig generierte Matrix-Codes.
*/
MS_1(Type.PHOTOTAN,"MS1",null,-1,"hhd14"),
/**
* HHD-Version 1.2.
* Fallback.
*/
HHD_1_2(Type.CHIPTAN,null,null,-1,"hhd12"),
;
/**
* Definiert die Art des TAN-Verfahrens.
*/
public static enum Type
{
/**
* chipTAN oder smsTAN.
*/
CHIPTAN,
/**
* photoTAN.
*/
PHOTOTAN,
}
private Type type = null;
private String idStart = null;
private String versionStart = null;
private int segVersion = 0;
private String challengeVersion = null;
/**
* ct.
* @param type die Art des TAN-Verfahrens.
* @param idStart Technische Kennung beginnt mit diesem Text.
* Siehe "Belegungsrichtlinien TANve1.4 mit Erratum 1-3 final version vom 2010-11-12.pdf"
* Der Name ist standardisiert, wenn er mit "HHD1...." beginnt, ist das die HHD-Version
* @param versionStart ZKA-Version bei HKTAN.
* @param segVersion Segment-Version des HKTAN-Elements.
* @param challengeVersion die Kennung fuer das Lookup in den ChallengeInfo-Daten.
*/
private HHDVersion(Type type, String idStart, String versionStart, int segVersion, String challengeVersion)
{
this.type = type;
this.idStart = idStart;
this.versionStart = versionStart;
this.segVersion = segVersion;
this.challengeVersion = challengeVersion;
}
/**
* Liefert die Kennung fuer das Lookup in den ChallengeInfo-Daten.
* @return die Kennung fuer das Lookup in den ChallengeInfo-Daten.
*/
public String getChallengeVersion()
{
return this.challengeVersion;
}
/**
* Liefert die Art des TAN-Verfahrens.
* @return die Art des TAN-Verfahrens.
*/
public Type getType()
{
return this.type;
}
/**
* Ermittelt die zu verwendende HHD-Version aus den BPD-Informationen des TAN-Verfahrens.
* @param secmech die BPD-Informationen zum TAN-Verfahren.
* @return die HHD-Version.
*/
public static HHDVersion find(Properties secmech)
{
HBCIUtils.log("trying to determine HHD version for secmech: " + secmech,HBCIUtils.LOG_DEBUG);
// Das ist die "Technische Kennung"
// Siehe "Belegungsrichtlinien TANve1.4 mit Erratum 1-3 final version vom 2010-11-12.pdf"
// Der Name ist standardisiert, wenn er mit "HHD1...." beginnt, ist
// das die HHD-Version
String id = secmech.getProperty("id","");
HBCIUtils.log(" technical HHD id: " + id,HBCIUtils.LOG_DEBUG);
for (HHDVersion v:values())
{
String s = v.idStart;
if (s == null)
continue;
if (id.startsWith(s))
return v;
}
// Fallback 1. Wir schauen noch in "ZKA-Version bei HKTAN"
String version = secmech.getProperty("zkamethod_version");
HBCIUtils.log(" ZKA version: " + version,HBCIUtils.LOG_DEBUG);
if (version != null && version.length() > 0)
{
for (HHDVersion v:values())
{
String s = v.versionStart;
if (s == null)
continue;
if (version.startsWith(s))
return v;
}
}
// Fallback 2. Wir checken noch die HITAN/HKTAN-Version
// Bei HKTAN5 kann es HHD 1.3 oder 1.4 sein, bei HKTAN4 bleibt eigentlich nur noch 1.3
// Ich weiss nicht, ob Fallback 2 ueberhaupt notwendig ist. Denn angeblich
// ist zkamethod_version seit HHD 1.3.1 Pflicht (siehe
// FinTS_3.0_Security_Sicherheitsverfahren_PINTAN_Rel_20101027_final_version.pdf,
// Data dictionary "Version ZKA-TAN-Verfahren"
String segversion = secmech.getProperty("segversion");
HBCIUtils.log(" segment version: " + segversion,HBCIUtils.LOG_DEBUG);
if (segversion != null && segversion.length() > 0)
{
int i = Integer.parseInt(segversion);
for (HHDVersion v:values())
{
int i2 = v.segVersion;
if (i2 <= 0)
continue;
if (i == i2)
return v;
}
}
// Default:
return HHD_1_2;
}
}