From 2fafc52defe6180e66f1e8d2a38d3668b99782cb Mon Sep 17 00:00:00 2001 From: Syrone Wong Date: Sat, 13 Aug 2016 14:28:09 +0800 Subject: [PATCH] Refine encryption(#655) * Refine encryption - Add AES-CTR, blowfish and camellia ciphers aes-256-ctr aes-192-ctr aes-128-ctr bf-cfb camellia-128-cfb camellia-192-cfb camellia-256-cfb - Merge the previous PolarSSL and MbedTLS - Switch to MbedTLS's cipher layer functions - Add workaround to set cipher operation(encrypt/decrypt) Signed-off-by: Syrone Wong * Add function to get MbedTLS cipher context size and drop hard-coded ctx sizes Signed-off-by: Syrone Wong --- shadowsocks-csharp/Data/libsscrypto.dll.gz | Bin 60082 -> 78101 bytes .../Encryption/EncryptorFactory.cs | 4 +- shadowsocks-csharp/Encryption/IVEncryptor.cs | 18 +- shadowsocks-csharp/Encryption/MbedTLS.cs | 48 ++++- .../Encryption/MbedTLSEncryptor.cs | 169 ++++++++++++++++ shadowsocks-csharp/Encryption/PolarSSL.cs | 65 ------- .../Encryption/PolarSSLEncryptor.cs | 184 ------------------ .../Encryption/SodiumEncryptor.cs | 10 +- .../View/ConfigForm.Designer.cs | 9 +- shadowsocks-csharp/shadowsocks-csharp.csproj | 3 +- test/UnitTest.cs | 16 +- 11 files changed, 244 insertions(+), 282 deletions(-) create mode 100644 shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs delete mode 100755 shadowsocks-csharp/Encryption/PolarSSL.cs delete mode 100755 shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs diff --git a/shadowsocks-csharp/Data/libsscrypto.dll.gz b/shadowsocks-csharp/Data/libsscrypto.dll.gz index 22f1698dd771428ab828639aa301c14c566da66e..916a8d651bb02376e12cf2e4b62d42c633ccaae4 100755 GIT binary patch literal 78101 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 z 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 - foreach (string method in PolarSSLEncryptor.SupportedCiphers()) + foreach (string method in MbedTLSEncryptor.SupportedCiphers()) { - _registeredEncryptors.Add(method, typeof(PolarSSLEncryptor)); + _registeredEncryptors.Add(method, typeof(MbedTLSEncryptor)); } foreach (string method in SodiumEncryptor.SupportedCiphers()) { diff --git a/shadowsocks-csharp/Encryption/IVEncryptor.cs b/shadowsocks-csharp/Encryption/IVEncryptor.cs index 6d84de56..e5f21717 100755 --- a/shadowsocks-csharp/Encryption/IVEncryptor.cs +++ b/shadowsocks-csharp/Encryption/IVEncryptor.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Concurrent; +using System.Linq; using System.Security.Cryptography; using System.Text; using System.Net; @@ -23,17 +24,18 @@ namespace Shadowsocks.Encryption protected static byte[] tempbuf = new byte[MAX_INPUT_SIZE]; - protected Dictionary ciphers; + protected Dictionary> ciphers; + protected Dictionary ciphersDetail; private static readonly ConcurrentDictionary CachedKeys = new ConcurrentDictionary(); protected byte[] _encryptIV; protected byte[] _decryptIV; protected bool _decryptIVReceived; protected bool _encryptIVSent; - protected int _encryptIVOffset = 0; - protected int _decryptIVOffset = 0; protected string _method; protected int _cipher; + // cipher name in MbedTLS, useless when using LibSodium + protected string _cipherMbedName; protected int[] _cipherInfo; protected byte[] _key; protected int keyLen; @@ -47,7 +49,7 @@ namespace Shadowsocks.Encryption InitKey(method, password); } - protected abstract Dictionary getCiphers(); + protected abstract Dictionary> getCiphers(); protected void InitKey(string method, string password) { @@ -55,14 +57,16 @@ namespace Shadowsocks.Encryption _method = method; string k = method + ":" + password; ciphers = getCiphers(); - _cipherInfo = ciphers[_method]; + ciphersDetail = ciphers[_method]; + _cipherMbedName = ciphersDetail.Keys.FirstOrDefault(); + _cipherInfo = ciphers[_method][_cipherMbedName]; _cipher = _cipherInfo[2]; if (_cipher == 0) { throw new Exception("method not found"); } - keyLen = ciphers[_method][0]; - ivLen = ciphers[_method][1]; + keyLen = _cipherInfo[0]; + ivLen = _cipherInfo[1]; _key = CachedKeys.GetOrAdd(k, (nk) => { byte[] passbuf = Encoding.UTF8.GetBytes(password); diff --git a/shadowsocks-csharp/Encryption/MbedTLS.cs b/shadowsocks-csharp/Encryption/MbedTLS.cs index 27bdce8c..d29b26e5 100644 --- a/shadowsocks-csharp/Encryption/MbedTLS.cs +++ b/shadowsocks-csharp/Encryption/MbedTLS.cs @@ -12,6 +12,9 @@ namespace Shadowsocks.Encryption { const string DLLNAME = "libsscrypto"; + public const int MBEDTLS_ENCRYPT = 1; + public const int MBEDTLS_DECRYPT = 0; + static MbedTLS() { string dllPath = Utils.GetTempPath("libsscrypto.dll"); @@ -24,24 +27,53 @@ namespace Shadowsocks.Encryption } catch (Exception e) { - Console.WriteLine(e.ToString()); + Logging.LogUsefulException(e); } LoadLibrary(dllPath); } - [DllImport("Kernel32.dll")] - private static extern IntPtr LoadLibrary(string path); - - public const int MD5_CTX_SIZE = 88; - public static byte[] MD5(byte[] input) { byte[] output = new byte[16]; - MbedTLS.md5(input, (uint)input.Length, output); + md5(input, (uint)input.Length, output); return output; } + [DllImport("Kernel32.dll")] + private static extern IntPtr LoadLibrary(string path); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr cipher_info_from_string(string cipher_name); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_init(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_setup(IntPtr ctx, IntPtr cipher_info); + + // check operation + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_setkey(IntPtr ctx, byte[] key, int key_bitlen, int operation); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_set_iv(IntPtr ctx, byte[] iv, int iv_len); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_reset(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern int cipher_update(IntPtr ctx, byte[] input, int ilen, byte[] output, ref int olen); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_free(IntPtr ctx); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void md5(byte[] input, uint ilen, byte[] output); + + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] + public static extern void cipher_set_operation_ex(IntPtr ctx, int operation); + [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void md5(byte[] input, uint ilen, byte[] output); + public static extern int cipher_get_size_ex(); } } diff --git a/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs b/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs new file mode 100644 index 00000000..969b9dd2 --- /dev/null +++ b/shadowsocks-csharp/Encryption/MbedTLSEncryptor.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Text; +using System.Threading; + +namespace Shadowsocks.Encryption +{ + public class MbedTLSEncryptor + : IVEncryptor, IDisposable + { + const int CIPHER_RC4 = 1; + const int CIPHER_AES = 2; + const int CIPHER_BLOWFISH = 3; + const int CIPHER_CAMELLIA = 4; + + private IntPtr _encryptCtx = IntPtr.Zero; + private IntPtr _decryptCtx = IntPtr.Zero; + + public MbedTLSEncryptor(string method, string password, bool onetimeauth, bool isudp) + : base(method, password, onetimeauth, isudp) + { + InitKey(method, password); + } + + private static Dictionary> _ciphers = new Dictionary> { + { "aes-128-cfb", new Dictionary { { "AES-128-CFB128", new int[] { 16, 16, CIPHER_AES } } } }, + { "aes-192-cfb", new Dictionary { { "AES-192-CFB128", new int[] { 24, 16, CIPHER_AES } } } }, + { "aes-256-cfb", new Dictionary { { "AES-256-CFB128", new int[] { 32, 16, CIPHER_AES } } } }, + { "aes-128-ctr", new Dictionary { { "AES-128-CTR", new int[] { 16, 16, CIPHER_AES } } } }, + { "aes-192-ctr", new Dictionary { { "AES-192-CTR", new int[] { 24, 16, CIPHER_AES } } } }, + { "aes-256-ctr", new Dictionary { { "AES-256-CTR", new int[] { 32, 16, CIPHER_AES } } } }, + { "bf-cfb", new Dictionary { { "BLOWFISH-CFB64", new int[] { 16, 8, CIPHER_BLOWFISH } } } }, + { "camellia-128-cfb", new Dictionary { { "CAMELLIA-128-CFB128", new int[] { 16, 16, CIPHER_CAMELLIA } } } }, + { "camellia-192-cfb", new Dictionary { { "CAMELLIA-192-CFB128", new int[] { 24, 16, CIPHER_CAMELLIA } } } }, + { "camellia-256-cfb", new Dictionary { { "CAMELLIA-256-CFB128", new int[] { 32, 16, CIPHER_CAMELLIA } } } }, + { "rc4-md5", new Dictionary { { "ARC4-128", new int[] { 16, 16, CIPHER_RC4 } } } } + }; + + public static List SupportedCiphers() + { + return new List(_ciphers.Keys); + } + + protected override Dictionary> getCiphers() + { + return _ciphers; + } + + protected override void initCipher(byte[] iv, bool isCipher) + { + base.initCipher(iv, isCipher); + IntPtr ctx = Marshal.AllocHGlobal(MbedTLS.cipher_get_size_ex()); + if (isCipher) + { + _encryptCtx = ctx; + } + else + { + _decryptCtx = ctx; + } + byte[] realkey; + if (_method == "rc4-md5") + { + byte[] temp = new byte[keyLen + ivLen]; + realkey = new byte[keyLen]; + Array.Copy(_key, 0, temp, 0, keyLen); + Array.Copy(iv, 0, temp, keyLen, ivLen); + realkey = MbedTLS.MD5(temp); + } + else + { + realkey = _key; + } + MbedTLS.cipher_init(ctx); + if (MbedTLS.cipher_setup( ctx, MbedTLS.cipher_info_from_string( _cipherMbedName ) ) != 0 ) + throw new Exception(); + // MbedTLS takes key length by bit + // cipher_setkey() will set the correct key schedule + if (MbedTLS.cipher_setkey(ctx, realkey, keyLen * 8, isCipher ? MbedTLS.MBEDTLS_ENCRYPT : MbedTLS.MBEDTLS_DECRYPT) != 0 ) + throw new Exception(); + if (MbedTLS.cipher_set_iv(ctx, iv, ivLen) != 0) + throw new Exception(); + if (MbedTLS.cipher_reset(ctx) != 0) + throw new Exception(); + } + + protected override void cipherUpdate(bool isCipher, int length, byte[] buf, byte[] outbuf) + { + // C# could be multi-threaded + if (_disposed) + { + throw new ObjectDisposedException(this.ToString()); + } + IntPtr ctx; + if (isCipher) + { + ctx = _encryptCtx; + } + else + { + ctx = _decryptCtx; + } + + if (_cipher == CIPHER_AES + || _cipher == CIPHER_BLOWFISH + || _cipher == CIPHER_CAMELLIA) + { + /* + * operation workaround + * + * MBEDTLS_AES_{EN,DE}CRYPT + * == MBEDTLS_BLOWFISH_{EN,DE}CRYPT + * == MBEDTLS_CAMELLIA_{EN,DE}CRYPT + * == MBEDTLS_{EN,DE}CRYPT + * setter code in C: + * ctx->operation = operation; + */ + MbedTLS.cipher_set_operation_ex(ctx, isCipher ? MbedTLS.MBEDTLS_ENCRYPT : MbedTLS.MBEDTLS_DECRYPT); + } + if (MbedTLS.cipher_update(ctx, buf, length, outbuf, ref length) != 0 ) + throw new Exception(); + } + + #region IDisposable + private bool _disposed; + + public override void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + ~MbedTLSEncryptor() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + lock (this) + { + if (_disposed) + { + return; + } + _disposed = true; + } + + if (disposing) + { + if (_encryptCtx != IntPtr.Zero) + { + MbedTLS.cipher_free(_encryptCtx); + Marshal.FreeHGlobal(_encryptCtx); + _encryptCtx = IntPtr.Zero; + } + if (_decryptCtx != IntPtr.Zero) + { + MbedTLS.cipher_free(_decryptCtx); + Marshal.FreeHGlobal(_decryptCtx); + _decryptCtx = IntPtr.Zero; + } + } + } + #endregion + } +} diff --git a/shadowsocks-csharp/Encryption/PolarSSL.cs b/shadowsocks-csharp/Encryption/PolarSSL.cs deleted file mode 100755 index ddf59564..00000000 --- a/shadowsocks-csharp/Encryption/PolarSSL.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using System.IO; -using System.Runtime.InteropServices; - -using Shadowsocks.Controller; -using Shadowsocks.Properties; -using Shadowsocks.Util; - -namespace Shadowsocks.Encryption -{ - public class PolarSSL - { - const string DLLNAME = "libsscrypto"; - - public const int AES_CTX_SIZE = 8 + 4 * 68; - public const int AES_ENCRYPT = 1; - public const int AES_DECRYPT = 0; - - static PolarSSL() - { - string dllPath = Utils.GetTempPath("libsscrypto.dll"); - try - { - FileManager.UncompressFile(dllPath, Resources.libsscrypto_dll); - } - catch (IOException) - { - } - catch (Exception e) - { - Logging.LogUsefulException(e); - } - LoadLibrary(dllPath); - } - - [DllImport("Kernel32.dll")] - private static extern IntPtr LoadLibrary(string path); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void aes_init(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void aes_free(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int aes_setkey_enc(IntPtr ctx, byte[] key, int keysize); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int aes_crypt_cfb128(IntPtr ctx, int mode, int length, ref int iv_off, byte[] iv, byte[] input, byte[] output); - - public const int ARC4_CTX_SIZE = 264; - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_init(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_free(IntPtr ctx); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static void arc4_setup(IntPtr ctx, byte[] key, int keysize); - - [DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)] - public extern static int arc4_crypt(IntPtr ctx, int length, byte[] input, byte[] output); - } -} diff --git a/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs b/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs deleted file mode 100755 index 8e521862..00000000 --- a/shadowsocks-csharp/Encryption/PolarSSLEncryptor.cs +++ /dev/null @@ -1,184 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using System.Security.Cryptography; -using System.Text; -using System.Threading; - -namespace Shadowsocks.Encryption -{ - public class PolarSSLEncryptor - : IVEncryptor, IDisposable - { - const int CIPHER_AES = 1; - const int CIPHER_RC4 = 2; - - private IntPtr _encryptCtx = IntPtr.Zero; - private IntPtr _decryptCtx = IntPtr.Zero; - - public PolarSSLEncryptor(string method, string password, bool onetimeauth, bool isudp) - : base(method, password, onetimeauth, isudp) - { - InitKey(method, password); - } - - private static Dictionary _ciphers = new Dictionary { - {"aes-128-cfb", new int[]{16, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"aes-192-cfb", new int[]{24, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"aes-256-cfb", new int[]{32, 16, CIPHER_AES, PolarSSL.AES_CTX_SIZE}}, - {"rc4-md5", new int[]{16, 16, CIPHER_RC4, PolarSSL.ARC4_CTX_SIZE}}, - }; - - public static List SupportedCiphers() - { - return new List(_ciphers.Keys); - } - - protected override Dictionary getCiphers() - { - return _ciphers; - } - - protected override void initCipher(byte[] iv, bool isCipher) - { - base.initCipher(iv, isCipher); - - IntPtr ctx; - ctx = Marshal.AllocHGlobal(_cipherInfo[3]); - if (isCipher) - { - _encryptCtx = ctx; - } - else - { - _decryptCtx = ctx; - } - byte[] realkey; - if (_method == "rc4-md5") - { - byte[] temp = new byte[keyLen + ivLen]; - realkey = new byte[keyLen]; - Array.Copy(_key, 0, temp, 0, keyLen); - Array.Copy(iv, 0, temp, keyLen, ivLen); - realkey = MbedTLS.MD5(temp); - } - else - { - realkey = _key; - } - if (_cipher == CIPHER_AES) - { - PolarSSL.aes_init(ctx); - // PolarSSL takes key length by bit - // since we'll use CFB mode, here we both do enc, not dec - PolarSSL.aes_setkey_enc(ctx, realkey, keyLen * 8); - } - else if (_cipher == CIPHER_RC4) - { - PolarSSL.arc4_init(ctx); - // PolarSSL RC4 takes key length by byte - PolarSSL.arc4_setup(ctx, realkey, keyLen); - } - } - - protected override void cipherUpdate(bool isCipher, int length, byte[] buf, byte[] outbuf) - { - // C# could be multi-threaded - if (_disposed) - { - throw new ObjectDisposedException(this.ToString()); - } - byte[] iv; - int ivOffset; - IntPtr ctx; - if (isCipher) - { - iv = _encryptIV; - ivOffset = _encryptIVOffset; - ctx = _encryptCtx; - } - else - { - iv = _decryptIV; - ivOffset = _decryptIVOffset; - ctx = _decryptCtx; - } - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_crypt_cfb128(ctx, isCipher ? PolarSSL.AES_ENCRYPT : PolarSSL.AES_DECRYPT, length, ref ivOffset, iv, buf, outbuf); - if (isCipher) - { - _encryptIVOffset = ivOffset; - } - else - { - _decryptIVOffset = ivOffset; - } - break; - case CIPHER_RC4: - PolarSSL.arc4_crypt(ctx, length, buf, outbuf); - break; - } - } - - #region IDisposable - private bool _disposed; - - public override void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - ~PolarSSLEncryptor() - { - Dispose(false); - } - - protected virtual void Dispose(bool disposing) - { - lock (this) - { - if (_disposed) - { - return; - } - _disposed = true; - } - - if (disposing) - { - if (_encryptCtx != IntPtr.Zero) - { - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_free(_encryptCtx); - break; - case CIPHER_RC4: - PolarSSL.arc4_free(_encryptCtx); - break; - } - Marshal.FreeHGlobal(_encryptCtx); - _encryptCtx = IntPtr.Zero; - } - if (_decryptCtx != IntPtr.Zero) - { - switch (_cipher) - { - case CIPHER_AES: - PolarSSL.aes_free(_decryptCtx); - break; - case CIPHER_RC4: - PolarSSL.arc4_free(_decryptCtx); - break; - } - Marshal.FreeHGlobal(_decryptCtx); - _decryptCtx = IntPtr.Zero; - } - } - } - #endregion - } -} diff --git a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs index b3877f86..8052fda5 100755 --- a/shadowsocks-csharp/Encryption/SodiumEncryptor.cs +++ b/shadowsocks-csharp/Encryption/SodiumEncryptor.cs @@ -27,13 +27,13 @@ namespace Shadowsocks.Encryption InitKey(method, password); } - 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}}, + private static Dictionary> _ciphers = new Dictionary> { + { "salsa20", new Dictionary { { "salsa20", new int[] { 32, 8, CIPHER_SALSA20 } } } }, + { "chacha20", new Dictionary { { "chacha20", new int[] { 32, 8, CIPHER_CHACHA20 } } } }, + { "chacha20-ietf", new Dictionary { { "chacha20-ietf", new int[] { 32, 12, CIPHER_CHACHA20_IETF } } } } }; - protected override Dictionary getCiphers() + protected override Dictionary> getCiphers() { return _ciphers; } diff --git a/shadowsocks-csharp/View/ConfigForm.Designer.cs b/shadowsocks-csharp/View/ConfigForm.Designer.cs index 834ec361..50207095 100755 --- a/shadowsocks-csharp/View/ConfigForm.Designer.cs +++ b/shadowsocks-csharp/View/ConfigForm.Designer.cs @@ -204,7 +204,14 @@ "chacha20-ietf", "aes-256-cfb", "aes-192-cfb", - "aes-128-cfb"}); + "aes-128-cfb", + "aes-256-ctr", + "aes-192-ctr", + "aes-128-ctr", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb",}); this.EncryptionSelect.Location = new System.Drawing.Point(83, 87); this.EncryptionSelect.Name = "EncryptionSelect"; this.EncryptionSelect.Size = new System.Drawing.Size(160, 20); diff --git a/shadowsocks-csharp/shadowsocks-csharp.csproj b/shadowsocks-csharp/shadowsocks-csharp.csproj index 8e9c153a..c4c87271 100644 --- a/shadowsocks-csharp/shadowsocks-csharp.csproj +++ b/shadowsocks-csharp/shadowsocks-csharp.csproj @@ -156,8 +156,7 @@ - - + diff --git a/test/UnitTest.cs b/test/UnitTest.cs index 7cbcee1c..6fa4f21d 100755 --- a/test/UnitTest.cs +++ b/test/UnitTest.cs @@ -73,14 +73,14 @@ namespace test private static object locker = new object(); [TestMethod] - public void TestPolarSSLEncryption() + public void TestMbedTLSEncryption() { // run it once before the multi-threading test to initialize global tables - RunSinglePolarSSLEncryptionThread(); + RunSingleMbedTLSEncryptionThread(); List threads = new List(); for (int i = 0; i < 10; i++) { - Thread t = new Thread(new ThreadStart(RunSinglePolarSSLEncryptionThread)); + Thread t = new Thread(new ThreadStart(RunSingleMbedTLSEncryptionThread)); threads.Add(t); t.Start(); } @@ -91,7 +91,7 @@ namespace test Assert.IsFalse(encryptionFailed); } - private void RunSinglePolarSSLEncryptionThread() + private void RunSingleMbedTLSEncryptionThread() { try { @@ -99,8 +99,8 @@ namespace test { IEncryptor encryptor; IEncryptor decryptor; - encryptor = new PolarSSLEncryptor("aes-256-cfb", "barfoo!", false, false); - decryptor = new PolarSSLEncryptor("aes-256-cfb", "barfoo!", false, false); + encryptor = new MbedTLSEncryptor("aes-256-cfb", "barfoo!", false, false); + decryptor = new MbedTLSEncryptor("aes-256-cfb", "barfoo!", false, false); RunEncryptionRound(encryptor, decryptor); } } @@ -139,8 +139,8 @@ namespace test var random = new Random(); IEncryptor encryptor; IEncryptor decryptor; - encryptor = new PolarSSLEncryptor("rc4-md5", "barfoo!", false, false); - decryptor = new PolarSSLEncryptor("rc4-md5", "barfoo!", false, false); + encryptor = new MbedTLSEncryptor("rc4-md5", "barfoo!", false, false); + decryptor = new MbedTLSEncryptor("rc4-md5", "barfoo!", false, false); RunEncryptionRound(encryptor, decryptor); } }