de.rub.nds.tlsattacker.dtls.workflow.Dtls12WorkflowExecutorTest.java Source code

Java tutorial

Introduction

Here is the source code for de.rub.nds.tlsattacker.dtls.workflow.Dtls12WorkflowExecutorTest.java

Source

/**
 * TLS-Attacker - A Modular Penetration Testing Framework for TLS.
 *
 * Copyright (C) 2015 Chair for Network and Data Security,
 *                    Ruhr University Bochum
 *                    (juraj.somorovsky@rub.de)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.rub.nds.tlsattacker.dtls.workflow;

import de.rub.nds.tlsattacker.tls.config.ClientCommandConfig;
import de.rub.nds.tlsattacker.tls.config.ClientConfigHandler;
import de.rub.nds.tlsattacker.tls.constants.ConnectionEnd;
import de.rub.nds.tlsattacker.tls.constants.ProtocolVersion;
import de.rub.nds.tlsattacker.tls.workflow.TlsContext;
import de.rub.nds.tlsattacker.tls.workflow.WorkflowConfigurationFactory;
import de.rub.nds.tlsattacker.transport.TransportHandlerType;
import de.rub.nds.tlsattacker.transport.UDPTransportHandler;
import de.rub.nds.tlsattacker.util.ArrayConverter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import static org.junit.Assert.fail;
import org.junit.Test;

/**
 * @author Florian Pftzenreuter <florian.pfuetzenreuter@rub.de>
 */
public class Dtls12WorkflowExecutorTest {

    public Dtls12WorkflowExecutorTest() {
        Security.removeProvider("SunPKCS11-NSS");
        Security.addProvider(new BouncyCastleProvider());
    }

    @Test
    public void testExecuteWorkflow() {
        boolean enableTest = false;

        if (enableTest) {
            try {
                ClientCommandConfig config = new ClientCommandConfig();
                ClientConfigHandler configHandler = new ClientConfigHandler();

                config.setProtocolVersion(ProtocolVersion.DTLS12);
                config.setConnect("127.0.0.1:4444");
                config.setTransportHandlerType(TransportHandlerType.UDP);

                UDPTransportHandler th = (UDPTransportHandler) configHandler.initializeTransportHandler(config);

                DatagramSocket sender = new DatagramSocket(4444, InetAddress.getByName("127.0.0.1"));
                sender.connect(th.getLocalAddress(), th.getLocalPort());

                byte[] data = ArrayConverter
                        .hexStringToByteArray("16fefd00000000000000000023030000170000000000000017feff14d87dc7"
                                + "bc151b53b31202cd1eab5f4b0d0374418e");
                DatagramPacket packet = new DatagramPacket(data, data.length);
                sender.send(packet);

                data = ArrayConverter.hexStringToByteArray(
                        "16fefd00000000000000010052020000460001000000000046fefd1e8caa7c1662161"
                                + "5c4ce30d3e399731fc55e68b9c2df5c244c5b95d0f83ecde620f54dd179b13e3f87cd9ea53045c48350e813bd9a2ffb3e5ed8b"
                                + "52206862f3720002f0016fefd000000000000000200780b000228000200000000006c0002250002223082021e3082018702045"
                                + "07c6eae300d06092a864886f70d01010505003056310b3009060355040613024445310c300a06035504080c034e5257310f300"
                                + "d06035504070c06426f6368756d310c300a060355040a0c03484749310c300a060355040b0c035255");
                packet = new DatagramPacket(data, data.length);
                sender.send(packet);

                data = ArrayConverter.hexStringToByteArray(
                        "16fefd000000000000000300d70b000228000200006c0000cb42310c300a060355040"
                                + "30c03525542301e170d3132313031353230313433385a170d3133313031353230313433385a3056310b3009060355040613024"
                                + "445310c300a06035504080c034e5257310f300d06035504070c06426f6368756d310c300a060355040a0c03484749310c300a0"
                                + "60355040b0c03525542310c300a06035504030c0352554230819f300d06092a864886f70d010101050003818d0030818902818"
                                + "10080c29bd12a9891a5824f4afa757c1bf072bcfbfdfa0f55e3522fbb510bd2699ada4d7882ddf950");
                packet = new DatagramPacket(data, data.length);
                sender.send(packet);

                data = ArrayConverter.hexStringToByteArray(
                        "16fefd000000000000000400d70b00022800020001370000cb328e52b31557de86237"
                                + "4d0ef7f7a2d5be57744f5dd99f25e50a785910cd588b764c600e6bc1379e815f5e25e903586c61011b3b4102ade60ce582218f"
                                + "6eb479fc671130622c21011f7f6d19f7bba2c9472578e14ca65884af30203010001300d06092a864886f70d010105050003818"
                                + "1003f9818b16ea3b2bb6dc959f127548c33bfb5edd559215530f1da4eaf461aae8201b95bcc70aa9fbc6ba5a24b2f38c135c4a"
                                + "4bf611ee340f3a2fb02b5f9df53dca8e0a39678b67104ac3fc0c2bc24343cc0f2832c2a4864b0c96d");
                packet = new DatagramPacket(data, data.length);
                sender.send(packet);

                data = ArrayConverter.hexStringToByteArray(
                        "16fefd000000000000000500320b0002280002000202000026f56c3151827a47f5853"
                                + "8b409d911824300bb8c1c2f2299b7830318f90ec226d2e70ce28da95416fefd0000000000000006000c0e00000000030000000"
                                + "00000");
                packet = new DatagramPacket(data, data.length);
                sender.send(packet);

                TlsContext context = WorkflowConfigurationFactory.createInstance(config).createFullTlsContext();
                context.setMyConnectionEnd(ConnectionEnd.CLIENT);
                Dtls12WorkflowExecutor workflowExecutor = new Dtls12WorkflowExecutor(th, context);
                workflowExecutor.executeWorkflow();

                sender.close();
            } catch (Exception e) {
                fail(e.getMessage());
            }
        }
    }
}