View Javadoc
1   package civitas.crypto.decriptionshare;
2   
3   import org.springframework.beans.factory.annotation.Autowired;
4   import org.springframework.stereotype.Controller;
5   
6   import civitas.crypto.ciphertext.ElGamalCiphertextish;
7   import civitas.crypto.keypairshare.ElGamalKeyPairShare;
8   import civitas.crypto.parameters.ElGamalParameters;
9   import civitas.crypto.privatekey.ElGamalPrivateKey;
10  import civitas.crypto.proofdisclog.ConstructElGamalDiscLogEqualityProof;
11  import civitas.util.CivitasBigInteger;
12  
13  @Controller
14  public class ConstructElGamalDecryptionShare {
15  
16  	@Autowired
17  	ConstructElGamalDiscLogEqualityProof constructElGamalDiscLogEqualityProof;
18  
19  	public ElGamalDecryptionShare apply(final ElGamalCiphertextish c, final ElGamalKeyPairShare keyShare) {
20  		ElGamalPrivateKey priv = keyShare.privKey();
21  		ElGamalParameters params = priv.params();
22  		CivitasBigInteger ai = c.getA().modPow(priv.x(), params.p);
23  		return new ElGamalDecryptionShare(
24  				ai, constructElGamalDiscLogEqualityProof.apply(params, c.getA(), params.g, priv.x()));
25  	}
26  }