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