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")); }
public Point(CurveFp curve, BigInteger x, BigInteger y) { this.Curve = curve; this.X = x; this.Y = y; }
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(); }