1 package civitas.crypto.petdecommitment;
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
11 import civitas.crypto.petshare.PETShareTestData;
12 import civitas.util.CivitasBigInteger;
13 import io.github.magwas.testing.TestBase;
14
15 class ConstructPETDecommitmentTest extends TestBase implements PETDecommitmentTestData, PETShareTestData {
16
17 @InjectMocks
18 ConstructPETDecommitment constructPETDecommitment;
19
20 @Test
21 @DisplayName("decommitment returns a PETDecommitment "
22 + "d=c1.a/c2.a (mod p), " + "e=c1.b/c2.b (mod p), "
23 + "proof=ElGamalDiscLogEqualityProof(parameters,d,e,exponent), "
24 + "di = d^exponent (mod p), " + "ei = e^exponent (mod p), "
25 + "returns PETDecommitment(di,ei,proof)")
26 void decommitmentTest() {
27 CivitasBigInteger exponent = FACTOR_E;
28
29 CivitasBigInteger di =
30 CIPHERTEXT_E_A.modDivide(CIPHERTEXT_EPRIME_A, BIGINT_P).modPow(exponent, BIGINT_P);
31 CivitasBigInteger ei =
32 CIPHERTEXT_E_B.modDivide(CIPHERTEXT_EPRIME_B, BIGINT_P).modPow(exponent, BIGINT_P);
33
34 PETDecommitment decommitment =
35 constructPETDecommitment.apply(EL_GAMAL_PARAMETERS, exponent, CIPHERTEXT_E, CIPHERTEXT_EPRIME);
36 assertEquals(di, decommitment.di());
37 assertEquals(ei, decommitment.ei());
38
39 verify(constructPETDecommitment.constructElGamalDiscLogEqualityProof)
40 .apply(
41 EL_GAMAL_PARAMETERS,
42 CIPHERTEXT_E_A.modDivide(CIPHERTEXT_EPRIME_A, BIGINT_P),
43 CIPHERTEXT_E_B.modDivide(CIPHERTEXT_EPRIME_B, BIGINT_P),
44 FACTOR_E);
45 assertEquals(PET_DECOMMITMENT, decommitment);
46 }
47
48 @Test
49 @DisplayName("decommitment cannot be instantiated with null arguments")
50 void decommitmentNullTest() {
51 assertThrows(NullPointerException.class, () -> new PETDecommitment(null, null, null));
52 }
53 }