/** * 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.tls.constants.ConnectionEnd; import de.rub.nds.tlsattacker.tls.constants.HandshakeMessageType; import java.math.BigInteger; /** * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class DHClientKeyExchangeMessage extends ClientKeyExchangeMessage { /** * DH modulus */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableBigInteger p; /** * DH generator */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableBigInteger g; /** * server's public key */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableBigInteger y; /** * client's private key */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PRIVATE_KEY) ModifiableBigInteger x; /** * Length of the serialized public key */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.LENGTH) ModifiableInteger serializedPublicKeyLength; /** * serialized public key */ @ModifiableVariableProperty(type = ModifiableVariableProperty.Type.PUBLIC_KEY) ModifiableByteArray serializedPublicKey; public DHClientKeyExchangeMessage() { super(HandshakeMessageType.CLIENT_KEY_EXCHANGE); this.messageIssuer = ConnectionEnd.CLIENT; } public DHClientKeyExchangeMessage(ConnectionEnd messageIssuer) { super(HandshakeMessageType.CLIENT_KEY_EXCHANGE); this.messageIssuer = messageIssuer; } public ModifiableBigInteger getP() { return p; } public void setP(ModifiableBigInteger p) { this.p = p; } public void setP(BigInteger p) { this.p = ModifiableVariableFactory.safelySetValue(this.p, p); } public ModifiableBigInteger getG() { return g; } public void setG(ModifiableBigInteger g) { this.g = g; } public void setG(BigInteger g) { this.g = ModifiableVariableFactory.safelySetValue(this.g, g); } public ModifiableBigInteger getY() { return y; } public void setY(ModifiableBigInteger y) { this.y = y; } public void setY(BigInteger y) { this.y = ModifiableVariableFactory.safelySetValue(this.y, y); } public ModifiableBigInteger getX() { return x; } public void setX(ModifiableBigInteger x) { this.x = x; } public void setX(BigInteger x) { this.x = ModifiableVariableFactory.safelySetValue(this.x, x); } public ModifiableInteger getSerializedPublicKeyLength() { return serializedPublicKeyLength; } public void setSerializedPublicKeyLength(ModifiableInteger serializedPublicKeyLength) { this.serializedPublicKeyLength = serializedPublicKeyLength; } public void setSerializedPublicKeyLength(Integer publicKeyLength) { this.serializedPublicKeyLength = ModifiableVariableFactory.safelySetValue(this.serializedPublicKeyLength, publicKeyLength); } public ModifiableByteArray getSerializedPublicKey() { return serializedPublicKey; } public void setSerializedPublicKey(ModifiableByteArray serializedPublicKey) { this.serializedPublicKey = serializedPublicKey; } public void setSerializedPublicKey(byte[] serializedPublicKey) { this.serializedPublicKey = ModifiableVariableFactory.safelySetValue(this.serializedPublicKey, serializedPublicKey); } @Override public String toString() { StringBuilder sb = new StringBuilder(super.toString()); sb.append("\n Y (client's public key): ").append(y.getValue().toString(16)); return sb.toString(); } }