Skip to content

Add AES-GCM Cipher Suite for NETCOREAPP3_0 || NETSTANDARD2_1 #811

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 26 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8ea1237
Merge remote-tracking branch 'refs/remotes/origin/develop'
drieseng Oct 15, 2017
0f08b85
Prepare for 2016.1.0 RTW.
drieseng Oct 15, 2017
fc114fb
Merge remote-tracking branch 'remotes/origin/develop'
drieseng May 3, 2020
23168f4
Merge remote-tracking branch 'remotes/origin/develop'
drieseng May 3, 2020
4583da5
Remove CWLs.
drieseng May 3, 2020
4eef090
Merge branch 'develop'
drieseng May 3, 2020
cca8255
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 1, 2020
66e24e7
Sponsoring (#691)
drieseng Jun 7, 2020
66cf838
Prepare for 2020.0.0-beta1
drieseng Jun 1, 2020
356b22a
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
61c09ff
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
d8fbae3
Update name of Sandcastle Help File Builder environment variable.
drieseng Jun 7, 2020
e9979a6
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
32f2615
Fix path to source file.
drieseng Jun 7, 2020
bf651ca
Remove local-use file.
drieseng Jun 7, 2020
9b21a46
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
1068694
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
5942469
Merge remote-tracking branch 'remotes/origin/develop'
drieseng Jun 7, 2020
84b9281
Merge branch 'develop'
drieseng Dec 30, 2020
8737fdb
Merge branch 'develop'
drieseng Dec 31, 2020
853ec99
Prepare for 2020.0.0 release.
drieseng Dec 31, 2020
2c99132
Merge branch 'develop'
drieseng Dec 31, 2020
f480937
Merge branch 'develop'
drieseng Dec 31, 2020
a06522c
Merge branch 'develop'
drieseng Jan 24, 2021
acda143
Prepare for 2020.0.1 release
drieseng Jan 24, 2021
7a92a4b
AES-GCM Cipher Suite Utility
Mar 1, 2021
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
7 changes: 7 additions & 0 deletions src/Renci.SshNet/ConnectionInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
using Renci.SshNet.Messages.Connection;
using Renci.SshNet.Common;
using Renci.SshNet.Messages.Authentication;
#if NETCOREAPP3_0 || NETSTANDARD2_1
using Renci.SshNet.Security.Cryptography;
using Renci.SshNet.Security.Cryptography.Ciphers.Paddings;
#endif
using Renci.SshNet.Security.Cryptography.Ciphers.Modes;
using Renci.SshNet.Security.Cryptography.Ciphers;

Expand Down Expand Up @@ -361,6 +365,9 @@ public ConnectionInfo(string host, int port, string username, ProxyTypes proxyTy
////{"[email protected]", typeof(...)},
{"aes128-ctr", new CipherInfo(128, (key, iv) => new AesCipher(key, new CtrCipherMode(iv), null))},
{"aes192-ctr", new CipherInfo(192, (key, iv) => new AesCipher(key, new CtrCipherMode(iv), null))},
#if NETCOREAPP3_0 || NETSTANDARD2_1
{"[email protected]", new CipherInfo(128, (key, iv) => new AEADCipher(key, iv, 16, null, new AEADPadding()))},
#endif
};

HmacAlgorithms = new Dictionary<string, HashInfo>
Expand Down
8 changes: 4 additions & 4 deletions src/Renci.SshNet/Properties/CommonAssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
[assembly: AssemblyDescription("SSH.NET is a Secure Shell (SSH) library for .NET, optimized for parallelism.")]
[assembly: AssemblyCompany("Renci")]
[assembly: AssemblyProduct("SSH.NET")]
[assembly: AssemblyCopyright("Copyright � Renci 2010-2017")]
[assembly: AssemblyCopyright("Copyright � Renci 2010-2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: AssemblyVersion("2017.0.0")]
[assembly: AssemblyFileVersion("2017.0.0")]
[assembly: AssemblyInformationalVersion("2017.0.0-beta1")]
[assembly: AssemblyVersion("2020.0.1")]
[assembly: AssemblyFileVersion("2020.0.1")]
[assembly: AssemblyInformationalVersion("2020.0.1")]
[assembly: CLSCompliant(false)]

// Setting ComVisible to false makes the types in this assembly not visible
Expand Down
11 changes: 8 additions & 3 deletions src/Renci.SshNet/Renci.SshNet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
<AssemblyOriginatorKeyFile>../Renci.SshNet.snk</AssemblyOriginatorKeyFile>
<LangVersion>5</LangVersion>
<SignAssembly>true</SignAssembly>
<TargetFrameworks>net35;net40;netstandard1.3;netstandard2.0</TargetFrameworks>
<TargetFrameworks>net35;net40;netstandard1.3;netstandard2.0;netstandard2.1</TargetFrameworks>
<OutputType>Library</OutputType>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

<!--
Expand All @@ -28,7 +30,7 @@
<PackageReference Include="System.Xml.XPath.XmlDocument" Version="4.3.0" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard2.1' ">
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' or '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="SshNet.Security.Cryptography" Version="[1.3.0]" />
</ItemGroup>

Expand All @@ -41,7 +43,10 @@
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<DefineConstants>FEATURE_STRINGBUILDER_CLEAR;FEATURE_HASHALGORITHM_DISPOSE;FEATURE_ENCODING_ASCII;FEATURE_DIAGNOSTICS_TRACESOURCE;FEATURE_DIRECTORYINFO_ENUMERATEFILES;FEATURE_MEMORYSTREAM_TRYGETBUFFER;FEATURE_REFLECTION_TYPEINFO;FEATURE_RNG_CREATE;FEATURE_SOCKET_TAP;FEATURE_SOCKET_EAP;FEATURE_SOCKET_SYNC;FEATURE_SOCKET_SELECT;FEATURE_SOCKET_POLL;FEATURE_SOCKET_DISPOSE;FEATURE_DNS_TAP;FEATURE_STREAM_TAP;FEATURE_THREAD_COUNTDOWNEVENT;FEATURE_THREAD_TAP;FEATURE_THREAD_THREADPOOL;FEATURE_THREAD_SLEEP;FEATURE_WAITHANDLE_DISPOSE;FEATURE_HASH_MD5;FEATURE_HASH_SHA1_CREATE;FEATURE_HASH_SHA256_CREATE;FEATURE_HASH_SHA384_CREATE;FEATURE_HASH_SHA512_CREATE;FEATURE_HMAC_MD5;FEATURE_HMAC_SHA1;FEATURE_HMAC_SHA256;FEATURE_HMAC_SHA384;FEATURE_HMAC_SHA512</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard2.1' ">
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<DefineConstants>FEATURE_STRINGBUILDER_CLEAR;FEATURE_HASHALGORITHM_DISPOSE;FEATURE_ENCODING_ASCII;FEATURE_DIAGNOSTICS_TRACESOURCE;FEATURE_DIRECTORYINFO_ENUMERATEFILES;FEATURE_MEMORYSTREAM_GETBUFFER;FEATURE_MEMORYSTREAM_TRYGETBUFFER;FEATURE_RNG_CREATE;FEATURE_SOCKET_TAP;FEATURE_SOCKET_APM;FEATURE_SOCKET_EAP;FEATURE_SOCKET_SYNC;FEATURE_SOCKET_SELECT;FEATURE_SOCKET_POLL;FEATURE_SOCKET_DISPOSE;FEATURE_DNS_SYNC;FEATURE_DNS_APM;FEATURE_DNS_TAP;FEATURE_STREAM_APM;FEATURE_STREAM_TAP;FEATURE_THREAD_COUNTDOWNEVENT;FEATURE_THREAD_TAP;FEATURE_THREAD_THREADPOOL;FEATURE_THREAD_SLEEP;FEATURE_WAITHANDLE_DISPOSE;FEATURE_HASH_MD5;FEATURE_HASH_SHA1_CREATE;FEATURE_HASH_SHA256_CREATE;FEATURE_HASH_SHA384_CREATE;FEATURE_HASH_SHA512_CREATE;FEATURE_HMAC_MD5;FEATURE_HMAC_SHA1;FEATURE_HMAC_SHA256;FEATURE_HMAC_SHA384;FEATURE_HMAC_SHA512;FEATURE_ECDSA</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.1' ">
<DefineConstants>DEBUG_AESGCM;FEATURE_STRINGBUILDER_CLEAR;FEATURE_HASHALGORITHM_DISPOSE;FEATURE_ENCODING_ASCII;FEATURE_DIAGNOSTICS_TRACESOURCE;FEATURE_DIRECTORYINFO_ENUMERATEFILES;FEATURE_MEMORYSTREAM_GETBUFFER;FEATURE_MEMORYSTREAM_TRYGETBUFFER;FEATURE_RNG_CREATE;FEATURE_SOCKET_TAP;FEATURE_SOCKET_APM;FEATURE_SOCKET_EAP;FEATURE_SOCKET_SYNC;FEATURE_SOCKET_SELECT;FEATURE_SOCKET_POLL;FEATURE_SOCKET_DISPOSE;FEATURE_DNS_SYNC;FEATURE_DNS_APM;FEATURE_DNS_TAP;FEATURE_STREAM_APM;FEATURE_STREAM_TAP;FEATURE_THREAD_COUNTDOWNEVENT;FEATURE_THREAD_TAP;FEATURE_THREAD_THREADPOOL;FEATURE_THREAD_SLEEP;FEATURE_WAITHANDLE_DISPOSE;FEATURE_HASH_MD5;FEATURE_HASH_SHA1_CREATE;FEATURE_HASH_SHA256_CREATE;FEATURE_HASH_SHA384_CREATE;FEATURE_HASH_SHA512_CREATE;FEATURE_HMAC_MD5;FEATURE_HMAC_SHA1;FEATURE_HMAC_SHA256;FEATURE_HMAC_SHA384;FEATURE_HMAC_SHA512;FEATURE_ECDSA</DefineConstants>
</PropertyGroup>
</Project>
39 changes: 38 additions & 1 deletion src/Renci.SshNet/Security/Cryptography/Cipher.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace Renci.SshNet.Security.Cryptography
using System.Security.Cryptography;

namespace Renci.SshNet.Security.Cryptography
{
/// <summary>
/// Base class for cipher implementation.
Expand All @@ -13,6 +15,41 @@ public abstract class Cipher
/// </value>
public abstract byte MinimumSize { get; }

/// <summary>
/// AEAD Mode or not
/// </summary>
/// <value>
/// AEAD Mode is set to false by default.
/// </value>
public virtual bool isAEAD
{
get
{
return false;
}
}

/// <summary>
/// Server mac length based on the chosen hash algorithm
/// </summary>
/// <param name="_serverMac">The mac algorithm to use.</param>
/// <returns>The server mac length.</returns>
public virtual int serverMacLength(HashAlgorithm _serverMac)
{
return (_serverMac != null ? _serverMac.HashSize/8 : 0);
}

/// <summary>
/// Find the right offset for decrypt based on chosen cipher suite
/// </summary>
/// <param name="blockSz">The default block size</param>
/// <param name="inboundPacketSequenceLength">The inbound packet sequence length.</param>
/// <returns>The default offset value used for the decrypt function, which is inboundPacketSequenceLength + blockSz</returns>
public virtual int decryptOffset(int inboundPacketSequenceLength, int blockSz)
{
return inboundPacketSequenceLength + blockSz;
}

/// <summary>
/// Encrypts the specified input.
/// </summary>
Expand Down
Loading