/* DigiDoc4J library * * This software is released under either the GNU Library General Public * License (see LICENSE.LGPL). * * Note that the only valid version of the LGPL license as far as this * project is concerned is the original GNU Library General Public License * Version 2.1, February 1999 */ package org.digidoc4j; import org.apache.commons.io.IOUtils; import org.digidoc4j.exceptions.DigiDoc4JException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; /** * Signature parameters. Parameter information is used when signing a document. Following items can be specified: * <ul> * <li>Signature production place</li> * <li>Roles of the signer</li> * <li>Signature id</li> * <li>Digest algorithm</li> * </ul> */ public class SignatureParameters implements Serializable { private final static Logger logger = LoggerFactory.getLogger(SignatureParameters.class); private SignatureProductionPlace productionPlace = new SignatureProductionPlace(); private List<String> roles = new ArrayList<>(); private String signatureId; private DigestAlgorithm digestAlgorithm; private EncryptionAlgorithm encryptionAlgorithm; private SignatureProfile signatureProfile; private X509Certificate signingCertificate; /** * Get production place values. * * @return production place * @deprecated */ public SignatureProductionPlace getProductionPlace() { return productionPlace; } public String getCity() { return productionPlace.getCity(); } public void setCity(String city) { productionPlace.setCity(city); } public String getStateOrProvince() { return productionPlace.getStateOrProvince(); } public void setStateOrProvince(String stateOrProvince) { productionPlace.setStateOrProvince(stateOrProvince); } public String getPostalCode() { return productionPlace.getPostalCode(); } public void setPostalCode(String postalCode) { productionPlace.setPostalCode(postalCode); } public String getCountry() { return productionPlace.getCountry(); } public void setCountry(String country) { productionPlace.setCountry(country); } /** * Get signing roles. * * @return signing roles */ public List<String> getRoles() { return roles; } /** * Set the production place. * * @param productionPlace production place * @deprecated */ public void setProductionPlace(SignatureProductionPlace productionPlace) { this.productionPlace = productionPlace; } /** * Set signing roles. * * @param roles signing roles */ public void setRoles(List<String> roles) { this.roles = roles; } /** * Set signature id. * * @param signatureId signature ID */ public void setSignatureId(String signatureId) { logger.debug("Set signature id to " + signatureId); this.signatureId = signatureId; } /** * Get signature id. * * @return signatureId signature ID */ public String getSignatureId() { return signatureId; } /** * Sets container digest type * * @param algorithm digest algorithm */ public void setDigestAlgorithm(DigestAlgorithm algorithm) { digestAlgorithm = algorithm; } /** * Gets container digest type * * @return container digest algorithm */ public DigestAlgorithm getDigestAlgorithm() { return digestAlgorithm; } /** * Get the encryption algorithm * * @return encryption algorithm */ public EncryptionAlgorithm getEncryptionAlgorithm() { return encryptionAlgorithm; } /** * Set the encryption algorithm * * @param encryptionAlgorithm encryption algorithm to use */ public void setEncryptionAlgorithm(EncryptionAlgorithm encryptionAlgorithm) { this.encryptionAlgorithm = encryptionAlgorithm; } public SignatureProfile getSignatureProfile() { return signatureProfile; } public void setSignatureProfile(SignatureProfile signatureProfile) { this.signatureProfile = signatureProfile; } public void setSigningCertificate(X509Certificate signingCertificate) { this.signingCertificate = signingCertificate; } public X509Certificate getSigningCertificate() { return signingCertificate; } /** * Clones signature parameters * * @return new signature parameters object */ public SignatureParameters copy() { logger.debug(""); ObjectOutputStream oos = null; ObjectInputStream ois = null; SignatureParameters copySignatureParameters = null; // deep copy ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { oos = new ObjectOutputStream(bos); oos.writeObject(this); oos.flush(); ByteArrayInputStream bin = new ByteArrayInputStream(bos.toByteArray()); ois = new ObjectInputStream(bin); copySignatureParameters = (SignatureParameters) ois.readObject(); } catch (Exception e) { logger.error(e.getMessage()); throw new DigiDoc4JException(e); } finally { IOUtils.closeQuietly(oos); IOUtils.closeQuietly(ois); IOUtils.closeQuietly(bos); } return copySignatureParameters; } }