1 package civitas.crypto.keypair;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller;
5
6 import civitas.crypto.CryptoBase;
7 import civitas.crypto.parameters.ElGamalParameters;
8 import civitas.crypto.privatekey.ElGamalPrivateKey;
9 import civitas.crypto.publickey.ElGamalPublicKey;
10 import civitas.util.CivitasBigInteger;
11
12 @Controller
13 public class GenerateElGamalKeyPair {
14
15 @Autowired
16 CryptoBase cryptoBase;
17
18 public ElGamalKeyPair apply(final ElGamalParameters parameters) {
19 CivitasBigInteger x = cryptoBase.generateRandomElement(parameters.q);
20 CivitasBigInteger y = parameters.g.modPow(x, parameters.p);
21 ElGamalPrivateKey privateKey = new ElGamalPrivateKey(x, parameters);
22 ElGamalPublicKey publicKey = new ElGamalPublicKey(y, parameters);
23 return new ElGamalKeyPair(publicKey, privateKey);
24 }
25 }