View Javadoc
1   package civitas.crypto.decriptionshare.tests;
2   
3   import static org.junit.jupiter.api.Assertions.assertEquals;
4   import static org.mockito.Mockito.verify;
5   
6   import org.junit.jupiter.api.DisplayName;
7   import org.junit.jupiter.api.Test;
8   import org.mockito.InjectMocks;
9   import org.mockito.Mock;
10  
11  import civitas.crypto.decriptionshare.ConstructElGamalDecryptionShare;
12  import civitas.crypto.decriptionshare.ElGamalDecryptionShare;
13  import civitas.crypto.keypairshare.tests.ElGamalKeyPairShareTestData;
14  import civitas.crypto.proofdisclog.ConstructElGamalDiscLogEqualityProof;
15  import civitas.util.CivitasBigInteger;
16  import io.github.magwas.konveyor.testing.TestBase;
17  
18  class ConstructElGamalDecryptionShareTest extends TestBase
19  		implements ElGamalDecryptionShareTestData, ElGamalKeyPairShareTestData {
20  
21  	@InjectMocks
22  	ConstructElGamalDecryptionShare constructElGamalDecryptionShare;
23  
24  	@Mock
25  	ConstructElGamalDiscLogEqualityProof constructElGamalDiscLogEqualityProof;
26  
27  	@Test
28  	@DisplayName("constructDecryptionShare works as expected: "
29  			+ "ai:=ciphertext.a^key (mod p)"
30  			+ "proof =  ElGamalDiscLogEqualityProof(params, ciphertext.a, params.g,priv.x)")
31  	void constructDecryptionShareTest() throws IllegalAccessException {
32  
33  		CivitasBigInteger key = EL_GAMAL_PRIVATE_KEY_E.x();
34  		CivitasBigInteger p = EL_GAMAL_PARAMETERS.p;
35  		CivitasBigInteger c1 = CIPHERTEXT_E.a;
36  
37  		CivitasBigInteger ai = c1.modPow(key, p);
38  
39  		ElGamalDecryptionShare actual = constructElGamalDecryptionShare.apply(CIPHERTEXT_E, EL_GAMAL_KEYPAIR_SHARE);
40  		verify(constructElGamalDiscLogEqualityProof)
41  				.apply(EL_GAMAL_PARAMETERS, CIPHERTEXT_E.a, BIGINT_G, EL_GAMAL_PRIVATE_KEY_E.x());
42  		assertEquals(ai, actual.ai());
43  		assertEquals(EL_GAMAL_DECRYPTION_SHARE, actual);
44  	}
45  }