summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java
diff options
context:
space:
mode:
authorSergio Giro <sgiro@google.com>2016-02-01 18:52:42 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-02-01 18:52:42 +0000
commit9218edabd1ef9852bc2f13115dcadc81b442dd6c (patch)
tree8229ff72c8cbb06f49dce3a8382930919fa6fc2b /bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java
parent9b30eb05e5be69d51881a0d1b31e503e97acd784 (diff)
parent397d32894b89b506dc318e0f83446187c9b76ebe (diff)
downloadandroid_external_bouncycastle-9218edabd1ef9852bc2f13115dcadc81b442dd6c.tar.gz
android_external_bouncycastle-9218edabd1ef9852bc2f13115dcadc81b442dd6c.tar.bz2
android_external_bouncycastle-9218edabd1ef9852bc2f13115dcadc81b442dd6c.zip
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge-152-from-upstream"
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java b/bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java
new file mode 100644
index 0000000..3593757
--- /dev/null
+++ b/bcprov/src/main/java/org/bouncycastle/crypto/tls/test/MockSRPTlsServer.java
@@ -0,0 +1,124 @@
+package org.bouncycastle.crypto.tls.test;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.math.BigInteger;
+
+import org.bouncycastle.crypto.agreement.srp.SRP6StandardGroups;
+import org.bouncycastle.crypto.agreement.srp.SRP6VerifierGenerator;
+import org.bouncycastle.crypto.params.SRP6GroupParameters;
+import org.bouncycastle.crypto.tls.AlertDescription;
+import org.bouncycastle.crypto.tls.AlertLevel;
+import org.bouncycastle.crypto.tls.HashAlgorithm;
+import org.bouncycastle.crypto.tls.ProtocolVersion;
+import org.bouncycastle.crypto.tls.SRPTlsServer;
+import org.bouncycastle.crypto.tls.SignatureAlgorithm;
+import org.bouncycastle.crypto.tls.SimulatedTlsSRPIdentityManager;
+import org.bouncycastle.crypto.tls.TlsSRPIdentityManager;
+import org.bouncycastle.crypto.tls.TlsSRPLoginParameters;
+import org.bouncycastle.crypto.tls.TlsSignerCredentials;
+import org.bouncycastle.crypto.tls.TlsUtils;
+import org.bouncycastle.util.Arrays;
+import org.bouncycastle.util.Strings;
+
+class MockSRPTlsServer
+ extends SRPTlsServer
+{
+ static final SRP6GroupParameters TEST_GROUP = SRP6StandardGroups.rfc5054_1024;
+ static final byte[] TEST_IDENTITY = Strings.toUTF8ByteArray("client");
+ static final byte[] TEST_PASSWORD = Strings.toUTF8ByteArray("password");
+ static final byte[] TEST_SALT = Strings.toUTF8ByteArray("salt");
+ static final byte[] TEST_SEED_KEY = Strings.toUTF8ByteArray("seed_key");
+
+ MockSRPTlsServer()
+ {
+ super(new MyIdentityManager());
+ }
+
+ public void notifyAlertRaised(short alertLevel, short alertDescription, String message, Throwable cause)
+ {
+ PrintStream out = (alertLevel == AlertLevel.fatal) ? System.err : System.out;
+ out.println("TLS-SRP server raised alert: " + AlertLevel.getText(alertLevel) + ", "
+ + AlertDescription.getText(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-SRP server received alert: " + AlertLevel.getText(alertLevel) + ", "
+ + AlertDescription.getText(alertDescription));
+ }
+
+ public void notifyHandshakeComplete() throws IOException
+ {
+ super.notifyHandshakeComplete();
+
+ byte[] srpIdentity = context.getSecurityParameters().getSRPIdentity();
+ if (srpIdentity != null)
+ {
+ String name = Strings.fromUTF8ByteArray(srpIdentity);
+ System.out.println("TLS-SRP server completed handshake for SRP identity: " + name);
+ }
+ }
+
+ protected ProtocolVersion getMaximumVersion()
+ {
+ return ProtocolVersion.TLSv12;
+ }
+
+ protected ProtocolVersion getMinimumVersion()
+ {
+ return ProtocolVersion.TLSv12;
+ }
+
+ public ProtocolVersion getServerVersion() throws IOException
+ {
+ ProtocolVersion serverVersion = super.getServerVersion();
+
+ System.out.println("TLS-SRP server negotiated " + serverVersion);
+
+ return serverVersion;
+ }
+
+ protected TlsSignerCredentials getDSASignerCredentials() throws IOException
+ {
+ return TlsTestUtils.loadSignerCredentials(context, supportedSignatureAlgorithms, SignatureAlgorithm.dsa,
+ "x509-server-dsa.pem", "x509-server-key-dsa.pem");
+ }
+
+ protected TlsSignerCredentials getRSASignerCredentials() throws IOException
+ {
+ return TlsTestUtils.loadSignerCredentials(context, supportedSignatureAlgorithms, SignatureAlgorithm.rsa,
+ "x509-server.pem", "x509-server-key.pem");
+ }
+
+ static class MyIdentityManager
+ implements TlsSRPIdentityManager
+ {
+ protected SimulatedTlsSRPIdentityManager unknownIdentityManager = SimulatedTlsSRPIdentityManager.getRFC5054Default(
+ TEST_GROUP, TEST_SEED_KEY);
+
+ public TlsSRPLoginParameters getLoginParameters(byte[] identity)
+ {
+ if (Arrays.areEqual(TEST_IDENTITY, identity))
+ {
+ SRP6VerifierGenerator verifierGenerator = new SRP6VerifierGenerator();
+ verifierGenerator.init(TEST_GROUP, TlsUtils.createHash(HashAlgorithm.sha1));
+
+ BigInteger verifier = verifierGenerator.generateVerifier(TEST_SALT, identity, TEST_PASSWORD);
+
+ return new TlsSRPLoginParameters(TEST_GROUP, verifier, TEST_SALT);
+ }
+
+ return unknownIdentityManager.getLoginParameters(identity);
+ }
+ }
+}