package at.gv.egiz.pdfas.algorithmSuite; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Defines a used algorithm suite. Contains a {@link #signatureMethod} a * {@link #dataDigestMethod} a {@link #propertiesDigestMethod} and a * {@link #certDigestMethod}.
* * This structured object is representing a string like * ecdsa-sha256:sha256:sha256:ripemd160
* meaning * signatureMethod:dataDigestMethod:propertiesDigestMethod:certDigestMethod * * @author dferbas * */ public class AlgorithmSuiteObject { private static Log log = LogFactory.getLog(AlgorithmSuiteObject.class); private String signatureMethod; private String dataDigestMethod; private String propertiesDigestMethod; private String certDigestMethod; /** * Create emtpy algorithm suite object */ public AlgorithmSuiteObject() { } /** * Create object from parameter string like * etsi-moc-1.2:ecdsa-sha1:ripemd160@207c44ff * Prefix included * * @param parameterString */ public AlgorithmSuiteObject(String parameterString) { parseFrom(parameterString, true); } /** * Create object from parameter string like
* etsi-moc-1.2:ecdsa-sha1:ripemd160@207c44ff hasPrefix=true
* ecdsa-sha1:ripemd160@207c44ff hasPrefix=false * * * @param parameterString * @param hasPrefix parse with/without prefix (e.g. etsi-moc-1.2) */ public AlgorithmSuiteObject(String parameterString, boolean hasPrefix) { parseFrom(parameterString, hasPrefix); } /** * Initializes object from parameter string like * etsi-moc-1.2:ecdsa-sha1:ripemd160@207c44ff hasPrefix=true
* ecdsa-sha1:ripemd160@207c44ff hasPrefix=false * * @param parameterString * @param hasPrefix parse with/without prefix (e.g. etsi-moc-1.2) */ public void parseFrom(String parameterString, boolean hasPrefix) { log.debug("parsing algorithmSuite from " + parameterString); if (parameterString != null) { parameterString = parameterString.split("@")[0]; if (!hasPrefix) { parameterString = "bla:" + parameterString; // fake prefix } String[] arr = parameterString.split(":"); if (arr.length > 1) { this.signatureMethod = arr[1]; this.dataDigestMethod = this.propertiesDigestMethod = this.certDigestMethod = AlgorithmMapper .getHashAbbrFromSuite(arr[1]); if (arr.length > 2) { this.dataDigestMethod = this.propertiesDigestMethod = this.certDigestMethod = arr[2]; } if (arr.length > 3) { this.propertiesDigestMethod = this.certDigestMethod = arr[3]; } if (arr.length > 4) { this.certDigestMethod = arr[4]; } log.debug("successfully parsed to: " + this.toString()); } } } /** * Returns if algorithm object is valid specified (values are available) * * @return */ public boolean isSpecified() { return this.signatureMethod != null; } /** * Signature method abbreviation. E.g. rsa-sha1, ecdsa-sha256 * * @return */ public String getSignatureMethod() { return this.signatureMethod; } /** * Digest method for data (document). E.g. sha1, md5 * * @return */ public String getDataDigestMethod() { return this.dataDigestMethod; } /** * Digest method for properties. E.g. sha1, md5 * * @return */ public String getPropertiesDigestMethod() { return this.propertiesDigestMethod; } /** * Digest method for certificate digest. E.g. sha1, md5 * * @return */ public String getCertDigestMethod() { return this.certDigestMethod; } public void setSignatureMethod(String signatureMethod) { this.signatureMethod = signatureMethod; } public void setDataDigestMethod(String dataDigestMethod) { this.dataDigestMethod = dataDigestMethod; } public void setPropertiesDigestMethod(String propertiesDigestMethod) { this.propertiesDigestMethod = propertiesDigestMethod; } public void setCertDigestMethod(String certDigestMethod) { this.certDigestMethod = certDigestMethod; } public String toString() { return "AlgorithmSuiteObject [certDigestMethod=" + this.certDigestMethod + ", dataDigestMethod=" + this.dataDigestMethod + ", propertiesDigestMethod=" + this.propertiesDigestMethod + ", signatureMethod=" + this.signatureMethod + "]"; } }