/** * 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.handshake; import de.rub.nds.tlsattacker.modifiablevariable.ModifiableVariableFactory; import de.rub.nds.tlsattacker.modifiablevariable.ModifiableVariableProperty; import de.rub.nds.tlsattacker.modifiablevariable.biginteger.ModifiableBigInteger; import de.rub.nds.tlsattacker.modifiablevariable.bytearray.ModifiableByteArray; import de.rub.nds.tlsattacker.modifiablevariable.integer.ModifiableInteger; import de.rub.nds.tlsattacker.modifiablevariable.singlebyte.ModifiableByte; import de.rub.nds.tlsattacker.tls.constants.ConnectionEnd; import de.rub.nds.tlsattacker.tls.constants.HandshakeMessageType; import java.math.BigInteger; /** * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class ECDHClientKeyExchangeMessage extends ClientKeyExchangeMessage { /** * EC public key x coordinate */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableBigInteger publicKeyBaseX; /** * EC public key y coordinate */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableBigInteger publicKeyBaseY; /** * EC point format of the encoded EC point */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.TLS_CONSTANT) ModifiableByte ecPointFormat; /** * Encoded EC point (without EC point format) */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableByteArray ecPointEncoded; /** * Supported EC point formats (can be used to trigger compression) */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.TLS_CONSTANT) ModifiableByteArray supportedPointFormats; /** * Length of the serialized public key */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.LENGTH) ModifiableInteger publicKeyLength; public ECDHClientKeyExchangeMessage() { super(HandshakeMessageType.CLIENT_KEY_EXCHANGE); this.messageIssuer = ConnectionEnd.CLIENT; } public ECDHClientKeyExchangeMessage(ConnectionEnd messageIssuer) { super(HandshakeMessageType.CLIENT_KEY_EXCHANGE); this.messageIssuer = messageIssuer; } public ModifiableBigInteger getPublicKeyBaseX() { return publicKeyBaseX; } public void setPublicKeyBaseX(ModifiableBigInteger publicKeyBaseX) { this.publicKeyBaseX = publicKeyBaseX; } public void setPublicKeyBaseX(BigInteger ecPointBaseX) { this.publicKeyBaseX = ModifiableVariableFactory.safelySetValue(this.publicKeyBaseX, ecPointBaseX); } public ModifiableBigInteger getPublicKeyBaseY() { return publicKeyBaseY; } public void setPublicKeyBaseY(ModifiableBigInteger publicKeyBaseY) { this.publicKeyBaseY = publicKeyBaseY; } public void setPublicKeyBaseY(BigInteger ecPointBaseY) { this.publicKeyBaseY = ModifiableVariableFactory.safelySetValue(this.publicKeyBaseY, ecPointBaseY); } public ModifiableByte getEcPointFormat() { return ecPointFormat; } public void setEcPointFormat(ModifiableByte ecPointFormat) { this.ecPointFormat = ecPointFormat; } public void setEcPointFormat(Byte ecPointFormat) { this.ecPointFormat = ModifiableVariableFactory.safelySetValue(this.ecPointFormat, ecPointFormat); } public ModifiableByteArray getEcPointEncoded() { return ecPointEncoded; } public void setEcPointEncoded(ModifiableByteArray ecPointEncoded) { this.ecPointEncoded = ecPointEncoded; } public void setEcPointEncoded(byte[] ecPointEncoded) { this.ecPointEncoded = ModifiableVariableFactory.safelySetValue(this.ecPointEncoded, ecPointEncoded); } public ModifiableByteArray getSupportedPointFormats() { return supportedPointFormats; } public void setSupportedPointFormats(ModifiableByteArray supportedPointFormats) { this.supportedPointFormats = supportedPointFormats; } public void setSupportedPointFormats(byte[] supportedPointFormats) { this.supportedPointFormats = ModifiableVariableFactory.safelySetValue(this.supportedPointFormats, supportedPointFormats); } public ModifiableInteger getPublicKeyLength() { return publicKeyLength; } public void setPublicKeyLength(ModifiableInteger publicKeyLength) { this.publicKeyLength = publicKeyLength; } public void setPublicKeyLength(Integer publicKeyLength) { this.publicKeyLength = ModifiableVariableFactory.safelySetValue(this.publicKeyLength, publicKeyLength); } @Override public String toString() { StringBuilder sb = new StringBuilder(super.toString()); return sb.toString(); } }