/**
* 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 + "]";
}
}