From a9f4661a948f2b0fb07421cbc4086bd0d924baa8 Mon Sep 17 00:00:00 2001
From: Lyubomir Marinov <lyubomir.marinov@jitsi.org>
Date: Mon, 12 May 2014 10:21:11 +0300
Subject: [PATCH] Fixes the list of cipher suites supported by the DTLS server
 so that it reflects the capabilities of the actual Bouncy Castle
 implementations at this time.

---
 .../transform/dtls/TlsClientImpl.java         | 24 +++++++++++++
 .../transform/dtls/TlsServerImpl.java         | 36 +++++++++++++++++++
 2 files changed, 60 insertions(+)

diff --git a/src/org/jitsi/impl/neomedia/transform/dtls/TlsClientImpl.java b/src/org/jitsi/impl/neomedia/transform/dtls/TlsClientImpl.java
index cc9c5aaa..2c307448 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtls/TlsClientImpl.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtls/TlsClientImpl.java
@@ -80,6 +80,30 @@ int getChosenProtectionProfile()
         return chosenProtectionProfile;
     }
 
+    /**
+     * {@inheritDoc}
+     *
+     * Overrides the super implementation to explicitly specify cipher suites
+     * which we know to be supported by Bouncy Castle. At the time of this
+     * writing, we know that Bouncy Castle implements Client Key Exchange only
+     * with <tt>TLS_ECDHE_WITH_XXX</tt> and <tt>TLS_RSA_WITH_XXX</tt>.
+     */
+    @Override
+    public int[] getCipherSuites()
+    {
+        return
+            new int[]
+                    {
+/* core/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsClient.java */
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+                        CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
+                        CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256,
+                        CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA
+                    };
+    }
+
     /**
      * {@inheritDoc}
      *
diff --git a/src/org/jitsi/impl/neomedia/transform/dtls/TlsServerImpl.java b/src/org/jitsi/impl/neomedia/transform/dtls/TlsServerImpl.java
index e595827c..c5828c8b 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtls/TlsServerImpl.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtls/TlsServerImpl.java
@@ -77,6 +77,42 @@ int getChosenProtectionProfile()
         return chosenProtectionProfile;
     }
 
+    /**
+     * {@inheritDoc}
+     *
+     * Overrides the super implementation to explicitly specify cipher suites
+     * which we know to be supported by Bouncy Castle. At the time of this
+     * writing, we know that Bouncy Castle implements Client Key Exchange only
+     * with <tt>TLS_ECDHE_WITH_XXX</tt> and <tt>TLS_RSA_WITH_XXX</tt>.
+     */
+    @Override
+    protected int[] getCipherSuites()
+    {
+        return
+            new int[]
+                    {
+/* core/src/main/java/org/bouncycastle/crypto/tls/DefaultTlsServer.java */
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+                        CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+                        CipherSuite.TLS_RSA_WITH_AES_256_GCM_SHA384,
+                        CipherSuite.TLS_RSA_WITH_AES_128_GCM_SHA256,
+                        CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA256,
+                        CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA256,
+                        CipherSuite.TLS_RSA_WITH_AES_256_CBC_SHA,
+                        CipherSuite.TLS_RSA_WITH_AES_128_CBC_SHA
+/* core/src/test/java/org/bouncycastle/crypto/tls/test/MockDTLSServer.java */
+//                        CipherSuite.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+//                        CipherSuite.TLS_ECDHE_RSA_WITH_ESTREAM_SALSA20_SHA1,
+//                        CipherSuite.TLS_ECDHE_RSA_WITH_SALSA20_SHA1,
+//                        CipherSuite.TLS_RSA_WITH_ESTREAM_SALSA20_SHA1,
+//                        CipherSuite.TLS_RSA_WITH_SALSA20_SHA1
+                    };
+    }
+
     /**
      * Gets the <tt>TlsContext</tt> with which this <tt>TlsServer</tt> has been
      * initialized.
-- 
GitLab