Add OpenSSL 1.1.0g support due to hardware acceleration
Note: If you want to compile it by yourself, please make sure do NOT use `no-asm` configure option, since the main point of this commit is to utilize assembly in openssl Add OpenSSL test
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Shadowsocks.Encryption.AEAD;
|
||||
using Shadowsocks.Encryption.Stream;
|
||||
|
||||
@@ -26,21 +27,42 @@ namespace Shadowsocks.Encryption
|
||||
AEADSodiumEncryptorSupportedCiphers.Remove("aes-256-gcm");
|
||||
}
|
||||
|
||||
foreach (string method in StreamMbedTLSEncryptor.SupportedCiphers())
|
||||
// XXX: sequence matters, OpenSSL > Sodium > MbedTLS
|
||||
foreach (string method in StreamOpenSSLEncryptor.SupportedCiphers())
|
||||
{
|
||||
_registeredEncryptors.Add(method, typeof(StreamMbedTLSEncryptor));
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(StreamOpenSSLEncryptor));
|
||||
}
|
||||
|
||||
foreach (string method in StreamSodiumEncryptor.SupportedCiphers())
|
||||
{
|
||||
_registeredEncryptors.Add(method, typeof(StreamSodiumEncryptor));
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(StreamSodiumEncryptor));
|
||||
}
|
||||
foreach (string method in AEADMbedTLSEncryptorSupportedCiphers)
|
||||
|
||||
foreach (string method in StreamMbedTLSEncryptor.SupportedCiphers())
|
||||
{
|
||||
_registeredEncryptors.Add(method, typeof(AEADMbedTLSEncryptor));
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(StreamMbedTLSEncryptor));
|
||||
}
|
||||
|
||||
|
||||
foreach (string method in AEADOpenSSLEncryptor.SupportedCiphers())
|
||||
{
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(AEADOpenSSLEncryptor));
|
||||
}
|
||||
|
||||
foreach (string method in AEADSodiumEncryptorSupportedCiphers)
|
||||
{
|
||||
_registeredEncryptors.Add(method, typeof(AEADSodiumEncryptor));
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(AEADSodiumEncryptor));
|
||||
}
|
||||
|
||||
foreach (string method in AEADMbedTLSEncryptorSupportedCiphers)
|
||||
{
|
||||
if (!_registeredEncryptors.ContainsKey(method))
|
||||
_registeredEncryptors.Add(method, typeof(AEADMbedTLSEncryptor));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,12 +72,29 @@ namespace Shadowsocks.Encryption
|
||||
{
|
||||
method = "aes-256-cfb";
|
||||
}
|
||||
|
||||
method = method.ToLowerInvariant();
|
||||
Type t = _registeredEncryptors[method];
|
||||
|
||||
ConstructorInfo c = t.GetConstructor(ConstructorTypes);
|
||||
if (c == null) throw new System.Exception("Invalid ctor");
|
||||
IEncryptor result = (IEncryptor) c.Invoke(new object[] {method, password});
|
||||
return result;
|
||||
}
|
||||
|
||||
public static string DumpRegisteredEncryptor()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(Environment.NewLine);
|
||||
sb.AppendLine("=========================");
|
||||
sb.AppendLine("Registered Encryptor Info");
|
||||
foreach (var encryptor in _registeredEncryptors)
|
||||
{
|
||||
sb.AppendLine(String.Format("{0}=>{1}", encryptor.Key, encryptor.Value.Name));
|
||||
}
|
||||
|
||||
sb.AppendLine("=========================");
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user