示例#1
0
        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);
        }
示例#2
0
        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);
        }