org.bouncycastle.crypto.tls.test.TlsServerTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-jdk14 Show documentation
Show all versions of bcprov-jdk14 Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.4.
package org.bouncycastle.crypto.tls.test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.SecureRandom;
import org.bouncycastle.crypto.tls.TlsServerProtocol;
import org.bouncycastle.util.io.Streams;
import org.bouncycastle.util.io.TeeOutputStream;
/**
* A simple test designed to conduct a TLS handshake with an external TLS client.
*
* Please refer to GnuTLSSetup.txt or OpenSSLSetup.txt, and x509-*.pem files in this package for
* help configuring an external TLS client.
*/
public class TlsServerTest
{
private static final SecureRandom secureRandom = new SecureRandom();
public static void main(String[] args)
throws Exception
{
InetAddress address = InetAddress.getLocalHost();
int port = 5556;
ServerSocket ss = new ServerSocket(port, 16, address);
while (true)
{
Socket s = ss.accept();
System.out.println("--------------------------------------------------------------------------------");
System.out.println("Accepted " + s);
ServerThread t = new ServerThread(s);
t.start();
}
}
static class ServerThread
extends Thread
{
private final Socket s;
ServerThread(Socket s)
{
this.s = s;
}
public void run()
{
try
{
MockTlsServer server = new MockTlsServer();
TlsServerProtocol serverProtocol = new TlsServerProtocol(s.getInputStream(), s.getOutputStream(), secureRandom);
serverProtocol.accept(server);
OutputStream log = new TeeOutputStream(serverProtocol.getOutputStream(), System.out);
Streams.pipeAll(serverProtocol.getInputStream(), log);
serverProtocol.close();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
finally
{
try
{
s.close();
}
catch (IOException e)
{
}
finally
{
}
}
}
}
}