private static TLString GetEncryptedClientDHInnerData(TLClientDHInnerData clientDHInnerData, WindowsPhone.Tuple <byte[], byte[]> aesParams) { var random = new Random(); var client_DH_inner_data = clientDHInnerData.ToBytes(); var client_DH_inner_dataWithHash = TLUtils.Combine(Utils.ComputeSHA1(client_DH_inner_data), client_DH_inner_data); var addedBytesLength = 16 - (client_DH_inner_dataWithHash.Length % 16); if (addedBytesLength > 0 && addedBytesLength < 16) { var addedBytes = new byte[addedBytesLength]; random.NextBytes(addedBytes); client_DH_inner_dataWithHash = TLUtils.Combine(client_DH_inner_dataWithHash, addedBytes); //TLUtils.WriteLine(string.Format("Added {0} bytes", addedBytesLength)); } var aesEncryptClientDHInnerDataWithHash = Utils.AesIge(client_DH_inner_dataWithHash, aesParams.Item1, aesParams.Item2, true); return(TLString.FromBigEndianData(aesEncryptClientDHInnerDataWithHash)); }
private static TLPQInnerData GetInnerData(TLInt dcId, TLResPQ resPQ, TLInt256 newNonce, out TimeSpan calcTime, out WindowsPhone.Tuple <ulong, ulong> pqPair) { var pq = BitConverter.ToUInt64(resPQ.PQ.Data.Reverse().ToArray(), 0); TLUtils.WriteLine("pq: " + pq); var pqCalcTime = Stopwatch.StartNew(); try { pqPair = Utils.GetFastPQ(pq); pqCalcTime.Stop(); calcTime = pqCalcTime.Elapsed; TLUtils.WriteLineAtBegin("Pq Fast calculation time: " + pqCalcTime.Elapsed); TLUtils.WriteLine("p: " + pqPair.Item1); TLUtils.WriteLine("q: " + pqPair.Item2); } catch (Exception e) { pqCalcTime = Stopwatch.StartNew(); pqPair = Utils.GetPQPollard(pq); pqCalcTime.Stop(); calcTime = pqCalcTime.Elapsed; TLUtils.WriteLineAtBegin("Pq Pollard calculation time: " + pqCalcTime.Elapsed); TLUtils.WriteLine("p: " + pqPair.Item1); TLUtils.WriteLine("q: " + pqPair.Item2); } var p = TLString.FromUInt64(pqPair.Item1); var q = TLString.FromUInt64(pqPair.Item2); var innerData1 = new TLPQInnerDataDC { NewNonce = newNonce, Nonce = resPQ.Nonce, P = p, Q = q, PQ = resPQ.PQ, ServerNonce = resPQ.ServerNonce, DCId = dcId }; return(innerData1); }