View Javadoc
1   package civitas.crypto.petdecommitment;
2   
3   import static org.junit.jupiter.api.Assertions.assertEquals;
4   import static org.junit.jupiter.api.Assertions.assertFalse;
5   import static org.junit.jupiter.api.Assertions.assertTrue;
6   
7   import org.junit.jupiter.api.DisplayName;
8   import org.junit.jupiter.api.Test;
9   import org.mockito.InjectMocks;
10  
11  import civitas.crypto.ciphertext.ElGamalCiphertextTestData;
12  import civitas.crypto.petcommitment.PETCommitmentTestData;
13  import civitas.crypto.petshare.PETShareTestData;
14  import civitas.crypto.proofdisclog.ElGamalProofDiscLogEquality;
15  import civitas.util.CivitasBigInteger;
16  import io.github.magwas.testing.TestBase;
17  
18  class VerifyPETDecommitmentTest extends TestBase
19  		implements PETDecommitmentTestData, PETCommitmentTestData, ElGamalCiphertextTestData, PETShareTestData {
20  
21  	@InjectMocks
22  	VerifyPETDecommitment verifyPETDecommitment;
23  
24  	@Test
25  	@DisplayName(
26  			"""
27  			correct decommitment passes
28  				// d=ciphertext1.a/ciphertext2.a
29  				// e=ciphertext1.b/ciphertext2.b
30  				// d =? proof.g1
31  				// e =? proof.g2
32  				// c.hash =? hash(di,ei)
33  				// verify(proof)
34  			""")
35  	void test() {
36  
37  		ElGamalProofDiscLogEquality proof = PET_DECOMMITMENT.proof();
38  
39  		CivitasBigInteger d = CIPHERTEXT_E.a.modDivide(CIPHERTEXT_EPRIME.a, BIGINT_P);
40  		CivitasBigInteger e = CIPHERTEXT_E.b.modDivide(CIPHERTEXT_EPRIME.b, BIGINT_P);
41  
42  		assertEquals(proof.g1(), d);
43  		assertEquals(proof.g2(), e);
44  		assertTrue(verifyPETDecommitment.apply(
45  				PET_DECOMMITMENT, PET_COMMITMENT, EL_GAMAL_PARAMETERS, CIPHERTEXT_E, CIPHERTEXT_EPRIME));
46  	}
47  
48  	@Test
49  	@DisplayName("if g1 of the proof != ciphertext1.a/ciphertext2.a the verification fails")
50  	void test4() {
51  		PETDecommitment petDecommitment = new PETDecommitment(
52  				PET_DECOMMITMENT_D,
53  				PET_DECOMMITMENT_E,
54  				new ElGamalProofDiscLogEquality(
55  						BIGINT_A,
56  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_G2,
57  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_V,
58  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_W,
59  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_A,
60  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_B,
61  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_C,
62  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_R));
63  
64  		assertFalse(verifyPETDecommitment.apply(
65  				petDecommitment, PET_COMMITMENT, EL_GAMAL_PARAMETERS, CIPHERTEXT_E, CIPHERTEXT_EPRIME));
66  	}
67  
68  	@Test
69  	@DisplayName("if g2 of the proof != ciphertext1.b/ciphertext2.b the verification fails")
70  	void test5() {
71  		PETDecommitment petDecommitment = new PETDecommitment(
72  				PET_DECOMMITMENT_D,
73  				PET_DECOMMITMENT_E,
74  				new ElGamalProofDiscLogEquality(
75  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_G1,
76  						BIGINT_A,
77  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_V,
78  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_W,
79  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_A,
80  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_B,
81  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_C,
82  						EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_R));
83  
84  		assertFalse(verifyPETDecommitment.apply(
85  				petDecommitment, PET_COMMITMENT, EL_GAMAL_PARAMETERS, CIPHERTEXT_E, CIPHERTEXT_EPRIME));
86  	}
87  
88  	@Test
89  	@DisplayName("if the hash in the commitment != hash(di,ei) the verification fails")
90  	void test6() {
91  
92  		assertFalse(verifyPETDecommitment.apply(
93  				PET_DECOMMITMENT, PET_COMMITMENT_BAD_HASH, EL_GAMAL_PARAMETERS, CIPHERTEXT_E, CIPHERTEXT_EPRIME));
94  	}
95  
96  	@Test
97  	@DisplayName("if the proof does not verify the verification fails")
98  	void test7() {
99  		ElGamalProofDiscLogEquality proof = new ElGamalProofDiscLogEquality(
100 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_G1,
101 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_G2,
102 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_V,
103 				BIGINT_A,
104 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_W,
105 				BIGINT_A,
106 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_C,
107 				EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT_R);
108 		PETDecommitment petDecommitment = new PETDecommitment(PET_DECOMMITMENT_D, PET_DECOMMITMENT_E, proof);
109 
110 		assertFalse(verifyPETDecommitment.apply(
111 				petDecommitment, PET_COMMITMENT, EL_GAMAL_PARAMETERS, CIPHERTEXT_E, CIPHERTEXT_EPRIME));
112 	}
113 }