mirror of
https://github.com/bolucat/Archive.git
synced 2025-10-07 17:12:03 +08:00
99 lines
2.3 KiB
C#
99 lines
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Shadowsocks.Encryption.Stream
|
|
{
|
|
class PlainEncryptor
|
|
: EncryptorBase, IDisposable
|
|
{
|
|
const int CIPHER_NONE = 1;
|
|
|
|
private static Dictionary<string, EncryptorInfo> _ciphers = new Dictionary<string, EncryptorInfo> {
|
|
{ "plain", new EncryptorInfo("PLAIN", 0, 0, CIPHER_NONE) },
|
|
{ "none", new EncryptorInfo("PLAIN", 0, 0, CIPHER_NONE) }
|
|
};
|
|
|
|
public PlainEncryptor(string method, string password) : base(method, password)
|
|
{
|
|
}
|
|
|
|
public static List<string> SupportedCiphers()
|
|
{
|
|
return new List<string>(_ciphers.Keys);
|
|
}
|
|
|
|
protected Dictionary<string, EncryptorInfo> getCiphers()
|
|
{
|
|
return _ciphers;
|
|
}
|
|
|
|
#region TCP
|
|
|
|
public override void Encrypt(byte[] buf, int length, byte[] outbuf, out int outlength)
|
|
{
|
|
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
|
|
outlength = length;
|
|
}
|
|
|
|
public override void Decrypt(byte[] buf, int length, byte[] outbuf, out int outlength)
|
|
{
|
|
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
|
|
outlength = length;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UDP
|
|
|
|
public override void EncryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength)
|
|
{
|
|
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
|
|
outlength = length;
|
|
}
|
|
|
|
public override void DecryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength)
|
|
{
|
|
Buffer.BlockCopy(buf, 0, outbuf, 0, length);
|
|
outlength = length;
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
#region IDisposable
|
|
|
|
private bool _disposed;
|
|
|
|
// instance based lock
|
|
private readonly object _lock = new object();
|
|
|
|
public override void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
~PlainEncryptor()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
lock (_lock)
|
|
{
|
|
if (_disposed) return;
|
|
_disposed = true;
|
|
}
|
|
|
|
if (disposing)
|
|
{
|
|
// free managed objects
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|