public override unsafe bool Decrypt(NetIncomingMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            int unEncLenBits = (int)message.ReadUInt32();
            int byteLen      = NetBitWriter.BytesForBits(unEncLenBits);
            var result       = message.StoragePool.Rent(byteLen);

            // TODO: create stream that takes Memory<byte> overload
            fixed(byte *msgPtr = message.GetBuffer())
            {
                using var ms        = new UnmanagedMemoryStream(msgPtr + 4, message.ByteLength - 4);
                using var decryptor = Algorithm.CreateDecryptor();
                using var cs        = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
                cs.Read(result, 0, byteLen);
            }

            message.SetBuffer(result, true);
            message.BitLength   = unEncLenBits;
            message.BitPosition = 0;

            return(true);
        }
        public override bool Decrypt(NetIncomingMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            byte[]      data  = message.GetBuffer();
            Span <byte> slice = data.AsSpan(0, message.ByteLength);

            for (int i = 0; i < slice.Length; i++)
            {
                int offset = i % _key.Length;
                slice[i] = (byte)(slice[i] ^ _key[offset]);
            }
            return(true);
        }