1 package civitas.crypto.keypairshare;
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 GenerateKeyPairShare {
14
15 @Autowired
16 CryptoBase cryptoBase;
17
18 public ElGamalKeyPairShare apply(final ElGamalParameters params) {
19 ElGamalParameters ps = params;
20
21 CivitasBigInteger x = cryptoBase.generateRandomElement(ps.q);
22 CivitasBigInteger y = ps.g.modPow(x, ps.p);
23
24 ElGamalPublicKey pub = new ElGamalPublicKey(y, params);
25 ElGamalPrivateKey priv = new ElGamalPrivateKey(x, params);
26 return new ElGamalKeyPairShare(params, pub, priv);
27 }
28 }