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