Repository: qpid-proton-j
Updated Branches:
  refs/heads/master b49969c1f -> b845e479f


PROTON-1451 : Only register BouncyCastle provider if not already present


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/commit/b845e479
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/tree/b845e479
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/diff/b845e479

Branch: refs/heads/master
Commit: b845e479f946cac019fe92327a8bc3ca16263050
Parents: b49969c
Author: rgodfrey <rgodf...@apache.org>
Authored: Wed Mar 29 12:18:31 2017 +0200
Committer: rgodfrey <rgodf...@apache.org>
Committed: Wed Mar 29 12:18:31 2017 +0200

----------------------------------------------------------------------
 .../engine/impl/ssl/SslEngineFacadeFactory.java | 22 ++++++++++++++++----
 .../impl/ssl/SslEngineFacadeFactoryTest.java    | 16 ++++++++++++++
 2 files changed, 34 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/b845e479/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
----------------------------------------------------------------------
diff --git 
a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
 
b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
index 64eb2ca..4efc055 100644
--- 
a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
+++ 
b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactory.java
@@ -130,10 +130,7 @@ public class SslEngineFacadeFactory
             PrivateKeyInfoClassResult = 
Class.forName("org.bouncycastle.asn1.pkcs.PrivateKeyInfo");
             getPrivateKeyMethodResult = 
jcaPEMKeyConverterClass.getMethod("getPrivateKey", PrivateKeyInfoClassResult);
 
-            // Try loading BC as a provider
-            Class<?> klass = 
Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
-            Provider provider = (Provider) 
klass.getConstructor().newInstance();
-            Security.addProvider(provider);
+            registerBouncyCastleProvider();
         }
         catch (Exception e)
         {
@@ -155,6 +152,23 @@ public class SslEngineFacadeFactory
         }
     }
 
+    static void registerBouncyCastleProvider()
+            throws ClassNotFoundException, InstantiationException, 
IllegalAccessException,
+                   InvocationTargetException, NoSuchMethodException
+    {
+        // Try loading BC as a provider
+        Class<?> klass = 
Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+
+        Provider bouncyCastleProvider = (Provider) 
klass.getConstructor().newInstance();
+        synchronized (Security.class)
+        {
+            if(Security.getProvider(bouncyCastleProvider.getName()) == null)
+            {
+                Security.addProvider(bouncyCastleProvider);
+            }
+        }
+    }
+
     SslEngineFacadeFactory()
     {
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/b845e479/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
 
b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
index 84ba8cb..e43988e 100644
--- 
a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
+++ 
b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/ssl/SslEngineFacadeFactoryTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.qpid.proton.engine.impl.ssl;
 
+import static junit.framework.TestCase.fail;
 import static org.junit.Assert.assertNotNull;
 
 import java.net.URL;
@@ -29,6 +30,21 @@ public class SslEngineFacadeFactoryTest {
     private static final String PASSWORD = "unittest";
 
     @Test
+    public void testDuplicateRegistrationOfSecurityProvider() {
+        // ensure the provider is already registered
+        SslEngineFacadeFactory factory = new SslEngineFacadeFactory();
+
+        try
+        {
+            SslEngineFacadeFactory.registerBouncyCastleProvider();
+        }
+        catch (Exception e)
+        {
+            fail("Exception thrown when re-registering BouncyCastle provider " 
+ e.getMessage());
+        }
+    }
+    
+    @Test
     public void testCertifcateLoad() {
         String ipFile = resolveFilename("cert.pem.txt");
         SslEngineFacadeFactory factory = new SslEngineFacadeFactory();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to