From 57b5ef5301ece8459b4f1436b9c5a82a6088d5d3 Mon Sep 17 00:00:00 2001 From: Jeremy Norris Date: Thu, 12 Jan 2023 12:44:20 -0600 Subject: [PATCH] Add support for ECDSA & EdDSA type PuTTY keys. --- src/main/java/com/jcraft/jsch/KeyPair.java | 38 ++++- .../java/com/jcraft/jsch/KeyPairECDSA.java | 5 +- .../java/com/jcraft/jsch/KeyPairEdDSA.java | 50 ++++--- src/test/java/com/jcraft/jsch/KeyPair2IT.java | 131 ++++++++++++++++++ .../java/com/jcraft/jsch/KeyPair2Test.java | 45 ++++++ .../java/com/jcraft/jsch/KeyPairTest.java | 18 ++- .../docker/authorized_keys.KeyPair2IT | 4 + .../docker/authorized_keys.KeyPairIT | 16 +++ src/test/resources/ppkv2_ecdsa256_unix.ppk | 10 ++ .../ppkv2_ecdsa256_unix_encrypted.ppk | 10 ++ src/test/resources/ppkv2_ecdsa256_windows.ppk | 10 ++ .../ppkv2_ecdsa256_windows_encrypted.ppk | 10 ++ src/test/resources/ppkv2_ecdsa384_unix.ppk | 11 ++ .../ppkv2_ecdsa384_unix_encrypted.ppk | 11 ++ src/test/resources/ppkv2_ecdsa384_windows.ppk | 11 ++ .../ppkv2_ecdsa384_windows_encrypted.ppk | 11 ++ src/test/resources/ppkv2_ecdsa521_unix.ppk | 12 ++ .../ppkv2_ecdsa521_unix_encrypted.ppk | 12 ++ src/test/resources/ppkv2_ecdsa521_windows.ppk | 12 ++ .../ppkv2_ecdsa521_windows_encrypted.ppk | 12 ++ src/test/resources/ppkv2_ed25519_unix.ppk | 9 ++ .../ppkv2_ed25519_unix_encrypted.ppk | 9 ++ src/test/resources/ppkv2_ed25519_windows.ppk | 9 ++ .../ppkv2_ed25519_windows_encrypted.ppk | 9 ++ src/test/resources/ppkv2_ed448_unix.ppk | 10 ++ .../resources/ppkv2_ed448_unix_encrypted.ppk | 10 ++ src/test/resources/ppkv2_ed448_windows.ppk | 10 ++ .../ppkv2_ed448_windows_encrypted.ppk | 10 ++ 28 files changed, 493 insertions(+), 22 deletions(-) create mode 100644 src/test/java/com/jcraft/jsch/KeyPair2IT.java create mode 100644 src/test/java/com/jcraft/jsch/KeyPair2Test.java create mode 100644 src/test/resources/docker/authorized_keys.KeyPair2IT create mode 100644 src/test/resources/ppkv2_ecdsa256_unix.ppk create mode 100644 src/test/resources/ppkv2_ecdsa256_unix_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ecdsa256_windows.ppk create mode 100644 src/test/resources/ppkv2_ecdsa256_windows_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ecdsa384_unix.ppk create mode 100644 src/test/resources/ppkv2_ecdsa384_unix_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ecdsa384_windows.ppk create mode 100644 src/test/resources/ppkv2_ecdsa384_windows_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ecdsa521_unix.ppk create mode 100644 src/test/resources/ppkv2_ecdsa521_unix_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ecdsa521_windows.ppk create mode 100644 src/test/resources/ppkv2_ecdsa521_windows_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ed25519_unix.ppk create mode 100644 src/test/resources/ppkv2_ed25519_unix_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ed25519_windows.ppk create mode 100644 src/test/resources/ppkv2_ed25519_windows_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ed448_unix.ppk create mode 100644 src/test/resources/ppkv2_ed448_unix_encrypted.ppk create mode 100644 src/test/resources/ppkv2_ed448_windows.ppk create mode 100644 src/test/resources/ppkv2_ed448_windows_encrypted.ppk diff --git a/src/main/java/com/jcraft/jsch/KeyPair.java b/src/main/java/com/jcraft/jsch/KeyPair.java index 06bb8cac..74815165 100644 --- a/src/main/java/com/jcraft/jsch/KeyPair.java +++ b/src/main/java/com/jcraft/jsch/KeyPair.java @@ -1151,12 +1151,12 @@ static KeyPair loadPPK(JSch jsch, byte[] buf) throws JSchException { KeyPair kpair = null; if(typ.equals("ssh-rsa")) { - Buffer _buf = new Buffer(pubkey); _buf.skip(pubkey.length); int len = _buf.getInt(); _buf.getByte(new byte[len]); // ssh-rsa + byte[] pub_array = new byte[_buf.getInt()]; _buf.getByte(pub_array); byte[] n_array = new byte[_buf.getInt()]; @@ -1182,6 +1182,42 @@ else if(typ.equals("ssh-dss")){ kpair = new KeyPairDSA(jsch, p_array, q_array, g_array, y_array, null); } + else if(typ.equals("ecdsa-sha2-nistp256") || typ.equals("ecdsa-sha2-nistp384") || typ.equals("ecdsa-sha2-nistp521")){ + Buffer _buf = new Buffer(pubkey); + _buf.skip(pubkey.length); + + int len = _buf.getInt(); + _buf.getByte(new byte[len]); // ecdsa-sha2-nistpXXX + + byte[] name = new byte[_buf.getInt()]; + _buf.getByte(name); // nistpXXX + + len = _buf.getInt(); + int x04 = _buf.getByte(); // in case of x04 it is uncompressed https://tools.ietf.org/html/rfc5480#page-7 + byte[] r_array = new byte[(len - 1) / 2]; + byte[] s_array = new byte[(len - 1) / 2]; + _buf.getByte(r_array); + _buf.getByte(s_array); + + kpair = new KeyPairECDSA(jsch, name, r_array, s_array, null); + } + else if(typ.equals("ssh-ed25519") || typ.equals("ssh-ed448")){ + Buffer _buf = new Buffer(pubkey); + _buf.skip(pubkey.length); + + int len = _buf.getInt(); + _buf.getByte(new byte[len]); // ssh-edXXX + + byte[] pub_array = new byte[_buf.getInt()]; + _buf.getByte(pub_array); + + if(typ.equals("ssh-ed25519")){ + kpair = new KeyPairEd25519(jsch, pub_array, null); + } + else{ + kpair = new KeyPairEd448(jsch, pub_array, null); + } + } else { return null; } diff --git a/src/main/java/com/jcraft/jsch/KeyPairECDSA.java b/src/main/java/com/jcraft/jsch/KeyPairECDSA.java index 283e520b..eee374d5 100644 --- a/src/main/java/com/jcraft/jsch/KeyPairECDSA.java +++ b/src/main/java/com/jcraft/jsch/KeyPairECDSA.java @@ -178,21 +178,20 @@ boolean parse(byte[] plain){ return false; } else if(vendor==VENDOR_PUTTY){ - /* Buffer buf=new Buffer(plain); buf.skip(plain.length); try { byte[][] tmp = buf.getBytes(1, ""); prv_array = tmp[0]; + key_size = prv_array.length>=64 ? 521 : + (prv_array.length>=48 ? 384 : 256); } catch(JSchException e){ return false; } return true; - */ - return false; } // OPENSSH Key v1 Format diff --git a/src/main/java/com/jcraft/jsch/KeyPairEdDSA.java b/src/main/java/com/jcraft/jsch/KeyPairEdDSA.java index 48246d40..9d9d78e9 100644 --- a/src/main/java/com/jcraft/jsch/KeyPairEdDSA.java +++ b/src/main/java/com/jcraft/jsch/KeyPairEdDSA.java @@ -74,27 +74,43 @@ void generate(int key_size) throws JSchException{ @Override boolean parse(byte [] plain){ + if(vendor==VENDOR_PUTTY){ + Buffer buf=new Buffer(plain); + buf.skip(plain.length); - // Only OPENSSH Key v1 Format supported for EdDSA keys - if(vendor != VENDOR_OPENSSH_V1) return false; - try{ - // OPENSSH Key v1 Format - final Buffer buf = new Buffer(plain); - int checkInt1 = buf.getInt(); // uint32 checkint1 - int checkInt2 = buf.getInt(); // uint32 checkint2 - if (checkInt1 != checkInt2) { - throw new JSchException("check failed"); + try { + byte[][] tmp = buf.getBytes(1, ""); + prv_array = tmp[0]; + } + catch(JSchException e){ + return false; } - String keyType = Util.byte2str(buf.getString()); // string keytype - pub_array = buf.getString(); // public key - // OpenSSH stores private key in first half of string and duplicate copy of public key in second half of string - byte[] tmp = buf.getString(); // secret key (private key + public key) - prv_array = Arrays.copyOf(tmp, getKeySize()); - publicKeyComment = Util.byte2str(buf.getString()); + return true; } - catch(Exception e){ - //System.err.println(e); + else if(vendor==VENDOR_OPENSSH_V1){ + try{ + // OPENSSH Key v1 Format + final Buffer buf = new Buffer(plain); + int checkInt1 = buf.getInt(); // uint32 checkint1 + int checkInt2 = buf.getInt(); // uint32 checkint2 + if (checkInt1 != checkInt2) { + throw new JSchException("check failed"); + } + String keyType = Util.byte2str(buf.getString()); // string keytype + pub_array = buf.getString(); // public key + // OpenSSH stores private key in first half of string and duplicate copy of public key in second half of string + byte[] tmp = buf.getString(); // secret key (private key + public key) + prv_array = Arrays.copyOf(tmp, getKeySize()); + publicKeyComment = Util.byte2str(buf.getString()); + return true; + } + catch(Exception e){ + //System.err.println(e); + return false; + } + } + else { return false; } } diff --git a/src/test/java/com/jcraft/jsch/KeyPair2IT.java b/src/test/java/com/jcraft/jsch/KeyPair2IT.java new file mode 100644 index 00000000..a371d3f4 --- /dev/null +++ b/src/test/java/com/jcraft/jsch/KeyPair2IT.java @@ -0,0 +1,131 @@ +package com.jcraft.jsch; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.builder.ImageFromDockerfile; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.net.URISyntaxException; +import java.nio.file.Paths; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +@Testcontainers +public class KeyPair2IT { + + // Python can be slow for DH group 18 + private static final int timeout = 10000; + + @Container + public GenericContainer sshd = new GenericContainer<>( + new ImageFromDockerfile().withFileFromClasspath("asyncsshd.py", "docker/asyncsshd.py") + .withFileFromClasspath("ssh_host_ed448_key", "docker/ssh_host_ed448_key") + .withFileFromClasspath("ssh_host_ed448_key.pub", "docker/ssh_host_ed448_key.pub") + .withFileFromClasspath("ssh_host_rsa_key", "docker/ssh_host_rsa_key") + .withFileFromClasspath("ssh_host_rsa_key.pub", "docker/ssh_host_rsa_key.pub") + .withFileFromClasspath("ssh_host_ecdsa256_key", "docker/ssh_host_ecdsa256_key") + .withFileFromClasspath("ssh_host_ecdsa256_key.pub", "docker/ssh_host_ecdsa256_key.pub") + .withFileFromClasspath("ssh_host_ecdsa384_key", "docker/ssh_host_ecdsa384_key") + .withFileFromClasspath("ssh_host_ecdsa384_key.pub", "docker/ssh_host_ecdsa384_key.pub") + .withFileFromClasspath("ssh_host_ecdsa521_key", "docker/ssh_host_ecdsa521_key") + .withFileFromClasspath("ssh_host_ecdsa521_key.pub", "docker/ssh_host_ecdsa521_key.pub") + .withFileFromClasspath("ssh_host_ed25519_key", "docker/ssh_host_ed25519_key") + .withFileFromClasspath("ssh_host_ed25519_key.pub", "docker/ssh_host_ed25519_key.pub") + .withFileFromClasspath("ssh_host_dsa_key", "docker/ssh_host_dsa_key") + .withFileFromClasspath("ssh_host_dsa_key.pub", "docker/ssh_host_dsa_key.pub") + .withFileFromClasspath("authorized_keys", "docker/authorized_keys.KeyPair2IT") + .withFileFromClasspath("Dockerfile", "docker/Dockerfile.asyncssh")).withExposedPorts(22); + + @ParameterizedTest + @MethodSource("com.jcraft.jsch.KeyPair2Test#keyArgs") + void connectWithPublicKey(String path, String password, String keyType) throws Exception { + + final JSch jSch = createIdentity(path, password); + + Session session = createSession(jSch); + + if (keyType != null) { + session.setConfig("PubkeyAcceptedAlgorithms", keyType); + } + try { + session.connect(timeout); + assertTrue(session.isConnected()); + } finally { + session.disconnect(); + } + + } + + @ParameterizedTest + @MethodSource("com.jcraft.jsch.KeyPair2Test#keyArgs") + void connectWithPublicKeyAndUserInfo(String path, String password, String keyType) throws Exception { + + final JSch jSch = new JSch(); + + jSch.addIdentity(Paths.get(ClassLoader.getSystemResource(path).toURI()).toFile().getAbsolutePath()); + + Session session = createSession(jSch); + session.setUserInfo(new UserInfo() { + @Override + public String getPassphrase() { + return password; + } + + @Override + public String getPassword() { + return null; + } + + @Override + public boolean promptPassword(String message) { + return false; + } + + @Override + public boolean promptPassphrase(String message) { + return true; + } + + @Override + public boolean promptYesNo(String message) { + return false; + } + + @Override + public void showMessage(String message) { + + } + }); + + if (keyType != null) { + session.setConfig("PubkeyAcceptedAlgorithms", keyType); + } + try { + session.connect(timeout); + assertTrue(session.isConnected()); + } finally { + session.disconnect(); + } + + } + + private JSch createIdentity(String path, String password) throws JSchException, URISyntaxException { + JSch ssh = new JSch(); + if (password != null) { + ssh.addIdentity(Paths.get(ClassLoader.getSystemResource(path).toURI()).toFile().getAbsolutePath(), + password); + } else { + ssh.addIdentity(Paths.get(ClassLoader.getSystemResource(path).toURI()).toFile().getAbsolutePath()); + } + return ssh; + } + + private Session createSession(JSch ssh) throws Exception { + Session session = ssh.getSession("root", sshd.getHost(), sshd.getFirstMappedPort()); + session.setConfig("StrictHostKeyChecking", "no"); + session.setConfig("PreferredAuthentications", "publickey"); + return session; + } +} diff --git a/src/test/java/com/jcraft/jsch/KeyPair2Test.java b/src/test/java/com/jcraft/jsch/KeyPair2Test.java new file mode 100644 index 00000000..d30c1124 --- /dev/null +++ b/src/test/java/com/jcraft/jsch/KeyPair2Test.java @@ -0,0 +1,45 @@ +package com.jcraft.jsch; + +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.io.File; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +class KeyPair2Test { + + @TempDir + public Path tmpDir; + + static Stream keyArgs() { + return Stream.of( + Arguments.of("ppkv2_ed448_unix.ppk", null, "ssh-ed448"), + Arguments.of("ppkv2_ed448_unix_encrypted.ppk", "secret123", "ssh-ed448"), + Arguments.of("ppkv2_ed448_windows.ppk", null, "ssh-ed448"), + Arguments.of("ppkv2_ed448_windows_encrypted.ppk", "secret123", "ssh-ed448") + ); + } + + @ParameterizedTest + @MethodSource("keyArgs") + void loadKey(String path, String password, String keyType) throws URISyntaxException, JSchException { + final JSch jSch = new JSch(); + final String prvkey = Paths.get(ClassLoader.getSystemResource(path).toURI()).toFile().getAbsolutePath(); + assertTrue(new File(prvkey).exists()); + assertDoesNotThrow(() -> { + if (null != password) { + jSch.addIdentity(prvkey, password); + } else { + jSch.addIdentity(prvkey); + } + }); + assertEquals(keyType, jSch.getIdentityRepository().getIdentities().get(0).getAlgName()); + } +} diff --git a/src/test/java/com/jcraft/jsch/KeyPairTest.java b/src/test/java/com/jcraft/jsch/KeyPairTest.java index 1d53e82b..0012c782 100644 --- a/src/test/java/com/jcraft/jsch/KeyPairTest.java +++ b/src/test/java/com/jcraft/jsch/KeyPairTest.java @@ -52,7 +52,23 @@ static Stream keyArgs() { Arguments.of("ppkv2_rsa_unix.ppk", null, "ssh-rsa"), Arguments.of("ppkv2_rsa_unix_encrypted.ppk", "secret123", "ssh-rsa"), Arguments.of("ppkv2_rsa_windows.ppk", null, "ssh-rsa"), - Arguments.of("ppkv2_rsa_windows_encrypted.ppk", "secret123", "ssh-rsa") + Arguments.of("ppkv2_rsa_windows_encrypted.ppk", "secret123", "ssh-rsa"), + Arguments.of("ppkv2_ecdsa256_unix.ppk", null, "ecdsa-sha2-nistp256"), + Arguments.of("ppkv2_ecdsa256_unix_encrypted.ppk", "secret123", "ecdsa-sha2-nistp256"), + Arguments.of("ppkv2_ecdsa384_unix.ppk", null, "ecdsa-sha2-nistp384"), + Arguments.of("ppkv2_ecdsa384_unix_encrypted.ppk", "secret123", "ecdsa-sha2-nistp384"), + Arguments.of("ppkv2_ecdsa521_unix.ppk", null, "ecdsa-sha2-nistp521"), + Arguments.of("ppkv2_ecdsa521_unix_encrypted.ppk", "secret123", "ecdsa-sha2-nistp521"), + Arguments.of("ppkv2_ecdsa256_windows.ppk", null, "ecdsa-sha2-nistp256"), + Arguments.of("ppkv2_ecdsa256_windows_encrypted.ppk", "secret123", "ecdsa-sha2-nistp256"), + Arguments.of("ppkv2_ecdsa384_windows.ppk", null, "ecdsa-sha2-nistp384"), + Arguments.of("ppkv2_ecdsa384_windows_encrypted.ppk", "secret123", "ecdsa-sha2-nistp384"), + Arguments.of("ppkv2_ecdsa521_windows.ppk", null, "ecdsa-sha2-nistp521"), + Arguments.of("ppkv2_ecdsa521_windows_encrypted.ppk", "secret123", "ecdsa-sha2-nistp521"), + Arguments.of("ppkv2_ed25519_unix.ppk", null, "ssh-ed25519"), + Arguments.of("ppkv2_ed25519_unix_encrypted.ppk", "secret123", "ssh-ed25519"), + Arguments.of("ppkv2_ed25519_windows.ppk", null, "ssh-ed25519"), + Arguments.of("ppkv2_ed25519_windows_encrypted.ppk", "secret123", "ssh-ed25519") ); } diff --git a/src/test/resources/docker/authorized_keys.KeyPair2IT b/src/test/resources/docker/authorized_keys.KeyPair2IT new file mode 100644 index 00000000..9ef8866a --- /dev/null +++ b/src/test/resources/docker/authorized_keys.KeyPair2IT @@ -0,0 +1,4 @@ +ssh-ed448 AAAACXNzaC1lZDQ0OAAAADnTDrr21+87QbcPF+2Ayh61ot/Jtf0c9yTy126ki8Um/UUEW6uy87s/9gpS0OHyoH3GO3WgsUoe/AA= test +ssh-ed448 AAAACXNzaC1lZDQ0OAAAADnwdqOa0pIeeorEzsEY7kskGeyZfhpkYZtbA/iR5Nyp0cbPZnl9UFsfKQIYKJwPWwnim8BXTkEq6YA= test +ssh-ed448 AAAACXNzaC1lZDQ0OAAAADk5uIOJgx7OfFkbkRV43yMP37dcnIVemLPjlaH/WRKjLTwueFIgN5Mc4UYcIZtlbAaUhiiEvW7aYQA= test +ssh-ed448 AAAACXNzaC1lZDQ0OAAAADkVNtCwBIBWO41k+QYmuMromfii6QbjVKRxjxbTYGPDaw8u+gSCHAnqgaxi9qkc7HU0U01BJI5tJgA= test diff --git a/src/test/resources/docker/authorized_keys.KeyPairIT b/src/test/resources/docker/authorized_keys.KeyPairIT index 0479370f..65cc67e7 100644 --- a/src/test/resources/docker/authorized_keys.KeyPairIT +++ b/src/test/resources/docker/authorized_keys.KeyPairIT @@ -21,3 +21,19 @@ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDsUXXjApfYYCtRK2LrymKvcZpS4cf6agyOj1/VW48g ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCXX5GPy2zMByhViM5aW+lVH3oPVBVvsfXjb7Afy2ldttHHkDMhoQKMNUScBTdyLwHrje6c0C99aYNkSl5TLXePWx4nIkNFrEyhOfooY8CHPTuhCjfy+4A/psxeE5aoI5YGfffSr0uOVOUdhV3X3p1SmQsybzSiFz0THULrtirxoCbf5a1UGNafYoXPvtSS3/qGJnsnbxE/gL2mTEvOyLI7o3ffFIgbfOranbuow/HSboX/Uc9i2FsbJR4i6K5A6KB3NIL3gFJHxzjumJB4QXt7mUXzo0FWnOXLORFrzYd1Rf26AVcUc24wwStVAOtXO3EIr/AylwgsqWqoStOzoRFB test ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdPnSRJDt/YuU5Oj1gq6JKYsJacWbgsdU+vpzAT7IiIVOoGB7oPi8EGcZSt1kIJBc9Lf70uRYCbCmq3v3EOLGpSdhV16oKQygSgSZawq2YwYHzHnonp6akLfQQXwE/nnubX3S6iYAaJSrJ50APhKfQXYsz4CH2alrzYb9Y2TDl4hKfxYABgMza3O02BFooK2tbxy2+0fbOKB/qjamGVE/CoMcv4ChB9FDGdUr0AVy7BYtfELAZ1dPrUh7lMCXa6JRRhFtdRWQGKmfM1nH/KpuzB+yZsl8kfHf47qiX/mwTQM87JMxm7HuV8pHHr7DNFs9g30CreF+hbY1Cx+IKh+eR test ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCPJDCMNOM7Huv+NNeP626Slq54aPceMLEaoqlfvLJiQf11b8jXcKfFgLlp/f0Ltk10p+5hAGlzBw/nlYRU85i7Eq75kSb6LPcQ3SNY1/NkrNcZcFf4p/AKeC0s1qgbypvjWy7Zk8AUooPFrhIo/kKaPMouq4hcyENz2VKgpdJ21SzTxjDASj7zd9DZP8uc1Lsg3ftbr8Mi+MFFQRnFPLv/w2zIoLo6xwO0UplUIyAGAsRPDdRZQ50h9b5BFyFLnXUlwI/Jrpgs2J31Vg8J2j2Y3BFDgn/Mf/P9Rsvdo4fp/y+W195198VQ2gsH2+Az+3Id6ySsGhztBP5Pl2Z2K5Pt test +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCo/5qxk4V6ZZGDFHDeVBr7ayBkc85+7SPuuY2OnBSrObqo06lw3nlH8dcloRzCt7qYvbmWTutlTujgSOJuvd3A= test +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAJ3Mot6VLEkkG5HscBLY3geI20FnwrgQi2wzAKiktPDhF39ZavVlOMzvkIGgQDxmo8WoQllY52ed4e8+7KQ76M= test +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCDseBAbWBVvO3A6gqqd2+Qm9uSTBPEFvvj/huI35w7iYhMmIjWAYwi9av867hF9GsRJaPGSkoWUIcA6QBXarAM= test +ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKIrHi0RIW1gbd9+rJLTPJ5qAyXzNjEHidpxBzRnN22jDcnvBjqnAtfWPBjazs2KHSn/RP+KtyejY1Q+mMikDDk= test +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBBCTReLXxPo93rpl1xlrrx7yYZgD0DzRieTvFO9C3a8Z8blHuZHNy2iljsIYeCPOtK9lcivx+faOrp5FdE2VDroGPdDY2ZAuwF4/UxBiGNNEXWBhRFkupBcM6RbyjvCXaA== test +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBBRylqfIuL/Bzq92j3g4UHd3TOlU2aG1U/2W76hrf1svwNPNe5d81xXA6j7Uh+AxOYfYrJRQr9KotRvd8WcxbikMZs5O/dKG+xx8WmTcgvu+jVW4lCbZrZk4S7/hqIlVjw== test +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBPATBzcVXx8g+unFg+8RAEvjiY/ZSb98vuIQ6MAtFCkNU2zgUHI9m/Jn9FitFd/F7KlIh4G5/wMB2dGhks/FYSk+OxgAmhjif6lKLfD5veRCLhRnVbhTQm1fOmU0Sy+FSA== test +ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBGxZq9s9JfIvKluYcWj/f+OuiV0bJ9RLE8rT+8qF0syMvzZZVRqLmF+a9VxJ4uxxRVvmMQ1CXb5TGtLVdBv1SrviKWMoaBw/sosSMr8v3eoQ04f4bs32fx8/dN4JQbCZEg== test +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACuthNYwDJn4I/b0fdhJdD3ykWe5gMBS91H9qWt0NHh4QTYxVyu3npbLveRVr9AWoF36UYIVF0Z3WjFV4u4fOPapQFNlGDf1DNn8aipy/5iUKY02z+AxnWIIjToN0IPPizMw3LApwmy0UaBSw7sZyfxNHD0Nu8wXsP8A6HG+Y01zSMAqg== test +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAEUP4llO/qJcKrD5gZ6L+8+JzEU5RLICud1jgVh+QgtuuAZQUztdee3GEPmR+C9Mv5cAHg138OCNcyRI1eukjFNDgAq3xeh0V6BwjZZur+v5zyTnXQASBwuI+iofZZqS0z8lsM48eIluTZuo3siTlv6uvFLs4ovN/cg67QyGIpsKusESQ== test +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGIVlZVYKq71fKe0Uxj73A5WPmvTuohTARpvnJ0VB5zIHFEtHRuI7Qkn6pRGv8rbKDRKygv1kZc6rFZ2fgfhLxXcQHG1LwWM8x+XXoWMJM0C0kpCEErKd/tCZstQqg4v2JO0iG5+wmoZ90Cru912t24fhFGfVeFIbLN/xqznIm0dZTN/Q== test +ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACcIEokqqdXr1cB4vJksHNPuIb4HhwaRqaCi22yZa1slGr5+KQhWc6TaRP2yEsXaskuwThVy5hNjfONP/uB5IMj6QCxnR3bA/knuB2n7YRFlbIICLmCxr6QI5bz271MxCB+ccJO1L8sSfEsS6IcxH7O3rYv7hDadwcY9t5VmsJ3t7A67w== test +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINknjInRhIeQB0yCD/N+ilxpTNwD2OGA776pYHI8bOdZ test +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFYLKsn61Pg/YYmumVe7oXik0o+Ca/P3vvN0Om3KCHqo test +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHh90f1nUVIpoKQoYxtD66cTGgLZ33D3hCxVqS/N5R3u test +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILhbcrIlE43dp+IlosYszkS0c4zpwC60ec1MRwZuxwvr test diff --git a/src/test/resources/ppkv2_ecdsa256_unix.ppk b/src/test/resources/ppkv2_ecdsa256_unix.ppk new file mode 100644 index 00000000..1dd19011 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa256_unix.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp256 +Encryption: none +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCo/5qxk4V6Z +ZGDFHDeVBr7ayBkc85+7SPuuY2OnBSrObqo06lw3nlH8dcloRzCt7qYvbmWTutlT +ujgSOJuvd3A= +Private-Lines: 1 +AAAAIEfIpXqum0vHuX3aJmumOiRTGEcPs8cB6B5cmKV7j8Pq +Private-MAC: c2c907c13abcd1e429a8a53c162fb27fa32bf88d diff --git a/src/test/resources/ppkv2_ecdsa256_unix_encrypted.ppk b/src/test/resources/ppkv2_ecdsa256_unix_encrypted.ppk new file mode 100644 index 00000000..cbd6d7d5 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa256_unix_encrypted.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp256 +Encryption: aes256-cbc +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAJ3Mot6VLEk +kG5HscBLY3geI20FnwrgQi2wzAKiktPDhF39ZavVlOMzvkIGgQDxmo8WoQllY52e +d4e8+7KQ76M= +Private-Lines: 1 +Giq4fU1ffVMQzpRS7vPtl4eViHxNmagS8TmYqnvb4KsMip0XwtRkRd1tqV9UGS2F +Private-MAC: 9a55718d397e4bbbc0c00003bdcf5b8648da7f2c diff --git a/src/test/resources/ppkv2_ecdsa256_windows.ppk b/src/test/resources/ppkv2_ecdsa256_windows.ppk new file mode 100644 index 00000000..b571979d --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa256_windows.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp256 +Encryption: none +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCDseBAbWBVv +O3A6gqqd2+Qm9uSTBPEFvvj/huI35w7iYhMmIjWAYwi9av867hF9GsRJaPGSkoWU +IcA6QBXarAM= +Private-Lines: 1 +AAAAIQCY9fEH+jqw1o/AtlCcSjksNFSuUILNENI6mcLywmdQLA== +Private-MAC: 9ed0ea63718ce130ee11733dec5f91abfc076d30 diff --git a/src/test/resources/ppkv2_ecdsa256_windows_encrypted.ppk b/src/test/resources/ppkv2_ecdsa256_windows_encrypted.ppk new file mode 100644 index 00000000..a57c1476 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa256_windows_encrypted.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp256 +Encryption: aes256-cbc +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKIrHi0RIW1g +bd9+rJLTPJ5qAyXzNjEHidpxBzRnN22jDcnvBjqnAtfWPBjazs2KHSn/RP+Ktyej +Y1Q+mMikDDk= +Private-Lines: 1 +dYVv2mbM2lr/QhQ4Sro7ev9ztR0YAFD0ECI76rjyGRBTsbSH28KXEF4Vjq/eatWu +Private-MAC: 7034973c6f35c7da66e86c2bed7d8e8367bfd8ba diff --git a/src/test/resources/ppkv2_ecdsa384_unix.ppk b/src/test/resources/ppkv2_ecdsa384_unix.ppk new file mode 100644 index 00000000..7f705c81 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa384_unix.ppk @@ -0,0 +1,11 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp384 +Encryption: none +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBBCTReLXxPo9 +3rpl1xlrrx7yYZgD0DzRieTvFO9C3a8Z8blHuZHNy2iljsIYeCPOtK9lcivx+faO +rp5FdE2VDroGPdDY2ZAuwF4/UxBiGNNEXWBhRFkupBcM6RbyjvCXaA== +Private-Lines: 2 +AAAAMH0T4NXp6wOqp8DWnEmXGlmAD+I5ytsSdlhznBdprZ2+wPZWcoa5XME85BUY +p3HhlA== +Private-MAC: df1b26fba219f717cf75002855565ce1b3c065b3 diff --git a/src/test/resources/ppkv2_ecdsa384_unix_encrypted.ppk b/src/test/resources/ppkv2_ecdsa384_unix_encrypted.ppk new file mode 100644 index 00000000..20df843c --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa384_unix_encrypted.ppk @@ -0,0 +1,11 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp384 +Encryption: aes256-cbc +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBBRylqfIuL/B +zq92j3g4UHd3TOlU2aG1U/2W76hrf1svwNPNe5d81xXA6j7Uh+AxOYfYrJRQr9Ko +tRvd8WcxbikMZs5O/dKG+xx8WmTcgvu+jVW4lCbZrZk4S7/hqIlVjw== +Private-Lines: 2 +mKo1enxDPaVSSEiOYuEL76/0NHTZLDCZuwy/KVXskXb2gwUu4cdbr7Vwj1IHnkBN +GIBLGOWIDva5Spqj0XdDLA== +Private-MAC: 4666bb8eeacc4a0b137edf9e7a32632298f83910 diff --git a/src/test/resources/ppkv2_ecdsa384_windows.ppk b/src/test/resources/ppkv2_ecdsa384_windows.ppk new file mode 100644 index 00000000..5c66ebf4 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa384_windows.ppk @@ -0,0 +1,11 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp384 +Encryption: none +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBPATBzcVXx8g ++unFg+8RAEvjiY/ZSb98vuIQ6MAtFCkNU2zgUHI9m/Jn9FitFd/F7KlIh4G5/wMB +2dGhks/FYSk+OxgAmhjif6lKLfD5veRCLhRnVbhTQm1fOmU0Sy+FSA== +Private-Lines: 2 +AAAAMQDHKqb0OEYb1K4KBaXYiXqkC+ybUGbleKdkx4V4VPfkDavMdGsOoFsyquuv +CRh3/b8= +Private-MAC: 8ef4699bc3c514b09b56ff672f30237da3d0956b diff --git a/src/test/resources/ppkv2_ecdsa384_windows_encrypted.ppk b/src/test/resources/ppkv2_ecdsa384_windows_encrypted.ppk new file mode 100644 index 00000000..3d26f178 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa384_windows_encrypted.ppk @@ -0,0 +1,11 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp384 +Encryption: aes256-cbc +Comment: test +Public-Lines: 3 +AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBGxZq9s9JfIv +KluYcWj/f+OuiV0bJ9RLE8rT+8qF0syMvzZZVRqLmF+a9VxJ4uxxRVvmMQ1CXb5T +GtLVdBv1SrviKWMoaBw/sosSMr8v3eoQ04f4bs32fx8/dN4JQbCZEg== +Private-Lines: 2 +aTUgs7URruvHriTmaMe12Y4Ow5smlllupJ1BnErif5PwHd6MrXFCzYq0grADQKpS +0QaIGRrtXq4Hb7vvq+c6Mg== +Private-MAC: 79f4ff32f403112ce42a5206d0da4b9e53edf33a diff --git a/src/test/resources/ppkv2_ecdsa521_unix.ppk b/src/test/resources/ppkv2_ecdsa521_unix.ppk new file mode 100644 index 00000000..0f84e82c --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa521_unix.ppk @@ -0,0 +1,12 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp521 +Encryption: none +Comment: test +Public-Lines: 4 +AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACuthNYwDJn +4I/b0fdhJdD3ykWe5gMBS91H9qWt0NHh4QTYxVyu3npbLveRVr9AWoF36UYIVF0Z +3WjFV4u4fOPapQFNlGDf1DNn8aipy/5iUKY02z+AxnWIIjToN0IPPizMw3LApwmy +0UaBSw7sZyfxNHD0Nu8wXsP8A6HG+Y01zSMAqg== +Private-Lines: 2 +AAAAQXaGiZwhRZG+dlWCB8h9+wc0Qer7IjpJ3kiRyYXLTku+FloU3F0MXJiIOnFV +31joL2SC2QEHHLEmvBXMT48R8AYy +Private-MAC: 187e49c327364d784c54b3221adf18ad544339c3 diff --git a/src/test/resources/ppkv2_ecdsa521_unix_encrypted.ppk b/src/test/resources/ppkv2_ecdsa521_unix_encrypted.ppk new file mode 100644 index 00000000..e9d350a3 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa521_unix_encrypted.ppk @@ -0,0 +1,12 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp521 +Encryption: aes256-cbc +Comment: test +Public-Lines: 4 +AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAEUP4llO/qJ +cKrD5gZ6L+8+JzEU5RLICud1jgVh+QgtuuAZQUztdee3GEPmR+C9Mv5cAHg138OC +NcyRI1eukjFNDgAq3xeh0V6BwjZZur+v5zyTnXQASBwuI+iofZZqS0z8lsM48eIl +uTZuo3siTlv6uvFLs4ovN/cg67QyGIpsKusESQ== +Private-Lines: 2 +4OKuO5v+JHd96qUoo18Tb440u71nbpZNpXqSgBPr2VK5OAxVy+lqeccRtpAcUyXu +TU8TTrQGHTxGMNMMUxun9HDcV02oZ8It2MsywvtfTRM= +Private-MAC: e5aeb1290b219010b58cde9376db795b17dc1755 diff --git a/src/test/resources/ppkv2_ecdsa521_windows.ppk b/src/test/resources/ppkv2_ecdsa521_windows.ppk new file mode 100644 index 00000000..4527fdbb --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa521_windows.ppk @@ -0,0 +1,12 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp521 +Encryption: none +Comment: test +Public-Lines: 4 +AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAGIVlZVYKq7 +1fKe0Uxj73A5WPmvTuohTARpvnJ0VB5zIHFEtHRuI7Qkn6pRGv8rbKDRKygv1kZc +6rFZ2fgfhLxXcQHG1LwWM8x+XXoWMJM0C0kpCEErKd/tCZstQqg4v2JO0iG5+wmo +Z90Cru912t24fhFGfVeFIbLN/xqznIm0dZTN/Q== +Private-Lines: 2 +AAAAQQn76HAtrPDaRmvvO6XRFvuSRNt/onJPOFRF9pOFDZzBWbllnPf0vR5h7uOo +xn0UoPNYc1rQAd9s0a6LvEpMRUCJ +Private-MAC: d1deafe89f187d0f75d3d6eee2d292c5ee5f9dc1 diff --git a/src/test/resources/ppkv2_ecdsa521_windows_encrypted.ppk b/src/test/resources/ppkv2_ecdsa521_windows_encrypted.ppk new file mode 100644 index 00000000..676d5876 --- /dev/null +++ b/src/test/resources/ppkv2_ecdsa521_windows_encrypted.ppk @@ -0,0 +1,12 @@ +PuTTY-User-Key-File-2: ecdsa-sha2-nistp521 +Encryption: aes256-cbc +Comment: test +Public-Lines: 4 +AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBACcIEokqqdX +r1cB4vJksHNPuIb4HhwaRqaCi22yZa1slGr5+KQhWc6TaRP2yEsXaskuwThVy5hN +jfONP/uB5IMj6QCxnR3bA/knuB2n7YRFlbIICLmCxr6QI5bz271MxCB+ccJO1L8s +SfEsS6IcxH7O3rYv7hDadwcY9t5VmsJ3t7A67w== +Private-Lines: 2 +plCduQfYJ2kW2Gbi2B6Rb0I0PXb+YgMTClhaOFJwpqV+z3GY9YK0VEwYj05cZya1 +HjGOtG69IWuPjrI523dcNYOeegI2BAYhFJLq05T4R/M= +Private-MAC: 3e73192522ebf55488bfefe8d5033294dc39a972 diff --git a/src/test/resources/ppkv2_ed25519_unix.ppk b/src/test/resources/ppkv2_ed25519_unix.ppk new file mode 100644 index 00000000..e3fa8763 --- /dev/null +++ b/src/test/resources/ppkv2_ed25519_unix.ppk @@ -0,0 +1,9 @@ +PuTTY-User-Key-File-2: ssh-ed25519 +Encryption: none +Comment: test +Public-Lines: 2 +AAAAC3NzaC1lZDI1NTE5AAAAINknjInRhIeQB0yCD/N+ilxpTNwD2OGA776pYHI8 +bOdZ +Private-Lines: 1 +AAAAIKg8xC9HSZbf6mY5WU6F7OWr9VGuDnJWLayXM3omacpf +Private-MAC: ce1310f32622d44cb5d90198d482772bdd6bab72 diff --git a/src/test/resources/ppkv2_ed25519_unix_encrypted.ppk b/src/test/resources/ppkv2_ed25519_unix_encrypted.ppk new file mode 100644 index 00000000..e511c694 --- /dev/null +++ b/src/test/resources/ppkv2_ed25519_unix_encrypted.ppk @@ -0,0 +1,9 @@ +PuTTY-User-Key-File-2: ssh-ed25519 +Encryption: aes256-cbc +Comment: test +Public-Lines: 2 +AAAAC3NzaC1lZDI1NTE5AAAAIFYLKsn61Pg/YYmumVe7oXik0o+Ca/P3vvN0Om3K +CHqo +Private-Lines: 1 +QGanXsZXxLK4SWcL9Y1JnGZxcbfBlZD4h2wi4YsyefXbhaTKCnX/+7SaRdXmFRB9 +Private-MAC: 30b7b90fe3c142891eebd05cbdb9c5e06c6ba448 diff --git a/src/test/resources/ppkv2_ed25519_windows.ppk b/src/test/resources/ppkv2_ed25519_windows.ppk new file mode 100644 index 00000000..72eeaf00 --- /dev/null +++ b/src/test/resources/ppkv2_ed25519_windows.ppk @@ -0,0 +1,9 @@ +PuTTY-User-Key-File-2: ssh-ed25519 +Encryption: none +Comment: test +Public-Lines: 2 +AAAAC3NzaC1lZDI1NTE5AAAAIHh90f1nUVIpoKQoYxtD66cTGgLZ33D3hCxVqS/N +5R3u +Private-Lines: 1 +AAAAIH3OoVCpAhXZns3AaYJE7WXYQVUsY8RB7lwdJ9FXFS1u +Private-MAC: 5942475d67b84bc1c89ad2fdb502dd8537835e7b diff --git a/src/test/resources/ppkv2_ed25519_windows_encrypted.ppk b/src/test/resources/ppkv2_ed25519_windows_encrypted.ppk new file mode 100644 index 00000000..579c149a --- /dev/null +++ b/src/test/resources/ppkv2_ed25519_windows_encrypted.ppk @@ -0,0 +1,9 @@ +PuTTY-User-Key-File-2: ssh-ed25519 +Encryption: aes256-cbc +Comment: test +Public-Lines: 2 +AAAAC3NzaC1lZDI1NTE5AAAAILhbcrIlE43dp+IlosYszkS0c4zpwC60ec1MRwZu +xwvr +Private-Lines: 1 +ARj/EPcb2v9tt/miQAJGKAf3Iz8HkzMHl6Egc5M5VCu+mkRRnB1DIN6wNYtp7ncY +Private-MAC: 39813a46a634fd277b5a8bf379c804223df99027 diff --git a/src/test/resources/ppkv2_ed448_unix.ppk b/src/test/resources/ppkv2_ed448_unix.ppk new file mode 100644 index 00000000..cb99a2fb --- /dev/null +++ b/src/test/resources/ppkv2_ed448_unix.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ssh-ed448 +Encryption: none +Comment: test +Public-Lines: 2 +AAAACXNzaC1lZDQ0OAAAADnTDrr21+87QbcPF+2Ayh61ot/Jtf0c9yTy126ki8Um +/UUEW6uy87s/9gpS0OHyoH3GO3WgsUoe/AA= +Private-Lines: 2 +AAAAObILm/ALMj5npvYMwKLrb2gJu3ZK1pSO78zy6XPjSJ2SxwAFNcVi1ig9elS/ +T8ZoChnKOv3P0qarAA== +Private-MAC: 55827a80d4951757730ab061c617901d2c3dcb7b diff --git a/src/test/resources/ppkv2_ed448_unix_encrypted.ppk b/src/test/resources/ppkv2_ed448_unix_encrypted.ppk new file mode 100644 index 00000000..53134039 --- /dev/null +++ b/src/test/resources/ppkv2_ed448_unix_encrypted.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ssh-ed448 +Encryption: aes256-cbc +Comment: test +Public-Lines: 2 +AAAACXNzaC1lZDQ0OAAAADnwdqOa0pIeeorEzsEY7kskGeyZfhpkYZtbA/iR5Nyp +0cbPZnl9UFsfKQIYKJwPWwnim8BXTkEq6YA= +Private-Lines: 2 +/A3mDpDv6Qz0Ou4TR1tZEKsJDYbC5lIotFETja/Q0ZGpRTBjUWZ1xlVZAQwZhDqe +bIXTpngJcoMuU9ca+FlhAw== +Private-MAC: 8c73debd89d60515a535a88c0e05cbd828592cd4 diff --git a/src/test/resources/ppkv2_ed448_windows.ppk b/src/test/resources/ppkv2_ed448_windows.ppk new file mode 100644 index 00000000..dc328645 --- /dev/null +++ b/src/test/resources/ppkv2_ed448_windows.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ssh-ed448 +Encryption: none +Comment: test +Public-Lines: 2 +AAAACXNzaC1lZDQ0OAAAADk5uIOJgx7OfFkbkRV43yMP37dcnIVemLPjlaH/WRKj +LTwueFIgN5Mc4UYcIZtlbAaUhiiEvW7aYQA= +Private-Lines: 2 +AAAAOSPpYS2oZf4SDKYbuFSxf+CZzYA5LC7mVwEObSg/NcsadJM3l7chtEgC+dPI +OnzXuIwAaMzPSs+KAA== +Private-MAC: 14cf577bd1d0851fb5bd13c5a92695e0a04ccecb diff --git a/src/test/resources/ppkv2_ed448_windows_encrypted.ppk b/src/test/resources/ppkv2_ed448_windows_encrypted.ppk new file mode 100644 index 00000000..6b8ad500 --- /dev/null +++ b/src/test/resources/ppkv2_ed448_windows_encrypted.ppk @@ -0,0 +1,10 @@ +PuTTY-User-Key-File-2: ssh-ed448 +Encryption: aes256-cbc +Comment: test +Public-Lines: 2 +AAAACXNzaC1lZDQ0OAAAADkVNtCwBIBWO41k+QYmuMromfii6QbjVKRxjxbTYGPD +aw8u+gSCHAnqgaxi9qkc7HU0U01BJI5tJgA= +Private-Lines: 2 +eUusIDlLKMS0TWcSwgfEx+SSDzlYX7QNXkkCZeOv/oc2Tx6/Jtsv7CnwDrVybF3f +jbKnojgYqJ6OEV1uC0D8gg== +Private-MAC: 216027b1e8ec6ff47ee2ac9f69e6f743206f8076