1 package civitas.crypto.decriptionshare;
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
10 import civitas.crypto.keypairshare.ElGamalKeyPairShareTestData;
11 import civitas.util.CivitasBigInteger;
12 import io.github.magwas.testing.TestBase;
13
14 class ConstructElGamalDecryptionShareTest extends TestBase
15 implements ElGamalDecryptionShareTestData, ElGamalKeyPairShareTestData {
16
17 @InjectMocks
18 ConstructElGamalDecryptionShare constructElGamalDecryptionShare;
19
20 @Test
21 @DisplayName("constructDecryptionShare works as expected: "
22 + "ai:=ciphertext.a^key (mod p)"
23 + "proof = ElGamalDiscLogEqualityProof(params, ciphertext.a, params.g,priv.x)")
24 void constructDecryptionShareTest() {
25
26 CivitasBigInteger key = EL_GAMAL_PRIVATE_KEY_E.x();
27 CivitasBigInteger p = EL_GAMAL_PARAMETERS.p;
28 CivitasBigInteger c1 = CIPHERTEXT_E.a;
29
30 CivitasBigInteger ai = c1.modPow(key, p);
31
32 ElGamalDecryptionShare actual = constructElGamalDecryptionShare.apply(CIPHERTEXT_E, EL_GAMAL_KEYPAIR_SHARE);
33 verify(constructElGamalDecryptionShare.constructElGamalDiscLogEqualityProof)
34 .apply(EL_GAMAL_PARAMETERS, CIPHERTEXT_E.a, BIGINT_G, EL_GAMAL_PRIVATE_KEY_E.x());
35 assertEquals(ai, actual.ai());
36 assertEquals(EL_GAMAL_DECRYPTION_SHARE, actual);
37 }
38 }