From 0872d2d8a64fd701776b272f49222428d8def07f Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Tue, 3 Nov 2015 14:38:34 +0100 Subject: initial commit --- .../moa/spss/tsl/utils/TSLEvaluationContext.java | 134 +++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/tsl/utils/TSLEvaluationContext.java (limited to 'moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/tsl/utils/TSLEvaluationContext.java') diff --git a/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/tsl/utils/TSLEvaluationContext.java b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/tsl/utils/TSLEvaluationContext.java new file mode 100644 index 0000000..a656f11 --- /dev/null +++ b/moaSig/moa-sig-lib/src/main/java/at/gv/egovernment/moa/spss/tsl/utils/TSLEvaluationContext.java @@ -0,0 +1,134 @@ +package at.gv.egovernment.moa.spss.tsl.utils; + +import iaik.util.logging.Log.MultiThreadLoggingGroup; +import iaik.util.logging.Log; +import iaik.util.logging._l; +import iaik.xml.crypto.tsl.BaseClass; +import iaik.xml.crypto.tsl.SIEExtensionChecker; +import iaik.xml.crypto.tsl.constants.Countries; +import iaik.xml.crypto.tsl.ex.TSLSIEExtensionException; +import iaik.xml.crypto.tsl.ex.SeverityAspect.Mitigation; +import iaik.xml.crypto.tsl.sie.gen.CriteriaListType; +import iaik.xml.crypto.tsl.sie.gen.KeyUsageBitType; +import iaik.xml.crypto.tsl.sie.gen.KeyUsageType; +import iaik.xml.crypto.tsl.sie.gen.ObjectFactory; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +public final class TSLEvaluationContext extends iaik.xml.crypto.tsl.TSLEvaluationContext { + + public TSLEvaluationContext( + String workingdirectory, + boolean sqlMultithreaded, + boolean throwExceptions, + boolean logExceptions, + boolean throwWarnings, + boolean logWarnings) { + super(workingdirectory, + sqlMultithreaded, + throwExceptions, + logExceptions, + throwWarnings, + logWarnings); + } + + @Override + public Object throwException(Throwable e, Method enclosingMethod, + Object thisObject, Object[] parameters) { + + if (e instanceof TSLSIEExtensionException + && e.getMessage() == TSLSIEExtensionException.NO_KEYUSEAGE_NOR_POLICYSET) { + + CriteriaListType criteriaList = (CriteriaListType) parameters[1]; + + _l.warn(criteriaList.getDescription()); + + String description = criteriaList.getDescription(); + if (description + .trim() + .equals( + "This service issues qualified certificates for e-signing and " + + "e-authentication within the same process. The Relaying Party shall " + + "make distinction by inspection of keyUsage field contents - " + + "e-signature certificates have non-repudation bit set exclusively.")) { + criteriaList.setAssert(SIEExtensionChecker.Asssert.all.toString()); + + ObjectFactory of = new ObjectFactory(); + KeyUsageType ku = of.createKeyUsageType(); + KeyUsageBitType kb = of.createKeyUsageBitType(); + kb.setName(SIEExtensionChecker.KeyUseageBit.nonRepudiation + .toString()); + kb.setValue(true); + ku.getKeyUsageBit().add(kb); + criteriaList.getKeyUsage().add(ku); + + Object mitigatedResult = null; + try { + mitigatedResult = enclosingMethod.invoke(thisObject, parameters); + + } catch (IllegalAccessException e1) { + wrapException(e1); + } catch (InvocationTargetException e1) { + wrapException(e1); + } + + if (mitigatedResult != null) { + wrapException(e, criteriaList.sourceLocation(), new Mitigation() { + @Override + public String getReport() { + return "Fixed invalid criteria list"; + } + }); + return mitigatedResult; + } + + } + } + return super.throwException(e, enclosingMethod, thisObject, parameters); + } + + @Override + protected long howLongWaitForThreads() { + return 10000; + } + + @Override + protected BaseClass getCurrentBaseClass() { + //TODO check whether we can avoid by redesign to focus this only on import + return null; + } + + @Override + public boolean normalizeXML() { + return true; + } + + public Countries getExpectedTerritory() { + return null; + } + + public MultiThreadLoggingGroup getLoggingGroup() { + return this; + } + + StringBuffer log = new StringBuffer(); + + public void flushLog() { + if (log != null && log.length() > 0) { + synchronized (System.out) { + Thread currentThread = Thread.currentThread(); + print("# # # " + getHint() + " Thread: " + + currentThread.getName() + "(" + currentThread.getId() + + ") collected logs - BEGIN # # #\n" + log.toString() + "# # # " + + getHint() + " Thread: " + currentThread.getName() + + "(" + currentThread.getId() + ") collected logs - END # # #\n"); + } + log = null; + } + } + + public void print(Object msg) { + Log.print(msg); + } +} \ No newline at end of file -- cgit v1.2.3