package eu.europa.esig.dss.validation.process.bbb.sav;
import java.util.Date;
import eu.europa.esig.dss.jaxb.detailedreport.XmlSAV;
import eu.europa.esig.dss.validation.policy.Context;
import eu.europa.esig.dss.validation.policy.ValidationPolicy;
import eu.europa.esig.dss.validation.process.ChainItem;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.CertifiedRolesCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.ClaimedRolesCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.CommitmentTypeIndicationsCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.ContentHintsCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.ContentIdentifierCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.ContentTimestampCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.ContentTypeCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.CounterSignatureCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.CryptographicCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.SignerLocationCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.SigningTimeCheck;
import eu.europa.esig.dss.validation.process.bbb.sav.checks.StructuralValidationCheck;
import eu.europa.esig.dss.validation.reports.wrapper.DiagnosticData;
import eu.europa.esig.dss.validation.reports.wrapper.SignatureWrapper;
import eu.europa.esig.jaxb.policy.CryptographicConstraint;
import eu.europa.esig.jaxb.policy.LevelConstraint;
import eu.europa.esig.jaxb.policy.MultiValuesConstraint;
import eu.europa.esig.jaxb.policy.ValueConstraint;
/**
* 5.2.8 Signature acceptance validation (SAV) This building block covers any
* additional verification to be performed on the signature itself or on the
* attributes of the signature ETSI EN 319 132-1
*/
public class SignatureAcceptanceValidation extends AbstractAcceptanceValidation<SignatureWrapper> {
private final Context context;
public SignatureAcceptanceValidation(DiagnosticData diagnosticData, Date currentTime, SignatureWrapper signature, Context context,
ValidationPolicy validationPolicy) {
super(diagnosticData, signature, currentTime, validationPolicy);
this.context = context;
}
@Override
protected void initChain() {
ChainItem<XmlSAV> item = firstItem = structuralValidation();
// signing-time
item = item.setNextItem(signingTime());
// content-type
item = item.setNextItem(contentType());
// content-hints
item = item.setNextItem(contentHints());
// TODO content-reference
// content-identifier
item = item.setNextItem(contentIdentifier());
// commitment-type-indication
item = item.setNextItem(commitmentTypeIndications());
// signer-location
item = item.setNextItem(signerLocation());
// TODO signer-attributes
// content-timestamp
item = item.setNextItem(contentTimestamp());
// countersignature
item = item.setNextItem(countersignature());
// claimed-roles
item = item.setNextItem(claimedRoles());
// certified-roles
item = item.setNextItem(certifiedRoles());
// cryptographic check
item = item.setNextItem(signatureCryptographic());
}
private ChainItem<XmlSAV> structuralValidation() {
LevelConstraint constraint = validationPolicy.getStructuralValidationConstraint(context);
return new StructuralValidationCheck(result, token, constraint);
}
private ChainItem<XmlSAV> signingTime() {
LevelConstraint constraint = validationPolicy.getSigningTimeConstraint();
return new SigningTimeCheck(result, token, constraint);
}
private ChainItem<XmlSAV> contentType() {
ValueConstraint constraint = validationPolicy.getContentTypeConstraint();
return new ContentTypeCheck(result, token, constraint);
}
private ChainItem<XmlSAV> contentHints() {
ValueConstraint constraint = validationPolicy.getContentHintsConstraint();
return new ContentHintsCheck(result, token, constraint);
}
private ChainItem<XmlSAV> contentIdentifier() {
ValueConstraint constraint = validationPolicy.getContentIdentifierConstraint();
return new ContentIdentifierCheck(result, token, constraint);
}
private ChainItem<XmlSAV> commitmentTypeIndications() {
MultiValuesConstraint constraint = validationPolicy.getCommitmentTypeIndicationConstraint();
return new CommitmentTypeIndicationsCheck(result, token, constraint);
}
private ChainItem<XmlSAV> signerLocation() {
LevelConstraint constraint = validationPolicy.getSignerLocationConstraint();
return new SignerLocationCheck(result, token, constraint);
}
private ChainItem<XmlSAV> contentTimestamp() {
LevelConstraint constraint = validationPolicy.getContentTimestampConstraint();
return new ContentTimestampCheck(result, diagnosticData, token, constraint);
}
private ChainItem<XmlSAV> countersignature() {
LevelConstraint constraint = validationPolicy.getCounterSignatureConstraint();
return new CounterSignatureCheck(result, diagnosticData, token, constraint);
}
private ChainItem<XmlSAV> claimedRoles() {
MultiValuesConstraint constraint = validationPolicy.getClaimedRoleConstraint();
return new ClaimedRolesCheck(result, token, constraint);
}
private ChainItem<XmlSAV> certifiedRoles() {
MultiValuesConstraint constraint = validationPolicy.getCertifiedRolesConstraint();
return new CertifiedRolesCheck(result, token, constraint);
}
private ChainItem<XmlSAV> signatureCryptographic() {
CryptographicConstraint constraint = validationPolicy.getSignatureCryptographicConstraint(context);
return new CryptographicCheck<XmlSAV>(result, token, currentTime, constraint);
}
}