private static TLPQInnerData GetInnerData(TLResPQ resPQ, TLInt256 newNonce, out TimeSpan calcTime, out Tuple <ulong, ulong> pqPair) { var pq = BitConverter.ToUInt64(resPQ.PQ.Reverse().ToArray(), 0); //NOTE: add Reverse here 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 = pqPair.Item1.FromUInt64(); var q = pqPair.Item2.FromUInt64(); var innerData1 = new TLPQInnerData { NewNonce = newNonce, Nonce = resPQ.Nonce, P = p, Q = q, PQ = resPQ.PQ, ServerNonce = resPQ.ServerNonce }; return(innerData1); }
public static TLString GetEncryptedInnerData(TLPQInnerData innerData, string publicKey) { var innerDataBytes = innerData.ToBytes(); #if LOG_REGISTRATION var sb = new StringBuilder(); sb.AppendLine(); sb.AppendLine("pq " + innerData.PQ.ToBytes().Length); sb.AppendLine("p " + innerData.P.ToBytes().Length); sb.AppendLine("q " + innerData.Q.ToBytes().Length); sb.AppendLine("nonce " + innerData.Nonce.ToBytes().Length); sb.AppendLine("serverNonce " + innerData.ServerNonce.ToBytes().Length); sb.AppendLine("newNonce " + innerData.NewNonce.ToBytes().Length); sb.AppendLine("innerData length " + innerDataBytes.Length); TLUtils.WriteLog(sb.ToString()); #endif var sha1 = Utils.ComputeSHA1(innerDataBytes); var dataWithHash = TLUtils.Combine(sha1, innerDataBytes); //116 #if LOG_REGISTRATION TLUtils.WriteLog("innerData+hash length " + dataWithHash.Length); #endif var data255 = new byte[255]; var random = new Random(); random.NextBytes(data255); Array.Copy(dataWithHash, data255, dataWithHash.Length); var reverseRSABytes = Utils.GetRSABytes(data255, publicKey); // NOTE: remove Reverse here var encryptedData = new TLString { Data = reverseRSABytes }; return(encryptedData); }