1 package civitas.crypto.signature.tests;
2
3 import static org.junit.jupiter.api.Assertions.assertFalse;
4 import static org.junit.jupiter.api.Assertions.assertTrue;
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.ballotdesign.tests.BallotDesignTestData;
11 import civitas.crypto.signature.VerifyElGamalSignature;
12 import civitas.crypto.signedciphertext.tests.ElGamalSignedCiphertextTestData;
13 import io.github.magwas.konveyor.testing.TestBase;
14
15 class VerifyElGamalSignatureTest extends TestBase implements ElGamalSignedCiphertextTestData, BallotDesignTestData {
16 @InjectMocks
17 VerifyElGamalSignature verifyElGamalSignature;
18
19 @Test
20 @DisplayName("elGamalVerify works as expected: "
21 + "c == hash(g^d * a^(-c), a, b, env) %q, where c and d are used mod q, others mod p")
22 void elGamalVerifyTest() {
23
24 assertTrue(verifyElGamalSignature.apply(
25 EL_GAMAL_PARAMETERS,
26 SIGNED_CIPHERTEXT_OF_MESSAGE_WITH_FACTOR_RANDOM0_ADDITIONALENV,
27 ADDITIONALENV_BYTES));
28 }
29
30 @Test
31 @DisplayName("if the verification fails, false is returned")
32 void test() {
33
34 assertFalse(verifyElGamalSignature.apply(
35 EL_GAMAL_PARAMETERS,
36 SIGNED_CIPHERTEXT_OF_MESSAGE_WITH_FACTOR_RANDOM0_ADDITIONALENV_BAD,
37 ADDITIONALENV_BYTES));
38 }
39
40 @Test
41 @DisplayName("the version without env does the same without including env in the hash")
42 void elGamalVerifyTest1() {
43 assertTrue(verifyElGamalSignature.apply(EL_GAMAL_PARAMETERS, SIGNED_CIPHERTEXT_OF_MESSAGE_WITH_FACTOR_RANDOM0));
44 }
45
46 @Test
47 @DisplayName("when the version without env fails false returned")
48 void t1() {
49 assertFalse(verifyElGamalSignature.apply(
50 EL_GAMAL_PARAMETERS, SIGNED_CIPHERTEXT_OF_MESSAGE_WITH_FACTOR_RANDOM0_BAD));
51 }
52 }