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

NtruKeyPairGenerator

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Pqc.Crypto.Ntru.Owcpa; using Org.BouncyCastle.Pqc.Crypto.Ntru.ParameterSets; using Org.BouncyCastle.Security; using System; namespace Org.BouncyCastle.Pqc.Crypto.Ntru { public class NtruKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private NtruKeyGenerationParameters _keygenParameters; private SecureRandom _random; public void Init(KeyGenerationParameters parameters) { _keygenParameters = (NtruKeyGenerationParameters)parameters; _random = parameters.Random; } public AsymmetricCipherKeyPair GenerateKeyPair() { NtruParameterSet parameterSet = _keygenParameters.NtruParameters.ParameterSet; byte[] array = new byte[parameterSet.SampleFgBytes()]; _random.NextBytes(array); OwcpaKeyPair owcpaKeyPair = new NtruOwcpa(parameterSet).KeyPair(array); byte[] publicKey = owcpaKeyPair.PublicKey; byte[] array2 = new byte[parameterSet.NtruSecretKeyBytes()]; byte[] privateKey = owcpaKeyPair.PrivateKey; Array.Copy(privateKey, 0, array2, 0, privateKey.Length); byte[] array3 = new byte[parameterSet.PrfKeyBytes]; _random.NextBytes(array3); Array.Copy(array3, 0, array2, parameterSet.OwcpaSecretKeyBytes(), array3.Length); return new AsymmetricCipherKeyPair(new NtruPublicKeyParameters(_keygenParameters.NtruParameters, publicKey), new NtruPrivateKeyParameters(_keygenParameters.NtruParameters, array2)); } } }