Last active
July 24, 2024 17:25
-
-
Save tmarkovski/9fc008fc034511bbbee93a5c4cd1a99a to your computer and use it in GitHub Desktop.
Generate elliptic curve SECP256K1 key pair using Bouncy Castle for .NET
This file contains hidden or 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