Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hbci4java for openSUSE:Factory checked in at 2024-04-10 17:49:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hbci4java (Old) and /work/SRC/openSUSE:Factory/.hbci4java.new.29460 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hbci4java" Wed Apr 10 17:49:54 2024 rev:16 rq:1166619 version:3.1.79 Changes: -------- --- /work/SRC/openSUSE:Factory/hbci4java/hbci4java.changes 2024-03-21 17:00:53.469385519 +0100 +++ /work/SRC/openSUSE:Factory/.hbci4java.new.29460/hbci4java.changes 2024-04-10 17:50:49.445431246 +0200 @@ -1,0 +2,18 @@ +Wed Apr 10 10:37:00 UTC 2024 - Fridrich Strba <[email protected]> + +- update to 3.1.79 + * DECOUPLED nicht mehr als Default-Version und TAN-Prozess S + nur bei HKTAN ab Version 7 + * Fallback auf HHDVersion.DEFAULT/DECCOUPLED, wenn nichts + angegeben ist. Gehe davon aus, dass das das TAN-Verfahren der + Zukunft bei den Banken ist. + * Bei der Dialoginitialisierung mit SCA und HKTAN7 per Decoupled + wurde im DE "TAN-Prozess" versehentlich "2" statt "S" gesendet. + Die Ermittlung, ob "S" verwenden muss, passierte, nachdem die + Nachricht bereits erstellt wurde. + * In DialogInitSCA fehlte das TAN2Step7 sodass bei HTKTAN-Version + 7 gar kein HKTAN mitgesendet wurde. + * Erweitertes Logging bei der SCA + * see https://github.com/hbci4j/hbci4java/compare/hbci4j-core-3.1.76...hbci4j-core-3.1.79 + +------------------------------------------------------------------- Old: ---- hbci4j-core-3.1.76.tar.gz New: ---- hbci4j-core-3.1.79.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hbci4java.spec ++++++ --- /var/tmp/diff_new_pack.s5ZoK1/_old 2024-04-10 17:50:50.889484391 +0200 +++ /var/tmp/diff_new_pack.s5ZoK1/_new 2024-04-10 17:50:50.889484391 +0200 @@ -18,7 +18,7 @@ %{!?make_build:%global make_build make %{?_smp_mflags}} Name: hbci4java -Version: 3.1.76 +Version: 3.1.79 Release: 0 Summary: Java online banking client using the HBCI standard License: LGPL-2.1-only ++++++ hbci4j-core-3.1.76.tar.gz -> hbci4j-core-3.1.79.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hbci4java-hbci4j-core-3.1.76/pom.xml new/hbci4java-hbci4j-core-3.1.79/pom.xml --- old/hbci4java-hbci4j-core-3.1.76/pom.xml 2024-03-19 15:33:32.000000000 +0100 +++ new/hbci4java-hbci4j-core-3.1.79/pom.xml 2024-04-04 21:48:23.000000000 +0200 @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>com.github.hbci4j</groupId> <artifactId>hbci4j-core</artifactId> - <version>3.1.76</version> + <version>3.1.79</version> <packaging>jar</packaging> <name>${project.artifactId}</name> <description>HBCI4j - Home Banking Computer Interface for Java</description> @@ -31,7 +31,7 @@ <url>scm:git:[email protected]:hbci4j/hbci4java.git</url> <connection>scm:git:[email protected]:hbci4j/hbci4java.git</connection> <developerConnection>scm:git:[email protected]:hbci4j/hbci4java.git</developerConnection> - <tag>hbci4j-core-3.1.76</tag> + <tag>hbci4j-core-3.1.79</tag> </scm> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/manager/HHDVersion.java new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/manager/HHDVersion.java --- old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/manager/HHDVersion.java 2024-03-19 15:33:32.000000000 +0100 +++ new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/manager/HHDVersion.java 2024-04-04 21:48:23.000000000 +0200 @@ -73,6 +73,11 @@ DECOUPLED(Type.DECOUPLED,"Decouple.*"), ; + + /** + * Die Default-Version. + */ + public final static HHDVersion DEFAULT = HHD_1_2; /** * Definiert die Art des TAN-Verfahrens. @@ -165,6 +170,12 @@ { HBCIUtils.log("trying to determine HHD version for secmech: " + secmech,HBCIUtils.LOG_DEBUG); + if (secmech == null) + { + HBCIUtils.log("have no secmech data, fallback to default: " + DEFAULT,HBCIUtils.LOG_WARN); + return DEFAULT; + } + // DK-TAN-Verfahren String name = secmech.getProperty("zkamethod_name",""); if (name != null && name.length() > 0) @@ -245,9 +256,8 @@ } // Default: - HHDVersion v = HHD_1_2; - HBCIUtils.log(" identified as " + v,HBCIUtils.LOG_DEBUG); - return v; + HBCIUtils.log(" no HHD version detected, default to " + DEFAULT,HBCIUtils.LOG_DEBUG); + return DEFAULT; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/passport/AbstractPinTanPassport.java new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/passport/AbstractPinTanPassport.java --- old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/passport/AbstractPinTanPassport.java 2024-03-19 15:33:32.000000000 +0100 +++ new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/passport/AbstractPinTanPassport.java 2024-04-04 21:48:23.000000000 +0200 @@ -102,11 +102,6 @@ */ public final static String KEY_PD_ORDERREF = "__pintan_orderref___"; - /** - * Hier speichern wir zwischen, ob es sich um ein Decoupled-Verfahren handelt - */ - public final static String KEY_PD_DECOUPLED = "__pintan_decoupled__"; - private String certfile; private boolean checkCert; @@ -419,11 +414,16 @@ * Prueft, ob die Dialog-Initialisierung um ein HKTAN erweitert werden muss. * @param ctx der Kontext. */ - private void checkSCARequest(DialogContext ctx) + private void checkSCARequest(DialogContext ctx) { + HBCIUtils.log("check SCA request",HBCIUtils.LOG_DEBUG); + final SCARequest sca = this.getSCARequest(ctx); if (sca == null) - return; + { + HBCIUtils.log("no SCA request for this context, skipping check",HBCIUtils.LOG_DEBUG); + return; + } Integer step = (Integer) ctx.getMeta().get(CACHE_KEY_SCA_STEP); @@ -437,15 +437,28 @@ final Variant variant = sca.getVariant(); KnownTANProcess tp = KnownTANProcess.get(variant,step.intValue()); - // Checken, ob wir Decoupled verwenden. In dem Fall - // TAN-Prozess von "2" auf "S" ändern if (tp == KnownTANProcess.PROCESS2_STEP2) { - final String dec = (String) ctx.getPassport().getPersistentData(KEY_PD_DECOUPLED); - if (dec != null && dec.length() > 0) + // Checken, ob wir Decoupled verwenden. In dem Fall + // TAN-Prozess von "2" auf "S" ändern + final Properties secmechInfo = this.getCurrentSecMechInfo(); + final HHDVersion hhd = HHDVersion.find(secmechInfo); + final String segversion = secmechInfo != null ? secmechInfo.getProperty("segversion") : null; + HBCIUtils.log("detected HHD version: " + hhd,HBCIUtils.LOG_DEBUG); + + if (hhd != null && hhd.getType() == Type.DECOUPLED) { - tp = KnownTANProcess.PROCESS2_STEPS; - ctx.getPassport().setPersistentData(KEY_PD_DECOUPLED,null); + Integer i = null; + try + { + i = Integer.parseInt(segversion); + } + catch (Exception e) {} + if (i != null && i.intValue() >= 7) + { + HBCIUtils.log("switching TAN process from " + tp + " to " + KnownTANProcess.PROCESS2_STEPS,HBCIUtils.LOG_DEBUG); + tp = KnownTANProcess.PROCESS2_STEPS; + } } } @@ -487,13 +500,21 @@ */ private SCARequest getSCARequest(DialogContext ctx) { + HBCIUtils.log("create new SCA request",HBCIUtils.LOG_DEBUG); + final RawHBCIDialog init = ctx.getDialogInit(); if (init == null) - return null; + { + HBCIUtils.log("have no dialog init, skip SCA request creation",HBCIUtils.LOG_DEBUG); + return null; + } // Checken, ob es ein Dialog, in dem eine SCA gemacht werden soll if (!KnownDialogTemplate.LIST_SEND_SCA.contains(init.getTemplate())) - return null; + { + HBCIUtils.log("dialog (" + init.getTemplate() + ") not in list of SCA dialogs, skip SCA request creation",HBCIUtils.LOG_DEBUG); + return null; + } if (Feature.PINTAN_INIT_SKIPONESTEPSCA.isEnabled()) { @@ -513,10 +534,11 @@ // Sync mit aktiviertem Init-Flip ja final KnownDialogTemplate tpl = init.getTemplate(); - if (!ctx.isAnonymous() && Objects.equals(TanMethod.ONESTEP.getId(),this.getCurrentTANMethod(false)) && + final String currentTanMethod = this.getCurrentTANMethod(false); + if (!ctx.isAnonymous() && Objects.equals(TanMethod.ONESTEP.getId(),currentTanMethod) && (tpl == KnownDialogTemplate.INIT || (Feature.INIT_FLIP_USER_INST.isEnabled() && tpl == KnownDialogTemplate.SYNC))) { - HBCIUtils.log("skipping HKTAN for dialog init",HBCIUtils.LOG_DEBUG); + HBCIUtils.log("skipping HKTAN for dialog init [anon: " + ctx.isAnonymous() + ", current tan method: " + currentTanMethod + ", tpl: " + tpl + "]",HBCIUtils.LOG_DEBUG); return null; } } @@ -530,11 +552,17 @@ // Erst ab HKTAN 6 noetig. Die Bank unterstuetzt es scheinbar noch nicht // Siehe B.4.3.1 - Wenn die Bank HITAN < 6 geschickt hat, dann kann sie keine SCA if (hktanVersion < 6) - return null; + { + HBCIUtils.log("HKTAN version < 6, skip SCA request creation",HBCIUtils.LOG_DEBUG); + return null; + } final SCARequest r = init.createSCARequest(secmechInfo,hktanVersion); if (r == null) + { + HBCIUtils.log("have no SCA request, skip SCA request creation",HBCIUtils.LOG_DEBUG); return null; + } if (r.getTanReference() == null) { @@ -573,13 +601,21 @@ */ private void checkSCAResponse(DialogContext ctx) { + HBCIUtils.log("check SCA response",HBCIUtils.LOG_DEBUG); + final RawHBCIDialog init = ctx.getDialogInit(); if (init == null) - return; + { + HBCIUtils.log("no init dialog, skip SCA response analysis",HBCIUtils.LOG_DEBUG); + return; + } // Checken, ob es ein Dialog, in dem eine SCA gemacht werden soll if (!KnownDialogTemplate.LIST_SEND_SCA.contains(init.getTemplate())) - return; + { + HBCIUtils.log("dialog (" + init.getTemplate() + ") not in list of SCA dialogs, skip SCA response analysis",HBCIUtils.LOG_DEBUG); + return; + } // Wenn wir noch in der anonymen Dialog-Initialisierung sind, interessiert uns das nicht. if (ctx.isAnonymous() || this.isAnonymous()) @@ -593,12 +629,18 @@ // Wenn wir keinen SCA-Request gesendet haben, brauchen wir auch nicht nach dem Response suchen if (scaStep == null) - return; + { + HBCIUtils.log("no sca request sent, skip SCA response analysis",HBCIUtils.LOG_DEBUG); + return; + } // Ohne Status brauchen wir es gar nicht erst versuchen final HBCIMsgStatus status = ctx.getMsgStatus(); if (status == null) - return; + { + HBCIUtils.log("no message status received, skip SCA response analysis",HBCIUtils.LOG_DEBUG); + return; + } // Bank hat uns eine Ausnahme erteilt - wir brauchen keine TAN if (status.segStatus != null && (KnownReturncode.W3076.searchReturnValue(status.segStatus.getWarnings()) != null || KnownReturncode.W3076.searchReturnValue(status.globStatus.getWarnings()) != null)) @@ -615,7 +657,10 @@ Properties props = ParameterFinder.find(status.getData(),"TAN2StepRes*."); if (props == null || props.size() == 0) - return; // Wir haben kein HITAN + { + HBCIUtils.log("no hitan reponse data found",HBCIUtils.LOG_DEBUG); + return; // Wir haben kein HITAN + } // HITAN erhalten - Daten uebernehmen HBCIUtils.log("SCA HITAN response found, triggering TAN request",HBCIUtils.LOG_DEBUG); @@ -1561,8 +1606,17 @@ HBCIUtils.log("detected HHD version: " + hhd,HBCIUtils.LOG_DEBUG); if (hhd.getType() == Type.DECOUPLED) { - HBCIUtils.log("using decoupled hktan for step 2",HBCIUtils.LOG_DEBUG); - proc = KnownTANProcess.PROCESS2_STEPS; + Integer i = null; + try + { + i = Integer.parseInt(segversion); + } + catch (Exception e) {} + if (i != null && i.intValue() >= 7) + { + HBCIUtils.log("using decoupled hktan for step 2",HBCIUtils.LOG_DEBUG); + proc = KnownTANProcess.PROCESS2_STEPS; + } } // HKTAN-job für das Einreichen der TAN erzeugen diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/passport/HBCIPassportPinTan.java new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/passport/HBCIPassportPinTan.java --- old/hbci4java-hbci4j-core-3.1.76/src/main/java/org/kapott/hbci/passport/HBCIPassportPinTan.java 2024-03-19 15:33:32.000000000 +0100 +++ new/hbci4java-hbci4j-core-3.1.79/src/main/java/org/kapott/hbci/passport/HBCIPassportPinTan.java 2024-04-04 21:48:23.000000000 +0200 @@ -392,7 +392,6 @@ else if (hhd.getType() == Type.DECOUPLED) { callback = HBCICallback.NEED_PT_DECOUPLED; - setPersistentData(KEY_PD_DECOUPLED,"true"); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hbci4java-hbci4j-core-3.1.76/src/main/resources/hbci-300.xml new/hbci4java-hbci4j-core-3.1.79/src/main/resources/hbci-300.xml --- old/hbci4java-hbci4j-core-3.1.76/src/main/resources/hbci-300.xml 2024-03-19 15:33:32.000000000 +0100 +++ new/hbci4java-hbci4j-core-3.1.79/src/main/resources/hbci-300.xml 2024-04-04 21:48:23.000000000 +0200 @@ -8531,8 +8531,9 @@ </MSGdef> <MSGdef id="DialogInitSCA"> - &MsgSigHeadUser; - <SEG type="TAN2Step6"/> + <!-- HNHBK+HNSHK --> &MsgSigHeadUser; + <!-- HKTAN --> <SEG type="TAN2Step6" minnum="0" maxnum="1"/> + <!-- HKTAN --> <SEG type="TAN2Step7" minnum="0" maxnum="1"/> &MsgSigTailUser; </MSGdef> <MSGdef id="DialogInitSCARes"> @@ -8563,6 +8564,7 @@ <SEG type="KIMsg" minnum="0" maxnum="0"/> <SEG type="TAN2StepRes6" minnum="0" maxnum="1"/> <SEG type="TAN2StepRes7" minnum="0" maxnum="1"/> + <SEG type="SEPAInfoRes1" minnum="0" maxnum="1"/> &MsgSigTailInst; </MSGdef>
