/** * */ package at.knowcenter.wag.egov.egiz.sig.connectors.bku; import java.io.Serializable; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.security.auth.x500.X500Principal; import at.gv.egiz.pdfas.api.timestamp.TimeStamper; import at.knowcenter.wag.egov.egiz.sig.SignatureTypes; import at.knowcenter.wag.egov.egiz.sig.signatureobject.AdditionalSignatureInformation; import at.knowcenter.wag.egov.egiz.sig.signatureobject.AlgorithmSignatureInformation; import at.knowcenter.wag.egov.egiz.sig.signatureobject.ConnectorSignatureInformation; import at.knowcenter.wag.egov.egiz.sig.signatureobject.MandatorySignatureInformation; /** * @author wprinz * */ public class SignSignatureObject implements Serializable, MandatorySignatureInformation, ConnectorSignatureInformation, AlgorithmSignatureInformation, AdditionalSignatureInformation { /** * SVUID. */ private static final long serialVersionUID = -2689261480444802213L; public String date = null; public String issuer = null; public String signatureValue = null; public String id = null; public String kz = null; public String sigAlgorithm; public String sigTimeStamp; private final static Map OIDMAP; static { OIDMAP = new HashMap(); OIDMAP.put("2.5.4.4", "SN"); OIDMAP.put("2.5.4.5", "serialNumber"); OIDMAP.put("2.5.4.6", "C"); OIDMAP.put("2.5.4.7", "L"); OIDMAP.put("2.5.4.8", "ST"); OIDMAP.put("2.5.4.9", "STREET"); OIDMAP.put("2.5.4.10", "O"); OIDMAP.put("2.5.4.11", "OU"); OIDMAP.put("2.5.4.12", "T"); OIDMAP.put("2.5.4.42", "givenName"); OIDMAP.put("2.5.4.43", "initials"); OIDMAP.put("2.5.4.45", "uniqueIdentifier"); OIDMAP.put("2.5.4.65", "pseudonym"); } /** * This is used to transport the response properties to the Detached signator. */ public Properties response_properties = null; /** * The X509Certificate. * *

* This also provides the serial number and name. *

*/ public X509Certificate x509Certificate = null; // dferbas private Map subjectDNMap = new HashMap(); private Map issuerDNMap = new HashMap(); /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.MandatorySignatureInformation#getDate() */ public String getDate() { return this.date; } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.MandatorySignatureInformation#getIssuer() */ public String getIssuer() { return this.issuer; } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.MandatorySignatureInformation#getSerialNumber() */ public String getSerialNumber() { return this.x509Certificate.getSerialNumber().toString(); } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.MandatorySignatureInformation#getSignatureValue() */ public String getSignatureValue() { return this.signatureValue; } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.ConnectorSignatureInformation#getSigID() */ public String getSigID() { return this.id; } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.AlgorithmSignatureInformation#getSigKZ() */ public String getSigKZ() { return this.kz; } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.AdditionalSignatureInformation#getName() */ public String getName() { return this.x509Certificate.getSubjectDN().getName(); } /** * @see at.knowcenter.wag.egov.egiz.sig.signatureobject.AdditionalSignatureInformation#getX509Certificate() */ public X509Certificate getX509Certificate() { return this.x509Certificate; } public String getSigAlgorithm() { return this.sigAlgorithm; } public String retrieveStringValue(String sigKey) { // mandatory if (sigKey.equals(SignatureTypes.SIG_DATE)) { return getDate(); } if (sigKey.equals(SignatureTypes.SIG_VALUE)) { return getSignatureValue(); } if (sigKey.equals(SignatureTypes.SIG_ISSUER)) { return getIssuer(); } if (sigKey.equals(SignatureTypes.SIG_NUMBER)) { return getSerialNumber(); } // connector if (sigKey.equals(SignatureTypes.SIG_ID)) { return getSigID(); } // algorithm if (sigKey.equals(SignatureTypes.SIG_KZ)) { return getSigKZ(); } // additional if (sigKey.equals(SignatureTypes.SIG_NAME)) { return getName(); } if (sigKey.equals(SignatureTypes.SIG_ALG)) { return getSigAlgorithm(); } throw new RuntimeException("The key '" + sigKey + "' is not a recognized SignatorObject member."); //$NON-NLS-1$ //$NON-NLS-2$ } // dferbas public Map getSubjectDNMap() { if (this.subjectDNMap.size() == 0) { if (this.getX509Certificate() != null) { fillDNMap(this.getX509Certificate().getSubjectX500Principal().getName(X500Principal.RFC2253, OIDMAP), this.subjectDNMap); } } return this.subjectDNMap; } public String certSubjectDNPart(String key) { return (String)this.getSubjectDNMap().get(key); } /** * Get a timestamp if available as b64 string * @see TimeStamper * @return */ public String getSigTimeStamp() { return this.sigTimeStamp; } public Map getIssuerDNMap() { if (this.issuerDNMap.size() == 0) { if (this.getX509Certificate() != null) { fillDNMap(this.getX509Certificate().getIssuerX500Principal().getName(X500Principal.RFC2253, OIDMAP), this.issuerDNMap); } } return this.issuerDNMap; } public String certIssuerDNPart(String key) { if (this.issuerDNMap.size() == 0) { if (this.getX509Certificate() != null) { fillDNMap(this.getX509Certificate().getIssuerX500Principal().getName(X500Principal.RFC2253, OIDMAP), this.issuerDNMap); } } return (String)this.getIssuerDNMap().get(key); } private void fillDNMap(String dn, Map dnMap) { String[] arr = dn.split("\\s*(,|;)\\s*"); for (int i = 0; i < arr.length; i++) { String[] entry = arr[i].split("\\s*(=)\\s*"); dnMap.put(entry[0], entry[1]); } } }