package eu.europa.esig.dss.validation.reports.wrapper; import java.util.ArrayList; import java.util.List; import eu.europa.esig.dss.DigestAlgorithm; import eu.europa.esig.dss.EncryptionAlgorithm; import eu.europa.esig.dss.jaxb.diagnostic.XmlBasicSignature; import eu.europa.esig.dss.jaxb.diagnostic.XmlChainItem; import eu.europa.esig.dss.jaxb.diagnostic.XmlSigningCertificate; import eu.europa.esig.dss.utils.Utils; public abstract class AbstractTokenProxy implements TokenProxy { protected abstract XmlBasicSignature getCurrentBasicSignature(); protected abstract List<XmlChainItem> getCurrentCertificateChain(); protected abstract XmlSigningCertificate getCurrentSigningCertificate(); @Override public List<XmlChainItem> getCertificateChain() { if (getCurrentCertificateChain() != null) { return getCurrentCertificateChain(); } return new ArrayList<XmlChainItem>(); } @Override public List<String> getCertificateChainIds() { List<String> result = new ArrayList<String>(); List<XmlChainItem> certificateChain = getCertificateChain(); if (Utils.isCollectionNotEmpty(certificateChain)) { for (XmlChainItem xmlChainCertificate : certificateChain) { result.add(xmlChainCertificate.getId()); } } return result; } @Override public boolean isReferenceDataFound() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); return (basicSignature != null) && Utils.isTrue(basicSignature.isReferenceDataFound()); } @Override public boolean isReferenceDataIntact() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); return (basicSignature != null) && Utils.isTrue(basicSignature.isReferenceDataIntact()); } @Override public boolean isSignatureIntact() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); return (basicSignature != null) && Utils.isTrue(basicSignature.isSignatureIntact()); } @Override public boolean isSignatureValid() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); return (basicSignature != null) && Utils.isTrue(basicSignature.isSignatureValid()); } @Override public String getDigestAlgoUsedToSignThisToken() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); if (basicSignature != null) { return basicSignature.getDigestAlgoUsedToSignThisToken(); } return Utils.EMPTY_STRING; } @Override public DigestAlgorithm getDigestAlgorithm() { String signatureDigestAlgorithmName = getDigestAlgoUsedToSignThisToken(); return DigestAlgorithm.forName(signatureDigestAlgorithmName, null); } @Override public String getEncryptionAlgoUsedToSignThisToken() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); if (basicSignature != null) { return basicSignature.getEncryptionAlgoUsedToSignThisToken(); } return Utils.EMPTY_STRING; } @Override public EncryptionAlgorithm getEncryptionAlgorithm() { String encryptionAlgoUsedToSignThisToken = getEncryptionAlgoUsedToSignThisToken(); return EncryptionAlgorithm.forName(encryptionAlgoUsedToSignThisToken, null); } @Override public String getKeyLengthUsedToSignThisToken() { XmlBasicSignature basicSignature = getCurrentBasicSignature(); if (basicSignature != null) { return basicSignature.getKeyLengthUsedToSignThisToken(); } return Utils.EMPTY_STRING; } @Override public boolean isIssuerSerialMatch() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); return (currentSigningCertificate != null) && Utils.isTrue(currentSigningCertificate.isIssuerSerialMatch()); } @Override public boolean isAttributePresent() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); return (currentSigningCertificate != null) && Utils.isTrue(currentSigningCertificate.isAttributePresent()); } @Override public boolean isDigestValueMatch() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); return (currentSigningCertificate != null) && Utils.isTrue(currentSigningCertificate.isDigestValueMatch()); } @Override public boolean isDigestValuePresent() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); return (currentSigningCertificate != null) && Utils.isTrue(currentSigningCertificate.isDigestValuePresent()); } @Override public String getSigningCertificateId() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); if (currentSigningCertificate != null) { return currentSigningCertificate.getId(); } return Utils.EMPTY_STRING; } @Override public String getSigningCertificateSigned() { XmlSigningCertificate currentSigningCertificate = getCurrentSigningCertificate(); if (currentSigningCertificate != null) { return currentSigningCertificate.getSigned(); } return Utils.EMPTY_STRING; } @Override public String getLastChainCertificateId() { XmlChainItem item = getLastChainCertificate(); return item == null ? Utils.EMPTY_STRING : item.getId(); } @Override public String getFirstChainCertificateId() { XmlChainItem item = getFirstChainCertificate(); return item == null ? Utils.EMPTY_STRING : item.getId(); } @Override public String getLastChainCertificateSource() { XmlChainItem item = getLastChainCertificate(); return item == null ? Utils.EMPTY_STRING : item.getSource(); } public XmlChainItem getLastChainCertificate() { List<XmlChainItem> certificateChain = getCurrentCertificateChain(); if (Utils.isCollectionNotEmpty(certificateChain)) { XmlChainItem lastItem = certificateChain.get(certificateChain.size() - 1); return lastItem; } return null; } public XmlChainItem getFirstChainCertificate() { List<XmlChainItem> certificateChain = getCurrentCertificateChain(); if (Utils.isCollectionNotEmpty(certificateChain)) { return certificateChain.get(0); } return null; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; AbstractTokenProxy other = (AbstractTokenProxy) obj; if (getId() == null) { if (other.getId() != null) return false; } else if (!getId().equals(other.getId())) return false; return true; } }