/** * Copyright 2006 by Know-Center, Graz, Austria * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a * joint initiative of the Federal Chancellery Austria and Graz University of * Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ 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 + "]"; } }