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