View Javadoc
1   package civitas.crypto.petdecommitment;
2   
3   import org.springframework.beans.factory.annotation.Autowired;
4   import org.springframework.stereotype.Controller;
5   
6   import civitas.crypto.ciphertext.ElGamalCiphertext;
7   import civitas.crypto.parameters.ElGamalParameters;
8   import civitas.crypto.proofdisclog.ConstructElGamalDiscLogEqualityProof;
9   import civitas.crypto.proofdisclog.ElGamalProofDiscLogEquality;
10  import civitas.util.CivitasBigInteger;
11  
12  @Controller
13  public class ConstructPETDecommitment {
14  
15  	@Autowired
16  	ConstructElGamalDiscLogEqualityProof constructElGamalDiscLogEqualityProof;
17  
18  	public PETDecommitment apply(
19  			final ElGamalParameters params,
20  			final CivitasBigInteger exponent,
21  			final ElGamalCiphertext ciphertext1,
22  			final ElGamalCiphertext ciphertext2) {
23  
24  		CivitasBigInteger zi = exponent;
25  		CivitasBigInteger d = ciphertext1.a.modDivide(ciphertext2.a, params.p);
26  		CivitasBigInteger e = ciphertext1.b.modDivide(ciphertext2.b, params.p);
27  
28  		CivitasBigInteger di = d.modPow(zi, params.p);
29  		CivitasBigInteger ei = e.modPow(zi, params.p);
30  
31  		ElGamalProofDiscLogEquality proof = constructElGamalDiscLogEqualityProof.apply(params, d, e, zi);
32  		return new PETDecommitment(di, ei, proof);
33  	}
34  }