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/98ae0b6d
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/98ae0b6d
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/98ae0b6d

Branch: refs/heads/master
Commit: 98ae0b6db4feab04777bf1a777a82994bdde2339
Parents: f9473d1
Author: Lukasz Lech <l.l...@ringler.ch>
Authored: Thu Mar 30 10:29:05 2017 +0200
Committer: Guillaume Nodet <gno...@apache.org>
Committed: Wed Jun 7 12:13:45 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/98ae0b6d/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/98ae0b6d/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);
     }
 }

Reply via email to