Browse Source

Merge pull request #3281 from shadowsocks/feature/plain-cipher

Add the plain/none cipher
v4
Max Lv GitHub 3 years ago
parent
commit
99871884bc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 120 additions and 2 deletions
  1. +3
    -0
      CHANGES
  2. +1
    -1
      appveyor.yml
  3. +1
    -1
      shadowsocks-csharp/Controller/Service/UpdateChecker.cs
  4. +9
    -0
      shadowsocks-csharp/Encryption/EncryptorFactory.cs
  5. +98
    -0
      shadowsocks-csharp/Encryption/Stream/PlainEncryptor.cs
  6. +7
    -0
      shadowsocks-csharp/View/ConfigForm.cs
  7. +1
    -0
      shadowsocks-csharp/shadowsocks-csharp.csproj

+ 3
- 0
CHANGES View File

@@ -1,3 +1,6 @@
4.4.1.0 2022-02-08
- Add plain/none ciphers
4.4.0.0 2021-01-01
- Security: remove infrastructure of stream ciphers (#3048)
- Show warning message when importing from deprecated legacy ss:// links.


+ 1
- 1
appveyor.yml View File

@@ -11,7 +11,7 @@
# version format
# Build version format is taken from UI if it is not set
version: 4.4.0.{build}
version: 4.4.1.{build}
# # branches to build
# branches:


+ 1
- 1
shadowsocks-csharp/Controller/Service/UpdateChecker.cs View File

@@ -33,7 +33,7 @@ namespace Shadowsocks.Controller
public event EventHandler CheckUpdateCompleted;
public const string Version = "4.4.0.0";
public const string Version = "4.4.1.0";
private readonly Version _version;
public UpdateChecker()


+ 9
- 0
shadowsocks-csharp/Encryption/EncryptorFactory.cs View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Reflection;
using System.Text;
using Shadowsocks.Encryption.AEAD;
using Shadowsocks.Encryption.Stream;
namespace Shadowsocks.Encryption
{
@@ -16,6 +17,8 @@ namespace Shadowsocks.Encryption
{
var AEADMbedTLSEncryptorSupportedCiphers = AEADMbedTLSEncryptor.SupportedCiphers();
var AEADSodiumEncryptorSupportedCiphers = AEADSodiumEncryptor.SupportedCiphers();
var PlainEncryptorSupportedCiphers = PlainEncryptor.SupportedCiphers();
if (Sodium.AES256GCMAvailable)
{
// prefer to aes-256-gcm in libsodium
@@ -43,6 +46,12 @@ namespace Shadowsocks.Encryption
if (!_registeredEncryptors.ContainsKey(method))
_registeredEncryptors.Add(method, typeof(AEADMbedTLSEncryptor));
}
foreach (string method in PlainEncryptorSupportedCiphers)
{
if (!_registeredEncryptors.ContainsKey(method))
_registeredEncryptors.Add(method, typeof(PlainEncryptor));
}
}
public static IEncryptor GetEncryptor(string method, string password)


+ 98
- 0
shadowsocks-csharp/Encryption/Stream/PlainEncryptor.cs View File

@@ -0,0 +1,98 @@
using System;
using System.Collections.Generic;

namespace Shadowsocks.Encryption.Stream
{
class PlainEncryptor
: EncryptorBase, IDisposable
{
const int CIPHER_NONE = 1;

private static Dictionary<string, EncryptorInfo> _ciphers = new Dictionary<string, EncryptorInfo> {
{ "plain", new EncryptorInfo("PLAIN", 0, 0, CIPHER_NONE) },
{ "none", new EncryptorInfo("PLAIN", 0, 0, CIPHER_NONE) }
};

public PlainEncryptor(string method, string password) : base(method, password)
{
}

public static List<string> SupportedCiphers()
{
return new List<string>(_ciphers.Keys);
}

protected Dictionary<string, EncryptorInfo> getCiphers()
{
return _ciphers;
}

#region TCP

public override void Encrypt(byte[] buf, int length, byte[] outbuf, out int outlength)
{
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
outlength = length;
}

public override void Decrypt(byte[] buf, int length, byte[] outbuf, out int outlength)
{
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
outlength = length;
}

#endregion

#region UDP

public override void EncryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength)
{
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
outlength = length;
}

public override void DecryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength)
{
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
outlength = length;
}

#endregion


#region IDisposable

private bool _disposed;

// instance based lock
private readonly object _lock = new object();

public override void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

~PlainEncryptor()
{
Dispose(false);
}

protected virtual void Dispose(bool disposing)
{
lock (_lock)
{
if (_disposed) return;
_disposed = true;
}

if (disposing)
{
// free managed objects
}
}

#endregion

}
}

+ 7
- 0
shadowsocks-csharp/View/ConfigForm.cs View File

@@ -27,6 +27,8 @@ namespace Shadowsocks.View
// Edit here to add/delete encryption method displayed in UI
private static string[] inuseMethod = new string[]
{
"none",
"plain",
"aes-256-gcm",
"aes-192-gcm",
"aes-128-gcm",
@@ -611,5 +613,10 @@ namespace Shadowsocks.View
{
ShowHidePluginArgInput(NeedPluginArgCheckBox.Checked);
}
private void EncryptionSelect_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}

+ 1
- 0
shadowsocks-csharp/shadowsocks-csharp.csproj View File

@@ -240,6 +240,7 @@
<Compile Include="Encryption\OpenSSL.cs" />
<Compile Include="Encryption\RNG.cs" />
<Compile Include="Encryption\Sodium.cs" />
<Compile Include="Encryption\Stream\PlainEncryptor.cs" />
<Compile Include="Localization\LocalizationProvider.cs" />
<Compile Include="Localization\Strings.Designer.cs">
<AutoGen>True</AutoGen>


Loading…
Cancel
Save