1 package civitas.crypto.petdecommitment.tests;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.assertThrows;
5 import static org.mockito.Mockito.verify;
6
7 import org.junit.jupiter.api.DisplayName;
8 import org.junit.jupiter.api.Test;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11
12 import civitas.crypto.petdecommitment.ConstructPETDecommitment;
13 import civitas.crypto.petdecommitment.PETDecommitment;
14 import civitas.crypto.petshare.tests.PETShareTestData;
15 import civitas.crypto.proofdisclog.ConstructElGamalDiscLogEqualityProof;
16 import civitas.util.CivitasBigInteger;
17 import io.github.magwas.konveyor.testing.TestBase;
18
19 class ConstructPETDecommitmentTest extends TestBase implements PETDecommitmentTestData, PETShareTestData {
20
21 @InjectMocks
22 ConstructPETDecommitment constructPETDecommitment;
23
24 @Mock
25 ConstructElGamalDiscLogEqualityProof constructElGamalDiscLogEqualityProof;
26
27 @Test
28 @DisplayName("decommitment returns a PETDecommitment "
29 + "d=c1.a/c2.a (mod p), " + "e=c1.b/c2.b (mod p), "
30 + "proof=ElGamalDiscLogEqualityProof(parameters,d,e,exponent), "
31 + "di = d^exponent (mod p), " + "ei = e^exponent (mod p), "
32 + "returns PETDecommitment(di,ei,proof)")
33 void decommitmentTest() {
34 CivitasBigInteger exponent = FACTOR_E;
35
36 CivitasBigInteger di =
37 CIPHERTEXT_E_A.modDivide(CIPHERTEXT_EPRIME_A, BIGINT_P).modPow(exponent, BIGINT_P);
38 CivitasBigInteger ei =
39 CIPHERTEXT_E_B.modDivide(CIPHERTEXT_EPRIME_B, BIGINT_P).modPow(exponent, BIGINT_P);
40
41 PETDecommitment decommitment =
42 constructPETDecommitment.apply(EL_GAMAL_PARAMETERS, exponent, CIPHERTEXT_E, CIPHERTEXT_EPRIME);
43 assertEquals(di, decommitment.di());
44 assertEquals(ei, decommitment.ei());
45
46 verify(constructElGamalDiscLogEqualityProof)
47 .apply(
48 EL_GAMAL_PARAMETERS,
49 CIPHERTEXT_E_A.modDivide(CIPHERTEXT_EPRIME_A, BIGINT_P),
50 CIPHERTEXT_E_B.modDivide(CIPHERTEXT_EPRIME_B, BIGINT_P),
51 FACTOR_E);
52 assertEquals(PET_DECOMMITMENT, decommitment);
53 }
54
55 @Test
56 @DisplayName("decommitment cannot be instantiated with null arguments")
57 void decommitmentNullTest() {
58 assertThrows(NullPointerException.class, () -> new PETDecommitment(null, null, null));
59 }
60 }