<PackageReference Include="BouncyCastle.Cryptography" Version="2.6.2" />

SlhDsaKeyPairGenerator

using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Pqc.Crypto.SphincsPlus; using Org.BouncyCastle.Security; namespace Org.BouncyCastle.Crypto.Generators { public sealed class SlhDsaKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private SecureRandom m_random; private SlhDsaParameters m_parameters; public void Init(KeyGenerationParameters parameters) { m_random = parameters.Random; m_parameters = ((SlhDsaKeyGenerationParameters)parameters).Parameters; } public AsymmetricCipherKeyPair GenerateKeyPair() { SphincsPlusEngine engine = m_parameters.ParameterSet.GetEngine(); byte[] seed = SecRand(engine.N); byte[] prf = SecRand(engine.N); byte[] array = SecRand(engine.N); SK sK = new SK(seed, prf); engine.Init(array); PK pk = new PK(array, new HT(engine, sK.seed, array).HTPubKey); return new AsymmetricCipherKeyPair(new SlhDsaPublicKeyParameters(m_parameters, pk), new SlhDsaPrivateKeyParameters(m_parameters, sK, pk)); } private byte[] SecRand(int n) { return SecureRandom.GetNextBytes(m_random, n); } } }