aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java')
-rw-r--r--libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java222
1 files changed, 0 insertions, 222 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java
deleted file mode 100644
index 7c91a2c4c..000000000
--- a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/tls/test/TlsClientTest.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package org.spongycastle.crypto.tls.test;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.security.SecureRandom;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.spongycastle.asn1.x509.Certificate;
-import org.spongycastle.crypto.tls.AlertLevel;
-import org.spongycastle.crypto.tls.CertificateRequest;
-import org.spongycastle.crypto.tls.CipherSuite;
-import org.spongycastle.crypto.tls.ClientCertificateType;
-import org.spongycastle.crypto.tls.DefaultTlsClient;
-import org.spongycastle.crypto.tls.MaxFragmentLength;
-import org.spongycastle.crypto.tls.ProtocolVersion;
-import org.spongycastle.crypto.tls.SignatureAlgorithm;
-import org.spongycastle.crypto.tls.SignatureAndHashAlgorithm;
-import org.spongycastle.crypto.tls.TlsAuthentication;
-import org.spongycastle.crypto.tls.TlsClient;
-import org.spongycastle.crypto.tls.TlsClientProtocol;
-import org.spongycastle.crypto.tls.TlsCredentials;
-import org.spongycastle.crypto.tls.TlsExtensionsUtils;
-import org.spongycastle.crypto.tls.TlsSession;
-import org.spongycastle.util.Arrays;
-import org.spongycastle.util.encoders.Hex;
-
-/**
- * A simple test designed to conduct a TLS handshake with an external TLS server.
- * <p/>
- * Please refer to GnuTLSSetup.txt or OpenSSLSetup.txt, and x509-*.pem files in this package for
- * help configuring an external TLS server.
- */
-public class TlsClientTest
-{
- private static final SecureRandom secureRandom = new SecureRandom();
-
- public static void main(String[] args)
- throws Exception
- {
- InetAddress address = InetAddress.getLocalHost();
- int port = 5556;
-
- long time1 = System.currentTimeMillis();
-
- MyTlsClient client = new MyTlsClient(null);
- TlsClientProtocol protocol = openTlsConnection(address, port, client);
- protocol.close();
-
- long time2 = System.currentTimeMillis();
- System.out.println("Elapsed 1: " + (time2 - time1) + "ms");
-
- client = new MyTlsClient(client.getSessionToResume());
- protocol = openTlsConnection(address, port, client);
-
- long time3 = System.currentTimeMillis();
- System.out.println("Elapsed 2: " + (time3 - time2) + "ms");
-
- OutputStream output = protocol.getOutputStream();
- output.write("GET / HTTP/1.1\r\n\r\n".getBytes("UTF-8"));
- output.flush();
-
- InputStream input = protocol.getInputStream();
- BufferedReader reader = new BufferedReader(new InputStreamReader(input));
-
- String line;
- while ((line = reader.readLine()) != null)
- {
- System.out.println(">>> " + line);
- }
-
- protocol.close();
- }
-
- static TlsClientProtocol openTlsConnection(InetAddress address, int port, TlsClient client) throws IOException
- {
- Socket s = new Socket(address, port);
- TlsClientProtocol protocol = new TlsClientProtocol(s.getInputStream(), s.getOutputStream(), secureRandom);
- protocol.connect(client);
- return protocol;
- }
-
- static class MyTlsClient
- extends DefaultTlsClient
- {
- TlsSession session;
-
- MyTlsClient(TlsSession session)
- {
- this.session = session;
- }
-
- public TlsSession getSessionToResume()
- {
- return this.session;
- }
-
- public void notifyAlertRaised(short alertLevel, short alertDescription, String message, Exception cause)
- {
- PrintStream out = (alertLevel == AlertLevel.fatal) ? System.err : System.out;
- out.println("TLS client raised alert (AlertLevel." + alertLevel + ", AlertDescription." + alertDescription
- + ")");
- if (message != null)
- {
- out.println(message);
- }
- if (cause != null)
- {
- cause.printStackTrace(out);
- }
- }
-
- public void notifyAlertReceived(short alertLevel, short alertDescription)
- {
- PrintStream out = (alertLevel == AlertLevel.fatal) ? System.err : System.out;
- out.println("TLS client received alert (AlertLevel." + alertLevel + ", AlertDescription."
- + alertDescription + ")");
- }
-
- public Hashtable getClientExtensions() throws IOException
- {
- Hashtable clientExtensions = TlsExtensionsUtils.ensureExtensionsInitialised(super.getClientExtensions());
- TlsExtensionsUtils.addMaxFragmentLengthExtension(clientExtensions, MaxFragmentLength.pow2_9);
- TlsExtensionsUtils.addTruncatedHMacExtension(clientExtensions);
- // For testing draft-gutmann-tls-encrypt-then-mac
-// clientExtensions.put(Integers.valueOf(0x42), TlsExtensionsUtils.createEmptyExtensionData());
- return clientExtensions;
- }
-
- public void notifyServerVersion(ProtocolVersion serverVersion) throws IOException
- {
- super.notifyServerVersion(serverVersion);
-
- System.out.println("Negotiated " + serverVersion);
- }
-
- public TlsAuthentication getAuthentication()
- throws IOException
- {
- return new TlsAuthentication()
- {
- public void notifyServerCertificate(org.spongycastle.crypto.tls.Certificate serverCertificate)
- throws IOException
- {
- Certificate[] chain = serverCertificate.getCertificateList();
- System.out.println("Received server certificate chain of length " + chain.length);
- for (int i = 0; i != chain.length; i++)
- {
- Certificate entry = chain[i];
- // TODO Create fingerprint based on certificate signature algorithm digest
- System.out.println(" fingerprint:SHA-256 " + TlsTestUtils.fingerprint(entry) + " ("
- + entry.getSubject() + ")");
- }
- }
-
- public TlsCredentials getClientCredentials(CertificateRequest certificateRequest)
- throws IOException
- {
- short[] certificateTypes = certificateRequest.getCertificateTypes();
- if (certificateTypes == null || !Arrays.contains(certificateTypes, ClientCertificateType.rsa_sign))
- {
- return null;
- }
-
- SignatureAndHashAlgorithm signatureAndHashAlgorithm = null;
- Vector sigAlgs = certificateRequest.getSupportedSignatureAlgorithms();
- if (sigAlgs != null)
- {
- for (int i = 0; i < sigAlgs.size(); ++i)
- {
- SignatureAndHashAlgorithm sigAlg = (SignatureAndHashAlgorithm)
- sigAlgs.elementAt(i);
- if (sigAlg.getSignature() == SignatureAlgorithm.rsa)
- {
- signatureAndHashAlgorithm = sigAlg;
- break;
- }
- }
-
- if (signatureAndHashAlgorithm == null)
- {
- return null;
- }
- }
-
- // TODO Create a distinct client certificate for use here
- return TlsTestUtils.loadSignerCredentials(context, new String[] { "x509-server.pem", "x509-ca.pem" },
- "x509-server-key.pem", signatureAndHashAlgorithm);
- }
- };
- }
-
- public void notifyHandshakeComplete() throws IOException
- {
- super.notifyHandshakeComplete();
-
- TlsSession newSession = context.getResumableSession();
- if (newSession != null)
- {
- byte[] newSessionID = newSession.getSessionID();
- String hex = Hex.toHexString(newSessionID);
-
- if (this.session != null && Arrays.areEqual(this.session.getSessionID(), newSessionID))
- {
- System.out.println("Resumed session: " + hex);
- }
- else
- {
- System.out.println("Established session: " + hex);
- }
-
- this.session = newSession;
- }
- }
- }
-}