-
-
Save mikaelo/6d7f8250e7c6a90af90dbe12ce4d20d4 to your computer and use it in GitHub Desktop.
Generate elliptic curve SECP256K1 key pair using Bouncy Castle for .NET
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
using Org.BouncyCastle.Asn1.X9; | |
using Org.BouncyCastle.Crypto; | |
using Org.BouncyCastle.Crypto.Generators; | |
using Org.BouncyCastle.Crypto.Parameters; | |
using Org.BouncyCastle.Security; | |
namespace Program | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
GenerateKeyPair(); | |
} | |
static AsymmetricCipherKeyPair GenerateKeyPair() | |
{ | |
var curve = ECNamedCurveTable.GetByName("secp256k1"); | |
var domainParams = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed()); | |
var secureRandom = new SecureRandom(); | |
var keyParams = new ECKeyGenerationParameters(domainParams, secureRandom); | |
var generator = new ECKeyPairGenerator("ECDSA"); | |
generator.Init(keyParams); | |
var keyPair = generator.GenerateKeyPair(); | |
var privateKey = keyPair.Private as ECPrivateKeyParameters; | |
var publicKey = keyPair.Public as ECPublicKeyParameters; | |
Console.WriteLine($"Private key: {ToHex(privateKey.D.ToByteArrayUnsigned())}"); | |
Console.WriteLine($"Public key: {ToHex(publicKey.Q.GetEncoded())}"); | |
return keyPair; | |
} | |
static string ToHex(byte[] data) => String.Concat(data.Select(x => x.ToString("x2"))); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment