/**
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
*
* Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH
*
* Licensed under Apache License 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*/
package de.rub.nds.tlsattacker.tls.constants;
import de.rub.nds.tlsattacker.tls.exceptions.ConfigurationException;
import de.rub.nds.tlsattacker.util.ArrayConverter;
import java.io.Serializable;
/**
* Construction of a hash and signature algorithm.
*
* Very confusing, consists of two bytes, the first is hash algorithm:
* {HashAlgorithm, SignatureAlgorithm}
*
* @author Juraj Somorovsky <juraj.somorovsky@rub.de>
*/
public class SignatureAndHashAlgorithm implements Serializable {
private SignatureAlgorithm signatureAlgorithm;
private HashAlgorithm hashAlgorithm;
public SignatureAndHashAlgorithm() {
}
public SignatureAndHashAlgorithm(byte[] value) {
if (value == null || value.length != 2) {
throw new ConfigurationException("SignatureAndHashAlgorithm always consists of two bytes, but found "
+ ArrayConverter.bytesToHexString(value));
}
hashAlgorithm = HashAlgorithm.getHashAlgorithm(value[0]);
signatureAlgorithm = SignatureAlgorithm.getSignatureAlgorithm(value[1]);
}
public SignatureAndHashAlgorithm(SignatureAlgorithm sigAlgorithm, HashAlgorithm hashAlgorithm) {
this.signatureAlgorithm = sigAlgorithm;
this.hashAlgorithm = hashAlgorithm;
}
public static SignatureAndHashAlgorithm getSignatureAndHashAlgorithm(byte[] value) {
return new SignatureAndHashAlgorithm(value);
}
public byte[] getByteValue() {
return new byte[] { hashAlgorithm.getValue(), signatureAlgorithm.getValue() };
}
public SignatureAlgorithm getSignatureAlgorithm() {
return signatureAlgorithm;
}
public void setSignatureAlgorithm(SignatureAlgorithm signatureAlgorithm) {
this.signatureAlgorithm = signatureAlgorithm;
}
public HashAlgorithm getHashAlgorithm() {
return hashAlgorithm;
}
public void setHashAlgorithm(HashAlgorithm hashAlgorithm) {
this.hashAlgorithm = hashAlgorithm;
}
public String getJavaName() {
String hashAlgorithmName = hashAlgorithm.getJavaName().replace("-", "");
String signatureAlgorithmName = signatureAlgorithm.getJavaName();
return hashAlgorithmName + "with" + signatureAlgorithmName;
}
public static SignatureAndHashAlgorithm[] values() {
int size = SignatureAlgorithm.values().length * HashAlgorithm.values().length;
SignatureAndHashAlgorithm[] result = new SignatureAndHashAlgorithm[size];
int pos = 0;
for(SignatureAlgorithm sa : SignatureAlgorithm.values()) {
for (HashAlgorithm ha : HashAlgorithm.values()) {
result[pos] = new SignatureAndHashAlgorithm(sa, ha);
pos++;
}
}
return result;
}
@Override
public String toString() {
return signatureAlgorithm + "-" + hashAlgorithm;
}
}