Repository: karaf Updated Branches: refs/heads/master f9473d1bb -> c82d326ab
Fix for OpenSSHGeneratorKeyFileProvider writeSshKey method: JUnit test to assert the class can read what was previously written Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/1ebec4f4 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/1ebec4f4 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/1ebec4f4 Branch: refs/heads/master Commit: 1ebec4f4f59e3aee381b9f3ceccd3fe89e136cd3 Parents: 94d7b7d Author: Lukasz Lech <l.l...@ringler.ch> Authored: Thu Mar 30 10:29:05 2017 +0200 Committer: Lukasz Lech <l.l...@ringler.ch> Committed: Thu Mar 30 10:29:05 2017 +0200 ---------------------------------------------------------------------- .../ssh/OpenSSHGeneratorFileKeyProvider.java | 6 ++-- .../OpenSSHGeneratorKeyFileProviderTest.java | 32 ++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/1ebec4f4/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorFileKeyProvider.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorFileKeyProvider.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorFileKeyProvider.java index 0285053..4050644 100644 --- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorFileKeyProvider.java +++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorFileKeyProvider.java @@ -19,6 +19,7 @@ package org.apache.karaf.shell.ssh; +import org.apache.commons.ssl.PEMItem; import org.apache.commons.ssl.PEMUtil; import org.apache.commons.ssl.PKCS8Key; import org.apache.sshd.server.keyprovider.AbstractGeneratorHostKeyProvider; @@ -29,6 +30,7 @@ import java.io.OutputStream; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.KeyPair; +import java.security.interfaces.RSAPrivateCrtKey; import java.util.ArrayList; import java.util.Collection; @@ -72,10 +74,10 @@ public class OpenSSHGeneratorFileKeyProvider extends AbstractGeneratorHostKeyPro @Override protected void doWriteKeyPair(String resourceKey, KeyPair kp, OutputStream os) throws IOException, GeneralSecurityException { Collection<Object> items = new ArrayList<>(); - items.add(kp.getPrivate()); - items.add(kp.getPublic()); + items.add(new PEMItem(kp.getPrivate().getEncoded(), "PRIVATE KEY")); byte[] bytes = PEMUtil.encode(items); os.write(bytes); + os.close(); } } http://git-wip-us.apache.org/repos/asf/karaf/blob/1ebec4f4/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorKeyFileProviderTest.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorKeyFileProviderTest.java b/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorKeyFileProviderTest.java index 2ba97cf..04066c4 100644 --- a/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorKeyFileProviderTest.java +++ b/shell/ssh/src/test/java/org/apache/karaf/shell/ssh/OpenSSHGeneratorKeyFileProviderTest.java @@ -18,9 +18,14 @@ */ package org.apache.karaf.shell.ssh; -import org.junit.Test; - +import java.io.File; +import java.math.BigInteger; import java.security.KeyPair; +import java.security.interfaces.RSAPrivateCrtKey; +import java.security.interfaces.RSAPublicKey; + +import org.junit.Assert; +import org.junit.Test; public class OpenSSHGeneratorKeyFileProviderTest { @@ -30,5 +35,28 @@ public class OpenSSHGeneratorKeyFileProviderTest { prov.setOverwriteAllowed(false); KeyPair keys = prov.loadKeys().iterator().next(); // how would we tell if they read 'correctly'? Well, the base class will throw if the key isn't reasonable. + Assert.assertNotNull(keys); + Assert.assertTrue("Loaded key is not RSA Key", keys.getPublic() instanceof RSAPublicKey); + Assert.assertEquals(65537, ((RSAPublicKey) keys.getPublic()).getPublicExponent().intValue()); + } + + @Test + public void writeSshKey() throws Exception { + // create a temporary file + File temp = File.createTempFile(this.getClass().getCanonicalName(), ".pem"); + temp.deleteOnExit(); + OpenSSHGeneratorFileKeyProvider prov = new OpenSSHGeneratorFileKeyProvider(temp.getPath(), "RSA", 4096); + KeyPair keys = prov.loadKeys().iterator().next(); + Assert.assertNotNull(keys); + Assert.assertTrue(temp.exists()); + Assert.assertFalse(temp.length() == 0); + BigInteger privateExponent = ((RSAPrivateCrtKey) keys.getPrivate()).getPrivateExponent(); + // read and check if correctly read + prov = new OpenSSHGeneratorFileKeyProvider(temp.getPath()); + keys = prov.loadKeys().iterator().next(); + Assert.assertNotNull(keys); + Assert.assertTrue("Loaded key is not RSA Key", keys.getPrivate() instanceof RSAPrivateCrtKey); + BigInteger privateExponent2 = ((RSAPrivateCrtKey) keys.getPrivate()).getPrivateExponent(); + Assert.assertEquals(privateExponent, privateExponent2); } }