I use the following codes to try to import a bitcoin private key and compute the public key. The computed ECPublicKey is not equal to bitcoinPublicKey. How to correct?
string bitcoinPrivateKeyStr = "cVnb9S9GgHxsBxfaApvGnWvfwqXRYdV8f1Q2CkQeBa4EsWTNmsGS";
BitcoinSecret bs = new BitcoinSecret(bitcoinPrivateKeyStr);
byte[] bitcoinPrivateKeyBytes = bs.PrivateKey.ToBytes();
byte[] bitcoinPublicKeybytes = bs.PubKey.Decompress().ToBytes();
X9ECParameters curve = SecNamedCurves.GetByName("secp256k1");
ECDomainParameters domain = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);
BigInteger BCPrivateKeyBI = new BigInteger(bitcoinPrivateKeyBytes);
Org.BouncyCastle.Math.EC.ECPoint q = domain.G.Multiply(BCPrivateKeyBI);
ECPrivateKeyParameters ECPrivateKey = new ECPrivateKeyParameters(BCPrivateKeyBI, domain);
ECPublicKeyParameters ECPublicKey = new ECPublicKeyParameters(q, domain);
AsymmetricCipherKeyPair KeyPair = new AsymmetricCipherKeyPair(ECPublicKey, ECPrivateKey);
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…