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 }