/**
* 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.protocol.extension;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;
import de.rub.nds.tlsattacker.modifiablevariable.ModifiableVariableFactory;
import de.rub.nds.tlsattacker.modifiablevariable.ModifiableVariableProperty;
import de.rub.nds.tlsattacker.modifiablevariable.bytearray.ModifiableByteArray;
import de.rub.nds.tlsattacker.modifiablevariable.integer.ModifiableInteger;
import de.rub.nds.tlsattacker.tls.constants.ExtensionType;
import de.rub.nds.tlsattacker.tls.protocol.ModifiableVariableHolder;
import de.rub.nds.tlsattacker.util.ArrayConverter;
/**
* @author Juraj Somorovsky <juraj.somorovsky@rub.de>
*/
@XmlRootElement
public abstract class ExtensionMessage extends ModifiableVariableHolder implements Serializable {
ExtensionType extensionTypeConstant;
@ModifiableVariableProperty(type = ModifiableVariableProperty.Type.TLS_CONSTANT)
ModifiableByteArray extensionType;
@ModifiableVariableProperty(type = ModifiableVariableProperty.Type.LENGTH)
ModifiableInteger extensionLength;
@ModifiableVariableProperty
ModifiableByteArray extensionBytes;
public ModifiableByteArray getExtensionType() {
return extensionType;
}
public ModifiableInteger getExtensionLength() {
return extensionLength;
}
public ModifiableByteArray getExtensionBytes() {
return extensionBytes;
}
public void setExtensionType(byte[] array) {
this.extensionType = ModifiableVariableFactory.safelySetValue(extensionType, array);
}
public void setExtensionLength(int length) {
this.extensionLength = ModifiableVariableFactory.safelySetValue(extensionLength, length);
}
public void setExtensionBytes(byte[] data) {
this.extensionBytes = ModifiableVariableFactory.safelySetValue(extensionBytes, data);
}
public void setExtensionType(ModifiableByteArray extensionType) {
this.extensionType = extensionType;
}
public void setExtensionLength(ModifiableInteger extensionLength) {
this.extensionLength = extensionLength;
}
public void setExtensionBytes(ModifiableByteArray extensionBytes) {
this.extensionBytes = extensionBytes;
}
public ExtensionType getExtensionTypeConstant() {
return extensionTypeConstant;
}
public abstract ExtensionHandler<? extends ExtensionMessage> getExtensionHandler();
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("\n Extension type: ").append(ArrayConverter.bytesToHexString(extensionType.getValue()))
.append("\n Extension length: ").append(extensionLength.getValue());
return sb.toString();
}
}