package eu.europa.esig.dss.validation.process.vpfltvd.checks; import java.util.List; import eu.europa.esig.dss.jaxb.detailedreport.XmlBasicBuildingBlocks; import eu.europa.esig.dss.jaxb.detailedreport.XmlCV; import eu.europa.esig.dss.jaxb.detailedreport.XmlConclusion; import eu.europa.esig.dss.jaxb.detailedreport.XmlISC; import eu.europa.esig.dss.jaxb.detailedreport.XmlName; import eu.europa.esig.dss.jaxb.detailedreport.XmlSAV; import eu.europa.esig.dss.jaxb.detailedreport.XmlValidationProcessLongTermData; import eu.europa.esig.dss.jaxb.detailedreport.XmlXCV; import eu.europa.esig.dss.validation.policy.rules.Indication; import eu.europa.esig.dss.validation.policy.rules.SubIndication; import eu.europa.esig.dss.validation.process.ChainItem; import eu.europa.esig.dss.validation.process.MessageTag; import eu.europa.esig.jaxb.policy.LevelConstraint; public class RevocationBasicBuildingBlocksCheck extends ChainItem<XmlValidationProcessLongTermData> { private final XmlBasicBuildingBlocks revocationBBB; private Indication indication; private SubIndication subIndication; private List<XmlName> errors; public RevocationBasicBuildingBlocksCheck(XmlValidationProcessLongTermData result, XmlBasicBuildingBlocks revocationBBB, LevelConstraint constraint) { super(result, constraint, revocationBBB.getId()); this.revocationBBB = revocationBBB; } @Override protected boolean process() { // Format check is skipped XmlISC isc = revocationBBB.getISC(); XmlConclusion iscConclusion = isc.getConclusion(); if (!isAllowed(iscConclusion)) { indication = iscConclusion.getIndication(); subIndication = iscConclusion.getSubIndication(); errors = iscConclusion.getErrors(); return false; } // VCI is skipped XmlCV cv = revocationBBB.getCV(); XmlConclusion cvConclusion = cv.getConclusion(); if (!isAllowed(cvConclusion)) { indication = cvConclusion.getIndication(); subIndication = cvConclusion.getSubIndication(); errors = cvConclusion.getErrors(); return false; } XmlXCV xcv = revocationBBB.getXCV(); XmlConclusion xcvConclusion = xcv.getConclusion(); if (!isAllowed(xcvConclusion)) { indication = xcvConclusion.getIndication(); subIndication = xcvConclusion.getSubIndication(); errors = xcvConclusion.getErrors(); return false; } XmlSAV sav = revocationBBB.getSAV(); XmlConclusion savConclusion = sav.getConclusion(); if (!isAllowed(savConclusion)) { indication = savConclusion.getIndication(); subIndication = savConclusion.getSubIndication(); errors = savConclusion.getErrors(); return false; } return true; } private boolean isAllowed(XmlConclusion conclusion) { boolean allowed = Indication.PASSED.equals(conclusion.getIndication()) || (Indication.INDETERMINATE.equals(conclusion.getIndication()) && (SubIndication.CRYPTO_CONSTRAINTS_FAILURE_NO_POE.equals(conclusion.getSubIndication()) || SubIndication.REVOKED_NO_POE.equals(conclusion.getSubIndication()) || SubIndication.OUT_OF_BOUNDS_NO_POE.equals(conclusion.getSubIndication()))); return allowed; } @Override protected MessageTag getMessageTag() { return MessageTag.ADEST_RORPIIC; } @Override protected MessageTag getErrorMessageTag() { return MessageTag.ADEST_RORPIIC_ANS; } @Override protected Indication getFailedIndicationForConclusion() { return indication; } @Override protected SubIndication getFailedSubIndicationForConclusion() { return subIndication; } @Override protected List<XmlName> getPreviousErrors() { return errors; } }