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

HqcKeyPairGenerator

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; namespace Org.BouncyCastle.Pqc.Crypto.Hqc { public class HqcKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private int n; private int k; private int delta; private int w; private int wr; private int we; private int N_BYTE; private HqcKeyGenerationParameters hqcKeyGenerationParameters; private SecureRandom random; public AsymmetricCipherKeyPair GenerateKeyPair() { byte[] array = new byte[48]; random.NextBytes(array); return GenKeyPair(array); } public AsymmetricCipherKeyPair GenerateKeyPairWithSeed(byte[] seed) { return GenKeyPair(seed); } public void Init(KeyGenerationParameters parameters) { hqcKeyGenerationParameters = (HqcKeyGenerationParameters)parameters; random = parameters.Random; n = hqcKeyGenerationParameters.Parameters.N; k = hqcKeyGenerationParameters.Parameters.K; delta = hqcKeyGenerationParameters.Parameters.Delta; w = hqcKeyGenerationParameters.Parameters.W; wr = hqcKeyGenerationParameters.Parameters.Wr; we = hqcKeyGenerationParameters.Parameters.We; N_BYTE = (n + 7) / 8; } private AsymmetricCipherKeyPair GenKeyPair(byte[] seed) { HqcEngine engine = hqcKeyGenerationParameters.Parameters.Engine; byte[] pk = new byte[40 + N_BYTE]; byte[] sk = new byte[80 + k + N_BYTE]; engine.GenKeyPair(pk, sk, seed); HqcPublicKeyParameters publicParameter = new HqcPublicKeyParameters(hqcKeyGenerationParameters.Parameters, pk); HqcPrivateKeyParameters privateParameter = new HqcPrivateKeyParameters(hqcKeyGenerationParameters.Parameters, sk); return new AsymmetricCipherKeyPair(publicParameter, privateParameter); } } }