Пример #1
0
        private static string GetPublicKeyFromPrivateKey(string privateKey)
        {
            var p  = BigInteger.Parse("0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", NumberStyles.HexNumber);
            var b  = (BigInteger)7;
            var a  = BigInteger.Zero;
            var Gx = BigInteger.Parse("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", NumberStyles.HexNumber);
            var Gy = BigInteger.Parse("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", NumberStyles.HexNumber);

            CurveFp curve256     = new CurveFp(p, a, b);
            Point   generator256 = new Point(curve256, Gx, Gy);

            var secret      = BigInteger.Parse(privateKey, NumberStyles.HexNumber);
            var pubkeyPoint = generator256 * secret;

            return(pubkeyPoint.X.ToString("X") + pubkeyPoint.Y.ToString("X"));
        }
Пример #2
0
 public Point(CurveFp curve, BigInteger x, BigInteger y)
 {
     this.Curve = curve;
     this.X     = x;
     this.Y     = y;
 }
Пример #3
0
        static void Main(string[] args)
        {
            //var p = BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007908834671663");
            //var b = (BigInteger)7;
            //var a = BigInteger.Zero;
            var Gx  = BigInteger.Parse("55066263022277343669578718895168534326250603453777594175500187360389116729240");
            var Gy  = BigInteger.Parse("32670510020758816978083085130507043184471273380659243275938904335757337482424");
            var Gx1 = BigInteger.Parse("75180862758995183245141392260426345444264403731066658552825576390223923208439");
            var Gy1 = BigInteger.Parse("21885678977978804490012742746158129500179828242668934362874212623347241335110");
            var Gx2 = BigInteger.Parse("0");
            var Gy2 = BigInteger.Parse("0");
            //var p = BigInteger.Parse("0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", NumberStyles.HexNumber);
            //var b = (BigInteger)7;
            //var a = BigInteger.Zero;
            //var Gx = BigInteger.Parse("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", NumberStyles.HexNumber);
            //var Gy = BigInteger.Parse("483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8", NumberStyles.HexNumber);
            var p = BigInteger.Parse("115792089237316195423570985008687907853269984665640564039457584007908834671663");
            var b = (BigInteger)7;
            var a = BigInteger.Zero;
            //var Gx = BigInteger.Parse("43416641424355550452407462607989419545484660240025292632092983024276950562252"); //g * 1+10zer
            //var Gy = BigInteger.Parse("82258565099148626789977835510040746285752863850369846140886848753132330656544");
            //var order = BigInteger.Parse("115792089237316195423570985008687907852837564279074904382605163141518161494337");
            CurveFp  curve256     = new CurveFp(p, a, b);
            Point    generator256 = new Point(curve256, Gx, Gy);
            PointAdd punktAdd     = new PointAdd();
            //Pointadd generator256add = new Pointadd(curve256, Gx, Gy);
            StreamWriter sw = new StreamWriter("D:\\Text.txt");

            var secret = BigInteger.Parse("1");
            var sum    = BigInteger.Parse("0");
            var n      = BigInteger.Parse("0");
            var last   = BigInteger.Parse("0");
            var first  = BigInteger.Parse("0");
            List <BigInteger> lista    = new List <BigInteger>();
            BigInteger        start    = BigInteger.Parse("5");
            BigInteger        dzielnik = BigInteger.Parse("25");
            BigInteger        calosc   = BigInteger.Parse("50");

            //BigInteger limit = BigInteger.Parse("10000000000");
            lista.Add(start);
            // dla 50
            var pubkeyPoint1 = generator256 * 50;

            Gx2 = pubkeyPoint1.X;
            Gy2 = pubkeyPoint1.Y;

            punktAdd.Addition(punktAdd, Gx1, Gy1, Gx2, Gy2, p, a);

            sum   = 0;
            n     = punktAdd.X3;
            last  = n % 10;
            first = punktAdd.X3;
            while (first >= 10)
            {
                first /= 10;
            }
            while (n != 0)
            {
                sum += n % 10;
                n   /= 10;
            }
            sw.WriteLine(first + " " + last + " " + sum.ToString("X"));

            while (true)
            {
                calosc = calosc + dzielnik;
                //Console.WriteLine(calosc);
                //sw.WriteLine("[" + calosc + "]");
                lista    = tablica(lista, sw, dzielnik);
                dzielnik = dzielnik * 10;
                dzielnik = dzielnik / 2;
                calosc   = calosc * 10;
                sw.WriteLine("[" + calosc + "]");
                Console.WriteLine(Convert.ToString(calosc).Length);
                //var pubkeyPoint = generator256 * secret;

                foreach (BigInteger prime in lista)
                {
                    var pubkeyPoint = generator256 * prime;
                    Gx2 = pubkeyPoint.X;
                    Gy2 = pubkeyPoint.Y;

                    punktAdd.Addition(punktAdd, Gx1, Gy1, Gx2, Gy2, p, a);

                    sum   = 0;
                    n     = punktAdd.X3;
                    last  = n % 10;
                    first = punktAdd.X3;
                    while (first >= 10)
                    {
                        first /= 10;
                    }
                    while (n != 0)
                    {
                        sum += n % 10;
                        n   /= 10;
                    }
                    sw.WriteLine(prime.ToString("X") + " " + first + " " + last + " " + sum);
                }
                //sum = 0;
                //n = pubkeyPoint.X;
                //last = n % 10;
                //first = pubkeyPoint.X;
                //while (first >= 10)
                //{
                //    first /= 10;
                //}
                //while (n != 0)
                //{
                //    sum += n % 10;
                //    n /= 10;
                //}

                //secret = secret + 1;

                //punktAdd.Addition(punktAdd, Gx1, Gy1, Gx2, Gy2, p, a);
                //var pubkeyPoint1 = generator256 * secret1;
                //sw.WriteLine("[" + secret + "] " + pubkeyPoint.X + " " + pubkeyPoint.Y);
                //if (pubkeyPoint.X < increment)
                //{
                //    Console.WriteLine(secret + "found");
                //    sw.WriteLine("[" + secret + "] " + pubkeyPoint.X + " " + pubkeyPoint.Y);
                //}
                //secret = secret + 1;
                //if ((secret % secret1) == 0)
                //{
                //    Console.WriteLine(secret);
                //}
                //secret1 = secret1 + 1;
                //licznik = licznik + 1;

                //Console.WriteLine("koniec");
                //Console.ReadLine();
            }
            sw.Flush();
        }