@Override protected boolean process() { boolean foundCountersignature = false; String currentSignatureId = signature.getId(); List<SignatureWrapper> signatures = diagnosticData.getSignatures(); for (SignatureWrapper signatureWrapper : signatures) { if (signatureWrapper.isCounterSignature() && currentSignatureId.equals(signatureWrapper.getParentId())) { foundCountersignature = true; break; } } return foundCountersignature; }
/** * The identifier of the policy. * * @param signatureId * The identifier of the signature. * @return the policy identifier */ public String getPolicyId(final String signatureId) { SignatureWrapper signature = getSignatureByIdNullSafe(signatureId); return signature.getPolicyId(); }
/** * This method returns signing certificate dss id for the first signature. * * @return signing certificate dss id. */ public String getFirstSigningCertificateId() { SignatureWrapper signature = getFirstSignatureNullSafe(); return signature.getSigningCertificateId(); }
private void addCounterSignature(SignatureWrapper signature, XmlSignature xmlSignature) { if (signature.isCounterSignature()) { xmlSignature.setCounterSignature(true); xmlSignature.setParentId(signature.getParentId()); } }
private Set<RevocationWrapper> getLinkedRevocationData() { Set<RevocationWrapper> result = new HashSet<RevocationWrapper>(); extractRevocationDataFromCertificateChain(result, currentSignature.getCertificateChainIds()); List<TimestampWrapper> timestampList = currentSignature.getTimestampList(); for (TimestampWrapper timestamp : timestampList) { extractRevocationDataFromCertificateChain(result, timestamp.getCertificateChainIds()); } return result; }
/** * This method retrieves a list of signature wrappers. * * @return a list of signature wrappers. */ public List<SignatureWrapper> getSignatures() { if (foundSignatures == null) { foundSignatures = new ArrayList<SignatureWrapper>(); List<XmlSignature> xmlSignatures = wrapped.getSignatures(); if (Utils.isCollectionNotEmpty(xmlSignatures)) { for (XmlSignature xmlSignature : xmlSignatures) { foundSignatures.add(new SignatureWrapper(xmlSignature)); } } } return foundSignatures; }
void validateRevocationFreshness(eu.europa.esig.dss.validation.reports.Reports reports) { DiagnosticData diagnosticData = reports.getDiagnosticData(); if (diagnosticData.getUsedCertificates() != null && diagnosticData.getSigningCertificateId() != null) { for (CertificateWrapper certificateWrapper : diagnosticData.getUsedCertificates()) { for (SignatureWrapper signatureWrapper : diagnosticData.getSignatures()) { if (certificateWrapper.getId().equals(signatureWrapper.getSigningCertificateId()) && !signatureWrapper.getTimestampList().isEmpty()) { TimestampWrapper timeStampWrapper = getFirstTimestamp(signatureWrapper.getTimestampList()); if (timeStampWrapper.getProductionTime() == null) return; boolean revocationFreshnessCheckInvokeError = isRevocationFreshnessCheckInvalid(certificateWrapper, timeStampWrapper); if (revocationFreshnessCheckInvokeError) { reports.getSimpleReport().getErrors(signatureWrapper.getId()).add(REVOCATION_FRESHNESS_FAULT); } else { boolean revocationFreshnessCheckInvokeWarning = certificateWrapper.getRevocationData().stream().anyMatch( r -> !CRL_REVOCATION_SOURCE.equals(r.getSource()) && isInRangeMillis(r.getProductionDate(), timeStampWrapper.getProductionTime(), REVOCATION_FRESHNESS_FIFTEEN_MINUTES_DIFFERENCE)); if (revocationFreshnessCheckInvokeWarning) { reports.getSimpleReport().getWarnings(signatureWrapper.getId()).add(REVOCATION_FRESHNESS_FAULT); } } } } } } }
/** * This method returns the list of timestamps wrappers which covers the given signature. * * @param signatureId * The identifier of the signature. * @return The list of timestamp wrappers */ public List<TimestampWrapper> getTimestampList(final String signatureId) { SignatureWrapper signature = getSignatureByIdNullSafe(signatureId); return signature.getTimestampList(); }
/** * This method returns the first signature id. * * @return the first signature id */ public String getFirstSignatureId() { SignatureWrapper firstSignature = getFirstSignatureNullSafe(); return firstSignature.getId(); }
signatureAnalysis.setId(signature.getId()); if (signature.isCounterSignature()) { signatureAnalysis.setCounterSignature(true); CertificateWrapper signingCertificate = diagnosticData.getUsedCertificateById(signature.getSigningCertificateId()); if (signingCertificate != null) { CertificateWrapper rootCertificate = diagnosticData.getUsedCertificateById(signingCertificate.getLastChainCertificateId());
private SignatureWrapper getSignatureByIdNullSafe(String id) { List<SignatureWrapper> signatures = getSignatures(); if (Utils.isCollectionNotEmpty(signatures)) { for (SignatureWrapper xmlSignature : signatures) { if (Utils.areStringsEqual(id, xmlSignature.getId())) { return xmlSignature; } } } return new SignatureWrapper(new XmlSignature()); // TODO improve ? }
@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()); } }
@Override protected boolean process() { return signature.getDateTime() != null; }
if (signature.isCounterSignature()) { currentContext = Context.COUNTER_SIGNATURE; List<TimestampWrapper> timestampsList = signature.getTimestampList(); if (Utils.isCollectionNotEmpty(timestampsList)) { Collections.sort(timestampsList, new TimestampComparator());
String signatureId = signature.getId(); XmlSignature xmlSignature = new XmlSignature(); xmlSignature.setId(signatureId); xmlSignature.setFilename(signature.getSignatureFilename());
@Override protected boolean process() { boolean result = true; List<XmlSignatureScope> signatureScopes = signature.getSignatureScopes(); for (XmlSignatureScope sigScope : signatureScopes) { result &= (SignatureScopeType.FULL == sigScope.getScope()); } return result; }
/** * This method returns the signature format for the given signature. * * @param signatureId * The identifier of the signature, for which the format is sought. * @return The signature format */ public String getSignatureFormat(final String signatureId) { SignatureWrapper signature = getSignatureByIdNullSafe(signatureId); return signature.getSignatureFormat(); }
/** * This method returns signatures (not countersignatures) * * @return a set of SignatureWrapper */ public Set<SignatureWrapper> getAllSignatures() { Set<SignatureWrapper> signatures = new HashSet<SignatureWrapper>(); List<SignatureWrapper> mixedSignatures = getSignatures(); for (SignatureWrapper signatureWrapper : mixedSignatures) { if (Utils.isStringEmpty(signatureWrapper.getParentId())) { signatures.add(signatureWrapper); } } return signatures; }
/** * This method returns the list of certificates in the chain of the main signature. * * @param signatureId * The identifier of the signature. * @return list of certificate's dss id for the given signature. */ public List<String> getSignatureCertificateChain(final String signatureId) { SignatureWrapper signature = getSignatureByIdNullSafe(signatureId); return signature.getCertificateChainIds(); }
private SignatureWrapper getFirstSignatureNullSafe() { List<SignatureWrapper> signatures = getSignatures(); if (Utils.isCollectionNotEmpty(signatures)) { return signatures.get(0); } return new SignatureWrapper(new XmlSignature()); // TODO improve ? }