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