Initial Commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
using System;
|
||||
|
||||
using Org.BouncyCastle.Crypto.Parameters;
|
||||
using Org.BouncyCastle.Math;
|
||||
|
||||
namespace Org.BouncyCastle.Crypto.Generators
|
||||
{
|
||||
/**
|
||||
* a ElGamal key pair generator.
|
||||
* <p>
|
||||
* This Generates keys consistent for use with ElGamal as described in
|
||||
* page 164 of "Handbook of Applied Cryptography".</p>
|
||||
*/
|
||||
public class ElGamalKeyPairGenerator
|
||||
: IAsymmetricCipherKeyPairGenerator
|
||||
{
|
||||
private ElGamalKeyGenerationParameters param;
|
||||
|
||||
public void Init(
|
||||
KeyGenerationParameters parameters)
|
||||
{
|
||||
this.param = (ElGamalKeyGenerationParameters) parameters;
|
||||
}
|
||||
|
||||
public AsymmetricCipherKeyPair GenerateKeyPair()
|
||||
{
|
||||
DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance;
|
||||
ElGamalParameters elParams = param.Parameters;
|
||||
|
||||
BigInteger p = elParams.P;
|
||||
BigInteger x = helper.CalculatePrivate(p, param.Random, elParams.L);
|
||||
BigInteger y = helper.CalculatePublic(p, elParams.G, x);
|
||||
|
||||
return new AsymmetricCipherKeyPair(
|
||||
new ElGamalPublicKeyParameters(y, elParams),
|
||||
new ElGamalPrivateKeyParameters(x, elParams));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user