=0; i--)
out.write((len>>(8*i))&0xFF);
}
private int countByteLen(int len) {
int bytes=0;
while(len>0) {
bytes++;
len>>=8;
}
return bytes;
}
public DEREncoder write(BigInteger i) throws IOException {
out.write(0x02);
byte[] bytes = i.toByteArray();
writeLength(bytes.length);
out.write(bytes);
return this;
}
public DEREncoder write(BigInteger... ints) throws IOException {
for (BigInteger i : ints) {
write(i);
}
return this;
}
}
trilead-putty-extension-trilead-putty-extension-1.2/src/main/java/org/kohsuke/putty/KeyReader.java 0000664 0000000 0000000 00000004271 11761227123 0033621 0 ustar 00root root 0000000 0000000 /*
* The MIT License
*
* Copyright (c) 2009-, Kohsuke Kawaguchi
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.kohsuke.putty;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.math.BigInteger;
/**
* Parses the putty key bit vector, which is an encoded sequence
* of {@link BigInteger}s.
*
* @author Kohsuke Kawaguchi
*/
class KeyReader {
private final DataInput di;
KeyReader(byte[] key) {
this.di = new DataInputStream(new ByteArrayInputStream(key));
}
/**
* Skips an integer without reading it.
*/
public void skip() {
try {
di.skipBytes(di.readInt());
} catch (IOException e) {
throw new AssertionError(e);
}
}
private byte[] read() {
try {
int len = di.readInt();
byte[] r = new byte[len];
di.readFully(r);
return r;
} catch (IOException e) {
throw new AssertionError(e);
}
}
/**
* Reads the next integer.
*/
public BigInteger readInt() {
return new BigInteger(read());
}
}
trilead-putty-extension-trilead-putty-extension-1.2/src/main/java/org/kohsuke/putty/PuTTYKey.java 0000664 0000000 0000000 00000023122 11761227123 0033400 0 ustar 00root root 0000000 0000000 /*
* The MIT License
*
* Copyright (c) 2009-, Kohsuke Kawaguchi
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package org.kohsuke.putty;
import com.trilead.ssh2.crypto.cipher.AES;
import com.trilead.ssh2.crypto.cipher.CBCMode;
import com.trilead.ssh2.crypto.Base64;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.FileWriter;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
/**
* Interprets PuTTY's ".ppk" file.
*
* Notes
*
* -
* The file appears to be a text file but it doesn't have the fixed encoding.
* So we just use the platform default encoding, which is what PuTTY seems to use.
* Fortunately, the important part is all ASCII, so this shouldn't really hurt
* the interpretation of the key.
*
*
* Sample PuTTY file format
*
PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20080514
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIEAiPVUpONjGeVrwgRPOqy3Ym6kF/f8bltnmjA2
BMdAtaOpiD8A2ooqtLS5zWYuc0xkW0ogoKvORN+RF4JI+uNUlkxWxnzJM9JLpnvA
HrMoVFaQ0cgDMIHtE1Ob1cGAhlNInPCRnGNJpBNcJ/OJye3yt7WqHP4SPCCLb6nL
nmBUrLM=
Private-Lines: 8
AAAAgGtYgJzpktzyFjBIkSAmgeVdozVhgKmF6WsDMUID9HKwtU8cn83h6h7ug8qA
hUWcvVxO201/vViTjWVz9ALph3uMnpJiuQaaNYIGztGJBRsBwmQW9738pUXcsUXZ
79KJP01oHn6Wkrgk26DIOsz04QOBI6C8RumBO4+F1WdfueM9AAAAQQDmA4hcK8Bx
nVtEpcF310mKD3nsbJqARdw5NV9kCxPnEsmy7Sy1L4Ob/nTIrynbc3MA9HQVJkUz
7V0va5Pjm/T7AAAAQQCYbnG0UEekwk0LG1Hkxh1OrKMxCw2KWMN8ac3L0LVBg/Tk
8EnB2oT45GGeJaw7KzdoOMFZz0iXLsVLNUjNn2mpAAAAQQCN6SEfWqiNzyc/w5n/
lFVDHExfVUJp0wXv+kzZzylnw4fs00lC3k4PZDSsb+jYCMesnfJjhDgkUA0XPyo8
Emdk
Private-MAC: 50c45751d18d74c00fca395deb7b7695e3ed6f77
*
*
* @author Kohsuke Kawaguchi
*/
public class PuTTYKey {
private static final String PUTTY_SIGNATURE = "PuTTY-User-Key-File-";
private final byte[] privateKey;
private final byte[] publicKey;
/**
* For each line that looks like "Xyz: vvv", it will be stored in this map.
*/
private final Map headers = new HashMap();
public PuTTYKey(File ppkFile, String passphrase) throws IOException {
this(new FileReader(ppkFile),passphrase);
}
public PuTTYKey(InputStream in, String passphrase) throws IOException {
this(new InputStreamReader(in),passphrase);
}
public PuTTYKey(Reader in, String passphrase) throws IOException {
BufferedReader r = new BufferedReader(in);
Map payload = new HashMap();
// parse the text into headers and payloads
try {
String headerName = null;
String line;
while((line=r.readLine())!=null) {
int idx = line.indexOf(": ");
if(idx>0) {
headerName =line.substring(0,idx);
headers.put(headerName,line.substring(idx+2));
} else {
String s = payload.get(headerName);
if(s==null) s=line;
else s+=line;
payload.put(headerName,s);
}
}
} finally {
r.close();
}
boolean encrypted = "aes256-cbc".equals(headers.get("Encryption"));
publicKey = decodeBase64(payload.get("Public-Lines"));
byte[] privateLines = decodeBase64(payload.get("Private-Lines"));
if(encrypted) {
AES aes = new AES();
byte[] key = toKey(passphrase);
aes.init(false,key);
CBCMode cbc = new CBCMode(aes, new byte[16], false); // initial vector=0
byte[] out = new byte[privateLines.length];
for( int i=0; i
* This is used to decrypt the private key when it's encrypted.
*/
private byte[] toKey(String passphrase) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(new byte[]{0,0,0,0});
digest.update(passphrase.getBytes());
byte[] key1 = digest.digest();
digest.update(new byte[]{0,0,0,1});
digest.update(passphrase.getBytes());
byte[] key2 = digest.digest();
byte[] r = new byte[32];
System.arraycopy(key1,0,r, 0,20);
System.arraycopy(key2,0,r,20,12);
return r;
} catch (NoSuchAlgorithmException e) {
throw new AssertionError(e); // impossible
}
}
private static byte[] decodeBase64(String s) throws IOException {
return Base64.decode(s.toCharArray());
}
/**
* Converts this key into OpenSSH format.
*
* @return
* A multi-line string that can be written back to a file.
*/
public String toOpenSSH() throws IOException {
if(getAlgorithm().equals("ssh-rsa")) {
KeyReader r = new KeyReader(publicKey);
r.skip(); // skip this
BigInteger e = r.readInt();
BigInteger n = r.readInt();
r = new KeyReader(privateKey);
BigInteger d = r.readInt();
BigInteger p = r.readInt();
BigInteger q = r.readInt();
BigInteger iqmp = r.readInt();
BigInteger dmp1 = d.mod(p.subtract(BigInteger.ONE));
BigInteger dmq1 = d.mod(q.subtract(BigInteger.ONE));
DEREncoder payload = new DEREncoder().writeSequence(
new DEREncoder().write(BigInteger.ZERO, n, e, d, p, q, dmp1, dmq1, iqmp).toByteArray()
);
StringBuilder buf = new StringBuilder();
buf.append("-----BEGIN RSA PRIVATE KEY-----\n");
buf.append(payload.toBase64());
buf.append("-----END RSA PRIVATE KEY-----\n");
// debug assist
// Object o = PEMDecoder.decode(buf.toString().toCharArray(), null);
return buf.toString();
}
if(getAlgorithm().equals("ssh-dss")) {
KeyReader r = new KeyReader(publicKey);
r.skip(); // skip this
BigInteger p = r.readInt();
BigInteger q = r.readInt();
BigInteger g = r.readInt();
BigInteger y = r.readInt();
r = new KeyReader(privateKey);
BigInteger x = r.readInt();
DEREncoder payload = new DEREncoder().writeSequence(
new DEREncoder().write(BigInteger.ZERO, p, q, g, y, x).toByteArray()
);
StringBuilder buf = new StringBuilder();
buf.append("-----BEGIN DSA PRIVATE KEY-----\n");
buf.append(payload.toBase64());
buf.append("-----END DSA PRIVATE KEY-----\n");
// debug assist
// Object o = PEMDecoder.decode(buf.toString().toCharArray(), null);
return buf.toString();
}
throw new IllegalArgumentException("Unrecognized key type: "+getAlgorithm());
}
/**
* Converts the key to OpenSSH format, then write it to a file.
*/
public void toOpenSSH(File f) throws IOException {
FileWriter w = new FileWriter(f);
try {
w.write(toOpenSSH());
} finally {
w.close();
}
}
/**
* Checks if the given file is a PuTTY's ".ppk" file, by looking at the file contents.
*/
public static boolean isPuTTYKeyFile(File ppkFile) throws IOException {
return isPuTTYKeyFile(new FileReader(ppkFile));
}
public static boolean isPuTTYKeyFile(InputStream in) throws IOException {
return isPuTTYKeyFile(new InputStreamReader(in));
}
public static boolean isPuTTYKeyFile(Reader _reader) throws IOException {
BufferedReader r = new BufferedReader(_reader);
try {
String line;
while((line=r.readLine())!=null) {
if(line.startsWith(PUTTY_SIGNATURE))
return true;
}
return false;
} finally {
r.close();
}
}
}
trilead-putty-extension-trilead-putty-extension-1.2/src/site/ 0000775 0000000 0000000 00000000000 11761227123 0024551 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/site/apt/ 0000775 0000000 0000000 00000000000 11761227123 0025335 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/site/apt/index.apt 0000664 0000000 0000000 00000001060 11761227123 0027147 0 ustar 00root root 0000000 0000000 What is this?
This is a small library that allows you to programatically convert
the PuTTY key file (.ppk) to the OpenSSH format.
Such a conversion relies on a few cryptographic operations that
are not available out of the box from JDK, so this library
depends on {{{http://www.trilead.com/Products/Trilead-SSH-2-Java/}the trilead Java SSH2 library}}
for those algorithms (but if you prefer to use this with other toolkits,
you should be able to easily port this library.)
See {{{/nonav/apidocs/}javadoc}} for more details.
trilead-putty-extension-trilead-putty-extension-1.2/src/site/site.xml 0000664 0000000 0000000 00000001211 11761227123 0026232 0 ustar 00root root 0000000 0000000
org.kohsuke
maven-skin
1.2
${reports}
trilead-putty-extension-trilead-putty-extension-1.2/src/test/ 0000775 0000000 0000000 00000000000 11761227123 0024564 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/java/ 0000775 0000000 0000000 00000000000 11761227123 0025505 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/java/org/ 0000775 0000000 0000000 00000000000 11761227123 0026274 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/java/org/kohsuke/ 0000775 0000000 0000000 00000000000 11761227123 0027745 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/java/org/kohsuke/putty/ 0000775 0000000 0000000 00000000000 11761227123 0031132 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/java/org/kohsuke/putty/PuTTYTest.java 0000664 0000000 0000000 00000002466 11761227123 0033632 0 ustar 00root root 0000000 0000000 package org.kohsuke.putty;
import junit.framework.TestCase;
import org.apache.commons.io.IOUtils;
import org.kohsuke.putty.PuTTYKey;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
/**
* @author Kohsuke Kawaguchi
*/
public class PuTTYTest extends TestCase {
public void test1enc() throws IOException {
PuTTYKey key = new PuTTYKey(getClass().getResourceAsStream("test1-encrypted.ppk"), "test");
verifyWith(key,"test1-openssh.txt");
}
public void test1() throws IOException {
PuTTYKey key = new PuTTYKey(getClass().getResourceAsStream("test1.ppk"),null);
verifyWith(key,"test1-openssh.txt");
}
public void test2enc() throws IOException {
PuTTYKey key = new PuTTYKey(getClass().getResourceAsStream("test2-encrypted.ppk"), "test");
verifyWith(key,"test2-openssh.txt");
}
public void test2() throws IOException {
PuTTYKey key = new PuTTYKey(getClass().getResourceAsStream("test2.ppk"),null);
verifyWith(key,"test2-openssh.txt");
}
private void verifyWith(PuTTYKey key, String res) throws IOException {
List answer = IOUtils.readLines(getClass().getResourceAsStream(res));
List test = IOUtils.readLines(new StringReader(key.toOpenSSH()));
assertEquals(answer,test);
}
}
trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/ 0000775 0000000 0000000 00000000000 11761227123 0026576 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/ 0000775 0000000 0000000 00000000000 11761227123 0027365 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/ 0000775 0000000 0000000 00000000000 11761227123 0031036 5 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty/ 0000775 0000000 0000000 00000000000 11761227123 0032223 5 ustar 00root root 0000000 0000000 test1-encrypted.ppk 0000664 0000000 0000000 00000001523 11761227123 0035714 0 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty PuTTY-User-Key-File-2: ssh-rsa
Encryption: aes256-cbc
Comment: rsa-key-20080514
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIEAiPVUpONjGeVrwgRPOqy3Ym6kF/f8bltnmjA2
BMdAtaOpiD8A2ooqtLS5zWYuc0xkW0ogoKvORN+RF4JI+uNUlkxWxnzJM9JLpnvA
HrMoVFaQ0cgDMIHtE1Ob1cGAhlNInPCRnGNJpBNcJ/OJye3yt7WqHP4SPCCLb6nL
nmBUrLM=
Private-Lines: 8
tkv5O5P7vkoSVZB9LX5qvAO1kt/hPhGf27UM93Ti3UDay1KU3pVG0yJt7I3J6wD1
GHq0CGzl1jbAAD+dm4lTmIYTmNE46QgWG6G5IWAbtTsixh+qRIW+z6GmYvgbDl7s
ijqPOcB5AW5+4vTowi4hh49u23/CHKl0Jx5jL3o6j16ytXqJlHoCjR5HoIe720m0
BzF9XdJxXsXw0lTZ7qe9w/Nhofue1YBEMK49HQkoCmFPqpMvsB86I/G9VbrjAYMS
rFLnF482a/+drJtZ3BUborv7iisFL+ZTtr/8IuZtPOi4IqzHr62l+CrIZMMfu9Bv
KsRKx1Wqbb61v8sfbkDGQeb0tVo7PqatEfdz2Dp2X/ScWakUm5M9Zlwcai2TZ3eV
9VPfQDfVdK+sgBs85Qm3OQ5RgoTQFnyO1HH9Gi7sIhCMfVqeCfLC2sPzpAET6qE0
qyEUeF4MFjxsfABY0eZQZw==
Private-MAC: f1c3796f2906e45280f6e0a4e6e68248e0278c0f
test1-openssh.txt 0000664 0000000 0000000 00000001563 11761227123 0035427 0 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty -----BEGIN RSA PRIVATE KEY-----
MIICWgIBAAKBgQCI9VSk42MZ5WvCBE86rLdibqQX9/xuW2eaMDYEx0C1o6mIPwDa
iiq0tLnNZi5zTGRbSiCgq85E35EXgkj641SWTFbGfMkz0kume8AesyhUVpDRyAMw
ge0TU5vVwYCGU0ic8JGcY0mkE1wn84nJ7fK3taoc/hI8IItvqcueYFSsswIBJQKB
gGtYgJzpktzyFjBIkSAmgeVdozVhgKmF6WsDMUID9HKwtU8cn83h6h7ug8qAhUWc
vVxO201/vViTjWVz9ALph3uMnpJiuQaaNYIGztGJBRsBwmQW9738pUXcsUXZ79KJ
P01oHn6Wkrgk26DIOsz04QOBI6C8RumBO4+F1WdfueM9AkEA5gOIXCvAcZ1bRKXB
d9dJig957GyagEXcOTVfZAsT5xLJsu0stS+Dm/50yK8p23NzAPR0FSZFM+1dL2uT
45v0+wJBAJhucbRQR6TCTQsbUeTGHU6sozELDYpYw3xpzcvQtUGD9OTwScHahPjk
YZ4lrDsrN2g4wVnPSJcuxUs1SM2faakCQB8VO/DHpGJhX1xNwDLKENtOMxIcg5TL
K5kHNmd3Hl1/FFZzE+EiGLQ3JInSe0crRuR0D6/UvT5eWLNhkIaKsmcCQCUT8iTw
7tUMqvTdIcIGrS7QDAUCsEQ/Gss8VKcyxE402rQ6cs5J6P5FY9pcMNAfRNQpeyOu
9ftCul5m6DIELnUCQQCN6SEfWqiNzyc/w5n/lFVDHExfVUJp0wXv+kzZzylnw4fs
00lC3k4PZDSsb+jYCMesnfJjhDgkUA0XPyo8Emdk
-----END RSA PRIVATE KEY-----
trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty/test1.ppk 0000664 0000000 0000000 00000001471 11761227123 0034002 0 ustar 00root root 0000000 0000000 PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20080514
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIEAiPVUpONjGeVrwgRPOqy3Ym6kF/f8bltnmjA2
BMdAtaOpiD8A2ooqtLS5zWYuc0xkW0ogoKvORN+RF4JI+uNUlkxWxnzJM9JLpnvA
HrMoVFaQ0cgDMIHtE1Ob1cGAhlNInPCRnGNJpBNcJ/OJye3yt7WqHP4SPCCLb6nL
nmBUrLM=
Private-Lines: 8
AAAAgGtYgJzpktzyFjBIkSAmgeVdozVhgKmF6WsDMUID9HKwtU8cn83h6h7ug8qA
hUWcvVxO201/vViTjWVz9ALph3uMnpJiuQaaNYIGztGJBRsBwmQW9738pUXcsUXZ
79KJP01oHn6Wkrgk26DIOsz04QOBI6C8RumBO4+F1WdfueM9AAAAQQDmA4hcK8Bx
nVtEpcF310mKD3nsbJqARdw5NV9kCxPnEsmy7Sy1L4Ob/nTIrynbc3MA9HQVJkUz
7V0va5Pjm/T7AAAAQQCYbnG0UEekwk0LG1Hkxh1OrKMxCw2KWMN8ac3L0LVBg/Tk
8EnB2oT45GGeJaw7KzdoOMFZz0iXLsVLNUjNn2mpAAAAQQCN6SEfWqiNzyc/w5n/
lFVDHExfVUJp0wXv+kzZzylnw4fs00lC3k4PZDSsb+jYCMesnfJjhDgkUA0XPyo8
Emdk
Private-MAC: 50c45751d18d74c00fca395deb7b7695e3ed6f77
test2-encrypted.ppk 0000664 0000000 0000000 00000001443 11761227123 0035716 0 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty PuTTY-User-Key-File-2: ssh-dss
Encryption: aes256-cbc
Comment: dsa-key-20080514
Public-Lines: 10
AAAAB3NzaC1kc3MAAACBAKcvdT5wspR3XR1b6xaXKUgZYxfOjOytKT8RBvtZiTpp
23wx2x31Dl2oXw+MOpoVTZMSwv+JC8QMr4wViEMeC3suA0tyW9r0XPHmEJ0e7ctw
iryqMZeuzBXVV7kkE8mzKgGXaHirJ5j2FuElBrEkXNJ8RgeDAXfKNt7ID5ph+mzl
AAAAFQC7iQ0hOR/gC30f+r6r0jGs6FpntQAAAIEAgyMO0bw1bq+7T51HQJOjnO2v
2UWuWLJAzyTSEhddfw+3fj162QVsShfPRiFV5ZmA5p32SaFm8G3e6G4a2WRrwy3q
aYrQ7hk/G759aMCD66ES2yAl8Z3MePsEEvJjwuobL8wzHkQOL7fNqOCWwipEuzpF
afzrXYWf7DKx4c1vPMYAAACAAiD8nRuDM+3ntocUBpdJSKZjnG8Ws1hCUVcZlBKV
er6EFfHigDBK//K2o8Y5lmZcLlOjRYfB9iPYyk95+C5tldd6NRuSp5H+hUbc6+P5
x2UhWPceNel4rEwK1cWwE0/4hiI/K+iyiZ4bYEbRzwfbuDferI9mS/zL2pd2zGHw
oik=
Private-Lines: 1
UJQn7pw6IHbA+DWyBHq3rGTWLCQ3Z7ucz5NAo6prTnA=
Private-MAC: 7888f3cc7bb7582cbc666cb6aab61dfe1a86c446
test2-openssh.txt 0000664 0000000 0000000 00000001234 11761227123 0035423 0 ustar 00root root 0000000 0000000 trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty -----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQCnL3U+cLKUd10dW+sWlylIGWMXzozsrSk/EQb7WYk6adt8Mdsd
9Q5dqF8PjDqaFU2TEsL/iQvEDK+MFYhDHgt7LgNLclva9Fzx5hCdHu3LcIq8qjGX
rswV1Ve5JBPJsyoBl2h4qyeY9hbhJQaxJFzSfEYHgwF3yjbeyA+aYfps5QIVALuJ
DSE5H+ALfR/6vqvSMazoWme1AoGBAIMjDtG8NW6vu0+dR0CTo5ztr9lFrliyQM8k
0hIXXX8Pt349etkFbEoXz0YhVeWZgOad9kmhZvBt3uhuGtlka8Mt6mmK0O4ZPxu+
fWjAg+uhEtsgJfGdzHj7BBLyY8LqGy/MMx5EDi+3zajglsIqRLs6RWn8612Fn+wy
seHNbzzGAoGAAiD8nRuDM+3ntocUBpdJSKZjnG8Ws1hCUVcZlBKVer6EFfHigDBK
//K2o8Y5lmZcLlOjRYfB9iPYyk95+C5tldd6NRuSp5H+hUbc6+P5x2UhWPceNel4
rEwK1cWwE0/4hiI/K+iyiZ4bYEbRzwfbuDferI9mS/zL2pd2zGHwoikCFHpOruqg
qowWEPmBEsFBuXt9bDLx
-----END DSA PRIVATE KEY-----
trilead-putty-extension-trilead-putty-extension-1.2/src/test/resources/org/kohsuke/putty/test2.ppk 0000664 0000000 0000000 00000001421 11761227123 0033776 0 ustar 00root root 0000000 0000000 PuTTY-User-Key-File-2: ssh-dss
Encryption: none
Comment: dsa-key-20080514
Public-Lines: 10
AAAAB3NzaC1kc3MAAACBAKcvdT5wspR3XR1b6xaXKUgZYxfOjOytKT8RBvtZiTpp
23wx2x31Dl2oXw+MOpoVTZMSwv+JC8QMr4wViEMeC3suA0tyW9r0XPHmEJ0e7ctw
iryqMZeuzBXVV7kkE8mzKgGXaHirJ5j2FuElBrEkXNJ8RgeDAXfKNt7ID5ph+mzl
AAAAFQC7iQ0hOR/gC30f+r6r0jGs6FpntQAAAIEAgyMO0bw1bq+7T51HQJOjnO2v
2UWuWLJAzyTSEhddfw+3fj162QVsShfPRiFV5ZmA5p32SaFm8G3e6G4a2WRrwy3q
aYrQ7hk/G759aMCD66ES2yAl8Z3MePsEEvJjwuobL8wzHkQOL7fNqOCWwipEuzpF
afzrXYWf7DKx4c1vPMYAAACAAiD8nRuDM+3ntocUBpdJSKZjnG8Ws1hCUVcZlBKV
er6EFfHigDBK//K2o8Y5lmZcLlOjRYfB9iPYyk95+C5tldd6NRuSp5H+hUbc6+P5
x2UhWPceNel4rEwK1cWwE0/4hiI/K+iyiZ4bYEbRzwfbuDferI9mS/zL2pd2zGHw
oik=
Private-Lines: 1
AAAAFHpOruqgqowWEPmBEsFBuXt9bDLx
Private-MAC: 32c9b2f07721f69c2ead252aa9c9849b1e532798