View Javadoc
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  		// hash nonequal
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 }