public bool Read(byte[] token, ulong sequenceNum, byte[] key)
        {
            byte[] tokenBuffer = BufferPool.GetBuffer(300);
            int    tokenLen    = 0;

            try
            {
                tokenLen = PacketIO.DecryptChallengeToken(sequenceNum, token, key, tokenBuffer);
            }
            catch
            {
                BufferPool.ReturnBuffer(tokenBuffer);
                return(false);
            }

            using (var reader = ByteArrayReaderWriter.Get(tokenBuffer))
            {
                ClientID = reader.ReadUInt64();
                UserData = reader.ReadBytes(256);
            }

            return(true);
        }