Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/dotnet-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v1
uses: actions/setup-dotnet@v3
with:
dotnet-version: 5.0.x
dotnet-version: 7.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/dotnet-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,16 @@ on:
jobs:
build:

runs-on: windows-latest
runs-on: windows-2019

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Setup .NET
uses: actions/setup-dotnet@v1
uses: actions/setup-dotnet@v3
with:
dotnet-version: 5.0.x
dotnet-version: 7.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
Expand Down
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "SSH.NET"]
path = SSH.NET
url = https://github.com/darinkes/SSH.NET-1.git
url=https://github.com/sshnet/SSH.NET.git
26 changes: 23 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,18 @@ SshNet.PuttyKeyFile
## Status
WIP

Currently builds it's own fork of [SSH.NET](https://github.com/sshnet/SSH.NET) to be able to automatically test them.

Needs this Branch: https://github.com/darinkes/SSH.NET-1/tree/agent_auth
Supports PPK v2 and v3

## .NET Frameworks

* .NET 4.0
* .NET 4.6.2
* netstandard 2.0

#### .NET 4.0 Note ####

PPK v3 encryption is not supported on .NET 4.0

## Keys
* ssh-ed25519
* ecdsa-sha2-nistp256
Expand All @@ -40,3 +43,20 @@ using var client = new SshClient("ssh.foo.com", "root", key);
client.Connect();
Console.WriteLine(client.RunCommand("hostname").Result);
```

Automatically load the key based on file contents

```cs
using Renci.SshNet;
using SshNet.PuttyKeyFile;

var keyText = "<ssh key contents>";
IPrivateKeySource key = PuttyKeyFile.IsPuttyPrivateKey(keyText) ? new PuttyKeyFile(keyText) : new PrivateKeyFile(keyText);
// or with passPhrase
var passPhrase = "<ssh key password/passphrase>";
IPrivateKeySource key = PuttyKeyFile.IsPuttyPrivateKey(keyText) ? new PuttyKeyFile(keyText, passPhrase) : new PrivateKeyFile(keyText, passPhrase);

using var client = new SshClient("ssh.foo.com", "root", key);
client.Connect();
Console.WriteLine(client.RunCommand("hostname").Result);
```
2 changes: 1 addition & 1 deletion SSH.NET
Submodule SSH.NET updated 91 files
+1 −0 CODEOWNERS
+2 −0 LICENSE
+2 −2 appveyor.yml
+2 −2 build/sandcastle/SSH.NET.shfbproj
+3 −0 src/Renci.SshNet.Silverlight/Renci.SshNet.Silverlight.csproj
+3 −0 src/Renci.SshNet.Silverlight5/Renci.SshNet.Silverlight5.csproj
+1 −1 src/Renci.SshNet.Tests/Classes/BaseClientTest_Connected_KeepAliveInterval_NegativeOne.cs
+4 −0 src/Renci.SshNet.Tests/Classes/Common/PacketDumpTest.cs
+2 −2 src/Renci.SshNet.Tests/Classes/PrivateKeyFileTest.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Download_PathAndDirectoryInfo_SendExecRequestReturnsFalse.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Download_PathAndFileInfo_SendExecRequestReturnsFalse.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Download_PathAndStream_SendExecRequestReturnsFalse.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Upload_DirectoryInfoAndPath_SendExecRequestReturnsFalse.cs
+9 −5 src/Renci.SshNet.Tests/Classes/ScpClientTest_Upload_FileInfoAndPath_SendExecRequestReturnsFalse.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Upload_FileInfoAndPath_Success.cs
+8 −4 src/Renci.SshNet.Tests/Classes/ScpClientTest_Upload_StreamAndPath_SendExecRequestReturnsFalse.cs
+69 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamAsyncTestBase.cs
+57 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileAccessInvalid.cs
+58 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeAppend_FileAccessRead.cs
+58 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeAppend_FileAccessReadWrite.cs
+155 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeAppend_FileAccessWrite.cs
+58 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreateNew_FileAccessRead.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreateNew_FileAccessReadWrite.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreateNew_FileAccessWrite.cs
+58 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreate_FileAccessRead.cs
+136 −0 ...hNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreate_FileAccessReadWrite_FileDoesNotExist.cs
+136 −0 ...nci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreate_FileAccessReadWrite_FileExists.cs
+136 −0 ...i.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreate_FileAccessWrite_FileDoesNotExist.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeCreate_FileAccessWrite_FileExists.cs
+57 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeInvalid.cs
+141 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpenOrCreate_FileAccessRead.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpenOrCreate_FileAccessReadWrite.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpenOrCreate_FileAccessWrite.cs
+142 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpen_FileAccessRead.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpen_FileAccessReadWrite.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeOpen_FileAccessWrite.cs
+59 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeTruncate_FileAccessRead.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeTruncate_FileAccessReadWrite.cs
+136 −0 src/Renci.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_OpenAsync_FileModeTruncate_FileAccessWrite.cs
+159 −0 ...treamTest_ReadAsync_ReadMode_NoDataInReaderBufferAndReadLessBytesFromServerThanCountAndEqualToBufferSize.cs
+152 −0 ...reamTest_ReadAsync_ReadMode_NoDataInReaderBufferAndReadLessBytesFromServerThanCountAndLessThanBufferSize.cs
+143 −0 ...asses/Sftp/SftpFileStreamTest_ReadAsync_ReadMode_NoDataInReaderBufferAndReadMoreBytesFromServerThanCount.cs
+103 −0 ...hNet.Tests/Classes/Sftp/SftpFileStreamTest_Seek_PositionedAtBeginningOfStream_OriginEndAndOffsetNegative.cs
+103 −0 ...hNet.Tests/Classes/Sftp/SftpFileStreamTest_Seek_PositionedAtBeginningOfStream_OriginEndAndOffsetPositive.cs
+103 −0 ...i.SshNet.Tests/Classes/Sftp/SftpFileStreamTest_Seek_PositionedAtBeginningOfStream_OriginEndAndOffsetZero.cs
+143 −0 ...Tests/Classes/Sftp/SftpFileStreamTest_WriteAsync_SessionOpen_CountGreatherThanTwoTimesTheWriteBufferSize.cs
+48 −0 src/Renci.SshNet.Tests/Classes/SftpClientTest.ConnectAsync.cs
+27 −0 src/Renci.SshNet.Tests/Classes/SftpClientTest.DeleteFileAsync.cs
+66 −0 src/Renci.SshNet.Tests/Classes/SftpClientTest.RenameFileAsync.cs
+14 −6 src/Renci.SshNet.Tests/Classes/SftpClientTest.cs
+25 −36 src/Renci.SshNet.Tests/Renci.SshNet.Tests.csproj
+3 −0 src/Renci.SshNet.UAP10/Renci.SshNet.UAP10.csproj
+3 −0 src/Renci.SshNet.WindowsPhone/Renci.SshNet.WindowsPhone.csproj
+3 −0 src/Renci.SshNet.WindowsPhone8/Renci.SshNet.WindowsPhone8.csproj
+22 −0 src/Renci.SshNet/Abstractions/DnsAbstraction.cs
+17 −0 src/Renci.SshNet/Abstractions/SocketAbstraction.cs
+119 −0 src/Renci.SshNet/Abstractions/SocketExtensions.cs
+7 −2 src/Renci.SshNet/Abstractions/ThreadAbstraction.cs
+83 −3 src/Renci.SshNet/BaseClient.cs
+45 −0 src/Renci.SshNet/Connection/ConnectorBase.cs
+9 −1 src/Renci.SshNet/Connection/DirectConnector.cs
+3 −20 src/Renci.SshNet/Connection/HttpConnector.cs
+5 −0 src/Renci.SshNet/Connection/IConnector.cs
+4 −0 src/Renci.SshNet/Connection/IProtocolVersionExchange.cs
+103 −0 src/Renci.SshNet/Connection/ProtocolVersionExchange.cs
+74 −0 src/Renci.SshNet/Connection/ProxyConnector.cs
+2 −20 src/Renci.SshNet/Connection/Socks4Connector.cs
+2 −20 src/Renci.SshNet/Connection/Socks5Connector.cs
+108 −0 src/Renci.SshNet/IBaseClient.cs
+2 −2 src/Renci.SshNet/IPrivateKeySource.cs
+16 −0 src/Renci.SshNet/ISession.cs
+94 −5 src/Renci.SshNet/ISftpClient.cs
+3 −3 src/Renci.SshNet/NetConfClient.cs
+4 −4 src/Renci.SshNet/PrivateKeyAuthenticationMethod.cs
+10 −10 src/Renci.SshNet/PrivateKeyConnectionInfo.cs
+10 −18 src/Renci.SshNet/PrivateKeyFile.cs
+7 −4 src/Renci.SshNet/Renci.SshNet.csproj
+3 −3 src/Renci.SshNet/ScpClient.cs
+6 −6 src/Renci.SshNet/Security/Cryptography/EcdsaDigitalSignature.cs
+63 −63 src/Renci.SshNet/Security/Cryptography/EcdsaKey.cs
+2 −5 src/Renci.SshNet/Security/KeyExchangeECCurve25519.cs
+111 −1 src/Renci.SshNet/Session.cs
+233 −0 src/Renci.SshNet/Sftp/ISftpFile.cs
+47 −0 src/Renci.SshNet/Sftp/ISftpSession.cs
+1 −1 src/Renci.SshNet/Sftp/SftpFile.cs
+1 −1 src/Renci.SshNet/Sftp/SftpFileReader.cs
+376 −41 src/Renci.SshNet/Sftp/SftpFileStream.cs
+1 −1 src/Renci.SshNet/Sftp/SftpListDirectoryAsyncResult.cs
+329 −4 src/Renci.SshNet/Sftp/SftpSession.cs
+192 −12 src/Renci.SshNet/SftpClient.cs
+3 −3 src/Renci.SshNet/SshClient.cs
4 changes: 2 additions & 2 deletions SshNet.PuttyKeyFile.Sample/SshNet.PuttyKeyFile.Sample.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">net40;net5.0</TargetFrameworks>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net5.0</TargetFramework>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">net40;net70</TargetFrameworks>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net70</TargetFramework>
<OutputType>exe</OutputType>
<LangVersion>9</LangVersion>
<Nullable>enable</Nullable>
Expand Down
76 changes: 55 additions & 21 deletions SshNet.PuttyKeyFile.Tests/PuttyKeyFileTest.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.IO;
using System.Reflection;

using NUnit.Framework;

using Renci.SshNet.Security;

namespace SshNet.PuttyKeyFile.Tests
Expand All @@ -13,73 +15,105 @@ public void Setup()
{
}

private void TestKey<TKey>(string keyName, string comment, int keyLength = 0, string? pass = null) where TKey : Key, new()
private void TestKey<TKey>(string keyName, string versionSuffix, string comment, int keyLength = 0, string? pass = null) where TKey : Key, new()
{
var keyStream = GetKey($"{keyName}.ppk");
var keyStream = GetKey($"{keyName}-v{versionSuffix}.ppk");
if (keyStream is null)
throw new NullReferenceException(nameof(keyStream));

var keyFile = new PuttyKeyFile(keyStream, pass);

Assert.IsInstanceOf<TKey>(((KeyHostAlgorithm) keyFile.HostKey).Key);
Assert.AreEqual(keyLength, ((KeyHostAlgorithm) keyFile.HostKey).Key.KeyLength);
Assert.AreEqual(comment, ((KeyHostAlgorithm) keyFile.HostKey).Key.Comment);
Assert.IsInstanceOf<TKey>(((KeyHostAlgorithm)keyFile.HostKey).Key);
Assert.AreEqual(keyLength, ((KeyHostAlgorithm)keyFile.HostKey).Key.KeyLength);
Assert.AreEqual(comment, ((KeyHostAlgorithm)keyFile.HostKey).Key.Comment);
}

[Test]
public void Test_RSA2048()
{
TestKey<RsaKey>("rsa2048", "rsa-key-20210312", 2048);
TestKey<RsaKey>("rsa2048pass", "rsa-key-20210312", 2048, "12345");
TestKey<RsaKey>("rsa2048", "2", "rsa-key-20210312", 2048);
TestKey<RsaKey>("rsa2048pass", "2", "rsa-key-20210312", 2048, "12345");
TestKey<RsaKey>("rsa2048", "3", "rsa-key-20210312", 2048);
#if !NET40
TestKey<RsaKey>("rsa2048pass", "3", "rsa-key-20210312", 2048, "12345");
#endif
}

[Test]
public void Test_RSA3072()
{
TestKey<RsaKey>("rsa3072", "rsa-key-20210312", 3072);
TestKey<RsaKey>("rsa3072pass", "rsa-key-20210312", 3072, "12345");
TestKey<RsaKey>("rsa3072", "2", "rsa-key-20210312", 3072);
TestKey<RsaKey>("rsa3072pass", "2", "rsa-key-20210312", 3072, "12345");
TestKey<RsaKey>("rsa3072", "3", "rsa-key-20210312", 3072);
#if !NET40
TestKey<RsaKey>("rsa3072pass", "3", "rsa-key-20210312", 3072, "12345");
#endif
}

[Test]
public void Test_RSA4096()
{
TestKey<RsaKey>("rsa4096", "rsa-key-20210312", 4096);
TestKey<RsaKey>("rsa4096pass", "rsa-key-20210312", 4096, "12345");
TestKey<RsaKey>("rsa4096", "2", "rsa-key-20210312", 4096);
TestKey<RsaKey>("rsa4096pass", "2", "rsa-key-20210312", 4096, "12345");
TestKey<RsaKey>("rsa4096", "3", "rsa-key-20210312", 4096);
#if !NET40
TestKey<RsaKey>("rsa4096pass", "3", "rsa-key-20210312", 4096, "12345");
#endif
}

[Test]
public void Test_RSA8192()
{
TestKey<RsaKey>("rsa8192", "rsa-key-20210312", 8192);
TestKey<RsaKey>("rsa8192pass", "rsa-key-20210312", 8192, "12345");
TestKey<RsaKey>("rsa8192", "2", "rsa-key-20210312", 8192);
TestKey<RsaKey>("rsa8192pass", "2", "rsa-key-20210312", 8192, "12345");
TestKey<RsaKey>("rsa8192", "3", "rsa-key-20210312", 8192);
#if !NET40
TestKey<RsaKey>("rsa8192pass", "3", "rsa-key-20210312", 8192, "12345");
#endif
}

[Test]
public void Test_ECDSA256()
{
TestKey<EcdsaKey>("ecdsa256", "ecdsa-key-20210312", 256);
TestKey<EcdsaKey>("ecdsa256pass", "ecdsa-key-20210312", 256, "12345");
TestKey<EcdsaKey>("ecdsa256", "2", "ecdsa-key-20210312", 256);
TestKey<EcdsaKey>("ecdsa256pass", "2", "ecdsa-key-20210312", 256, "12345");
TestKey<EcdsaKey>("ecdsa256", "3", "ecdsa-key-20210312", 256);
#if !NET40
TestKey<EcdsaKey>("ecdsa256pass","3", "ecdsa-key-20210312", 256, "12345");
#endif
}

[Test]
public void Test_ECDSA384()
{
TestKey<EcdsaKey>("ecdsa384", "ecdsa-key-20210312", 384);
TestKey<EcdsaKey>("ecdsa384pass", "ecdsa-key-20210312", 384, "12345");
TestKey<EcdsaKey>("ecdsa384", "2", "ecdsa-key-20210312", 384);
TestKey<EcdsaKey>("ecdsa384pass", "2", "ecdsa-key-20210312", 384, "12345");
TestKey<EcdsaKey>("ecdsa384", "3", "ecdsa-key-20210312", 384);
#if !NET40
TestKey<EcdsaKey>("ecdsa384pass", "3", "ecdsa-key-20210312", 384, "12345");
#endif
}

[Test]
public void Test_ECDSA521()
{
TestKey<EcdsaKey>("ecdsa521", "ecdsa-key-20210312", 521);
TestKey<EcdsaKey>("ecdsa521pass", "ecdsa-key-20210312", 521, "12345");
TestKey<EcdsaKey>("ecdsa521", "2", "ecdsa-key-20210312", 521);
TestKey<EcdsaKey>("ecdsa521pass", "2", "ecdsa-key-20210312", 521, "12345");
TestKey<EcdsaKey>("ecdsa521", "3", "ecdsa-key-20210312", 521);
#if !NET40
TestKey<EcdsaKey>("ecdsa521pass", "3", "ecdsa-key-20210312", 521, "12345");
#endif
}

[Test]
public void Test_ED25519()
{
TestKey<ED25519Key>("ed25519", "ed25519-key-20210312", 256);
TestKey<ED25519Key>("ed25519pass", "ed25519-key-20210312", 256, "12345");
TestKey<ED25519Key>("ed25519", "2", "ed25519-key-20210312", 256);
TestKey<ED25519Key>("ed25519pass", "2", "ed25519-key-20210312", 256, "12345");
TestKey<ED25519Key>("ed25519", "3", "ed25519-key-20210312", 256);
#if !NET40
TestKey<ED25519Key>("ed25519pass", "3", "ed25519-key-20210312", 256, "12345");
#endif
}

private static Stream? GetKey(string keyName)
Expand Down
4 changes: 2 additions & 2 deletions SshNet.PuttyKeyFile.Tests/SshNet.PuttyKeyFile.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">net40;net5.0</TargetFrameworks>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net5.0</TargetFramework>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">net40;net462;net70</TargetFrameworks>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net70</TargetFramework>
<LangVersion>9</LangVersion>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
Expand Down
10 changes: 10 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa256-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp256
Encryption: none
Comment: ecdsa-key-20210312
Public-Lines: 3
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCagnfkYmNXN
lnVjIcIAWysh4JMApD9pefvRtVDJ+SbYX9/n+yZvYbonpgKF83vBI60/l5yJG81s
5bZ78muEkkQ=
Private-Lines: 1
AAAAIE2cC3R6C97CKiBgOLH65E1E7+8FHxBs3KZFPfuksPcM
Private-MAC: 998361d76ad4c6b6f3c16b1e0d9daa4d98541ce0c18f8118289af99c7d92495d
15 changes: 15 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa256pass-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp256
Encryption: aes256-cbc
Comment: ecdsa-key-20210312
Public-Lines: 3
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHhY99vQoPVT
6F0PofvedF0lwEz0jx/b9eJTZWDdjWG3ElGV8OCoGjtSIFChASt9XXoHW4C9feuC
nKJJLfmNcbA=
Key-Derivation: Argon2id
Argon2-Memory: 8192
Argon2-Passes: 8
Argon2-Parallelism: 1
Argon2-Salt: 5e5779a49886e47f0ac22e81aa756706
Private-Lines: 1
RYSywxzZ03mlgw4+s5nbnmrCZo+iu3S1abauEs03Xn1lzzGav9vA555vkmpwuZGW
Private-MAC: 9f5373bc1dca57a71dda7bdc879925d997328cf5bdd0233472be1ccd7a23be88
11 changes: 11 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa384-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp384
Encryption: none
Comment: ecdsa-key-20210312
Public-Lines: 3
AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBEVWztj5M3Ps
CbbdwweE3eQjigjrlJz8dCZLvjpSulzc2ck6/s3oCaX7Pg/Sbvo2piAjduLWxsio
owjJfsKz/nfaoaa9tfkOKf62aWISlOO1FfD9PbJtp3W2e06DTE1JTA==
Private-Lines: 2
AAAAMCdESh2t29FUCB3S6dKIxBVzdb6BtVbo1CbSZohDWbVjTrSY0mAFWOKrrxMl
L4pa4A==
Private-MAC: 776be7510bbb5b7e3f05231be31b7af578f6bb1d4ba506658f6b287a2aefd90a
16 changes: 16 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa384pass-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp384
Encryption: aes256-cbc
Comment: ecdsa-key-20210312
Public-Lines: 3
AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBMVJXj/SaVtm
CpcQeDLIp5oyEEy8zzBS4uh2q/uZ3qkC6i20yErTR2wuWp+E/tRFvNK2m9kuvny+
/eZzry62NNPhJdR7+dbbfCIGN9zoTe3UpSPj2MdmU1Frmbe3DJRshQ==
Key-Derivation: Argon2id
Argon2-Memory: 8192
Argon2-Passes: 8
Argon2-Parallelism: 1
Argon2-Salt: 6214750297d2ca6532a31438fab8efd9
Private-Lines: 2
sBCQjcGnKlHmGJtk/YrANuMFOhqKFeUwyQi1GSAi4nx3dNnv3Y/bIWb4EmtMJoCc
4bZMCc2v9qpn5RG4ni5bxQ==
Private-MAC: d7ca22c80c194755a5f61f5cce9cbfd1040a4793902a27b67a07b1b58c203012
12 changes: 12 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa521-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp521
Encryption: none
Comment: ecdsa-key-20210312
Public-Lines: 4
AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBADYWtDlG1mj
5cUO6HTxIPXu/bWyNLJaVktlIWdivUX84gl/zjFKcLchQUG/jRgyiRBNAwxHT748
GarGUwkAzB7KAgCfyjU0ux7egolYV5UAo/F9yXiQnPhudzvw9cImye5nOtW8Vq/2
VlQSwe+vIFwuPGdV0/qeuPHS8tG3rPF6yB75dQ==
Private-Lines: 2
AAAAQgFFjflZi/b4NMLFM3qzZZQmgVUjVoy3IOhciB8aSetVIjaUsSqAr3zVQNMR
G/iiK/nBoCuJ2Ycq6LenBdr+UF0pag==
Private-MAC: b1d9235de016e77bdc39bbf129a734aae25ef23d569c7eaae0c2f97ce557f7b1
17 changes: 17 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ecdsa521pass-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
PuTTY-User-Key-File-3: ecdsa-sha2-nistp521
Encryption: aes256-cbc
Comment: ecdsa-key-20210312
Public-Lines: 4
AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAAIYjhprWSd
0x4DLK3PWgh4ww16ZVYmv5PSBEeFBJCRcifXg+E7+Qex4s1vaPJWgqNfXjDgvf8/
gnSON/460Yx66QE1Ib1C+hymE7NwfLg5tqfFHj32wj7uWkVktWupB940Q7X/S/UO
PDI8ZpOOpUsC0+ZZIemHgGbAK0O4Ufn0yE6yVg==
Key-Derivation: Argon2id
Argon2-Memory: 8192
Argon2-Passes: 8
Argon2-Parallelism: 1
Argon2-Salt: 0e64d0a6818a712f0d9eeae82ced040f
Private-Lines: 2
gixtsyv+m1SaututHoaBlRLc60yjxfsEotQXlikpnW3yZg2LiSYNe11p8Nn8hO//
yHHndBroBenxldvTcKq5uwazGjIPNu4RoVRKHRwGEro=
Private-MAC: 3aa14fba5334a6c0e0d8c490e7423c92d9d92ca1e60275dc4a2cc783d91a0f9f
9 changes: 9 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ed25519-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
PuTTY-User-Key-File-3: ssh-ed25519
Encryption: none
Comment: ed25519-key-20210312
Public-Lines: 2
AAAAC3NzaC1lZDI1NTE5AAAAIMFKb9ssb3VHYh/R/vBx/0/nYrqUGqQibN7YaAo7
PztZ
Private-Lines: 1
AAAAILpT/RJp+2G309qzZDX14PLle2v5bu7NBNIzIXuQ5IIf
Private-MAC: aab7fb023e77dc84046bd5ca4b0eeb53b8d2fc1260f07906dd36ceb90b62470f
14 changes: 14 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/ed25519pass-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
PuTTY-User-Key-File-3: ssh-ed25519
Encryption: aes256-cbc
Comment: ed25519-key-20210312
Public-Lines: 2
AAAAC3NzaC1lZDI1NTE5AAAAIFGNsY1vMX0acPcRtrShWKqdSpWKI5omJdMiCShn
k++b
Key-Derivation: Argon2id
Argon2-Memory: 8192
Argon2-Passes: 8
Argon2-Parallelism: 1
Argon2-Salt: 0c0505619dbc258cd78291c8818b6201
Private-Lines: 1
C7z8akdj4UE9Eioxogqd23Yx84fktOLYo6lvBWtjLqSihrOZY4HM0ankVIRVLq4x
Private-MAC: c11c0cd03e3331963c09d215401f5c564ab78321c600b47a827fb485fccc4a69
26 changes: 26 additions & 0 deletions SshNet.PuttyKeyFile.Tests/TestKeys/rsa2048-v3.ppk
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: rsa-key-20210312
Public-Lines: 6
AAAAB3NzaC1yc2EAAAABJQAAAQEAjfeoHlz1KHSwDhTSjnbeKSek/I/KjOSzViHe
E7018KA4/UY91LTFHEc+vnkCWIYb2tvigZHusVlAg5QZHzBLN3XfJSH5iTtAPiM1
D1m5Ir2iV2Fw1HHoRzPSx+ipacLbFvfePe9AUhPVzcmwq0uKPtZ8Tf1MJFHdyWof
gaQr3WVZWm3wsxn59CqDhWQz9vdH5x3QOrEFrq0xfqFwR+KLkzmeuZBIoXK+2qfv
/P4RrFhFgqZXNhdccADY8/zDsOQjpHu7yZQAgtfFILymSdWw3KkcPzr+Jiud3HEB
Aetuz2W4GpDEQk/PZ/+0UQZZt9vgKqx79Iv8/t8uAfTdgd/fkw==
Private-Lines: 14
AAABAAPWQtBjYJJkBMIcPQrE8T9h77PMiO8NGZqLSzD3RqWjdylwmeMnevLtKzWU
kVxWps6QUjrabjwlAb5d8tdUVQ9WNnagDanDVMNovD6vZd5YJvtxVhOUYDlGlv57
6Ocux6aswNE90U5TkCgoC7GaQgGyxRbdVRW9Bf6GU+DowupOznH3eoZUsN8fCm3o
dtPRS/ROYfuT6Ear7Fx0DChs37QDewiV9V/sV6bdWgs+cOqqI6xvYOJp1UDiMleD
zGajGPCcBqvVJ6E2dugVlgXB6HCO1ajax7SVk2PSr4Ob+Pidu5n5TUsKuU5LCivK
SYJvU8ON5kAtG9//f5XaCRI+pj0AAACBAOI88mfrB8bf6dzhE3VTiNZuED8MQvd2
fiq74i9G0+hlU6b4H5NVqjkq1Fbj4jP+hRlkmzt1TokTi6n8xYve4wRJwpYIHomr
/GTKXkzek5r4gzIWK/eISbuCmsCCXOtYQfjESUdb2GXfmS+b3t/YqoUn6KP1Gd1X
ZysW+awkBbSJAAAAgQCgpLbTXdSi1MQkwbeSBi53Kbln0g18AVXdZfl/KVJOKWUv
g8Q+bp/akdWVeRWLwzwEMfIbB30A+8PoUSqs/G6ElCwu66a8ifwwyz+qljt9n4EI
wXAphEOU7GLiegOHiFeiFT9RDeqhN44MYOraBRo/v0GQuO0YR4qSQnfhuswkOwAA
AIEAsGxgh2Nv+p/JerPpH+JqUtTxAgQAJi8FmcKgtjacHkOl4Cgm0b1ajcMygUq7
a/CtevTcGtOX9P6SlWInlHlkcu9P7tusX26VIKd2I3QmN8mhKkK+J+oiaEbYtDJc
E6QpMSGBOJ6jbyYXUtve8xl8TW5/2f7T8jz1WXn5bp9+7Jo=
Private-MAC: e6b1fa6b31bd32b6af59dc12eed89cbe0cdbecec0cd10491434e5763394c1401
Loading