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

ElGamalKeyPairGenerator

using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Math; namespace Org.BouncyCastle.Crypto.Generators { public class ElGamalKeyPairGenerator : IAsymmetricCipherKeyPairGenerator { private ElGamalKeyGenerationParameters m_parameters; public void Init(KeyGenerationParameters parameters) { m_parameters = (ElGamalKeyGenerationParameters)parameters; } public AsymmetricCipherKeyPair GenerateKeyPair() { ElGamalParameters parameters = m_parameters.Parameters; DHParameters dhParams = new DHParameters(parameters.P, parameters.G, null, 0, parameters.L); BigInteger x = DHKeyGeneratorHelper.CalculatePrivate(dhParams, m_parameters.Random); return new AsymmetricCipherKeyPair(new ElGamalPublicKeyParameters(DHKeyGeneratorHelper.CalculatePublic(dhParams, x), parameters), new ElGamalPrivateKeyParameters(x, parameters)); } } }