package eu.europa.esig.dss.validation.process.bbb.vci; import eu.europa.esig.dss.jaxb.detailedreport.XmlVCI; 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.vci.checks.SignaturePolicyHashValidCheck; import eu.europa.esig.dss.validation.process.bbb.vci.checks.SignaturePolicyIdentifiedCheck; import eu.europa.esig.dss.validation.process.bbb.vci.checks.SignaturePolicyIdentifierCheck; import eu.europa.esig.dss.validation.reports.wrapper.SignatureWrapper; import eu.europa.esig.dss.x509.SignaturePolicy; import eu.europa.esig.jaxb.policy.LevelConstraint; import eu.europa.esig.jaxb.policy.MultiValuesConstraint; /** * 5.2.4 Validation context initialization This building block initializes the * validation constraints (chain constraints, cryptographic constraints, * signature elements constraints) and parameters (X.509 validation parameters * including trust anchors, certificate validation data) that will be used to * validate the signature. */ public class ValidationContextInitialization extends Chain<XmlVCI> { private final SignatureWrapper signature; private final Context context; private final ValidationPolicy validationPolicy; public ValidationContextInitialization(SignatureWrapper signature, Context context, ValidationPolicy validationPolicy) { super(new XmlVCI()); this.signature = signature; this.context = context; this.validationPolicy = validationPolicy; } @Override protected void initChain() { MultiValuesConstraint signaturePolicyConstraint = validationPolicy.getSignaturePolicyConstraint(context); ChainItem<XmlVCI> item = firstItem = signaturePolicyIdentifier(signaturePolicyConstraint); if (signature.isPolicyPresent() && (!SignaturePolicy.NO_POLICY.equals(signature.getPolicyId()) && !SignaturePolicy.IMPLICIT_POLICY.equals(signature.getPolicyId()))) { item = item.setNextItem(signaturePolicyIdentified()); item = item.setNextItem(signaturePolicyHashValid()); } } private ChainItem<XmlVCI> signaturePolicyIdentifier(MultiValuesConstraint signaturePolicyConstraint) { return new SignaturePolicyIdentifierCheck(result, signature, signaturePolicyConstraint); } private ChainItem<XmlVCI> signaturePolicyIdentified() { LevelConstraint constraint = validationPolicy.getSignaturePolicyIdentifiedConstraint(context); return new SignaturePolicyIdentifiedCheck(result, signature, constraint); } private ChainItem<XmlVCI> signaturePolicyHashValid() { LevelConstraint constraint = validationPolicy.getSignaturePolicyPolicyHashValid(context); return new SignaturePolicyHashValidCheck(result, signature, constraint); } }