<PackageReference Include="BouncyCastle.Cryptography" Version="2.8.0-beta.349" />

Org.BouncyCastle.Math.EC.Rfc8032.Ed25519

public static class Ed25519
A low-level implementation of the Ed25519, Ed25519ctx, and Ed25519ph instantiations of the Edwards-Curve Digital Signature Algorithm specified in RFC 8032.
namespace Org.BouncyCastle.Math.EC.Rfc8032 { public static class Ed25519 { public enum Algorithm { Ed25519, Ed25519ctx, Ed25519ph } public sealed class PublicPoint { } public static class ExpandedKey { public static readonly int ExpandedKeySize; public static void ExpandPrivateKey(byte[] sk, int skOff, byte[] xk, int xkOff); public static void GeneratePrivateKey(SecureRandom random, byte[] xk, int xkOff); public static void GeneratePublicKey(byte[] xk, int xkOff, byte[] pk, int pkOff); public static PublicPoint GeneratePublicKey(byte[] xk, int xkOff); public static void Prune(byte[] xk, int xkOff); public static void Sign(byte[] xk, int xkOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); public static void Sign(byte[] xk, int xkOff, byte[] pk, int pkOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); } public static readonly int PrehashSize; public static readonly int PublicKeySize; public static readonly int SecretKeySize; public static readonly int SignatureSize; public static IDigest CreatePrehash(); public static void EncodePublicPoint(PublicPoint publicPoint, byte[] pk, int pkOff); public static void GeneratePrivateKey(SecureRandom random, byte[] k); public static void GeneratePublicKey(byte[] sk, int skOff, byte[] pk, int pkOff); public static PublicPoint GeneratePublicKey(byte[] sk, int skOff); public static void Precompute(); public static void Sign(byte[] sk, int skOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); public static void Sign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); public static void Sign(byte[] sk, int skOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); public static void Sign(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen, byte[] sig, int sigOff); public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff); public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff, byte[] sig, int sigOff); public static void SignPrehash(byte[] sk, int skOff, byte[] ctx, IDigest ph, byte[] sig, int sigOff); public static void SignPrehash(byte[] sk, int skOff, byte[] pk, int pkOff, byte[] ctx, IDigest ph, byte[] sig, int sigOff); public static bool ValidatePublicKeyFull(byte[] pk, int pkOff); public static PublicPoint ValidatePublicKeyFullExport(byte[] pk, int pkOff); public static bool ValidatePublicKeyPartial(byte[] pk, int pkOff); public static PublicPoint ValidatePublicKeyPartialExport(byte[] pk, int pkOff); public static bool Verify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] m, int mOff, int mLen); public static bool Verify(byte[] sig, int sigOff, PublicPoint publicPoint, byte[] m, int mOff, int mLen); public static bool Verify(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] m, int mOff, int mLen); public static bool Verify(byte[] sig, int sigOff, PublicPoint publicPoint, byte[] ctx, byte[] m, int mOff, int mLen); public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, byte[] ph, int phOff); public static bool VerifyPrehash(byte[] sig, int sigOff, PublicPoint publicPoint, byte[] ctx, byte[] ph, int phOff); public static bool VerifyPrehash(byte[] sig, int sigOff, byte[] pk, int pkOff, byte[] ctx, IDigest ph); public static bool VerifyPrehash(byte[] sig, int sigOff, PublicPoint publicPoint, byte[] ctx, IDigest ph); } }