Updated Branches: refs/heads/master 464b6fe57 -> 4f9049980
[SSHD-268] Upgrade to BouncyCastle 1.49 Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/4f904998 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/4f904998 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/4f904998 Branch: refs/heads/master Commit: 4f904998041941503a4ed1bac51b84b686c842c3 Parents: 464b6fe Author: Guillaume Nodet <[email protected]> Authored: Mon Feb 3 09:26:40 2014 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Mon Feb 3 09:26:40 2014 +0100 ---------------------------------------------------------------------- .../PEMGeneratorHostKeyProvider.java | 16 +++++++- .../PEMGeneratorHostKeyProviderTest.java | 41 +++++++++++++++----- 2 files changed, 46 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/4f904998/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProvider.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProvider.java b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProvider.java index cc70521..a080478 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProvider.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProvider.java @@ -24,8 +24,13 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.security.KeyPair; +import org.bouncycastle.openssl.PEMDecryptorProvider; +import org.bouncycastle.openssl.PEMEncryptedKeyPair; +import org.bouncycastle.openssl.PEMKeyPair; import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.openssl.PEMWriter; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; +import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder; /** * TODO Add javadoc @@ -51,7 +56,16 @@ public class PEMGeneratorHostKeyProvider extends AbstractGeneratorHostKeyProvide protected KeyPair doReadKeyPair(InputStream is) throws Exception { PEMParser r = new PEMParser(new InputStreamReader(is)); - return (KeyPair) r.readObject(); + Object o = r.readObject(); + JcaPEMKeyConverter pemConverter = new JcaPEMKeyConverter(); + pemConverter.setProvider("BC"); + if (o instanceof PEMKeyPair) { + o = pemConverter.getKeyPair((PEMKeyPair)o); + return (KeyPair) o; + } else if (o instanceof KeyPair) { + return (KeyPair) o; + } + return null; } protected void doWriteKeyPair(KeyPair kp, OutputStream os) throws Exception { http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/4f904998/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProviderTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProviderTest.java b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProviderTest.java index 13d505e..a85973b 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProviderTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/PEMGeneratorHostKeyProviderTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.File; +import java.security.KeyPair; import java.security.spec.ECGenParameterSpec; import org.apache.sshd.common.KeyPairProvider; @@ -48,7 +49,8 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySize(512); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.SSH_DSS, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.SSH_DSS)); + KeyPair pk1 = provider.loadKey(KeyPairProvider.SSH_DSS); + assertNotNull(pk1); // Read existing provider = new PEMGeneratorHostKeyProvider(); @@ -56,7 +58,10 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySize(512); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.SSH_DSS, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.SSH_DSS)); + KeyPair pk2 = provider.loadKey(KeyPairProvider.SSH_DSS); + assertNotNull(pk2); + + assertEquals(pk2.getPublic(), pk1.getPublic()); } @Test @@ -72,7 +77,8 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySize(512); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.SSH_RSA, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.SSH_RSA)); + KeyPair pk1 = provider.loadKey(KeyPairProvider.SSH_RSA); + assertNotNull(pk1); // Read existing provider = new PEMGeneratorHostKeyProvider(); @@ -80,7 +86,10 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySize(512); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.SSH_RSA, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.SSH_RSA)); + KeyPair pk2 = provider.loadKey(KeyPairProvider.SSH_RSA); + assertNotNull(pk2); + + assertEquals(pk2.getPublic(), pk1.getPublic()); } @Test @@ -100,7 +109,8 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("prime256v1")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP256, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP256)); + KeyPair pk1 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP256); + assertNotNull(pk1); // Read existing provider = new PEMGeneratorHostKeyProvider(); @@ -108,7 +118,10 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("prime256v1")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP256, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP256)); + KeyPair pk2 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP256); + assertNotNull(pk2); + + assertEquals(pk2.getPublic(), pk1.getPublic()); } @Test @@ -128,7 +141,8 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("P-384")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP384, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP384)); + KeyPair pk1 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP384); + assertNotNull(pk1); // Read existing provider = new PEMGeneratorHostKeyProvider(); @@ -136,7 +150,10 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("P-384")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP384, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP384)); + KeyPair pk2 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP384); + assertNotNull(pk2); + + assertEquals(pk2.getPublic(), pk1.getPublic()); } @Test @@ -156,7 +173,8 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("P-521")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP521, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP521)); + KeyPair pk1 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP521); + assertNotNull(pk1); // Read existing provider = new PEMGeneratorHostKeyProvider(); @@ -164,6 +182,9 @@ public class PEMGeneratorHostKeyProviderTest { provider.setKeySpec(new ECGenParameterSpec("P-521")); provider.setPath(path.getPath()); assertEquals(KeyPairProvider.ECDSA_SHA2_NISTP521, provider.getKeyTypes()); - assertNotNull(provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP521)); + KeyPair pk2 = provider.loadKey(KeyPairProvider.ECDSA_SHA2_NISTP521); + assertNotNull(pk2); + + assertEquals(pk2.getPublic(), pk1.getPublic()); } }
