using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.EdEC;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
public static void Main()
AsymmetricCipherKeyPair keyPair = GenerateEd25519KeyPair();
Ed25519PrivateKeyParameters privateKey = (Ed25519PrivateKeyParameters)keyPair.Private;
SavePrivateKeyToPem(privateKey);
SavePrivateKeyToPemPkcs8(privateKey);
static void SavePrivateKeyToPem(Ed25519PrivateKeyParameters privateKey)
using (TextWriter textWriter = new StringWriter())
var pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(privateKey);
Console.WriteLine(textWriter.ToString());
static void SavePrivateKeyToPemPkcs8(Ed25519PrivateKeyParameters privateKey)
PrivateKeyInfo privateKeyInfo = new PrivateKeyInfo(new AlgorithmIdentifier(EdECObjectIdentifiers.id_Ed25519), new DerOctetString(privateKey.GetEncoded()));
using (TextWriter textWriter = new StringWriter())
var pemWriter = new PemWriter(textWriter);
pemWriter.WriteObject(privateKeyInfo);
Console.WriteLine(textWriter.ToString());
static AsymmetricCipherKeyPair GenerateEd25519KeyPair()
var keyGen = new Ed25519KeyPairGenerator();
keyGen.Init(new KeyGenerationParameters(new SecureRandom(), 256));
return keyGen.GenerateKeyPair();