1 package civitas.crypto.petdecommitment;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.junit.jupiter.api.Assertions.fail;
5
6 import java.lang.reflect.Field;
7
8 import org.junit.jupiter.api.DisplayName;
9 import org.junit.jupiter.api.Test;
10 import org.mockito.InjectMocks;
11
12 import civitas.crypto.ciphertext.ElGamalCiphertext;
13 import civitas.crypto.petcommitment.CombinePETShareDecommitments;
14 import civitas.crypto.proofdisclog.VerifyElGamalProofDiscLogEquality;
15 import io.github.magwas.testing.TestBase;
16
17 class CombinePETShareDecommitmentsTest extends TestBase implements PETDecommitmentTestData {
18
19 @InjectMocks
20 CombinePETShareDecommitments combinePETShareDecommitments;
21
22 @Test
23 @DisplayName("multiplies di and ei fields")
24 void test() {
25 ElGamalCiphertext actual = combinePETShareDecommitments.apply(PET_DECOMMITMENTS, EL_GAMAL_PARAMETERS);
26 assertEquals(PET_DECOMMITMENT_D.modMultiply(BIGINT_A, BIGINT_P), actual.a);
27 assertEquals(PET_DECOMMITMENT_E.modMultiply(BIGINT_B, BIGINT_P), actual.b);
28 }
29
30 @Test
31 @DisplayName("does NOT check the proofs")
32 void test2() {
33 Field[] fields = CombinePETShareDecommitments.class.getFields();
34 for (Field field : fields) {
35 if (field.getType() == VerifyElGamalProofDiscLogEquality.class) {
36 fail();
37 }
38 }
39 }
40
41 @Test
42 @DisplayName("returns a ciphertext with a=ONE, b=ONE if decs is null")
43 void test3() {
44 assertEquals(new ElGamalCiphertext(ONE, ONE), combinePETShareDecommitments.apply(null, EL_GAMAL_PARAMETERS));
45 }
46
47 @Test
48 @DisplayName("the three parameter version uses d to multiply a of the ciphertext")
49 void test4() {
50 ElGamalCiphertext actual = combinePETShareDecommitments.apply(PET_DECOMMITMENTS, EL_GAMAL_PARAMETERS, TWO);
51 assertEquals(PET_DECOMMITMENT_D.modMultiply(BIGINT_A, BIGINT_P).modMultiply(TWO, BIGINT_P), actual.a);
52 assertEquals(PET_DECOMMITMENT_E.modMultiply(BIGINT_B, BIGINT_P), actual.b);
53 }
54 }