View Javadoc
1   package civitas.crypto.decriptionshare.tests;
2   
3   import static org.junit.jupiter.api.Assertions.assertFalse;
4   import static org.junit.jupiter.api.Assertions.assertThrows;
5   import static org.junit.jupiter.api.Assertions.assertTrue;
6   import static org.mockito.Mockito.verify;
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.decriptionshare.ElGamalDecryptionShare;
14  import civitas.crypto.decriptionshare.VerifyElGamalDecryptionShare;
15  import civitas.crypto.publickey.ElGamalPublicKey;
16  import io.github.magwas.konveyor.testing.TestBase;
17  
18  class VerifyElGamalDecryptionShareTest extends TestBase implements ElGamalDecryptionShareTestData {
19  	@InjectMocks
20  	VerifyElGamalDecryptionShare verifyElGamalDecryptionShare;
21  
22  	@Test
23  	// @formatter:off
24  	@DisplayName(
25  			"""
26  			verify verifies the proof
27  			- ciphertext.a =? proof.g1
28  			- g =? proof.g2
29  			- proof.v =? share.ai
30  			- proof.w =? key
31  			- the proof verifies
32  			""")
33  	// @formatter:on
34  	void test4() {
35  		boolean actual =
36  				verifyElGamalDecryptionShare.apply(EL_GAMAL_DECRYPTION_SHARE, CIPHERTEXT_E, EL_GAMAL_PUBLIC_KEY_E);
37  		verify(verifyElGamalDecryptionShare.verifyElGamalProofDiscLogEquality)
38  				.apply(EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECRIPTIONSHARE, EL_GAMAL_PARAMETERS);
39  		assertTrue(actual);
40  	}
41  
42  	@Test
43  	@DisplayName("if the proof fails, returns false")
44  	void test() {
45  		boolean actual = verifyElGamalDecryptionShare.apply(
46  				EL_GAMAL_DECRYPTION_SHARE_BADPROOF, CIPHERTEXT_E, EL_GAMAL_PUBLIC_KEY_E);
47  		assertFalse(actual);
48  	}
49  
50  	@Test
51  	@DisplayName("if g2 != g, it fails")
52  	void test4_1() {
53  		assertFalse(verifyElGamalDecryptionShare.apply(
54  				EL_GAMAL_DECRYPTION_SHARE, CIPHERTEXT_E, EL_GAMAL_PUBLIC_KEY_E_BUT_OTHER_PARAMETERS));
55  	}
56  
57  	@Test
58  	@DisplayName("if proof.v != share.ai, it fails")
59  	void testg() {
60  		assertFalse(verifyElGamalDecryptionShare.apply(
61  				EL_GAMAL_DECRYPTION_SHARE_BAD_AI, CIPHERTEXT_E, EL_GAMAL_PUBLIC_KEY_E));
62  	}
63  
64  	@Test
65  	@DisplayName("if proof.w != key, it fails")
66  	void testw() {
67  		assertFalse(verifyElGamalDecryptionShare.apply(
68  				EL_GAMAL_DECRYPTION_SHARE, CIPHERTEXT_E, EL_GAMAL_PUBLIC_KEY_EPRIME));
69  	}
70  
71  	@Test
72  	@DisplayName("verify throws IllegalArgumentException if ciphertext is null")
73  	void test4_2() {
74  		assertThrows(
75  				IllegalArgumentException.class,
76  				() -> assertFalse(verifyElGamalDecryptionShare.apply(
77  						EL_GAMAL_DECRYPTION_SHARE, null, EL_GAMAL_PUBLIC_KEY_EPRIME)));
78  	}
79  
80  	@Test
81  	@DisplayName("verify throws IllegalArgumentException if key is null")
82  	void test4_3() {
83  		assertThrows(
84  				IllegalArgumentException.class,
85  				() -> assertFalse(verifyElGamalDecryptionShare.apply(EL_GAMAL_DECRYPTION_SHARE, CIPHERTEXT_E, null)));
86  	}
87  
88  	@Test
89  	@DisplayName("verify is false if ciphertext.a != g1")
90  	void test4_4() {
91  		assertFalse(verifyElGamalDecryptionShare.apply(
92  				EL_GAMAL_DECRYPTION_SHARE, new ElGamalCiphertext(RANDOMS_2, BIGINT_A), EL_GAMAL_PUBLIC_KEY_EPRIME));
93  	}
94  
95  	@Test
96  	@DisplayName("verify is false if the pubkey's g != g2")
97  	void test4_5() {
98  		assertFalse(verifyElGamalDecryptionShare.apply(
99  				EL_GAMAL_DECRYPTION_SHARE,
100 				EL_GAMAL_CIPHERTEXT,
101 				new ElGamalPublicKey(G_EXP_A, EL_GAMAL_PARAMETERS_GENERATOR_OTHER)));
102 	}
103 
104 	@Test
105 	@DisplayName("verify is false if the pubkey's y != w ")
106 	void test4_6() {
107 		assertFalse(verifyElGamalDecryptionShare.apply(
108 				EL_GAMAL_DECRYPTION_SHARE, EL_GAMAL_CIPHERTEXT, new ElGamalPublicKey(BIGINT_A, EL_GAMAL_PARAMETERS)));
109 	}
110 
111 	@Test
112 	@DisplayName("verify is false if  ai != v")
113 	void test4_7() {
114 		assertFalse(verifyElGamalDecryptionShare.apply(
115 				new ElGamalDecryptionShare(BIGINT_A, EL_GAMAL_DISC_LOG_EQUALITY_FOR_DECOMMITMENT),
116 				EL_GAMAL_CIPHERTEXT,
117 				new ElGamalPublicKey(BIGINT_A, EL_GAMAL_PARAMETERS)));
118 	}
119 }