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
29
30
31
32
33
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 }