|
|
@@ -64,25 +64,25 @@ namespace Shadowsocks.Encryption.Stream |
|
|
|
{
|
|
|
|
byte[] passbuf = Encoding.UTF8.GetBytes(password);
|
|
|
|
if (_key == null) _key = new byte[keyLen];
|
|
|
|
if (_key.Length < keyLen) Array.Resize(ref _key, keyLen);
|
|
|
|
LegacyDeriveKey(passbuf, _key);
|
|
|
|
if (_key.Length != keyLen) Array.Resize(ref _key, keyLen);
|
|
|
|
LegacyDeriveKey(passbuf, _key, keyLen);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void LegacyDeriveKey(byte[] password, byte[] key)
|
|
|
|
public static void LegacyDeriveKey(byte[] password, byte[] key, int keylen)
|
|
|
|
{
|
|
|
|
byte[] result = new byte[password.Length + 16];
|
|
|
|
byte[] result = new byte[password.Length + MD5_LEN];
|
|
|
|
int i = 0;
|
|
|
|
byte[] md5sum = null;
|
|
|
|
while (i < key.Length) {
|
|
|
|
while (i < keylen) {
|
|
|
|
if (i == 0) {
|
|
|
|
md5sum = MbedTLS.MD5(password);
|
|
|
|
} else {
|
|
|
|
md5sum.CopyTo(result, 0);
|
|
|
|
password.CopyTo(result, md5sum.Length);
|
|
|
|
Array.Copy(md5sum, 0, result, 0, MD5_LEN);
|
|
|
|
Array.Copy(password, 0, result, MD5_LEN, password.Length);
|
|
|
|
md5sum = MbedTLS.MD5(result);
|
|
|
|
}
|
|
|
|
md5sum.CopyTo(key, i);
|
|
|
|
i += md5sum.Length;
|
|
|
|
Array.Copy(md5sum, 0, key, i, Math.Min(MD5_LEN, keylen - i));
|
|
|
|
i += MD5_LEN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|