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