/**
* 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.tls.protocol.handshake.DHClientKeyExchangeHandler;
import de.rub.nds.tlsattacker.tls.protocol.handshake.DHEServerKeyExchangeHandler;
import de.rub.nds.tlsattacker.modifiablevariable.biginteger.BigIntegerModificationFactory;
import de.rub.nds.tlsattacker.modifiablevariable.biginteger.ModifiableBigInteger;
import de.rub.nds.tlsattacker.tls.constants.ProtocolVersion;
import de.rub.nds.tlsattacker.tls.constants.CipherSuite;
import de.rub.nds.tlsattacker.tls.constants.HandshakeMessageType;
import de.rub.nds.tlsattacker.tls.protocol.handshake.DHClientKeyExchangeMessage;
import de.rub.nds.tlsattacker.tls.workflow.TlsContext;
import de.rub.nds.tlsattacker.util.ArrayConverter;
import java.math.BigInteger;
import org.bouncycastle.util.BigIntegers;
import org.junit.Assert;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Juraj Somorovsky <juraj.somorovsky@rub.de>
* @author Philip Riese <philip.riese@rub.de>
*/
public class DHClientKeyExchangeHandlerTest {
static BigInteger publicKey = new BigInteger(
"6b7123248ca29efc8baea75d4f4321f58c072281e9f8217ae19750b5000714b24aa603ed61eb"
+ "2c6d4a047922a0ba48dcfc57552ad137a39c1078e92a2da74b19", 16);
DHClientKeyExchangeHandler handler;
DHEServerKeyExchangeHandler skeHandler;
public DHClientKeyExchangeHandlerTest() {
TlsContext context = new TlsContext();
context.setSelectedCipherSuite(CipherSuite.TLS_DHE_DSS_WITH_AES_128_CBC_SHA);
context.setProtocolVersion(ProtocolVersion.TLS12);
handler = new DHClientKeyExchangeHandler(context);
// initialize tls context with dh parameters
skeHandler = new DHEServerKeyExchangeHandler(context);
byte[] serverKeyExchangeBytes = DHEServerKeyExchangeHandlerTest.testServerKeyExchangeDSA;
skeHandler.initializeProtocolMessage();
skeHandler.parseMessageAction(serverKeyExchangeBytes, 0);
}
/**
* Test of prepareMessageAction method, of class
* ECDHClientKeyExchangeHandler.
*/
@Test
public void testPrepareMessage() {
handler.initializeProtocolMessage();
DHClientKeyExchangeMessage message = (DHClientKeyExchangeMessage) handler.getProtocolMessage();
ModifiableBigInteger y = new ModifiableBigInteger();
y.setModification(BigIntegerModificationFactory.explicitValue(publicKey));
message.setY(y);
byte[] result = handler.prepareMessageAction();
assertEquals("Message type must be ClientKeyExchange", HandshakeMessageType.CLIENT_KEY_EXCHANGE,
message.getHandshakeMessageType());
byte[] serializedPublicKey = BigIntegers.asUnsignedByteArray(publicKey);
byte[] expected = ArrayConverter.concatenate(new byte[] { 0x10, 0x00, 0x00, (byte) 0x42, 0x00, (byte) 0x40 },
serializedPublicKey);
Assert.assertArrayEquals(expected, result);
}
/**
* Test of parseMessageAction method, of class DHClientKeyExchangeHandler.
*/
@Test
public void testParseMessage() {
// todo
}
}