View Javadoc
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  }