package at.gv.egiz.asic.impl; import at.gv.egiz.asic.ASiCManifestType; import at.gv.egiz.asic.DataObjectReferenceType; import at.gv.egiz.asic.ReferenceType; import at.gv.egiz.asic.XAdESSignaturesType; import at.gv.egiz.asic.api.*; import at.gv.egiz.asic.impl.verifier.ExtendedCAdESVerifier; import at.gv.egiz.asic.impl.verifier.ExtendedXAdESVerifier; import at.gv.egiz.asic.impl.verifier.SimpleCAdESVerifier; import at.gv.egiz.asic.impl.verifier.SimpleXAdESVerifier; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.MOAException; import at.gv.egovernment.moa.spss.MOARuntimeException; import at.gv.egovernment.moa.spss.MOASystemException; import at.gv.egovernment.moa.spss.api.SPSSFactory; import at.gv.egovernment.moa.spss.api.cmsverify.*; import at.gv.egovernment.moa.spss.api.common.*; import at.gv.egovernment.moa.spss.api.impl.SPSSFactoryImpl; import at.gv.egovernment.moa.spss.api.xmlverify.SupplementProfile; import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureInfo; import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureLocation; import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureRequest; import at.gv.egovernment.moa.spss.server.invoke.CMSSignatureVerificationInvoker; import at.gv.egovernment.moa.spss.server.invoke.VerifyCMSSignatureResponseBuilder; import at.gv.egovernment.moa.spss.server.invoke.XMLSignatureVerificationInvoker; import iaik.server.cmspdfverify.CertificateValidationResult; import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.bind.DataBindingException; import javax.xml.bind.JAXB; import javax.xml.crypto.dsig.Reference; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import java.util.*; /** * Created by Andreas Fitzek on 6/15/16. */ public class ASiCMOAVerifier implements ASiCVerifier { private static final Logger logger = LoggerFactory.getLogger(ASiCMOAVerifier.class); private List verifierMap = new ArrayList(); public ASiCMOAVerifier() { verifierMap.add(new SimpleCAdESVerifier()); verifierMap.add(new SimpleXAdESVerifier()); verifierMap.add(new ExtendedCAdESVerifier()); verifierMap.add(new ExtendedXAdESVerifier()); } @Override public List verify(ASiC asic, String trustProfileID, Date date) throws MOAException { List response = new ArrayList(); boolean handled = false; Iterator verifierIterator = verifierMap.iterator(); while (verifierIterator.hasNext()) { Verifier verifier = verifierIterator.next(); if (verifier.handles(asic)) { verifier.verify(asic, trustProfileID, date, response); handled = true; break; } } if (!handled) { logger.warn("Cannot handle ASiC: {}", asic); throw new MOASystemException("asic.0016", null); } return response; } }