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 }); }