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);
}
}
}