You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2009/06/08 08:59:04 UTC

svn commit: r782543 - in /mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd: SshClient.java SshServer.java

Author: gnodet
Date: Mon Jun  8 06:59:04 2009
New Revision: 782543

URL: http://svn.apache.org/viewvc?rev=782543&view=rev
Log:
SSHD-24: AES256 and AES192 requires unlimited cryptography extension

Modified:
    mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java
    mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java

Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java
URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java?rev=782543&r1=782542&r2=782543&view=diff
==============================================================================
--- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java (original)
+++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshClient.java Mon Jun  8 06:59:04 2009
@@ -25,6 +25,9 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.LinkedList;
+import java.util.Iterator;
+import java.security.InvalidKeyException;
 
 import org.apache.mina.core.future.IoFutureListener;
 import org.apache.mina.core.service.IoConnector;
@@ -189,12 +192,7 @@
                     new DHG1.Factory()));
             client.setRandomFactory(new SingletonRandomFactory(new JceRandom.Factory()));
         }
-        client.setCipherFactories(Arrays.<NamedFactory<Cipher>>asList(
-                new AES128CBC.Factory(),
-                new TripleDESCBC.Factory(),
-                new BlowfishCBC.Factory(),
-                new AES192CBC.Factory(),
-                new AES256CBC.Factory()));
+        setUpDefaultCiphers(client);
         // Compression is not enabled by default
         // client.setCompressionFactories(Arrays.<NamedFactory<Compression>>asList(
         //         new CompressionNone.Factory(),
@@ -213,6 +211,30 @@
         return client;
     }
 
+    private static void setUpDefaultCiphers(SshClient client) {
+        List<NamedFactory<Cipher>> avail = new LinkedList<NamedFactory<Cipher>>();
+        avail.add(new AES128CBC.Factory());
+        avail.add(new TripleDESCBC.Factory());
+        avail.add(new BlowfishCBC.Factory());
+        avail.add(new AES192CBC.Factory());
+        avail.add(new AES256CBC.Factory());
+
+        for (Iterator<NamedFactory<Cipher>> i = avail.iterator(); i.hasNext();) {
+            final NamedFactory<Cipher> f = i.next();
+            try {
+                final Cipher c = f.create();
+                final byte[] key = new byte[c.getBlockSize()];
+                final byte[] iv = new byte[c.getIVSize()];
+                c.init(Cipher.Mode.Encrypt, key, iv);
+            } catch (InvalidKeyException e) {
+                i.remove();
+            } catch (Exception e) {
+                i.remove();
+            }
+        }
+        client.setCipherFactories(avail);
+    }
+
     /*=================================
           Main class implementation
      *=================================*/

Modified: mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java
URL: http://svn.apache.org/viewvc/mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java?rev=782543&r1=782542&r2=782543&view=diff
==============================================================================
--- mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java (original)
+++ mina/sshd/trunk/sshd-core/src/main/java/org/apache/sshd/SshServer.java Mon Jun  8 06:59:04 2009
@@ -20,7 +20,10 @@
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.security.InvalidKeyException;
 import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.apache.mina.core.service.IoAcceptor;
@@ -244,12 +247,7 @@
         sshd.setUserAuthFactories(Arrays.<NamedFactory<UserAuth>>asList(
                 new UserAuthPassword.Factory(),
                 new UserAuthPublicKey.Factory()));
-        sshd.setCipherFactories(Arrays.<NamedFactory<Cipher>>asList(
-                new AES128CBC.Factory(),
-                new TripleDESCBC.Factory(),
-                new BlowfishCBC.Factory(),
-                new AES192CBC.Factory(),
-                new AES256CBC.Factory()));
+        setUpDefaultCiphers(sshd);
         // Compression is not enabled by default
         // sshd.setCompressionFactories(Arrays.<NamedFactory<Compression>>asList(
         //         new CompressionNone.Factory(),
@@ -270,6 +268,30 @@
         return sshd;
     }
 
+    private static void setUpDefaultCiphers(SshServer sshd) {
+        List<NamedFactory<Cipher>> avail = new LinkedList<NamedFactory<Cipher>>();
+        avail.add(new AES128CBC.Factory());
+        avail.add(new TripleDESCBC.Factory());
+        avail.add(new BlowfishCBC.Factory());
+        avail.add(new AES192CBC.Factory());
+        avail.add(new AES256CBC.Factory());
+
+        for (Iterator<NamedFactory<Cipher>> i = avail.iterator(); i.hasNext();) {
+            final NamedFactory<Cipher> f = i.next();
+            try {
+                final Cipher c = f.create();
+                final byte[] key = new byte[c.getBlockSize()];
+                final byte[] iv = new byte[c.getIVSize()];
+                c.init(Cipher.Mode.Encrypt, key, iv);
+            } catch (InvalidKeyException e) {
+                i.remove();
+            } catch (Exception e) {
+                i.remove();
+            }
+        }
+        sshd.setCipherFactories(avail);
+    }
+
     /*=================================
           Main class implementation
      *=================================*/