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

FalconKeyPairGenerator

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; namespace Org.BouncyCastle.Pqc.Crypto.Falcon { public class FalconKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private FalconKeyGenerationParameters parameters; private SecureRandom random; private FalconNist nist; private uint logn; private uint noncelen; private int pk_size; public void Init(KeyGenerationParameters param) { parameters = (FalconKeyGenerationParameters)param; random = param.Random; logn = (uint)((FalconKeyGenerationParameters)param).Parameters.LogN; noncelen = (uint)((FalconKeyGenerationParameters)param).Parameters.NonceLength; nist = new FalconNist(random, logn, noncelen); int num = 1 << (int)logn; pk_size = 1 + 14 * num / 8; } public AsymmetricCipherKeyPair GenerateKeyPair() { nist.crypto_sign_keypair(out byte[] pk, out byte[] fEnc, out byte[] gEnc, out byte[] FEnc); FalconParameters falconParameters = parameters.Parameters; return new AsymmetricCipherKeyPair(privateParameter: new FalconPrivateKeyParameters(falconParameters, fEnc, gEnc, FEnc, pk), publicParameter: new FalconPublicKeyParameters(falconParameters, pk)); } } }