Skip to content

Commit

Permalink
DD4J-501 Reverted changes concerning signature IDs and XML digital si…
Browse files Browse the repository at this point in the history
…gnature IDs, mapped old signature IDs and new DSS internal IDs so that through DD4J API everything related signature IDs looks the same as before, exposed new DSS internal IDs as signature unique ID
  • Loading branch information
rsarendus committed Nov 13, 2019
1 parent c30f1de commit d0ac4a0
Show file tree
Hide file tree
Showing 29 changed files with 166 additions and 184 deletions.
Expand Up @@ -149,11 +149,11 @@ public DetachedXadesSignatureBuilder withRoles(String... roles) {
/**
* Set signature ID.
*
* @param xmlDigitalSignatureId XML digital signature id.
* @param signatureId signature id.
* @return builder for creating a signature.
*/
public DetachedXadesSignatureBuilder withXmlDigitalSignatureId(String xmlDigitalSignatureId) {
signatureParameters.setXmlDigitalSignatureId(xmlDigitalSignatureId);
public DetachedXadesSignatureBuilder withSignatureId(String signatureId) {
signatureParameters.setSignatureId(signatureId);
return this;
}

Expand Down
6 changes: 3 additions & 3 deletions digidoc4j/src/main/java/org/digidoc4j/Signature.java
Expand Up @@ -43,11 +43,11 @@ public interface Signature extends Serializable {
String getId();

/**
* Returns XML digital signature id if present.
* Returns the identifier that uniquely identifies this signature.
*
* @return XML digital signature id.
* @return unique identifier
*/
String getXmlDigitalSignatureId();
String getUniqueId();

/**
* Returns the signature OCSP response nonce.
Expand Down
8 changes: 4 additions & 4 deletions digidoc4j/src/main/java/org/digidoc4j/SignatureBuilder.java
Expand Up @@ -48,7 +48,7 @@
* &nbsp;&nbsp; {@link SignatureBuilder#withSignatureDigestAlgorithm(DigestAlgorithm) withSignatureDigestAlgorithm(DigestAlgorithm.SHA256)}. // Digest algorithm is SHA-256 <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withSignatureProfile(SignatureProfile) withSignatureProfile(SignatureProfile.LT_TM)}. // Signature profile is Time-Mark <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withSigningCertificate(X509Certificate) withSigningCertificate(x509Certificate)}. <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withXmlDigitalSignatureId(String) withXmlDigitalSignatureId("1")}. <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withSignatureId(String) withSignatureId("1")}. <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withSignatureToken(SignatureToken) withSignatureToken(signatureToken)}. // Use signature token <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withEncryptionAlgorithm(EncryptionAlgorithm) withEncryptionAlgorithm(EncryptionAlgorithm.RSA)}. // Encryption algorithm is RSA <br/>
* &nbsp;&nbsp; {@link SignatureBuilder#withOwnSignaturePolicy(Policy) withOwnSignaturePolicy(policy)}. <br/>
Expand Down Expand Up @@ -293,11 +293,11 @@ public SignatureBuilder withSigningCertificate(X509Certificate certificate) {
/**
* Set signature ID.
*
* @param xmlDigitalSignatureId XML digital signature id.
* @param signatureId signature id.
* @return builder for creating a signature.
*/
public SignatureBuilder withXmlDigitalSignatureId(String xmlDigitalSignatureId) {
signatureParameters.setXmlDigitalSignatureId(xmlDigitalSignatureId);
public SignatureBuilder withSignatureId(String signatureId) {
signatureParameters.setSignatureId(signatureId);
return this;
}

Expand Down
22 changes: 11 additions & 11 deletions digidoc4j/src/main/java/org/digidoc4j/SignatureParameters.java
Expand Up @@ -31,7 +31,7 @@
* <ul>
* <li>Signature production place</li>
* <li>Roles of the signer</li>
* <li>XML digital signature id</li>
* <li>Signature id</li>
* <li>Digest algorithm</li>
* <li>Encryption algorithm</li>
* <li>Signature profile</li>
Expand All @@ -44,7 +44,7 @@ public class SignatureParameters implements Serializable {
private static final Logger logger = LoggerFactory.getLogger(SignatureParameters.class);
private SignatureProductionPlace productionPlace = new SignatureProductionPlace();
private List<String> roles = new ArrayList<>();
private String xmlDigitalSignatureId;
private String signatureId;
private DigestAlgorithm digestAlgorithm;
private EncryptionAlgorithm encryptionAlgorithm;
private SignatureProfile signatureProfile;
Expand Down Expand Up @@ -123,22 +123,22 @@ public void setRoles(List<String> roles) {
}

/**
* Set XML digital signature id.
* Set signature id.
*
* @param xmlDigitalSignatureId signature ID
* @param signatureId signature ID
*/
public void setXmlDigitalSignatureId(String xmlDigitalSignatureId) {
logger.debug("Set XML digital signature id to " + xmlDigitalSignatureId);
this.xmlDigitalSignatureId = xmlDigitalSignatureId;
public void setSignatureId(String signatureId) {
logger.debug("Set signature id to " + signatureId);
this.signatureId = signatureId;
}

/**
* Get XML digital signature id.
* Get signature id.
*
* @return xmlDigitalSignatureId signature ID
* @return signature ID
*/
public String getXmlDigitalSignatureId() {
return xmlDigitalSignatureId;
public String getSignatureId() {
return signatureId;
}

/**
Expand Down
Expand Up @@ -448,9 +448,6 @@ private void validateSignatureId(Signature signature) {
if (sig.getId() != null && sig.getId().equalsIgnoreCase(signature.getId())) {
throw new TechnicalException("Signature with Id \"" + signature.getId() + "\" already exists");
}
if (sig.getXmlDigitalSignatureId() != null && sig.getXmlDigitalSignatureId().equalsIgnoreCase(signature.getXmlDigitalSignatureId())) {
throw new TechnicalException("Signature with XML digital signature Id \"" + signature.getXmlDigitalSignatureId() + "\" already exists");
}
}
}

Expand Down
Expand Up @@ -12,7 +12,9 @@

import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -34,6 +36,7 @@ public class AsicContainerValidationResult extends AbstractSignatureValidationRe
ContainerValidationResult {

private List<DigiDoc4JException> containerErrors = new ArrayList<>();
private Map<String, String> signatureIdMap = Collections.emptyMap();
private AsicValidationReportBuilder validationReportBuilder;

@Override
Expand All @@ -42,6 +45,7 @@ public Indication getIndication(String signatureId) {
SimpleReport report = this.getSimpleReport();
return report != null ? report.getIndication(report.getFirstSignatureId()) : null;
}
signatureId = resolveSignatureId(signatureId);
SimpleReport report = this.getSimpleReportBySignatureId(signatureId);
return report != null ? report.getIndication(signatureId) : null;
}
Expand All @@ -52,6 +56,7 @@ public SubIndication getSubIndication(String signatureId) {
SimpleReport report = this.getSimpleReport();
return report != null ? report.getSubIndication(report.getFirstSignatureId()) : null;
}
signatureId = resolveSignatureId(signatureId);
SimpleReport report = this.getSimpleReportBySignatureId(signatureId);
return report != null ? report.getSubIndication(signatureId) : null;
}
Expand All @@ -62,6 +67,7 @@ public SignatureQualification getSignatureQualification(String signatureId) {
SimpleReport report = this.getSimpleReport();
return report != null ? report.getSignatureQualification(report.getFirstSignatureId()) : null;
}
signatureId = resolveSignatureId(signatureId);
SimpleReport report = this.getSimpleReportBySignatureId(signatureId);
return report != null ? report.getSignatureQualification(signatureId) : null;
}
Expand Down Expand Up @@ -107,6 +113,7 @@ private void buildResult() {
this.report = this.validationReportBuilder.buildXmlReport();
this.reports = this.validationReportBuilder.buildSignatureValidationReports();
this.simpleReports = this.validationReportBuilder.buildSignatureSimpleReports();
this.signatureIdMap = this.validationReportBuilder.buildSignatureIdMap();
}
}

Expand All @@ -126,6 +133,10 @@ private SimpleReport getSimpleReportBySignatureId(String signatureId) {
return null;
}

private String resolveSignatureId(String signatureId) {
return signatureIdMap.getOrDefault(signatureId, signatureId);
}

/*
* ACCESSORS
*/
Expand Down
Expand Up @@ -62,8 +62,8 @@ public String getId() {
}

@Override
public String getXmlDigitalSignatureId() {
return xadesSignature.getXmlDigitalSignatureId();
public String getUniqueId() {
return xadesSignature.getUniqueId();
}

@Override
Expand Down
Expand Up @@ -118,7 +118,7 @@ public byte[] getDataToBeSigned() {
validateDataFilesToSign(dataFiles);
byte[] dataToSign = facade.getDataToSign(dataFiles);
String signatureId = facade.getSignatureId();
signatureParameters.setXmlDigitalSignatureId(signatureId);
signatureParameters.setSignatureId(signatureId);
return dataToSign;
}

Expand Down Expand Up @@ -252,8 +252,8 @@ && isEmpty(signatureParameters.getCountry()))) {
}

private void setSignatureId() {
if (StringUtils.isNotBlank(signatureParameters.getXmlDigitalSignatureId())) {
facade.setSignatureId(signatureParameters.getXmlDigitalSignatureId());
if (StringUtils.isNotBlank(signatureParameters.getSignatureId())) {
facade.setSignatureId(signatureParameters.getSignatureId());
}
}

Expand Down
Expand Up @@ -34,6 +34,8 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* ASIC validation report builder
Expand Down Expand Up @@ -85,6 +87,14 @@ public List<eu.europa.esig.dss.simplereport.SimpleReport> buildSignatureSimpleRe
return signaturesReport;
}

public Map<String, String> buildSignatureIdMap() {
return signatureValidationData.stream().collect(Collectors.toMap(
SignatureValidationData::getSignatureId,
SignatureValidationData::getSignatureUniqueId,
(v1, v2) -> v1
));
}

/**
* Save DSS validation reports in given directory.
*
Expand Down
Expand Up @@ -61,12 +61,12 @@ public BesSignature(XadesValidationReportGenerator xadesReportGenerator) {

@Override
public String getId() {
return getDssSignature().getId();
return getDssSignature().getDAIdentifier();
}

@Override
public String getXmlDigitalSignatureId() {
return getDssSignature().getDAIdentifier();
public String getUniqueId() {
return getDssSignature().getId();
}

@Override
Expand Down
Expand Up @@ -30,18 +30,18 @@
public interface XadesSignature extends Serializable {

/**
* This method returns Dss signature id(string object).
* This method returns signature id(string object).
*
* @return dss signature id.
* @return signature id.
*/
String getId();

/**
* This method returns XML digital signature id, it can be null.
* This method returns the identifier that uniquely identifies this signature.
*
* @return XML digital signature id.
* @return unique identifier.
*/
String getXmlDigitalSignatureId();
String getUniqueId();

/**
* This method returns city name(string object), it can be empty.
Expand Down
Expand Up @@ -19,6 +19,7 @@ public class SignatureValidationData implements Serializable {

private ValidationResult validationResult;
private String signatureId;
private String signatureUniqueId;
private XadesValidationResult report;
private SignatureProfile signatureProfile;

Expand All @@ -38,6 +39,14 @@ public String getSignatureId() {
return signatureId;
}

public void setSignatureUniqueId(String signatureUniqueId) {
this.signatureUniqueId = signatureUniqueId;
}

public String getSignatureUniqueId() {
return signatureUniqueId;
}

public void setReport(XadesValidationResult report) {
this.report = report;
}
Expand Down
Expand Up @@ -37,6 +37,7 @@ public SignatureValidationData call() throws Exception {
SignatureValidationData validationData = new SignatureValidationData();
validationData.setValidationResult(validationResult);
validationData.setSignatureId(signature.getId());
validationData.setSignatureUniqueId(signature.getUniqueId());
validationData.setSignatureProfile(signature.getProfile());
if (signature.getClass() == BDocSignature.class) {
validationData.setReport(((BDocSignature) signature).getDssValidationReport());
Expand Down
Expand Up @@ -57,6 +57,7 @@ public class XadesSignatureValidator implements SignatureValidator {
private List<DigiDoc4JException> validationErrors = new ArrayList<>();
private List<DigiDoc4JException> validationWarnings = new ArrayList<>();
private String signatureId;
private String signatureUniqueId;
protected Configuration configuration;

/**
Expand All @@ -68,6 +69,7 @@ public class XadesSignatureValidator implements SignatureValidator {
public XadesSignatureValidator(XadesSignature signature, Configuration configuration) {
this.signature = signature;
this.signatureId = signature.getId();
this.signatureUniqueId = signature.getUniqueId();
this.configuration = configuration;
}

Expand Down Expand Up @@ -101,12 +103,12 @@ protected void populateValidationErrors() {
}

protected void addValidationError(DigiDoc4JException error) {
error.setSignatureId(this.getDssSignature().getId());
error.setSignatureId(this.signatureId);
this.validationErrors.add(error);
}

protected void addValidationWarning(DigiDoc4JException warning) {
warning.setSignatureId(this.getDssSignature().getId());
warning.setSignatureId(this.signatureId);
this.validationWarnings.add(warning);
}

Expand Down Expand Up @@ -187,7 +189,7 @@ private int findSignedPropertiesReferencesCount() {
private void addReportedErrors() {
LOGGER.debug("Extracting reported errors");
if (this.simpleReport != null) {
for (String errorMessage : this.simpleReport.getErrors(this.signatureId)) {
for (String errorMessage : this.simpleReport.getErrors(this.signatureUniqueId)) {
/*if (this.isRedundantErrorMessage(errorMessage)) {
LOGGER.debug("Ignoring redundant error message: " + errorMessage);
continue;
Expand All @@ -197,7 +199,7 @@ private void addReportedErrors() {
} else if (errorMessage.contains(MessageTag.PSV_IPSVC_ANS.getMessage())) {
this.addValidationError(new CertificateRevokedException(errorMessage));
} else {
this.addValidationError(new DigiDoc4JException(errorMessage, this.getDssSignature().getId()));
this.addValidationError(new DigiDoc4JException(errorMessage, this.signatureId));
}
}
}
Expand All @@ -213,7 +215,7 @@ private boolean isRedundantErrorMessage(String errorMessage) {

private void addReportedWarnings() {
if (this.simpleReport != null) {
for (String warning : this.simpleReport.getWarnings(this.signatureId)) {
for (String warning : this.simpleReport.getWarnings(this.signatureUniqueId)) {
this.validationWarnings.add(new DigiDoc4JException(warning, this.signatureId));
}
}
Expand All @@ -231,7 +233,7 @@ private boolean isTimestampValidForSignature() {
if (diagnosticData == null) {
return true;
}
List<String> timestampIdList = diagnosticData.getTimestampIdList(signatureId);
List<String> timestampIdList = diagnosticData.getTimestampIdList(signatureUniqueId);
if (CollectionUtils.isEmpty(timestampIdList)) {
return true;
}
Expand All @@ -241,7 +243,7 @@ private boolean isTimestampValidForSignature() {
}

private SimpleReport getSimpleReport(Map<String, SimpleReport> simpleReports) {
SimpleReport simpleRep = simpleReports.get(this.signatureId);
SimpleReport simpleRep = simpleReports.get(this.signatureUniqueId);
if (simpleRep != null && simpleReports.size() == 1) {
return simpleReports.values().iterator().next();
}
Expand Down
Expand Up @@ -87,7 +87,7 @@ public String getId() {
}

@Override
public String getXmlDigitalSignatureId() {
public String getUniqueId() {
return getId();
}

Expand Down

0 comments on commit d0ac4a0

Please sign in to comment.