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;
 }