update build targetpull/2865/head
@@ -1,6 +1,7 @@ | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Runtime.CompilerServices; | |||||
using System.Text; | using System.Text; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -25,11 +26,13 @@ namespace Shadowsocks.Encryption.Stream | |||||
{ | { | ||||
_encryptTable[i] = (byte)i; | _encryptTable[i] = (byte)i; | ||||
} | } | ||||
Span<byte> t = _encryptTable; | |||||
// copy array 1024 times? excuse me? | // copy array 1024 times? excuse me? | ||||
for (int i = 1; i < 1024; i++) | for (int i = 1; i < 1024; i++) | ||||
{ | { | ||||
_encryptTable = MergeSort(_encryptTable, a, i); | |||||
t = MergeSort(t, a, i); | |||||
} | } | ||||
_encryptTable = t.ToArray(); | |||||
for (int i = 0; i < 256; i++) | for (int i = 0; i < 256; i++) | ||||
{ | { | ||||
_decryptTable[_encryptTable[i]] = (byte)i; | _decryptTable[_encryptTable[i]] = (byte)i; | ||||
@@ -103,37 +106,32 @@ namespace Shadowsocks.Encryption.Stream | |||||
#region Table | #region Table | ||||
private byte[] _encryptTable = new byte[256]; | private byte[] _encryptTable = new byte[256]; | ||||
private byte[] _decryptTable = new byte[256]; | private byte[] _decryptTable = new byte[256]; | ||||
private byte[] _tmp = new byte[256]; | |||||
[MethodImpl(MethodImplOptions.AggressiveInlining)] | |||||
private static long Compare(byte x, byte y, ulong a, int i) | private static long Compare(byte x, byte y, ulong a, int i) | ||||
{ | { | ||||
return (long)(a % (ulong)(x + i)) - (long)(a % (ulong)(y + i)); | return (long)(a % (ulong)(x + i)) - (long)(a % (ulong)(y + i)); | ||||
} | } | ||||
private byte[] MergeSort(byte[] array, ulong a, int j) | |||||
byte[] buf = new byte[1024]; | |||||
private Span<byte> MergeSort(Span<byte> array, ulong a, int j) | |||||
{ | { | ||||
if (array.Length == 1) | if (array.Length == 1) | ||||
{ | { | ||||
return array; | return array; | ||||
} | } | ||||
int middle = array.Length / 2; | int middle = array.Length / 2; | ||||
byte[] left = new byte[middle]; | |||||
for (int i = 0; i < middle; i++) | |||||
{ | |||||
left[i] = array[i]; | |||||
} | |||||
byte[] right = new byte[array.Length - middle]; | |||||
for (int i = 0; i < array.Length - middle; i++) | |||||
{ | |||||
right[i] = array[i + middle]; | |||||
} | |||||
left = MergeSort(left, a, j); | |||||
right = MergeSort(right, a, j); | |||||
Span<byte> left = MergeSort(array.Slice(0, middle), a, j);; | |||||
Span<byte> right = MergeSort(array.Slice(middle), a, j); | |||||
int leftptr = 0; | int leftptr = 0; | ||||
int rightptr = 0; | int rightptr = 0; | ||||
// why a new array? | // why a new array? | ||||
byte[] sorted = new byte[array.Length]; | |||||
Span<byte> sorted = new byte[array.Length];// buf.AsSpan().Slice(0,array.Length); // // _tmp; | |||||
for (int k = 0; k < array.Length; k++) | for (int k = 0; k < array.Length; k++) | ||||
{ | { | ||||
if (rightptr == right.Length || ((leftptr < left.Length) && (Compare(left[leftptr], right[rightptr], a, j) <= 0))) | if (rightptr == right.Length || ((leftptr < left.Length) && (Compare(left[leftptr], right[rightptr], a, j) <= 0))) | ||||
@@ -12,7 +12,7 @@ | |||||
<AssemblyName>Shadowsocks</AssemblyName> | <AssemblyName>Shadowsocks</AssemblyName> | ||||
<ApplicationIcon>shadowsocks.ico</ApplicationIcon> | <ApplicationIcon>shadowsocks.ico</ApplicationIcon> | ||||
<StartupObject>Shadowsocks.Program</StartupObject> | <StartupObject>Shadowsocks.Program</StartupObject> | ||||
<Nullable>enable</Nullable> | |||||
<Nullable>disable</Nullable> | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> | ||||
@@ -26,27 +26,17 @@ EndProject | |||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
Debug|Any CPU = Debug|Any CPU | Debug|Any CPU = Debug|Any CPU | ||||
Debug|x86 = Debug|x86 | |||||
Release|Any CPU = Release|Any CPU | Release|Any CPU = Release|Any CPU | ||||
Release|x86 = Release|x86 | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.Build.0 = Debug|Any CPU | {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.ActiveCfg = Release|Any CPU | {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.Build.0 = Release|Any CPU | {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}.Release|x86.Build.0 = Release|Any CPU | |||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | {45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.Build.0 = Debug|Any CPU | {45913187-0685-4903-B250-DCEF0479CD86}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.ActiveCfg = Debug|Any CPU | |||||
{45913187-0685-4903-B250-DCEF0479CD86}.Debug|x86.Build.0 = Debug|Any CPU | |||||
{45913187-0685-4903-B250-DCEF0479CD86}.Release|Any CPU.ActiveCfg = Release|Any CPU | {45913187-0685-4903-B250-DCEF0479CD86}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Release|Any CPU.Build.0 = Release|Any CPU | {45913187-0685-4903-B250-DCEF0479CD86}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
{45913187-0685-4903-B250-DCEF0479CD86}.Release|x86.ActiveCfg = Release|Any CPU | |||||
{45913187-0685-4903-B250-DCEF0479CD86}.Release|x86.Build.0 = Release|Any CPU | |||||
EndGlobalSection | EndGlobalSection | ||||
GlobalSection(SolutionProperties) = preSolution | GlobalSection(SolutionProperties) = preSolution | ||||
HideSolutionNode = FALSE | HideSolutionNode = FALSE | ||||
@@ -155,10 +155,7 @@ namespace Shadowsocks.Test | |||||
[TestMethod] | [TestMethod] | ||||
public void TestNativeTableEncryption() | public void TestNativeTableEncryption() | ||||
{ | { | ||||
// Too slow, run once to save CPU | |||||
var enc = new StreamTableNativeEncryptor("table", "barfoo!"); | |||||
var dec = new StreamTableNativeEncryptor("table", "barfoo!"); | |||||
RunEncryptionRound(enc, dec); | |||||
TestEncryptionMethod(typeof(StreamTableNativeEncryptor), "table"); | |||||
} | } | ||||
[TestMethod] | [TestMethod] | ||||
public void TestStreamAesBouncyCastleEncryption() | public void TestStreamAesBouncyCastleEncryption() | ||||