public ShadowosocksAeadCipher(string password, ValueTuple <int, int> key_salt_size, NonceLength nonceLength = NonceLength.LEN_12, ILogger logger = null) : base(password) { _keySize_SaltSize = key_salt_size; _nonceLength = nonceLength; _nonceZero = new byte[(int)_nonceLength]; _logger = logger; _masterKeyBytes = MasterKeyGenerator.PasswordToKey(password, _keySize_SaltSize.Item1); _logger?.LogInformation($"ShadowosocksAeadCipher ctor " + $"_keySize_SaltSize={_keySize_SaltSize.Item1},{_keySize_SaltSize.Item2}"); _tcpCtx加密 = new TcpCipherContext(_keySize_SaltSize.Item1, _keySize_SaltSize.Item2, (int)_nonceLength); _tcpCtx解密 = new TcpCipherContext(_keySize_SaltSize.Item1, _keySize_SaltSize.Item2, (int)_nonceLength); }
public AeadChaChaPoly1305(string password, ValueTuple <int, int> key_salt_size, NonceLength nonceLength = NonceLength.LEN_12, ILogger logger = null) : base(password, key_salt_size, nonceLength, logger) { if (null == MemoryStreamManager) { int blockSize = 1024; int largeBufferMultiple = 2048 * 16; int maxBufferSize = 16 * largeBufferMultiple; var manager = new RecyclableMemoryStreamManager(blockSize, largeBufferMultiple, maxBufferSize); //manager.GenerateCallStacks = true; manager.AggressiveBufferReturn = true; manager.MaximumFreeLargePoolBytes = maxBufferSize * 4 * 5; manager.MaximumFreeSmallPoolBytes = blockSize * 1024 * 5; MemoryStreamManager = manager; } }