NtruKeyPairGenerator
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pqc.Crypto.Ntru.Owcpa;
using Org.BouncyCastle.Pqc.Crypto.Ntru.ParameterSets;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities;
using System;
namespace Org.BouncyCastle.Pqc.Crypto.Ntru
{
public class NtruKeyPairGenerator : IAsymmetricCipherKeyPairGenerator
{
private NtruKeyGenerationParameters m_keyGenParameters;
private SecureRandom m_random;
public void Init(KeyGenerationParameters parameters)
{
if (parameters == null)
throw new ArgumentNullException("parameters");
m_keyGenParameters = (NtruKeyGenerationParameters)parameters;
m_random = parameters.Random;
}
public AsymmetricCipherKeyPair GenerateKeyPair()
{
NtruParameters ntruParameters = m_keyGenParameters.NtruParameters;
NtruParameterSet parameterSet = ntruParameters.ParameterSet;
byte[] nextBytes = SecureRandom.GetNextBytes(m_random, parameterSet.SampleFgBytes());
OwcpaKeyPair owcpaKeyPair = new NtruOwcpa(parameterSet).KeyPair(nextBytes);
byte[] publicKey = owcpaKeyPair.PublicKey;
byte[] array = Arrays.CopyOf(owcpaKeyPair.PrivateKey, parameterSet.NtruSecretKeyBytes());
m_random.NextBytes(array, parameterSet.OwcpaSecretKeyBytes(), parameterSet.PrfKeyBytes);
return new AsymmetricCipherKeyPair(new NtruPublicKeyParameters(ntruParameters, publicKey), new NtruPrivateKeyParameters(ntruParameters, array));
}
}
}