1 package civitas.crypto.petcommitment;
2
3 import civitas.crypto.Constants;
4 import civitas.crypto.ciphertext.ElGamalCiphertext;
5 import civitas.crypto.parameters.ElGamalParameters;
6 import civitas.crypto.petdecommitment.PETDecommitment;
7 import civitas.util.CivitasBigInteger;
8
9 public class CombinePETShareDecommitments implements Constants {
10
11 public ElGamalCiphertext apply(final PETDecommitment[] decs, final ElGamalParameters params, CivitasBigInteger d) {
12 CivitasBigInteger e = ONE;
13 ElGamalParameters ps = params;
14
15 for (int i = 0; i < (decs == null ? 0 : decs.length); i++) {
16 PETDecommitment decom = decs[i];
17 d = d.modMultiply(decom.di(), ps.p);
18 e = e.modMultiply(decom.ei(), ps.p);
19 }
20 return new ElGamalCiphertext(d, e);
21 }
22
23 public ElGamalCiphertext apply(final PETDecommitment[] decs, final ElGamalParameters params) {
24 return apply(decs, params, ONE);
25 }
26 }