mirror of
				https://github.com/bolucat/Archive.git
				synced 2025-10-31 20:03:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Shadowsocks.Encryption
 | |
| {
 | |
|     public class EncryptorInfo
 | |
|     {
 | |
|         public int KeySize;
 | |
|         public int IvSize;
 | |
|         public int SaltSize;
 | |
|         public int TagSize;
 | |
|         public int NonceSize;
 | |
|         public int Type;
 | |
|         public string InnerLibName;
 | |
| 
 | |
|         // For those who make use of internal crypto method name
 | |
|         // e.g. mbed TLS
 | |
| 
 | |
|         #region Stream ciphers
 | |
| 
 | |
|         public EncryptorInfo(string innerLibName, int keySize, int ivSize, int type)
 | |
|         {
 | |
|             this.KeySize = keySize;
 | |
|             this.IvSize = ivSize;
 | |
|             this.Type = type;
 | |
|             this.InnerLibName = innerLibName;
 | |
|         }
 | |
| 
 | |
|         public EncryptorInfo(int keySize, int ivSize, int type)
 | |
|         {
 | |
|             this.KeySize = keySize;
 | |
|             this.IvSize = ivSize;
 | |
|             this.Type = type;
 | |
|             this.InnerLibName = string.Empty;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region AEAD ciphers
 | |
| 
 | |
|         public EncryptorInfo(string innerLibName, int keySize, int saltSize, int nonceSize, int tagSize, int type)
 | |
|         {
 | |
|             this.KeySize = keySize;
 | |
|             this.SaltSize = saltSize;
 | |
|             this.NonceSize = nonceSize;
 | |
|             this.TagSize = tagSize;
 | |
|             this.Type = type;
 | |
|             this.InnerLibName = innerLibName;
 | |
|         }
 | |
| 
 | |
|         public EncryptorInfo(int keySize, int saltSize, int nonceSize, int tagSize, int type)
 | |
|         {
 | |
|             this.KeySize = keySize;
 | |
|             this.SaltSize = saltSize;
 | |
|             this.NonceSize = nonceSize;
 | |
|             this.TagSize = tagSize;
 | |
|             this.Type = type;
 | |
|             this.InnerLibName = string.Empty;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| 
 | |
|     public abstract class EncryptorBase
 | |
|         : IEncryptor
 | |
|     {
 | |
|         public const int MAX_INPUT_SIZE = 32768;
 | |
| 
 | |
|         public const int MAX_DOMAIN_LEN = 255;
 | |
|         public const int ADDR_PORT_LEN = 2;
 | |
|         public const int ADDR_ATYP_LEN = 1;
 | |
| 
 | |
|         public const int ATYP_IPv4 = 0x01;
 | |
|         public const int ATYP_DOMAIN = 0x03;
 | |
|         public const int ATYP_IPv6 = 0x04;
 | |
| 
 | |
|         public const int MD5_LEN = 16;
 | |
| 
 | |
|         protected EncryptorBase(string method, string password)
 | |
|         {
 | |
|             Method = method;
 | |
|             Password = password;
 | |
|         }
 | |
| 
 | |
|         protected string Method;
 | |
|         protected string Password;
 | |
| 
 | |
|         public abstract void Encrypt(byte[] buf, int length, byte[] outbuf, out int outlength);
 | |
| 
 | |
|         public abstract void Decrypt(byte[] buf, int length, byte[] outbuf, out int outlength);
 | |
| 
 | |
|         public abstract void EncryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength);
 | |
| 
 | |
|         public abstract void DecryptUDP(byte[] buf, int length, byte[] outbuf, out int outlength);
 | |
| 
 | |
|         public abstract void Dispose();
 | |
| 
 | |
|         public int AddrBufLength { get; set; } = - 1;
 | |
|     }
 | |
| } | 
![github-action[bot]](/assets/img/avatar_default.png)