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.messagedigest.CryptoHash;
8   import civitas.crypto.parameters.ElGamalParameters;
9   import civitas.crypto.petcommitment.PETCommitment;
10  import civitas.crypto.proofdisclog.ElGamalProofDiscLogEquality;
11  import civitas.crypto.proofdisclog.VerifyElGamalProofDiscLogEquality;
12  import civitas.util.CivitasBigInteger;
13  
14  @Controller
15  public class VerifyPETDecommitment {
16  
17  	@Autowired
18  	CryptoHash cryptoHash;
19  
20  	@Autowired
21  	VerifyElGamalProofDiscLogEquality verifyElGamalProofDiscLogEquality;
22  
23  	public boolean apply(
24  			final PETDecommitment self,
25  			final PETCommitment c,
26  			final ElGamalParameters params,
27  			final ElGamalCiphertext ciphertext1,
28  			final ElGamalCiphertext ciphertext2) {
29  		ElGamalProofDiscLogEquality prf = self.proof();
30  		ElGamalParameters ps = params;
31  		PETCommitment com = c;
32  		ElGamalCiphertext m1 = ciphertext1;
33  		ElGamalCiphertext m2 = ciphertext2;
34  
35  		CivitasBigInteger d = m1.a.modDivide(m2.a, ps.p);
36  		CivitasBigInteger e = m1.b.modDivide(m2.b, ps.p);
37  
38  		if (!d.equals(prf.g1()) || !e.equals(prf.g2())) {
39  			return false;
40  		}
41  		return com.hash().equals(cryptoHash.apply(self.di(), self.ei(), null, null))
42  				&& verifyElGamalProofDiscLogEquality.apply(prf, params);
43  	}
44  }