View Javadoc
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  }