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 }