diff --git a/shadowsocks-csharp/Data/libsscrypto.dll.gz b/shadowsocks-csharp/Data/libsscrypto.dll.gz index 544c80bf..6c814b36 100755 Binary files a/shadowsocks-csharp/Data/libsscrypto.dll.gz and b/shadowsocks-csharp/Data/libsscrypto.dll.gz differ diff --git a/shadowsocks-csharp/Encryption/Sodium.cs b/shadowsocks-csharp/Encryption/Sodium.cs index 8d690dd2..dc564ace 100755 --- a/shadowsocks-csharp/Encryption/Sodium.cs +++ b/shadowsocks-csharp/Encryption/Sodium.cs @@ -40,6 +40,9 @@ namespace Shadowsocks.Encryption [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] public extern static int crypto_stream_chacha20_xor_ic(byte[] c, byte[] m, ulong mlen, byte[] n, ulong ic, byte[] k); + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public extern static int crypto_stream_chacha20_ietf_xor_ic(byte[] c, byte[] m, ulong mlen, byte[] n, uint ic, byte[] k); + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] public extern static void ss_sha1_hmac_ex(byte[] key, uint keylen, byte[] input, int ioff, uint ilen, diff --git a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs index a18d2a69..b3877f86 100755 --- a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs +++ b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs @@ -10,6 +10,7 @@ namespace Shadowsocks.Encryption { const int CIPHER_SALSA20 = 1; const int CIPHER_CHACHA20 = 2; + const int CIPHER_CHACHA20_IETF = 3; const int SODIUM_BLOCK_SIZE = 64; @@ -29,6 +30,7 @@ namespace Shadowsocks.Encryption private static Dictionary _ciphers = new Dictionary { {"salsa20", new int[]{32, 8, CIPHER_SALSA20, PolarSSL.AES_CTX_SIZE}}, {"chacha20", new int[]{32, 8, CIPHER_CHACHA20, PolarSSL.AES_CTX_SIZE}}, + {"chacha20-ietf", new int[]{32, 12, CIPHER_CHACHA20_IETF, PolarSSL.AES_CTX_SIZE}}, }; protected override Dictionary getCiphers() @@ -75,6 +77,9 @@ namespace Shadowsocks.Encryption case CIPHER_CHACHA20: Sodium.crypto_stream_chacha20_xor_ic(sodiumBuf, sodiumBuf, (ulong)(padding + length), iv, ic, _key); break; + case CIPHER_CHACHA20_IETF: + Sodium.crypto_stream_chacha20_ietf_xor_ic(sodiumBuf, sodiumBuf, (ulong)(padding + length), iv, (uint)ic, _key); + break; } Buffer.BlockCopy(sodiumBuf, padding, outbuf, 0, length); padding += length; diff --git a/shadowsocks-csharp/View/ConfigForm.Designer.cs b/shadowsocks-csharp/View/ConfigForm.Designer.cs index 306a92ec..fcd11838 100755 --- a/shadowsocks-csharp/View/ConfigForm.Designer.cs +++ b/shadowsocks-csharp/View/ConfigForm.Designer.cs @@ -201,6 +201,7 @@ "rc4-md5", "salsa20", "chacha20", + "chacha20-ietf", "aes-256-cfb", "aes-192-cfb", "aes-128-cfb"});