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

KyberKeyPairGenerator

using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Security; namespace Org.BouncyCastle.Pqc.Crypto.Crystals.Kyber { public class KyberKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private KyberParameters KyberParams; private SecureRandom random; private void Initialize(KeyGenerationParameters param) { KyberParams = ((KyberKeyGenerationParameters)param).Parameters; random = param.Random; } private AsymmetricCipherKeyPair GenKeyPair() { KyberEngine engine = KyberParams.Engine; engine.Init(random); engine.GenerateKemKeyPair(out byte[] t, out byte[] rho, out byte[] s, out byte[] hpk, out byte[] nonce); KyberPublicKeyParameters publicParameter = new KyberPublicKeyParameters(KyberParams, t, rho); KyberPrivateKeyParameters privateParameter = new KyberPrivateKeyParameters(KyberParams, s, hpk, nonce, t, rho); return new AsymmetricCipherKeyPair(publicParameter, privateParameter); } public void Init(KeyGenerationParameters param) { Initialize(param); } public AsymmetricCipherKeyPair GenerateKeyPair() { return GenKeyPair(); } } }