1 package civitas.crypto.ciphertext;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4 import static org.mockito.Mockito.mock;
5
6 import org.junit.jupiter.api.DisplayName;
7 import org.junit.jupiter.api.Test;
8 import org.mockito.InjectMocks;
9
10 import civitas.common.RandomAwareTestBase;
11 import civitas.crypto.ciphertextlist.CiphertextList;
12 import civitas.crypto.ciphertextlist.ElGamalCiphertextListTestData;
13 import civitas.crypto.signedciphertext.ElGamalSignedCiphertext;
14 import civitas.crypto.signedciphertext.SignAndEncrypt;
15 import civitas.util.CivitasBigIntegerFactory;
16
17 class MultiplyCiphertextsTest extends RandomAwareTestBase implements ElGamalCiphertextListTestData {
18
19 @InjectMocks
20 MultiplyCiphertexts multiplyCiphertexts;
21
22 @InjectMocks
23 SignAndEncrypt signAndEncrypt;
24
25 @Test
26 @DisplayName(
27 """
28 multiplies a matrix of ciphertexts
29 by multiplying a's and b's in each row
30 gives one ciphertext for each rows
31 """)
32 void test() {
33 CiphertextList actual = multiplyCiphertexts.apply(CIPHERTEXT_MATRIX, EL_GAMAL_PARAMETERS);
34 assertEquals(CivitasBigIntegerFactory.obtain(2 * 11), actual.get(0).getA());
35 assertEquals(CivitasBigIntegerFactory.obtain(5 * 17), actual.get(1).getA());
36 assertEquals(CivitasBigIntegerFactory.obtain(3 * 13), actual.get(0).getB());
37 assertEquals(CivitasBigIntegerFactory.obtain(7 * 19), actual.get(1).getB());
38 }
39
40 @Test
41 @DisplayName("returns empty list if the matrix is null")
42 void test2() {
43 assertEquals(EMPTY_LIST, multiplyCiphertexts.apply(null, EL_GAMAL_PARAMETERS));
44 }
45
46 @Test
47 @DisplayName("returns empty list if encounters a null in the matrix")
48 void test3() {
49 assertEquals(
50 EMPTY_LIST, multiplyCiphertexts.apply(new ElGamalSignedCiphertext[][] {null}, EL_GAMAL_PARAMETERS));
51 }
52
53 @Test
54 @DisplayName("returns empty list if a ciphertext is not castable to ElGamalCiphertextC")
55 void test4() {
56 assertEquals(
57 EMPTY_LIST,
58 multiplyCiphertexts.apply(
59 new ElGamalSignedCiphertext[][] {{mock(ElGamalSignedCiphertext.class)}}, EL_GAMAL_PARAMETERS));
60 }
61 }