/** * 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.ECDHClientKeyExchangeHandler; import de.rub.nds.tlsattacker.tls.protocol.handshake.ECDHEServerKeyExchangeHandler; 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 static de.rub.nds.tlsattacker.tls.protocol.handshake.ECDHEServerKeyExchangeHandlerTest.testServerKeyExchangeECDSA; import de.rub.nds.tlsattacker.tls.protocol.handshake.ECDHClientKeyExchangeMessage; import de.rub.nds.tlsattacker.tls.workflow.TlsContext; import de.rub.nds.tlsattacker.util.ArrayConverter; import java.math.BigInteger; import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.*; /** * * @author Juraj Somorovsky <juraj.somorovsky@rub.de> */ public class ECDHClientKeyExchangeHandlerTest { BigInteger testBaseX = new BigInteger( "33c4c75900f942cd601a447b760b4bad525aaee2d085436be599d07b7a01875d1c160981fabd4ad387e5cb81927be6b0b9ef5f8e8" + "48c574abc273026b422de325eeb142b575f1fa", 16); BigInteger testBaseY = new BigInteger( "2685a47e3b85fef3928fd544e3ba990f05f6fc71a36c0ec4833b8cda466b63a959900ade937a8c832342407acce32a4e2d1c37f63" + "835a31dc29ff8cf4f5720bb5e33e3e8a22cba6", 16); ECDHClientKeyExchangeHandler handler; ECDHEServerKeyExchangeHandler skeHandler; public ECDHClientKeyExchangeHandlerTest() { TlsContext context = new TlsContext(); context.setSelectedCipherSuite(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA); context.setProtocolVersion(ProtocolVersion.TLS12); handler = new ECDHClientKeyExchangeHandler(context); // initialize tls context with ec parameters skeHandler = new ECDHEServerKeyExchangeHandler(context); byte[] serverKeyExchangeBytes = testServerKeyExchangeECDSA; skeHandler.initializeProtocolMessage(); skeHandler.parseMessageAction(serverKeyExchangeBytes, 0); } /** * Test of prepareMessageAction method, of class * ECDHClientKeyExchangeHandler. */ @Test public void testPrepareMessage() { handler.initializeProtocolMessage(); ECDHClientKeyExchangeMessage message = (ECDHClientKeyExchangeMessage) handler.getProtocolMessage(); ModifiableBigInteger mvx = new ModifiableBigInteger(); mvx.setModification(BigIntegerModificationFactory.explicitValue(testBaseX)); message.setPublicKeyBaseX(mvx); ModifiableBigInteger mvy = new ModifiableBigInteger(); mvy.setModification(BigIntegerModificationFactory.explicitValue(testBaseY)); message.setPublicKeyBaseY(mvy); byte[] result = handler.prepareMessageAction(); assertEquals("Message type must be ClientKeyExchange", HandshakeMessageType.CLIENT_KEY_EXCHANGE, message.getHandshakeMessageType()); byte[] points = ArrayConverter.concatenate(testBaseX.toByteArray(), testBaseY.toByteArray()); byte[] expected = ArrayConverter.concatenate(new byte[] { 0x10, 0x00, 0x00, (byte) 0x92, (byte) (points.length + 1), 0x04 }, points); Assert.assertArrayEquals(expected, result); } }