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.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  }