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