package eu.europa.esig.dss.validation.process.bbb.fc; import eu.europa.esig.dss.jaxb.detailedreport.XmlFC; import eu.europa.esig.dss.validation.policy.Context; import eu.europa.esig.dss.validation.policy.ValidationPolicy; import eu.europa.esig.dss.validation.process.Chain; import eu.europa.esig.dss.validation.process.ChainItem; import eu.europa.esig.dss.validation.process.bbb.fc.checks.AcceptableMimetypeFileContentCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.AcceptableZipCommentCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.ContainerTypeCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.FormatCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.ManifestFilePresentCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.MimeTypeFilePresentCheck; import eu.europa.esig.dss.validation.process.bbb.fc.checks.ZipCommentPresentCheck; import eu.europa.esig.dss.validation.reports.wrapper.DiagnosticData; import eu.europa.esig.dss.validation.reports.wrapper.SignatureWrapper; import eu.europa.esig.jaxb.policy.LevelConstraint; import eu.europa.esig.jaxb.policy.MultiValuesConstraint; /** * 5.2.2 Format Checking * * This building block shall check that the signature to validate is conformant * to the applicable base format (e.g. CMS [i.8], CAdES [i.2], XML-DSig [i.11], * XAdES [i.4], etc.) prior to any subsequent processing. */ public class FormatChecking extends Chain<XmlFC> { private final DiagnosticData diagnosticData; private final SignatureWrapper signature; private final Context context; private final ValidationPolicy policy; public FormatChecking(DiagnosticData diagnosticData, SignatureWrapper signature, Context context, ValidationPolicy policy) { super(new XmlFC()); this.diagnosticData = diagnosticData; this.signature = signature; this.context = context; this.policy = policy; } @Override protected void initChain() { ChainItem<XmlFC> item = firstItem = formatCheck(); if (diagnosticData.isContainerInfoPresent()) { item = item.setNextItem(containerTypeCheck()); item = item.setNextItem(zipCommentPresentCheck()); item = item.setNextItem(acceptableZipCommentCheck()); item = item.setNextItem(mimetypeFilePresentCheck()); item = item.setNextItem(mimetypeFileContentCheck()); item = item.setNextItem(manifestFilePresentCheck()); } } private ChainItem<XmlFC> formatCheck() { MultiValuesConstraint constraint = policy.getSignatureFormatConstraint(context); return new FormatCheck(result, signature, constraint); } private ChainItem<XmlFC> containerTypeCheck() { MultiValuesConstraint constraint = policy.getAcceptedContainerTypesConstraint(); return new ContainerTypeCheck(result, diagnosticData.getContainerType(), constraint); } private ChainItem<XmlFC> zipCommentPresentCheck() { LevelConstraint constraint = policy.getZipCommentPresentConstraint(); return new ZipCommentPresentCheck(result, diagnosticData.getZipComment(), constraint); } private ChainItem<XmlFC> acceptableZipCommentCheck() { MultiValuesConstraint constraint = policy.getAcceptedZipCommentsConstraint(); return new AcceptableZipCommentCheck(result, diagnosticData.getZipComment(), constraint); } private ChainItem<XmlFC> mimetypeFilePresentCheck() { LevelConstraint constraint = policy.getMimeTypeFilePresentConstraint(); return new MimeTypeFilePresentCheck(result, diagnosticData.isMimetypeFilePresent(), constraint); } private ChainItem<XmlFC> mimetypeFileContentCheck() { MultiValuesConstraint constraint = policy.getAcceptedMimeTypeContentsConstraint(); return new AcceptableMimetypeFileContentCheck(result, diagnosticData.getMimetypeFileContent(), constraint); } private ChainItem<XmlFC> manifestFilePresentCheck() { LevelConstraint constraint = policy.getManifestFilePresentConstraint(); return new ManifestFilePresentCheck(result, diagnosticData.getContainerInfo(), constraint); } }