1 package civitas.crypto.decriptionshare;
2
3 import civitas.crypto.Constants;
4 import civitas.crypto.ciphertext.ElGamalCiphertextish;
5 import civitas.crypto.msg.ElGamalMsg;
6 import civitas.crypto.parameters.ElGamalParameters;
7 import civitas.util.CivitasBigInteger;
8
9 public class CombineDecryptionShares implements Constants {
10
11 public ElGamalMsg apply(
12 final ElGamalCiphertextish c, final ElGamalDecryptionShare[] shares, final ElGamalParameters params) {
13 CivitasBigInteger prod = ONE;
14 for (ElGamalDecryptionShare share2 : shares) {
15 ElGamalDecryptionShare share = share2;
16 prod = prod.modMultiply(share.ai(), params.p);
17 }
18 CivitasBigInteger m = c.getB().modDivide(prod, params.p);
19 return new ElGamalMsg(m);
20 }
21 }