public static string GetPublicKeyFromPrivateKeyEx(string privateKey)
        {
            var curve  = SecNamedCurves.GetByName("secp256k1");
            var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);

            var d = new Org.BouncyCastle.Math.BigInteger(privateKey);
            var q = domain.G.Multiply(d);

            var publicKey = new ECPublicKeyParameters(q, domain);

            return(Base58Encoding.Encode(publicKey.Q.GetEncoded()));
        }
        public static string GetSignature(string privateKey, string message)
        {
            var curve  = SecNamedCurves.GetByName("secp256k1");
            var domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);

            var keyParameters = new
                                ECPrivateKeyParameters(new Org.BouncyCastle.Math.BigInteger(privateKey),
                                                       domain);

            ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");

            signer.Init(true, keyParameters);
            signer.BlockUpdate(Encoding.ASCII.GetBytes(message), 0, message.Length);
            var signature = signer.GenerateSignature();

            return(Base58Encoding.Encode(signature));
        }