1 package civitas.common.mix.revelation.tests;
2
3 import static org.junit.jupiter.api.Assertions.assertTrue;
4
5 import org.junit.jupiter.api.DisplayName;
6 import org.junit.jupiter.api.Test;
7 import org.mockito.InjectMocks;
8
9 import civitas.common.mix.capabilitymix.tests.CapabilityMixTestData;
10 import civitas.common.mix.revelation.VerifyMixRevelation;
11 import civitas.common.tests.RandomAwareTestBase;
12 import civitas.crypto.ciphertext.tests.ElGamalCiphertextTestData;
13 import civitas.crypto.publickey.tests.ElGamalPublicKeyTestData;
14
15 class VerifyMixRevelationTest extends RandomAwareTestBase
16 implements ElGamalPublicKeyTestData, CapabilityMixTestData, ElGamalCiphertextTestData, MixRevelationTestData {
17
18 @InjectMocks
19 VerifyMixRevelation verifyMixRevelation;
20
21 @Test
22 @DisplayName("verifies the mix revelation. For each revelations\n"
23 + "- checks that the commitment is the hash of the mapping and the nonce"
24 + "- checks that the revelation verifies")
25 void test() {
26
27 assertTrue(verifyMixRevelation.apply(
28 MIX_REVELATION,
29 EL_GAMAL_PUBLIC_KEY_EPRIME,
30 CAPABILITY_MIX_INITIAL,
31 CAPABILITY_MIX_LEFT,
32 CAPABILITY_MIX_RIGHT,
33 MIX_REVELATION_DIRECTIONS));
34 }
35
36 @Test
37 @DisplayName("fails if verifyMixElementRevelation fails")
38 void test1() {
39 verifyMixRevelation.apply(
40 MIX_REVELATION,
41 EL_GAMAL_PUBLIC_KEY_E,
42 CAPABILITY_MIX_INITIAL,
43 CAPABILITY_MIX_LEFT,
44 CAPABILITY_MIX_RIGHT,
45 MIX_REVELATION_DIRECTIONS);
46 }
47
48 @Test
49 @DisplayName("fails if the hashes do not match")
50 void test2() {
51
52 verifyMixRevelation.apply(
53 MIX_REVELATION,
54 EL_GAMAL_PUBLIC_KEY_E,
55 CAPABILITY_MIX_INITIAL,
56 CAPABILITY_MIX_RIGHT,
57 CAPABILITY_MIX_LEFT,
58 MIX_REVELATION_DIRECTIONS);
59 }
60
61 @Test
62 @DisplayName("fails if a revelation is null")
63 void test3() {
64 verifyMixRevelation.apply(
65 MIX_REVELATION_WITH_NULL_REVELATION,
66 EL_GAMAL_PUBLIC_KEY_E,
67 CAPABILITY_MIX_INITIAL,
68 CAPABILITY_MIX_RIGHT,
69 CAPABILITY_MIX_LEFT,
70 MIX_REVELATION_DIRECTIONS);
71 }
72
73 @Test
74 @DisplayName("fails if the indicator in a revelation does not match the corresponding direction")
75 void test4() {
76 verifyMixRevelation.apply(
77 MIX_REVELATION,
78 EL_GAMAL_PUBLIC_KEY_E,
79 CAPABILITY_MIX_INITIAL,
80 CAPABILITY_MIX_RIGHT,
81 CAPABILITY_MIX_LEFT,
82 MIX_REVELATION_DIRECTIONS_BAD);
83 }
84
85 @Test
86 @DisplayName("fails if the length of indicators in the revelation does not match the length of relevations there")
87 void test5() {
88 verifyMixRevelation.apply(
89 MIX_REVELATION_WITH_BAD_INDICATOR_LENGTH,
90 EL_GAMAL_PUBLIC_KEY_EPRIME,
91 CAPABILITY_MIX_INITIAL,
92 CAPABILITY_MIX_LEFT,
93 CAPABILITY_MIX_RIGHT,
94 MIX_REVELATION_DIRECTIONS);
95 }
96
97 @Test
98 @DisplayName("fails if the length of indicators in the revelation does not match the length of directions")
99 void test6() {
100 verifyMixRevelation.apply(
101 MIX_REVELATION,
102 EL_GAMAL_PUBLIC_KEY_EPRIME,
103 CAPABILITY_MIX_INITIAL,
104 CAPABILITY_MIX_LEFT,
105 CAPABILITY_MIX_RIGHT,
106 MIX_REVELATION_DIRECTIONS_SHORT);
107 }
108
109 @Test
110 @DisplayName("fails if directions is null")
111 void test7() {
112 verifyMixRevelation.apply(
113 MIX_REVELATION,
114 EL_GAMAL_PUBLIC_KEY_EPRIME,
115 CAPABILITY_MIX_INITIAL,
116 CAPABILITY_MIX_LEFT,
117 CAPABILITY_MIX_RIGHT,
118 null);
119 }
120 }