private static TServerDHInnerData DeserializeResponse(TServerDHParamsOk serverDhParams, AesKeyData aesKeyData)
        {
            var answerWithHash = AES.DecryptAes(aesKeyData, serverDhParams.EncryptedAnswerAsBinary);

            var answerWithHashBuffer = PooledByteBufferAllocator.Default.Buffer();

            try
            {
                answerWithHashBuffer.WriteBytes(answerWithHash);

                // var serverHashsum = answerWithHashBuffer.ToArray(20);
                answerWithHashBuffer.SkipBytes(20);

                var serverDhInnerData = (TServerDHInnerData)Serializer.Deserialize(answerWithHashBuffer);

                // var clearAnswer = Serializer.Serialize(serverDhInnerData);
                // var hashsum = SHA1Helper.ComputeHashsum(clearAnswer);
                // Guard.That(serverHashsum).IsItemsEquals(hashsum);

                return(serverDhInnerData);
            }
            finally
            {
                answerWithHashBuffer.SafeRelease();
            }
        }
        private static TClientDHInnerData DeserializeRequest(RequestSetClientDHParams serverDhParams, AesKeyData aesKeyData)
        {
            var encryptedAnswer = serverDhParams.EncryptedDataAsBinary;
            var answerWithHash  = AES.DecryptAes(aesKeyData, encryptedAnswer);

            var serverHashsum = answerWithHash.Take(20).ToArray();
            var answer        = answerWithHash.Skip(20).ToArray();

            var answerBuffer = PooledByteBufferAllocator.Default.Buffer();

            try
            {
                answerBuffer.WriteBytes(answer);

                var clientDhInnerData = Serializer.Deserialize(answerBuffer).Is <TClientDHInnerData>();

                return(clientDhInnerData);
            }
            finally
            {
                answerBuffer.Release();
            }
        }
        private static RequestSetClientDHParams SerializeRequest(TClientDHInnerData clientDhInnerData, AesKeyData aesKeyData)
        {
            var dhInnerDataBuffer = Serializer.Serialize(clientDhInnerData);

            byte[] innerData;
            try
            {
                Serializer.Serialize(clientDhInnerData);
                innerData = dhInnerDataBuffer.ToArray();
            }
            finally
            {
                dhInnerDataBuffer.SafeRelease();
            }

            var hashsum = Sha1Helper.ComputeHashsum(innerData);

            var answerWithHash = hashsum.Concat(innerData).ToArray();

            var encryptedAnswer = AES.EncryptAes(aesKeyData, answerWithHash);

            return(new RequestSetClientDHParams
            {
                EncryptedDataAsBinary = encryptedAnswer,
                Nonce = clientDhInnerData.Nonce,
                ServerNonce = clientDhInnerData.ServerNonce
            });
        }