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
31
32
33
34
35
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 }