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();
}
}
}