package at.gv.egiz.eaaf.modules.sigverify.moasig.impl.data; import java.io.Serializable; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.commons.lang3.StringUtils; import at.gv.egiz.eaaf.modules.sigverify.moasig.api.data.IGenericSignatureVerificationResponse; import at.gv.egiz.eaaf.modules.sigverify.moasig.exceptions.MoaSigServiceException; import at.gv.egiz.eaaf.modules.sigverify.moasig.exceptions.MoaSigServiceParserException; import at.gv.egovernment.moa.spss.api.common.ExtendedCertificateCheckResult; import at.gv.egovernment.moa.spss.api.xmlverify.AdESFormResults; import iaik.x509.X509Certificate; import lombok.Builder; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @Getter @Setter public class GenericSignatureVerificationResponse implements IGenericSignatureVerificationResponse, Serializable { private static final long serialVersionUID = -7751001050689401118L; /** The signing time. */ private Date signingDateTime; /** The signatureCheckCode to be stored. */ private int signatureCheckCode; /** The certificateCheckCode to be stored. */ private int certificateCheckCode; /** The publicAuthority to be stored. */ private boolean publicAuthority; /** The publicAuthorityCode to be stored. */ private String publicAuthorityCode; /** The qualifiedCertificate to be stored. */ private boolean qualifiedCertificate; private byte[] x509CertificateEncoded; /** * Identifier of the signing algorithm. */ private String signatureAlgorithmIdentifier; private ExtendedCertificateValidation extendedCertificateValidation; private List formValidationResults = new ArrayList<>(); @Override public Date getSigningDateTime() { if (this.signingDateTime != null) { return new Date(this.signingDateTime.getTime()); } return null; } @Override public X509Certificate getX509Certificate() throws MoaSigServiceException { if (x509CertificateEncoded != null) { try { return new X509Certificate(x509CertificateEncoded); } catch (final CertificateException e) { log.error("Can NOT parse X509 certifcate in " + GenericSignatureVerificationResponse.class.getName(), e); throw new MoaSigServiceParserException("service.moasig.01", null, e); } } return null; } @Override public byte[] getX509CertificateEncoded() { if (this.x509CertificateEncoded != null) { return this.x509CertificateEncoded.clone(); } return null; } @Override public String getPublicAuthorityCode() { if (StringUtils.isNotEmpty(this.publicAuthorityCode)) { return this.publicAuthorityCode; } else { return null; } } /** * Set signature creation timestramp. * * @param signingDateTime timestamp */ public void setSigningDateTime(final Date signingDateTime) { if (signingDateTime != null) { this.signingDateTime = new Date(signingDateTime.getTime()); } } /** * Set encoded signer certificate. * * @param x509CertificateEncoded signer cerificate */ public void setX509CertificateEncoded(final byte[] x509CertificateEncoded) { if (x509CertificateEncoded != null) { this.x509CertificateEncoded = x509CertificateEncoded.clone(); } } /** * Set extended certificate-validation result. * * @param extendedCertificateCheck Extended result from MOA-Sig */ public void setExtendedCertificateCheckResult(ExtendedCertificateCheckResult extendedCertificateCheck) { if (extendedCertificateCheck != null) { this.extendedCertificateValidation = ExtendedCertificateValidation.builder() .majorResult(ExtendedResult.builder() .code(extendedCertificateCheck.getMajorCode()) .info(extendedCertificateCheck.getMajorInfo()) .build()) .minorResult(ExtendedResult.builder() .code(extendedCertificateCheck.getMinorCode()) .info(extendedCertificateCheck.getMinorInfo()) .build()) .build(); } else { log.debug("No extended verification-result. Skipping certificate-result extraction ... "); } } /** * Set form-validation result. * * @param formCheckResult Extended form-validation result from MOA-Sig */ public void setFormValidationResults(List formCheckResult) { if (formCheckResult != null) { for (Object elObj : formCheckResult) { if (elObj instanceof AdESFormResults) { AdESFormResults el = (AdESFormResults)elObj; formValidationResults.add(ExtendedResult.builder() .code(el.getCode()) .info(el.getName()) .build()); } else { log.warn("Skip unknown form-validation result of type: {}", elObj.getClass().getName()); } } } else { log.debug("No extended verification-result. Skipping form-validation result extraction ... "); } } @Getter @Builder public static class ExtendedCertificateValidation implements Serializable { private static final long serialVersionUID = -7800026008655393276L; private ExtendedResult majorResult; private ExtendedResult minorResult; } @Getter @Builder public static class ExtendedResult implements Serializable { private static final long serialVersionUID = 8523769744476971010L; private int code; private String info; } }