diff --git a/.classpath b/.classpath
index a5da35ab1..7c32205b7 100644
--- a/.classpath
+++ b/.classpath
@@ -54,7 +54,8 @@
-
+
+
diff --git a/build.moxie b/build.moxie
index 07926ab54..026ab5bbf 100644
--- a/build.moxie
+++ b/build.moxie
@@ -114,7 +114,7 @@ properties: {
bouncycastle.version : 1.57
selenium.version : 2.28.0
wikitext.version : 1.4
- sshd.version: 1.2.0
+ sshd.version: 1.7.0
mina.version: 2.0.21
guice.version : 4.0
# Gitblit maintains a fork of guice-servlet
@@ -163,6 +163,7 @@ dependencies:
- compile 'org.bouncycastle:bcprov-jdk15on:${bouncycastle.version}' :war
- compile 'org.bouncycastle:bcmail-jdk15on:${bouncycastle.version}' :war
- compile 'org.bouncycastle:bcpkix-jdk15on:${bouncycastle.version}' :war
+- compile 'net.i2p.crypto:eddsa:0.2.0' :war !org.easymock
- compile 'org.apache.sshd:sshd-core:${sshd.version}' :war !org.easymock
- compile 'org.apache.mina:mina-core:${mina.version}' :war !org.easymock
- compile 'rome:rome:0.9' :war :manager :api
diff --git a/gitblit.iml b/gitblit.iml
index 48f3819b1..694cd94f6 100644
--- a/gitblit.iml
+++ b/gitblit.iml
@@ -541,13 +541,24 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/gitblit/transport/ssh/FileKeyPairProvider.java b/src/main/java/com/gitblit/transport/ssh/FileKeyPairProvider.java
index db0741e03..cc91bb8c1 100644
--- a/src/main/java/com/gitblit/transport/ssh/FileKeyPairProvider.java
+++ b/src/main/java/com/gitblit/transport/ssh/FileKeyPairProvider.java
@@ -26,7 +26,7 @@
import java.util.NoSuchElementException;
import org.apache.sshd.common.keyprovider.AbstractKeyPairProvider;
-import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.security.SecurityUtils;
import org.bouncycastle.openssl.PEMDecryptorProvider;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMKeyPair;
diff --git a/src/main/java/com/gitblit/transport/ssh/NonForwardingFilter.java b/src/main/java/com/gitblit/transport/ssh/NonForwardingFilter.java
index f2176cb0a..3164ad795 100644
--- a/src/main/java/com/gitblit/transport/ssh/NonForwardingFilter.java
+++ b/src/main/java/com/gitblit/transport/ssh/NonForwardingFilter.java
@@ -21,23 +21,23 @@
public class NonForwardingFilter implements ForwardingFilter {
- @Override
- public boolean canConnect(Type type, SshdSocketAddress address, Session session) {
- return false;
- }
+ @Override
+ public boolean canConnect(Type type, SshdSocketAddress address, Session session) {
+ return false;
+ }
- @Override
- public boolean canForwardAgent(Session session) {
- return false;
- }
+ @Override
+ public boolean canForwardAgent(Session session, String requestType) {
+ return false;
+ }
- @Override
- public boolean canForwardX11(Session session) {
- return false;
- }
+ @Override
+ public boolean canForwardX11(Session session, String requestType) {
+ return false;
+ }
- @Override
- public boolean canListen(SshdSocketAddress address, Session session) {
- return false;
- }
+ @Override
+ public boolean canListen(SshdSocketAddress address, Session session) {
+ return false;
+ }
}
diff --git a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
index 63fa51dd0..8bb880b03 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshDaemon.java
@@ -29,7 +29,9 @@
import org.apache.sshd.common.io.IoServiceFactoryFactory;
import org.apache.sshd.common.io.mina.MinaServiceFactoryFactory;
import org.apache.sshd.common.io.nio2.Nio2ServiceFactoryFactory;
-import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.security.SecurityUtils;
+import org.apache.sshd.common.util.security.bouncycastle.BouncyCastleSecurityProviderRegistrar;
+import org.apache.sshd.common.util.security.eddsa.EdDSASecurityProviderRegistrar;
import org.apache.sshd.server.SshServer;
import org.apache.sshd.server.auth.pubkey.CachingPublicKeyAuthenticator;
import org.bouncycastle.openssl.PEMWriter;
@@ -92,9 +94,14 @@ public SshDaemon(IGitblit gitblit, WorkQueue workQueue) {
IStoredSettings settings = gitblit.getSettings();
// Ensure that Bouncy Castle is our JCE provider
- SecurityUtils.setRegisterBouncyCastle(true);
+ SecurityUtils.registerSecurityProvider(new BouncyCastleSecurityProviderRegistrar());
if (SecurityUtils.isBouncyCastleRegistered()) {
- log.debug("BouncyCastle is registered as a JCE provider");
+ log.info("BouncyCastle is registered as a JCE provider");
+ }
+ // Add support for ED25519_SHA512
+ SecurityUtils.registerSecurityProvider(new EdDSASecurityProviderRegistrar());
+ if (SecurityUtils.isProviderRegistered("EdDSA")) {
+ log.info("EdDSA is registered as a JCE provider");
}
// Generate host RSA and DSA keypairs and create the host keypair provider
@@ -160,7 +167,7 @@ public SshDaemon(IGitblit gitblit, WorkQueue workQueue) {
sshd.setSessionFactory(new SshServerSessionFactory(sshd));
sshd.setFileSystemFactory(new DisabledFilesystemFactory());
- sshd.setTcpipForwardingFilter(new NonForwardingFilter());
+ sshd.setForwardingFilter(new NonForwardingFilter());
sshd.setCommandFactory(new SshCommandFactory(gitblit, workQueue));
sshd.setShellFactory(new WelcomeShell(gitblit));
diff --git a/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java b/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
index 7c407d365..7ea0f2480 100644
--- a/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
+++ b/src/main/java/com/gitblit/transport/ssh/WelcomeShell.java
@@ -57,6 +57,11 @@ public Command create() {
return new SendMessage(gitblit);
}
+ @Override
+ public Command get() {
+ return create();
+ }
+
private static class SendMessage implements Command, SessionAware {
private final IPublicKeyManager km;
diff --git a/src/test/java/com/gitblit/tests/LdapPublicKeyManagerTest.java b/src/test/java/com/gitblit/tests/LdapPublicKeyManagerTest.java
index c426254f1..1ec6671ad 100644
--- a/src/test/java/com/gitblit/tests/LdapPublicKeyManagerTest.java
+++ b/src/test/java/com/gitblit/tests/LdapPublicKeyManagerTest.java
@@ -28,7 +28,7 @@
import java.util.List;
import java.util.Map;
-import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.security.SecurityUtils;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/src/test/java/com/gitblit/tests/SshUnitTest.java b/src/test/java/com/gitblit/tests/SshUnitTest.java
index 2f65fe99a..acb0269c2 100644
--- a/src/test/java/com/gitblit/tests/SshUnitTest.java
+++ b/src/test/java/com/gitblit/tests/SshUnitTest.java
@@ -36,7 +36,7 @@
import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
import org.apache.sshd.client.session.ClientSession;
import org.apache.sshd.common.config.keys.FilePasswordProvider;
-import org.apache.sshd.common.util.SecurityUtils;
+import org.apache.sshd.common.util.security.SecurityUtils;
import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.util.FS;